openfoam/wmake/scripts/wcleanObjects
Mark Olesen 9e3d06853e ENH: add 'subcommand' handling to wmake (#1693)
- initial split of wmake-related commands into "plumbing" and
  "porcelain" akin to how git handles things.

- wmakeBuildInfo (very low-level), now relocated to the wmake/scripts
  and accessible for the user as "wmake -build-info".

  This satisfies a long-standing desire to access build information
  in a fashion similar to the api/patch information.

CONFIG: avoid git information when building with a debian/ directory

- when a 'debian/' directory exists, there is a high probability that
  the '.git/' directory is from debian and not from OpenFOAM (ie,
  useless here). This corresponds to an implicit '-no-git', which has
  no effect when building from pristine sources.

ENH: wmakeCheckPwd becomes scripts/wmake-check-dir

- accessible for the user as "wmake -check-dir" and with 1 or 2
  directory names. A wmakeCheckPwd symlink left for compatibility.
2020-05-12 10:05:24 +02:00

175 lines
4.5 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) 2017-2020 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# wcleanBuild, wcleanPlatform
#
# Usage
# wcleanBuild <option | platform> [.. <option | platform>]
#
# Description
# Deletes the specified 'build/' object files directories from the
# project top-level 'build/' directory $WM_PROJECT_DIR.
#
# special platforms
# - 'all' removes all platforms.
# - 'compiler' corresponds to $WM_ARCH$WM_COMPILER.
# - 'current' corresponds to $WM_OPTIONS.
#
# You must be in the project or the third-party top-level directory
# to run this script.
#
# When called as wcleanPlatform, the target directory changes to
# 'platforms/ and the 'all' target also cleans up lnInclude dirs and
# tutorials
#
#------------------------------------------------------------------------------
Script="${0##*/}"
targetDir=build # Safe default - override based on script name
case "$Script" in
(*[Pp]latform*)
targetDir=platforms
;;
esac
usage() {
local extraText
if [ "$targetDir" = platforms ]
then
extraText=", lnInclude and clean tutorials"
fi
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE
Usage: ${0##*/} <option | platform> [.. <option | platform>]
options:
-a, -all Same as 'all'
-curr, -current Use \$WM_OPTIONS ($WM_OPTIONS)
-comp, -compiler Use \$WM_ARCH\$WM_COMPILER* ($WM_ARCH$WM_COMPILER)
-compiler=NAME Use \$WM_ARCH<NAME>* ($WM_ARCH<NAME>*)
-h, -help Print the usage
Deletes the specified $targetDir/ object file directories from the project
top-level $targetDir/ directory $WM_PROJECT_DIR.
special platforms:
all Remove all platforms$extraText
compiler $WM_ARCH$WM_COMPILER (ie, \$WM_ARCH\$WM_COMPILER)
current $WM_OPTIONS (ie, \$WM_OPTIONS)
You must be in the project or the third-party top-level directory
to run this script.
USAGE
exit 1
}
# Find -help anywhere
for i
do
case "$i" in (-h | -help*) usage ;; esac
done
#------------------------------------------------------------------------------
# Run from OPENFOAM or THIRDPARTY top-level directory only
wmake -check-dir -quiet "$WM_PROJECT_DIR" 2>/dev/null || \
wmake -check-dir -quiet "$WM_THIRD_PARTY_DIR" 2>/dev/null || \
{
cat<<ERROR
${0##*/}: Error incorrect top-level directory
Not in Project: $WM_PROJECT_DIR
Nor in ThirdParty: $WM_THIRD_PARTY_DIR
ERROR
exit 1
}
if [ "$#" -eq 0 ]
then
usage "No platform specified to clean from $targetDir"
else
echo "$# platform(s) to clean from $targetDir"
echo
fi
for name
do
unset compiler
case "$name" in
-a | -all | all)
echo "all $targetDir/ ..."
rm -rf $targetDir
if [ "$targetDir" = platforms ]
then
wcleanLnIncludeAll .
[ -x tutorials/Allclean ] && tutorials/Allclean
fi
echo
break # Removed everything - can stop now
;;
-curr | -current | current)
name="$WM_OPTIONS"
;;
-comp | -compiler | compiler)
compiler="$WM_COMPILER"
unset name
;;
-compiler=*)
compiler="${name#*=}"
unset name
;;
esac
if [ -n "$compiler" ]
then
name="$WM_ARCH$compiler"
dirs=$(find $targetDir -maxdepth 1 -name "${name}*")
if [ -n "$dirs" ]
then
for name in $dirs
do
echo " '$name'"
rm -rf "$name"
done
echo
else
echo " '$name' - not built or already cleaned"
echo
fi
elif [ -n "$name" ]
then
if [ -d "$targetDir/$name" ]
then
echo " '$name'"
rm -rf "$targetDir/$name"*
echo
else
echo " '$name' - not built or already cleaned"
echo
fi
fi
done
exit 0 # clean exit
#------------------------------------------------------------------------------