#----------------------------------*-sh-*-------------------------------------- # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation # \\/ 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 . # # Script # wmakeFunctions # # Description # Functions to check wmake environment and find .dep and .o files #------------------------------------------------------------------------------ # Ensure these variables are always defined MakeDir=Make : ${Script:=wmakeFunctions} #------------------------------------------------------------------------------ # Check environment variables #------------------------------------------------------------------------------ checkEnv() { for envar in WM_OPTIONS WM_LINK_LANGUAGE WM_DIR WM_PROJECT_DIR do eval test "\$$envar" || { echo "$Script error: environment variable \$$envar not set" 1>&2 exit 1 } done } #------------------------------------------------------------------------------ # Search up directories tree for the Make sub-directory #------------------------------------------------------------------------------ # Return the absolute path for a directory or a file's parent directory # expandPath dirName # expandPath fileName # # Output: # - the expanded path name expandPath() { if [ -d "$1" ] then (cd "$1" && pwd -P) elif [ -n "$1" ] then (cd $(dirname "$1") && pwd -P) else pwd -P fi } # Find the target directory, which contains a Make/ directory # search upwards in its parent directories, but stopping # when it hits the project root, home, or the file-system root # # findTarget dirName # # Output: # - the relative target directory # # Global variables used: # - WM_PROJECT_DIR, HOME findTarget() { local project=$(expandPath $WM_PROJECT_DIR) local home=$(expandPath $HOME) local reldir="${1:-.}" local absdir=$(expandPath $reldir) while [ -n "$absdir" ] do case "$absdir" in ($project | $home | /) break ;; esac if [ -d "$reldir/Make" ] then echo "$reldir" return 0 else # Check parent directory absdir="${absdir%/*}" reldir="$reldir/.." fi done echo "Error: no Make directory for $(expandPath $1)" 1>&2 echo 1>&2 return 1 } # Change to 'MakeDir' parent # - uses 'MakeDir' for its input # # Side-effects: # - unsets targetType cdSource() { local dir if [ ! -d "$MakeDir" ] then echo "$Script: '$MakeDir' directory does not exist in $PWD" 1>&2 echo " Searching up directories tree for Make directory" 1>&2 dir=$(findTarget .) || exit 1 # Fatal cd $dir 2>/dev/null || { echo "$Script error: could not change to directory '$dir'" 1>&2 exit 1 } unset targetType fi [ -r $MakeDir/files ] || { echo "$Script error: file '$MakeDir/files' does not exist in $PWD" 1>&2 exit 1 } } # Find the object directory # findObjectDir dirName # findObjectDir fileName # # Output: # - the objectsDir # # Global variables used: # - WM_PROJECT_DIR, WM_OPTIONS findObjectDir() { local project=$(expandPath $WM_PROJECT_DIR) local absdir=$(expandPath ${1:-.}) local objectsDir case "$absdir" in ("$project"/*) local buildPath=$WM_PROJECT_DIR/build/${WM_OPTIONS} objectsDir=$buildPath$(echo $absdir | sed s%$project%% ) ;; (*) local path=$absdir local appDir=. [ -d Make ] || appDir=$(findTarget .) || exit 1 # Fatal absdir=$(expandPath $appDir/.) objectsDir=$appDir/Make/${WM_OPTIONS}$(echo $path | sed s%$absdir%% ) ;; esac echo "$objectsDir" } # Find the object directory and remove it # removeObjectDir dirName # removeObjectDir fileName # # Output: # - NONE # # Global variables used: # - WM_PROJECT_DIR, WM_OPTIONS removeObjectDir() { local objectsDir=$(findObjectDir ${1:-.}) if [ -d "$objectsDir" ] then rm -rf "$objectsDir" > /dev/null 2>&1 fi } # depToSource depFile # # Output: # - the sourceFile corresponding to depFile # # Global variables used: # - WM_OPTIONS # - WM_MPLIB if [ -n "$BASH_VERSION" ] then depToSource() { local sourceFile=${1%.dep} sourceFile="${sourceFile/build\/${WM_OPTIONS}\//}" sourceFile="${sourceFile/build\/${WM_OPTIONS}${WM_MPLIB}\//}" sourceFile="${sourceFile/Make\/${WM_OPTIONS}\//}" sourceFile="${sourceFile/Make\/${WM_OPTIONS}${WM_MPLIB}\//}" echo "$sourceFile" } else depToSource() { local sourceFile=$(echo ${1%.dep} | \ sed -e s%build/${WM_OPTIONS}/%% \ -e s%build/${WM_OPTIONS}${WM_MPLIB}/%% \ -e s%Make/${WM_OPTIONS}/%% \ -e s%Make/${WM_OPTIONS}${WM_MPLIB}/%% ) echo "$sourceFile" } fi #------------------------------------------------------------------------------