- can be used to avoid confusion with source files ENH: improve handling of '--' option termination (wmake scripts)
215 lines
6.1 KiB
Bash
Executable File
215 lines
6.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | www.openfoam.com
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# Copyright (C) 2015-2016 OpenFOAM Foundation
|
|
# Copyright (C) 2017-2022 OpenCFD Ltd.
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
|
|
#
|
|
# Script
|
|
# wrmdep
|
|
#
|
|
# Usage
|
|
# wrmdep [-a | -all | all] [file1 [..fileN]]
|
|
# wrmdep [-o | -old] [[dir1 [..dirN]]
|
|
# wrmdep -update
|
|
#
|
|
# Description
|
|
# This is a catch-all script for pruning .dep files, depending on the
|
|
# provided arguments.
|
|
#
|
|
# [-a | -all | all] [file1 [.. fileN]]:
|
|
# Remove all .dep files from the object directory tree corresponding to the
|
|
# current source directory or remove only the .dep files referring to the
|
|
# optionally specified file(s). With the -a/-all/all option the .dep files
|
|
# are removed for all platforms rather than just the current platform.
|
|
#
|
|
# [-o | -old] [dir1 [.. dirN]]:
|
|
# Remove *.dep files that are without a corresponding .C or .L source file.
|
|
# This occurs when a directory has been moved.
|
|
# - prints the questionable directory and *.dep file
|
|
#
|
|
# -update:
|
|
# Search all the "src" and "application" directories of the project for
|
|
# broken symbolic links for source code files and then remove all .dep
|
|
# files that relate to files that no longer exist.
|
|
# Must be executed in the project top-level directory:
|
|
# $WM_PROJECT_DIR.
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
Script=${0##*/} # Use 'Script' for error messages in wmakeFunctions
|
|
. ${0%/*}/scripts/wmakeFunctions # Source wmake functions
|
|
|
|
usage() {
|
|
exec 1>&2
|
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
|
cat<<USAGE
|
|
Usage:
|
|
|
|
$Script [-a | -all | all] [file1 [..fileN]]
|
|
|
|
Remove all .dep files or remove .dep files referring to <file>.
|
|
With the 'all' option the .dep files are removed for all platforms
|
|
rather than just the current platform ($WM_OPTIONS).
|
|
|
|
$Script [-o | -old] [dir1 [..dirN]]
|
|
|
|
Remove *.dep files that are without a corresponding .C or .L file.
|
|
This occurs when a directory has been moved.
|
|
- prints the questionable directory and *.dep file
|
|
|
|
Note: to remove empty directories, run: wclean empty
|
|
|
|
$Script -update
|
|
|
|
Search "src" and "application" directories of the project for broken
|
|
symbolic links for source code files and remove all .dep files related
|
|
to files that no longer exist.
|
|
Must be executed in the project top-level directory:
|
|
$WM_PROJECT_DIR
|
|
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Parse arguments and options
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Default is for removing all .dep files in the current directory
|
|
rmdepMode=files
|
|
|
|
# Default to processing only the current platform
|
|
unset platform
|
|
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
('') ;;
|
|
(- | --) shift; break ;; # Stop option parsing
|
|
|
|
-h | -help*)
|
|
usage
|
|
;;
|
|
-a | -all | all) # All platforms
|
|
platform=all
|
|
;;
|
|
-o | -old)
|
|
rmdepMode=oldFolders
|
|
;;
|
|
-update)
|
|
rmdepMode=updateMode
|
|
;;
|
|
-*)
|
|
usage "unknown option: '$1'"
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Check environment variables
|
|
checkEnv
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
case "$rmdepMode" in
|
|
files)
|
|
|
|
#-------------------------------------------------------------------------
|
|
# Remove the selected .dep files from the object tree
|
|
#-------------------------------------------------------------------------
|
|
|
|
objectsDir=$(findObjectDir .) || exit 1 # Fatal
|
|
|
|
# With -a/-all option: replace the current platform with a wildcard
|
|
if [ "$platform" = all ]
|
|
then
|
|
objectsDir=$(echo "$objectsDir" | sed "s%$WM_OPTIONS%*%")
|
|
fi
|
|
|
|
if [ "$#" -eq 0 ]
|
|
then
|
|
echo "Removing all .dep files ..." 1>&2
|
|
find "$objectsDir" -name '*.dep' -type f -delete -print
|
|
else
|
|
echo "Removing .dep files for: $*" 1>&2
|
|
for file
|
|
do
|
|
find "$objectsDir" -name '*.dep' -type f \
|
|
-exec grep -q "$file" {} \; -delete -print
|
|
done
|
|
fi
|
|
;;
|
|
|
|
oldFolders)
|
|
# Default is the current directory
|
|
[ "$#" -gt 0 ] || set -- .
|
|
|
|
echo "Removing dep files for non-existent source files ..." 1>&2
|
|
|
|
for checkDir
|
|
do
|
|
objectsDir=$(findObjectDir "$checkDir")
|
|
|
|
if [ -d "$objectsDir" ]
|
|
then
|
|
echo " searching: $objectsDir" 1>&2
|
|
else
|
|
echo " skipping non-dir: $objectsDir" 1>&2
|
|
continue
|
|
fi
|
|
|
|
find "$objectsDir" -name '*.dep' -type f -print | while read depFile
|
|
do
|
|
sourceFile="$(depToSource "$depFile")"
|
|
|
|
# Check C++ or Flex source file exists
|
|
if [ ! -r "$sourceFile" ]
|
|
then
|
|
echo " rm $depFile" 1>&2
|
|
rm -f "$depFile" 2>/dev/null
|
|
fi
|
|
done
|
|
done
|
|
;;
|
|
|
|
updateMode)
|
|
if [ "$PWD" != "$WM_PROJECT_DIR" ]
|
|
then
|
|
echo "Cannot 'update', not in project top-level directory" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Removing dep files for non-existent source files ..." 1>&2
|
|
fileNameList=$(find -L src applications -name '*.[CHL]' -type l)
|
|
|
|
for filePathAndName in $fileNameList
|
|
do
|
|
fileName=$(basename "$filePathAndName")
|
|
for subdir in src applications
|
|
do
|
|
echo " '$subdir': $fileName" 1>&2
|
|
(cd $subdir && $Script -all "$fileName")
|
|
done
|
|
|
|
# Just in case, remove the symbolic link as the last step
|
|
unlink "$filePathAndName"
|
|
done
|
|
;;
|
|
|
|
esac
|
|
|
|
exit 0 # clean exit
|
|
|
|
#------------------------------------------------------------------------------
|