From f6b07148ed8b3a8b5ae60c5a740d443b69132f72 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Mon, 30 Oct 2017 10:31:05 +0100 Subject: [PATCH] ENH: improve wcleanBuild, wcleanPlatform flexibility (issue #627) - add -compiler=NAME option to remove a build or platforms directory corresponding to any specified compiler on the current arch. - when -compiler or -compiler=NAME is specified, also clean related sub-directories as well. This will cleanup mpi-related directory. --- wmake/scripts/wcleanBuild | 185 ++++++++++++++++++++++++++++++++++++++ wmake/wcleanBuild | 136 +--------------------------- wmake/wcleanPlatform | 138 +--------------------------- 3 files changed, 187 insertions(+), 272 deletions(-) create mode 100755 wmake/scripts/wcleanBuild mode change 100755 => 120000 wmake/wcleanBuild mode change 100755 => 120000 wmake/wcleanPlatform diff --git a/wmake/scripts/wcleanBuild b/wmake/scripts/wcleanBuild new file mode 100755 index 0000000000..0c13af7642 --- /dev/null +++ b/wmake/scripts/wcleanBuild @@ -0,0 +1,185 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------- +# License +# This file is part of OpenFOAM. +# +# OpenFOAM is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +# +# Script +# wcleanBuild +# +# Usage +# wcleanBuild <option | platform> [.. <option | platform>] +# +# Description +# Deletes the specified 'build/' object files directories from the +# 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' + -c, -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 +wmakeCheckPwd -q "$WM_PROJECT_DIR" 2>/dev/null || \ +wmakeCheckPwd -q "$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 + ;; + -c | -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 + +#------------------------------------------------------------------------------ diff --git a/wmake/wcleanBuild b/wmake/wcleanBuild deleted file mode 100755 index 3989b06e0a..0000000000 --- a/wmake/wcleanBuild +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/sh -#------------------------------------------------------------------------------ -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. -# \\/ M anipulation | -#------------------------------------------------------------------------------- -# License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. -# -# Script -# wcleanBuild -# -# Usage -# wcleanBuild <platform> [.. <platformN>] -# -# Description -# Deletes the specified 'build/' object files directories from the -# 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. -# -#------------------------------------------------------------------------------ -Script=${0##*/} - -usage() { - exec 1>&2 - while [ "$#" -ge 1 ]; do echo "$1"; shift; done - cat<<USAGE - -Usage: $Script <platform> [.. <platformN>] - $Script -all | -compiler | -current [<platform> [.. <platformN>]] - -options: - -a, -all Same as 'all' - -comp, -compiler Same as 'compiler' - -c, -current Same as 'current' - -h, -help Print the usage - - -Deletes the specified build/ object file directories from the project -top-level build/ directory $WM_PROJECT_DIR. - -special platforms: - all Remove all platforms - 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 -wmakeCheckPwd -q "$WM_PROJECT_DIR" 2>/dev/null || \ -wmakeCheckPwd -q "$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" -else - echo "$# platform(s) to clean" - echo -fi - -for name -do - case "$name" in - -comp | -compiler | compiler) - name="$WM_ARCH$WM_COMPILER" - ;; - -c | -current | current) - name="$WM_OPTIONS" - ;; - -a | -all | all) - echo "all build/ ..." - rm -rf build - echo - break # Can stop now - ;; - esac - - if [ -n "$name" -d "build/$name" ] - then - echo " '$name'" - rm -rf "build/$name"* - echo - else - echo " '$name' - not built" - echo - fi -done - -exit 0 # clean exit - -#------------------------------------------------------------------------------ diff --git a/wmake/wcleanBuild b/wmake/wcleanBuild new file mode 120000 index 0000000000..a0376ef976 --- /dev/null +++ b/wmake/wcleanBuild @@ -0,0 +1 @@ +scripts/wcleanBuild \ No newline at end of file diff --git a/wmake/wcleanPlatform b/wmake/wcleanPlatform deleted file mode 100755 index 39c6da0a86..0000000000 --- a/wmake/wcleanPlatform +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh -#------------------------------------------------------------------------------ -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. -#------------------------------------------------------------------------------- -# License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. -# -# Script -# wcleanPlatform -# -# Usage -# wcleanPlatform <platform> [.. <platformN>] -# -# Description -# Deletes the specified 'platforms/' object files directories from the -# the project top-level 'platforms/' directory $WM_PROJECT_DIR. -# -# special platforms -# - 'all' removes all platforms, lnInclude directories and cleans tutorials. -# - '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. -# -#------------------------------------------------------------------------------ -Script=${0##*/} - -usage() { - exec 1>&2 - while [ "$#" -ge 1 ]; do echo "$1"; shift; done - cat<<USAGE - -Usage: $Script <platform> [.. <platformN>] - $Script -all | -compiler | -current [<platform> [.. <platformN>]] - -options: - -a, -all Same as 'all' - -comp, -compiler Same as 'compiler' - -c, -current Same as 'current' - -h, -help Print the usage - - -Deletes the specified platforms/ object file directories from the project -top-level platforms/ directory $WM_PROJECT_DIR. - -special platforms: - all Remove all platforms, lnInclude and clean tutorials - 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 -wmakeCheckPwd -q "$WM_PROJECT_DIR" 2>/dev/null || \ -wmakeCheckPwd -q "$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" -else - echo "$# platform(s) to clean" - echo -fi - -for name -do - case "$name" in - -comp | -compiler | compiler) - name="$WM_ARCH$WM_COMPILER" - ;; - -c | -current | current) - name="$WM_OPTIONS" - ;; - -a | -all | all) - echo "all platforms/ ..." - rm -rf platforms - wcleanLnIncludeAll . - [ -x tutorials/Allclean ] && tutorials/Allclean - echo - break # Can stop now - ;; - esac - - if [ -n "$name" -d "build/$name" ] - then - echo " '$name'" - rm -rf "platforms/$name"* - echo - else - echo " '$name' - not built" - echo - fi -done - -exit 0 # clean exit - -#------------------------------------------------------------------------------ diff --git a/wmake/wcleanPlatform b/wmake/wcleanPlatform new file mode 120000 index 0000000000..a0376ef976 --- /dev/null +++ b/wmake/wcleanPlatform @@ -0,0 +1 @@ +scripts/wcleanBuild \ No newline at end of file -- GitLab