Skip to content
Snippets Groups Projects
wcleanBuild 4.37 KiB
Newer Older
#!/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, licensed under GNU General Public License
#     <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

#------------------------------------------------------------------------------