diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index 2763b6eebc724d68be03c37ed1f663e9f0c07069..ad0ea898873d89744c4fc9bcb95596525c3900fb 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -25,58 +25,66 @@ usage() { usage: ${0##*/} options Basic - -foamInstall DIR specify installation directory (eg, /opt) - -foamVersion VER specify project version (eg, 1612) - -projectName NAME specify project directory name (eg, openfoam1612) - -archOption 32|64 specify 'WM_ARCH_OPTION' architecture option - -SP | -float32 specify 'WM_PRECISION_OPTION' - -DP | -float64 specify 'WM_PRECISION_OPTION' - -int32 | -int64 specify 'WM_LABEL_SIZE' + -prefix DIR specify installation directory (eg, /opt) + -version VER specify project version (eg, 1612) + -projectName NAME specify project directory name (eg, openfoam1612) + -archOption 32|64 specify 'WM_ARCH_OPTION' architecture option + -SP | -float32 specify 'WM_PRECISION_OPTION' for single precision + -DP | -float64 specify 'WM_PRECISION_OPTION' for double precision + -int32 | -int64 specify 'WM_LABEL_SIZE' Compiler - -system NAME specify 'system' compiler to use (eg, Gcc, Icc,...) - -third NAME specify 'ThirdParty' compiler to use (eg, Clang40,...) - -gcc VER specify 'gcc_version' for ThirdParty Gcc - -clang VER specify 'clang_version' for ThirdParty Clang - gmp-VERSION for ThirdParty gcc (gmp-system for system library) - mpfr-VERSION for ThirdParty gcc (mpfr-system for system library) - mpc-VERSION for ThirdParty gcc (mpc-system for system library) + -system NAME specify 'system' compiler to use (eg, Gcc, Icc,...) + -third NAME specify 'ThirdParty' compiler to use (eg, Clang40,...) + -gcc VER specify 'gcc_version' for ThirdParty Gcc + -clang VER specify 'clang_version' for ThirdParty Clang + gmp-VERSION for ThirdParty gcc (gmp-system for system library) + mpfr-VERSION for ThirdParty gcc (mpfr-system for system library) + mpc-VERSION for ThirdParty gcc (mpc-system for system library) MPI - -mpi NAME specify 'WM_MPLIB' type (eg, INTELMPI, etc) - -openmpi VER use ThirdParty openmpi, with version for 'FOAM_MPI' - -openmpi-system use system openmpi - -openmpi-third use ThirdParty openmpi (using default version) + -mpi NAME specify 'WM_MPLIB' type (eg, INTELMPI, etc) + -openmpi VER use ThirdParty openmpi, with version for 'FOAM_MPI' + -openmpi-system use system openmpi + -openmpi-third use ThirdParty openmpi (using default version) Components - -boost VER specify 'boost_version' - -boost-path DIR specify 'BOOST_ARCH_PATH' - -cgal ver specify 'cgal_version' - -cgal-path DIR specify 'CGAL_ARCH_PATH' - -cmake VER specify 'cmake_version' - -fftw VER specify 'fffw_version' - -fftw-path DIR specify 'FFTW_ARCH_PATH' - -kahip VER specify 'KAHIP_VERSION' - -kahip-path DIR specify 'KAHIP_ARCH_PATH' - -metis ver specify 'METIS_VERSION' - -metis-path DIR specify 'METIS_ARCH_PATH' - -scotch VER specify 'SCOTCH_VERSION' (eg, scotch_6.0.4) - -scotch-path DIR specify 'SCOTCH_ARCH_PATH' (eg, /opt/OpenFOAM-scotch_6.0.4) + -boost VER specify 'boost_version' + -boost-path DIR specify 'BOOST_ARCH_PATH' + -cgal ver specify 'cgal_version' + -cgal-path DIR specify 'CGAL_ARCH_PATH' + -cmake VER specify 'cmake_version' + -fftw VER specify 'fffw_version' + -fftw-path DIR specify 'FFTW_ARCH_PATH' + -kahip VER specify 'KAHIP_VERSION' + -kahip-path DIR specify 'KAHIP_ARCH_PATH' + -metis ver specify 'METIS_VERSION' + -metis-path DIR specify 'METIS_ARCH_PATH' + -scotch VER specify 'SCOTCH_VERSION' (eg, scotch_6.0.4) + -scotch-path DIR specify 'SCOTCH_ARCH_PATH' (eg, /opt/OpenFOAM-scotch_6.0.4) Graphics - -paraview VER specify 'ParaView_VERSION' (eg, 5.4.1) - -paraview-path DIR specify 'ParaView_DIR' (eg, /opt/ParaView-5.4.1) - -vtk VER specify 'vtk_version' (eg, VTK-7.1.0) - -mesa VER specify 'mesa_version' (eg, mesa-13.0.1) + -paraview VER specify 'ParaView_VERSION' (eg, 5.4.1) + -paraview-path DIR specify 'ParaView_DIR' (eg, /opt/ParaView-5.4.1) + -vtk VER specify 'vtk_version' (eg, VTK-7.1.0) + -mesa VER specify 'mesa_version' (eg, mesa-13.0.1) Misc + -default-third default ThirdParty location: PREFIX/ThirdParty-VERSION + -no-third use PROJECT/ThirdParty for ThirdParty location + -third-path DIR specify 'WM_THIRD_PARTY_DIR' + -default-site set PREFIX/site as fallback for WM_PROJECT_SITE + -no-site use PROJECT/site as fallback for WM_PROJECT_SITE + -sigfpe | -no-sigfpe [defunct - now under etc/controlDict] -* Adjust hardcoded versions and installation paths (for bash, POSIX shell). + +Adjusts hardcoded versions and installation paths (for bash, POSIX shell). + Equivalent options: - -foamInstall --foamInstall - -foamVersion --projectVersion + -prefix -foamInstall --foamInstall + -version -foamVersion --projectVersion -projectName --projectName -archOption --archOption -third -ThirdParty @@ -171,13 +179,46 @@ replace() shift 2 _inlineSed \ - $file \ + "$file" \ "$key=.*" \ "$key=$val" \ "Replaced $key setting by '$val'" done } +# Get the option's value (argument). +# Die if the argument doesn't exist or is empty +# $1 option +# $2 value +getOptionValue() +{ + [ -n "$2" ] || die "'$1' option requires an argument" + echo "$2" +} + +# Remove BASH_SOURCE and FOAM_INST_DIR=... magic that looks like this: +# ---- +# variable=$BASH_SOURCE +# [ -n "$variable" ] && FOAM_INST_DIR= ... +# FOAM_INST_DIR=... +# ---- +removeMagic() +{ + local file="$1" + + [ -f "$file" ] || { + echo "Missing file: $file" + exit 2 # Fatal + } + + echo " Remove default FOAM_INST_DIR setting ($file)" + + sed -i \ + -e '/^ *#/!{/\(BASH_SOURCE\|FOAM_INST_DIR=\)/s/^/##IGNORE## /}' \ + "$file" +} + + #------------------------------------------------------------------------------ unset adjusted optMpi @@ -194,58 +235,41 @@ do ## Basic ## - -foamInstall | --foamInstall) - # Replace FOAM_INST_DIR=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - prefixDir="$2" - _inlineSed \ - etc/bashrc \ - '\(.*BASH_SOURCE.*\)' \ - '## \1' \ - "Remove default FOAM_INST_DIR setting" \ - && _inlineSed \ - etc/bashrc \ - '\(.* && FOAM_INST_DIR\)' \ - '## \1' - - _inlineSed \ - etc/bashrc \ - '^ *FOAM_INST_DIR=.*' \ - 'FOAM_INST_DIR='"$prefixDir" \ - "Setting fallback FOAM_INST_DIR to '$prefixDir'" - + -prefix | -foamInstall | --foamInstall) + # Replace WM_PROJECT_INST_DIR, disable FOAM_INST_DIR discovery + optionValue=$(getOptionValue "$@") + removeMagic etc/bashrc + replace etc/bashrc WM_PROJECT_INST_DIR "$optionValue" adjusted=true shift ;; -projectName | --projectName) - # Replace WM_PROJECT_DIR=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - projectName="$2" + # Replace basename part of WM_PROJECT_DIR=... + optionValue=$(getOptionValue "$@") _inlineSed \ etc/bashrc \ 'WM_PROJECT_DIR=.*' \ - 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$projectName" \ - "Replaced WM_PROJECT_DIR setting by $projectName" - + 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$optionValue" \ + "Replaced WM_PROJECT_DIR basename by $optionValue" adjusted=true shift ;; - -foamVersion | --projectVersion) + -version | -foamVersion | --projectVersion) # Replace WM_PROJECT_VERSION=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_PROJECT_VERSION "$2" + optionValue=$(getOptionValue "$@") + replace etc/bashrc WM_PROJECT_VERSION "$optionValue" adjusted=true shift ;; -archOption | --archOption) # Replace WM_ARCH_OPTION=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - _matches "$2" 32 64 || die "'$1' option has bad value: '$2'" + optionValue=$(getOptionValue "$@") + _matches "$optionValue" 32 64 || \ + die "'$1' has bad value: '$optionValue'" - optionValue="$2" if [ "$optionValue" = "$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" ] then echo "WM_ARCH_OPTION already set to $optionValue" @@ -281,32 +305,36 @@ do -clang) # Replace clang_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/compiler clang_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/compiler clang_version "$optionValue" adjusted=true shift ;; -gcc) # Replace gcc_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/compiler gcc_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/compiler gcc_version "$optionValue" adjusted=true shift ;; -system) # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_COMPILER_TYPE system WM_COMPILER "$2" + optionValue=$(getOptionValue "$@") + replace etc/bashrc \ + WM_COMPILER_TYPE system \ + WM_COMPILER "$optionValue" adjusted=true shift ;; -third | -ThirdParty) # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_COMPILER_TYPE ThirdParty WM_COMPILER "$2" + optionValue=$(getOptionValue "$@") + replace etc/bashrc \ + WM_COMPILER_TYPE ThirdParty \ + WM_COMPILER "$optionValue" adjusted=true shift ;; @@ -334,8 +362,8 @@ do -mpi) # Explicitly set WM_MPLIB=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_MPLIB "$2" + optionValue=$(getOptionValue "$@") + replace etc/bashrc WM_MPLIB "$optionValue" optMpi=system adjusted=true shift @@ -345,9 +373,10 @@ do # Replace FOAM_MPI=openmpi-<digits>.. and set to use third-party # The edit is slightly fragile, but works expected="openmpi-[1-9][.0-9]*" - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - optMpi="$2" - _matches "$optMpi" "$expected" || die "'$1' option has bad value: '$optMpi'" + optMpi=$(getOptionValue "$@") + + _matches "$optMpi" "$expected" || \ + die "'$1' has bad value: '$optMpi'" _inlineSed etc/config.sh/mpi \ "FOAM_MPI=$expected" \ @@ -378,104 +407,104 @@ do -boost) # Replace boost_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/CGAL boost_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/CGAL boost_version "$optionValue" adjusted=true shift ;; -boost-path) # Replace BOOST_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/CGAL BOOST_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/CGAL BOOST_ARCH_PATH "$optionValue" adjusted=true shift ;; -cgal) # Replace cgal_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/CGAL cgal_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/CGAL cgal_version "$optionValue" adjusted=true shift ;; -cgal-path) # Replace CGAL_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/CGAL CGAL_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/CGAL CGAL_ARCH_PATH "$optionValue" adjusted=true shift ;; -fftw) # Replace fftw_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/FFTW fftw_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/FFTW fftw_version "$optionValue" adjusted=true shift ;; -fftw-path) # Replace FFTW_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/FFTW FFTW_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/FFTW FFTW_ARCH_PATH "$optionValue" adjusted=true shift ;; -cmake) # Replace cmake_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/paraview cmake_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/paraview cmake_version "$optionValue" adjusted=true shift ;; -kahip) # Replace KAHIP_VERSION=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/kahip KAHIP_VERSION "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/kahip KAHIP_VERSION "$optionValue" adjusted=true shift ;; -kahip-path) # Replace KAHIP_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/kahip KAHIP_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/kahip KAHIP_ARCH_PATH "$optionValue" adjusted=true shift ;; -metis) # Replace METIS_VERSION=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/metis METIS_VERSION "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/metis METIS_VERSION "$optionValue" adjusted=true shift ;; -metis-path) # Replace METIS_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/metis METIS_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/metis METIS_ARCH_PATH "$optionValue" adjusted=true shift ;; -scotch | -scotchVersion | --scotchVersion) # Replace SCOTCH_VERSION=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/scotch SCOTCH_VERSION "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/scotch SCOTCH_VERSION "$optionValue" adjusted=true shift ;; -scotch-path | -scotchArchPath | --scotchArchPath) # Replace SCOTCH_ARCH_PATH=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$optionValue" adjusted=true shift ;; @@ -486,34 +515,35 @@ do -paraview | -paraviewVersion | --paraviewVersion) # Replace ParaView_VERSION=... expected="[5-9][.0-9]*" - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - _matches "$2" "$expected" || die "'$1' option has bad value: '$2'" + optionValue=$(getOptionValue "$@") + _matches "$optionValue" "$expected" || \ + die "'$1' has bad value: '$optionValue'" - replace etc/config.sh/paraview ParaView_VERSION "$2" + replace etc/config.sh/paraview ParaView_VERSION "$optionValue" adjusted=true shift ;; -paraview-path | -paraviewInstall | --paraviewInstall) # Replace ParaView_DIR=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/paraview ParaView_DIR "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/paraview ParaView_DIR "$optionValue" adjusted=true shift ;; -vtk) # Replace vtk_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/vtk vtk_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/vtk vtk_version "$optionValue" adjusted=true shift ;; -mesa) # Replace mesa_version=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/config.sh/vtk mesa_version "$2" + optionValue=$(getOptionValue "$@") + replace etc/config.sh/vtk mesa_version "$optionValue" adjusted=true shift ;; @@ -521,6 +551,51 @@ do ## Misc ## + -no-third) + # Replace WM_THIRD_PARTY_DIR=... with location within the project dir + replace etc/bashrc WM_THIRD_PARTY_DIR '$WM_PROJECT_DIR/ThirdParty' + adjusted=true + shift + ;; + + -default-third) + # Replace WM_THIRD_PARTY_DIR=... with default location/naming + replace etc/bashrc WM_THIRD_PARTY_DIR \ + '$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION' + adjusted=true + shift + ;; + + -third-path) + # Replace WM_THIRD_PARTY_DIR=... + optionValue=$(getOptionValue "$@") + replace etc/bashrc WM_THIRD_PARTY_DIR "$optionValue" + adjusted=true + shift + ;; + + -no-site) + # Replace fallback value for site within the project dir + _inlineSed \ + etc/config.sh/settings \ + '^ *siteDir=.*\/site' \ + 'siteDir=$WM_PROJECT_DIR/site' \ + "Setting fallback site-dir '\$WM_PROJECT_DIR/site'" + adjusted=true + shift + ;; + + -default-site) + # Replace WM_THIRD_PARTY_DIR=... with standard location + _inlineSed \ + etc/config.sh/settings \ + '^ *siteDir=.*\/site' \ + 'siteDir=$WM_PROJECT_INST_DIR/site' \ + "Setting fallback site-dir '\$WM_PROJECT_INST_DIR/site'" + adjusted=true + shift + ;; + -sigfpe | -no-sigfpe) echo "Enable/disable FOAM_SIGFPE now via controlDict" 1>&2 ;;