diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index 6d77141d90ec11637763638f276d298f45330d73..a85cff83f8b3f68d20dd7ea2c4e7995fdcd326a9 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -4,7 +4,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | +# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -26,7 +26,7 @@ # foamConfigurePaths # # Description -# hardcode installation directory +# Adjust hardcoded installation paths and versions # #------------------------------------------------------------------------------ usage() { @@ -35,53 +35,103 @@ usage() { cat<<USAGE usage: ${0##*/} - --foamInstall dir specify installation directory (e.g. /opt) - --projectName name specify project name (e.g. openfoam220) - --projectVersion ver specify project version (e.g. 2.2.0) - --archOption arch specify architecture option (only 32 or 64 applicable) - --paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120) - --paraviewVersion ver specify ParaView_VERSION (e.g. 3.12.0) - --scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/) - --scotchVersion ver specify SCOTCH_VERSION (e.g. 6.0.0) + -foamInstall dir specify installation directory (e.g. /opt) + -projectName name specify project name (e.g. openfoam220) + -projectVersion ver specify project version (e.g. 2.2.0) + -archOption 32|64 specify architecture option + -label 32|64 specify label size + -system name specify 'system' compiler to be used + -thirdParty name specify 'ThirdParty' compiler to be used -* hardcode paths to installation + -boost ver specify boost_version + -boostArchPath dir specify BOOST_ARCH_PATH + -cgal ver specify cgal_version + -cgalArchPath dir specify CGAL_ARCH_PATH + -clang ver specify clang_version for ThirdParty Clang + -cmake ver specify cmake_version + -fftw ver specify fffw_version + -fftwArchPath dir specify FFTW_ARCH_PATH + -metis ver specify METIS_VERSION + -metisArchPath dir specify METIS_ARCH_PATH + -paraview ver specify ParaView_VERSION (e.g. 3.12.0) + -paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120) + -scotch ver specify SCOTCH_VERSION (e.g. 6.0.0) + -scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/) + +* Adjust hardcoded installation paths and versions USAGE exit 1 } +# Report error and exit +die() +{ + exec 1>&2 + echo + echo "Error: see '${0##*/} -help' for usage" + while [ "$#" -ge 1 ]; do echo " $1"; shift; done + echo + exit 1 +} + # Function to do replacement on file. Checks if any replacement has been done. # _inlineSed <file> <regexp> <replacement> <msg> _inlineSed() { - file="$1" + local file="$1" + local regexp="$2" + local replacement="$3" + local msg="$4" + local cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@' [ -f "$file" ] || { echo "Missing file: $file" - exit 1 + exit 2 # Fatal } - regexp="$2" - replacement="$3" - msg="$4" + grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || { \ + echo "Failed: $msg in $file" + return 1 + } - cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@' + echo "Okay: $msg in $file" + return 0 +} - grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || \ - (echo "Failed: $msg in $file" && exit 1) - echo "Okay: $msg in $file" +# Standard <key> <val> type of replacements. +# replace <file> <key1> <val1> .. <keyN> <valN> +# looks for KEYWORD=.* +replace() +{ + local file="$1" + shift - return 0 + local key + local val + + while [ "$#" -ge 2 ] + do + key=$1 + val=$2 + shift 2 + + _inlineSed \ + $file \ + "$key=.*" \ + "$key=$val" \ + "Replacing $key setting by '$val'" + done } [ -f etc/bashrc ] || usage "Please run from top-level directory of installation" -unset foamInstDir projectName projectVersion archOption -unset paraviewInstall scotchArchPath +#------------------------------------------------------------------------------ +unset adjusted # Parse options while [ "$#" -gt 0 ] do @@ -89,131 +139,213 @@ do -h | -help | --help) usage ;; + -foamInstall | --foamInstall) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - foamInstDir="$2" # Replace FOAM_INST_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + foamInstDir="$2" _inlineSed \ etc/bashrc \ '\(.*BASH_SOURCE.*\)' \ - '#\1' \ + '##\1' \ "Removing default FOAM_INST_DIR setting" _inlineSed \ etc/bashrc \ - '^export FOAM_INST_DIR=.*' \ - 'export FOAM_INST_DIR='"$foamInstDir" \ + '^ *FOAM_INST_DIR=.*' \ + 'FOAM_INST_DIR='"$foamInstDir" \ "Setting FOAM_INST_DIR to '$foamInstDir'" - shift 2 + + adjusted=true + shift ;; + -projectName | --projectName) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + # Replace WM_PROJECT_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" projectName="$2" - # replace WM_PROJECT_DIR=... _inlineSed \ etc/bashrc \ 'WM_PROJECT_DIR=.*' \ 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$projectName" \ "Replacing WM_PROJECT_DIR setting by $projectName" - shift 2 + + adjusted=true + shift ;; - --projectVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - projectVersion="$2" - # replace WM_PROJECT_VERSION=... - echo "Replacing WM_PROJECT_VERSION setting by $projectVersion" - _inlineSed \ - etc/bashrc \ - 'WM_PROJECT_VERSION=.*' \ - 'WM_PROJECT_VERSION='"$projectVersion" \ - "Replacing WM_PROJECT_VERSION setting by $projectVersion" - shift 2 + -projectVersion | --projectVersion) + # Replace WM_PROJECT_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/bashrc WM_PROJECT_VERSION "$2" + adjusted=true + shift ;; + -archOption | --archOption) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + # Replace WM_ARCH_OPTION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" archOption="$2" - current_archOption=`grep WM_ARCH_OPTION= etc/bashrc | sed "s/export WM_ARCH_OPTION=//"` - if [ "$archOption" != "$current_archOption" ] + current="$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" + if [ "$archOption" = "$current" ] then - # replace WM_ARCH_OPTION=... - _inlineSed \ - etc/bashrc \ - 'WM_ARCH_OPTION=.*' \ - 'WM_ARCH_OPTION='"$archOption" \ - "Replacing WM_ARCH_OPTION setting by '$archOption'" - else echo "WM_ARCH_OPTION already set to $archOption" + else + replace etc/bashrc WM_ARCH_OPTION "$2" fi - shift 2 + adjusted=true + shift ;; + + -label) + # Replace WM_LABEL_SIZE=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/bashrc WM_LABEL_SIZE "$2" + 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" + adjusted=true + shift + ;; + + -third[Pp]arty) + # 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" + adjusted=true + shift + ;; + + + -boost) + # Replace boost_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL boost_version "$2" + adjusted=true + shift + ;; + + -boostArchPath) + # Replace BOOST_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL BOOST_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -cgal) + # Replace cgal_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL cgal_version "$2" + adjusted=true + shift + ;; + + -cgalArchPath) + # Replace CGAL_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL CGAL_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -fftw) + # Replace fftw_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/FFTW fftw_version "$2" + adjusted=true + shift + ;; + + -fftwArchPath) + # Replace FFTW_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/FFTW FFTW_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -clang) + # Replace clang_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/compiler clang_version "$2" + adjusted=true + shift + ;; + + -cmake) + # Replace cmake_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview cmake_version "$2" + adjusted=true + shift + ;; + + -paraview | -paraviewVersion | --paraviewVersion) + # Replace ParaView_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview ParaView_VERSION "$2" + adjusted=true + shift + ;; + -paraviewInstall | --paraviewInstall) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - paraviewInstall="$2" - # replace ParaView_DIR=... - _inlineSed \ - etc/config.sh/paraview \ - 'ParaView_DIR=.*' \ - 'ParaView_DIR='"$paraviewInstall" \ - "Replacing ParaView_DIR setting by '$paraviewInstall'" - shift 2 + # Replace ParaView_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview ParaView_DIR "$2" + adjusted=true + shift ;; - -paraviewVersion | --paraviewVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - paraviewVersion="$2" - # replace ParaView_VERSION=... - _inlineSed \ - etc/config.sh/paraview \ - 'ParaView_VERSION=.*' \ - 'ParaView_VERSION='"$paraviewVersion" \ - "Replacing ParaView_VERSION setting by '$paraviewVersion'" - shift 2 + + -metis) + # Replace METIS_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/metis METIS_VERSION "$2" + adjusted=true + shift ;; - -scotchVersion | --scotchVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - scotchVersion="$2" - _inlineSed \ - etc/config.sh/scotch \ - 'SCOTCH_VERSION=.*' \ - 'SCOTCH_VERSION='"$scotchVersion" \ - "Replacing SCOTCH_VERSION setting by '$scotchVersion'" - shift 2 + + -metisArchPath) + # Replace METIS_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/metis METIS_ARCH_PATH "$2" + 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" + adjusted=true + shift ;; + -scotchArchPath | --scotchArchPath) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - scotchArchPath="$2" - _inlineSed \ - etc/config.sh/scotch \ - 'SCOTCH_ARCH_PATH=.*' \ - 'SCOTCH_ARCH_PATH='"$scotchArchPath" \ - "Replacing SCOTCH_ARCH_PATH setting by '$scotchArchPath'" - shift 2 + # Replace SCOTCH_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$2" + adjusted=true + shift ;; + *) - usage "unknown option/argument: '$*'" + die "unknown option/argument: '$1'" ;; esac + shift done -[ -n "$foamInstDir" -o -n "$projectName" -o -n "$projectVersion" -o -n "$archOption" \ --o -n "$paraviewInstall" -o -n "$paraviewVersion" \ --o -n "$scotchVersion" -o -n "$scotchArchPath" \ -] || usage "Please specify at least one configure option" - -#echo "Replacing WM_PROJECT setting by '$projectName'" -#sed -i -e 's@WM_PROJECT=.*@WM_PROJECT='"$projectName@" etc/bashrc +[ -n "$adjusted" ] || die "Please specify at least one configure option" # Set WM_MPLIB=SYSTEMOPENMPI always -_inlineSed \ - etc/bashrc \ - 'export WM_MPLIB=.*' \ - 'export WM_MPLIB=SYSTEMOPENMPI' \ - "Replacing WM_MPLIB setting by 'SYSTEMOPENMPI'" - -## set WM_COMPILER_TYPE=system always -#_inlineSed \ -# etc/bashrc \ -# 'WM_COMPILER_TYPE=.*' \ -# 'WM_COMPILER_TYPE=system' \ -# "Replacing WM_COMPILER_TYPE setting by 'system'" +replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + +## Set WM_COMPILER_TYPE=system always +# replace etc/bashrc WM_COMPILER_TYPE system #------------------------------------------------------------------------------