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