CONFIG: additional packaging helpers, tutorial test helper

- bin/tools/create-mpi-config to query/write values for system openmpi.
  In some cases this can be used to avoid an mpicc requirement at runtime.

- adjust openfoam session to include -test-tutorial forwarding to the
  tutorials/AutoTest. This helps with writing installation tests.

- adjust foamConfigurePaths to latest version

- removal of gperftools default config, as per develop
This commit is contained in:
Mark Olesen 2020-04-20 20:18:56 +02:00
parent 6691e6563c
commit aa2f932b75
13 changed files with 697 additions and 114 deletions

View File

@ -86,8 +86,8 @@ echo " ${WM_PROJECT_DIR##*/}"
echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler" echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler"
echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}" echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
echo echo
echo " api = $(foamEtcFile -show-api 2>/dev/null)" echo " api = $(etc/openfoam -show-api 2>/dev/null)"
echo " patch = $(foamEtcFile -show-patch 2>/dev/null)" echo " patch = $(etc/openfoam -show-patch 2>/dev/null)"
echo " bin = $(_foamCountDirEntries $FOAM_APPBIN) entries" echo " bin = $(_foamCountDirEntries $FOAM_APPBIN) entries"
echo " lib = $(_foamCountDirEntries $FOAM_LIBBIN) entries" echo " lib = $(_foamCountDirEntries $FOAM_LIBBIN) entries"
echo echo

View File

@ -1,2 +1,2 @@
api=1912 api=1912
patch=200403 patch=200417

View File

@ -7,14 +7,13 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2017-2018 OpenCFD Ltd. # Copyright (C) 2017-2020 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, licensed under GNU General Public License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
# <http://www.gnu.org/licenses/>.
# #
# Script # Script
# foamEtcFile # bin/foamEtcFile
# #
# Description # Description
# Locate user/group/other file as per '#includeEtc'. # Locate user/group/other file as per '#includeEtc'.
@ -67,8 +66,8 @@ options:
-config Add config directory prefix for shell type: -config Add config directory prefix for shell type:
with -csh* for a config.csh/ prefix with -csh* for a config.csh/ prefix
with -sh* for a config.sh/ prefix with -sh* for a config.sh/ prefix
-show-api Print api value from wmake/rules, or meta-info and exit -show-api Print META-INFO api value and exit
-show-patch Print patch value from meta-info and exit -show-patch Print META-INFO patch value and exit
-with-api=NUM Specify alternative api value to search with -with-api=NUM Specify alternative api value to search with
-quiet (-q) Suppress all normal output -quiet (-q) Suppress all normal output
-silent (-s) Suppress stderr, except -csh-verbose, -sh-verbose output -silent (-s) Suppress stderr, except -csh-verbose, -sh-verbose output
@ -129,54 +128,17 @@ fi
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# The API locations. See wmake/wmakeBuildInfo # Get a value from META-INFO/api-info
rulesFile="$projectDir/wmake/rules/General/general" # $1 : keyword
metaInfoDir="$projectDir/META-INFO" getApiInfo()
# Get api from rules/General/general
#
# Failure modes:
# - No api information (can't find file etc).
# -> Fatal for building, but could be OK for a stripped down version
#
# Fallback. Get from api-info
#
getApi()
{ {
local value value="$(sed -ne 's@^'"$1"' *= *\([0-9][0-9]*\).*@\1@p' "$projectDir"/META-INFO/api-info 2>/dev/null)"
value="$(sed -ne '/^ *#/!{ /WM_VERSION.*OPENFOAM=/{ s@^.*OPENFOAM= *\([0-9][0-9]*\).*@\1@p; q }}' $rulesFile 2>/dev/null)"
if [ -z "$value" ] && [ -f "$metaInfoDir/api-info" ]
then
# Fallback. Get from api-info
value="$(sed -ne 's@^ *api *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)"
fi
if [ -n "$value" ]
then
echo "$value"
else
return 1
fi
}
# Get patch from meta-info / api-info
#
# Failure modes:
# - No patch information (can't find file etc).
#
getPatchLevel()
{
local value
# Fallback. Get from api-info
value="$(sed -ne 's@^ *patch *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)"
if [ -n "$value" ] if [ -n "$value" ]
then then
echo "$value" echo "$value"
else else
echo "Could not determine OPENFOAM '$1' value" 1>&2
return 1 return 1
fi fi
} }
@ -193,14 +155,12 @@ do
-h | -help*) -h | -help*)
printHelp printHelp
;; ;;
-show-api) -show-api) # Show API and exit
# Show API and exit getApiInfo api
getApi
exit $? exit $?
;; ;;
-show-patch) -show-patch) # Show patch level and exit
# Show patch level and exit getApiInfo patch
getPatchLevel
exit $? exit $?
;; ;;
-with-api=*) -with-api=*)
@ -276,7 +236,7 @@ done
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Establish the API value # Establish the API value
[ -n "$projectApi" ] || projectApi=$(getApi) [ -n "$projectApi" ] || projectApi=$(getApiInfo api)
# Split arguments into filename (for searching) and trailing bits for shell eval # Split arguments into filename (for searching) and trailing bits for shell eval
# Silently remove leading ~OpenFOAM/ (as per Foam::findEtcFile) # Silently remove leading ~OpenFOAM/ (as per Foam::findEtcFile)

272
bin/tools/create-mpi-config Executable file
View File

@ -0,0 +1,272 @@
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2020 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# bin/tools/create-mpi-config
#
# Description
# Define hard-coded packaging settings for MPI flavours,
# primarily for system openmpi.
# This eliminates a runtime dependency on mpicc, for example.
#
# Instead of querying/parsing 'mpicc --showme:link' each time,
# it is done once during packaging.
#
# Environment
# FOAM_MPI, MPI_ARCH_PATH, DEB_TARGET_MULTIARCH
#
# Possible Dependencies
# - dpkg-architecture
# - mpicc
#
# Notes
# Run from top-level directory when creating config files
#
#------------------------------------------------------------------------------
printHelp() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE
usage: ${0##*/} options
options:
-dry-run Report but do not write config files
-no-mpicc Bypass any use of mpicc
-query-openmpi Report installation directory for system openmpi
-write-openmpi Query system openmpi and write config files
-write Write config files using FOAM_MPI, MPI_ARCH_PATH
Define hard-coded packaging settings for MPI flavours.
Equivalent options:
-write-system-openmpi | -write-openmpi
-query-system-openmpi | -query-openmpi
USAGE
exit 0 # A clean exit
}
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error encountered:"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
echo "See '${0##*/} -help' for usage"
echo
exit 1
}
#------------------------------------------------------------------------------
# Options
unset optDryRun
useMpicc=true
# Get installation directory for system openmpi
# - from "mpicc --showme:link"
# - manual fallback
#
# The mpicc content looks like this:
# ----
# -pthread -L/usr/lib64/mpi/gcc/openmpi/lib64 -lmpi
# ----
query_system_openmpi()
{
unset arch_path
if [ "$useMpicc" = true ]
then
arch_path=$(mpicc --showme:link 2>/dev/null | sed -e 's#^.*-L\([^ ]*\).*#\1#')
arch_path="${arch_path%/*}"
if [ -n "$arch_path" ]
then
echo "$arch_path"
return 0 # Clean exit
fi
echo "No mpicc found. Attempt manually" 1>&2
fi
# Manual discovery
if [ -z "$DEB_TARGET_MULTIARCH" ]
then
DEB_TARGET_MULTIARCH=$(dpkg-architecture -qDEB_TARGET_MULTIARCH 2>/dev/null || true)
fi
# Include is under /usr/lib... (eg, debian, openSUSE)
for testdir in \
/usr/lib/"${DEB_TARGET_MULTIARCH:+${DEB_TARGET_MULTIARCH}/}"openmpi/include \
/usr/lib64/mpi/gcc/openmpi/include \
;
do
if [ -e "$testdir/mpi.h" ]
then
echo "${testdir%/*}"
return 0 # Clean exit
fi
done
# Include is under /usr/include (eg, RedHat)
for testdir in \
/usr/include/openmpi-"$(uname -m)" \
/usr/include/openmpi \
;
do
if [ -e "$testdir/mpi.h" ]
then
echo "/usr"
return 0 # Clean exit
fi
done
# Failed (should not happen)
# - report '/usr', but with error code 2
echo "/usr"
return 2
}
# Generate etc/config.{csh,sh}/MPI-TYPE files
# based on the values for FOAM_MPI and MPI_ARCH_PATH
create_files()
{
[ -n "$FOAM_MPI" ] || die "FOAM_MPI not set"
if [ -d "$MPI_ARCH_PATH" ]
then
echo "Define $FOAM_MPI with $MPI_ARCH_PATH" 1>&2
case "$FOAM_MPI" in
(openmpi-system)
configDir="etc/config.sh"
if [ "$optDryRun" = true ]
then
cat << CONTENT 1>&2
dry-run: $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
export MPI_ARCH_PATH="$MPI_ARCH_PATH"
CONTENT
elif [ -d "$configDir" ]
then
echo "Write $configDir/$FOAM_MPI" 1>&2
cat << CONTENT > "$configDir/$FOAM_MPI"
# $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
export MPI_ARCH_PATH="$MPI_ARCH_PATH"
#----
CONTENT
else
echo "Cannot write $configDir/$FOAM_MPI - no directory" 1>&2
fi
configDir="etc/config.csh"
if [ "$optDryRun" = true ]
then
cat << CONTENT 1>&2
dry-run: $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
setenv MPI_ARCH_PATH "$MPI_ARCH_PATH"
CONTENT
elif [ -d "$configDir" ]
then
echo "Write $configDir/$FOAM_MPI" 1>&2
cat << CONTENT > "$configDir/$FOAM_MPI"
# $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
setenv MPI_ARCH_PATH "$MPI_ARCH_PATH"
#----
CONTENT
else
echo "Cannot write $configDir/$FOAM_MPI - no directory" 1>&2
fi
;;
esac
else
echo "Warning: $FOAM_MPI with bad MPI_ARCH_PATH: $MPI_ARCH_PATH" 1>&2
# TBD - remove old/bad entries?
#
# for file in "etc/config.sh/$FOAM_MPI" "etc/config.csh/$FOAM_MPI"
# do
# [ -f "$file" ] && rm -f "$file"
# done
fi
}
#------------------------------------------------------------------------------
# Parse options
while [ "$#" -gt 0 ]
do
case "$1" in
-h | -help* | --help*)
printHelp
;;
'')
# Discard empty arguments
;;
-dry-run)
optDryRun=true
;;
-no-mpicc)
unset useMpicc
;;
-query-openmpi | -query-system-openmpi)
query_system_openmpi
exit $?
;;
-write-openmpi | -write-system-openmpi)
if MPI_ARCH_PATH=$(query_system_openmpi)
then
FOAM_MPI="openmpi-system"
create_files
else
die "Failed query for system openmpi"
fi
;;
-write)
create_files
;;
*)
echo "Ignore unknown option/argument: '$1'" 1>&2
;;
esac
shift
done
exit 0 # A clean exit, if we get this far
# -----------------------------------------------------------------------------

View File

@ -29,18 +29,49 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
printHelp() { printHelp() {
cat<<USAGE
case "$1" in
(*compat*)
cat<<HELP_COMPAT
Obsolete options:
-foamInstall DIR [obsolete]
-projectName NAME [obsolete]
-sigfpe|-no-sigfpe [obsolete - now under etc/controlDict]
-archOption 32|64 [obsolete setting of 'WM_ARCH_OPTION' - edit manually]
Equivalent options:
-version -foamVersion --projectVersion
-archOption --archOption
-third -ThirdParty
-paraview --paraviewVersion | -paraviewVersion
-paraview-path --paraviewInstall | -paraviewInstall
-scotch --scotchVersion | -scotchVersion
-scotch-path --scotchArchPath | -scotchArchPath
-system-compiler -system
-third-compiler -third
HELP_COMPAT
exit 0 # A clean exit
;;
esac
cat<<HELP_HEAD
usage: $0 options usage: $0 options
Options
-h | -help Display short help and exit
-help-compat Display compatibility options and exit
-help-full Display full help and exit
Basic Basic
-etc=DIR set FOAM_CONFIG_ETC for alternative project files -etc=DIR set FOAM_CONFIG_ETC for alternative project files
-project-path DIR specify 'WM_PROJECT_DIR' (eg, /opt/openfoam1806-patch1) -project-path DIR specify 'WM_PROJECT_DIR' (eg, /opt/openfoam1806-patch1)
-version VER specify project version (eg, v1806) -version VER specify project version (eg, v1806)
-sp | -SP | -float32 single precision (WM_PRECISION_OPTION) -sp | -SP | -float32 single precision (WM_PRECISION_OPTION)
-dp | -DP | -float64 double precision (WM_PRECISION_OPTION) -dp | -DP | -float64 double precision (WM_PRECISION_OPTION)
-spdp | -SPDP mixed single/double precision -spdp | -SPDP mixed precision (WM_PRECISION_OPTION)
-int32 | -int64 the 'WM_LABEL_SIZE' -int32 | -int64 label-size (WM_LABEL_SIZE)
Compiler Compiler
-system-compiler NAME The 'system' compiler to use (eg, Gcc, Clang, Icc,...) -system-compiler NAME The 'system' compiler to use (eg, Gcc, Clang, Icc,...)
@ -57,16 +88,21 @@ MPI
-openmpi-system use system openmpi -openmpi-system use system openmpi
-openmpi-third use ThirdParty openmpi (using default version) -openmpi-third use ThirdParty openmpi (using default version)
ThirdParty versions Components versions (ThirdParty)
-adios VER specify 'adios2_version' -adios VER specify 'adios2_version'
-boost VER specify 'boost_version' -boost VER specify 'boost_version'
-cgal ver specify 'cgal_version' -cgal VER specify 'cgal_version'
-cmake VER specify 'cmake_version' -cmake VER specify 'cmake_version'
-fftw VER specify 'fffw_version' -fftw VER specify 'fffw_version'
-kahip VER specify 'KAHIP_VERSION' -kahip VER specify 'KAHIP_VERSION'
-metis ver specify 'METIS_VERSION' -metis VER specify 'METIS_VERSION'
-scotch VER specify 'SCOTCH_VERSION' (eg, scotch_6.0.4) -scotch VER specify 'SCOTCH_VERSION' (eg, scotch_6.0.4)
HELP_HEAD
case "$1" in
(*full*)
cat<<HELP_FULL
Components specified by absolute path Components specified by absolute path
-adios-path DIR Path for 'ADIOS2_ARCH_PATH' (overrides -adios) -adios-path DIR Path for 'ADIOS2_ARCH_PATH' (overrides -adios)
-boost-path DIR Path for 'BOOST_ARCH_PATH' (overrides -boost) -boost-path DIR Path for 'BOOST_ARCH_PATH' (overrides -boost)
@ -80,32 +116,24 @@ Graphics
-paraview VER specify 'ParaView_VERSION' (eg, 5.4.1 or system) -paraview VER specify 'ParaView_VERSION' (eg, 5.4.1 or system)
-paraview-qt VER specify 'ParaView_QT' (eg, qt-system) -paraview-qt VER specify 'ParaView_QT' (eg, qt-system)
-paraview-path DIR specify 'ParaView_DIR' (eg, /opt/ParaView-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) -llvm VER specify 'mesa_llvm'
-mesa VER specify 'mesa_version' (eg, mesa-13.0.1) -mesa VER specify 'mesa_version' (eg, mesa-13.0.1)
-vtk VER specify 'vtk_version' (eg, VTK-7.1.0)
-llvm-path DIR Path for 'LLVM_ARCH_PATH' (overrides -llvm)
-mesa-path DIR Path for 'MESA_ARCH_PATH' (overrides -mesa)
-vtk-path DIR Path for 'VTK_DIR' (overrides -vtk)
Misc HELP_FULL
-foamInstall DIR [obsolete] ;;
-projectName NAME [obsolete] esac
-sigfpe|-no-sigfpe [obsolete - now under etc/controlDict]
-archOption 32|64 [obsolete setting of 'WM_ARCH_OPTION' - edit manually]
cat<<HELP_TAIL_COMMON
Adjusts hardcoded versions and installation paths (POSIX and C-shell)
for OpenFOAM.
Adjusts hardcoded versions and installation paths (POSIX and C-shell). HELP_TAIL_COMMON
exit 0 # A clean exit
Equivalent options:
-version -foamVersion --projectVersion
-archOption --archOption
-third -ThirdParty
-paraview --paraviewVersion | -paraviewVersion
-paraview-path --paraviewInstall | -paraviewInstall
-scotch --scotchVersion | -scotchVersion
-scotch-path --scotchArchPath | -scotchArchPath
-system-compiler -system
-third-compiler -third
USAGE
exit 0 # clean exit
} }
@ -123,11 +151,12 @@ die()
} }
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
projectDir="$(\pwd -L)" # Project dir
# Check that it appears to be an OpenFOAM installation # Check that it appears to be an OpenFOAM installation
if [ -f etc/bashrc ] && [ -d "META-INFO" ] if [ -f etc/bashrc ] && [ -d "META-INFO" ]
then then
echo "Configuring OpenFOAM" 1>&2 echo "Configuring OpenFOAM ($projectDir)" 1>&2
else else
die "Please run from the OpenFOAM top-level installation directory" \ die "Please run from the OpenFOAM top-level installation directory" \
"No etc/bashrc or META-INFO/ found" "No etc/bashrc or META-INFO/ found"
@ -172,18 +201,22 @@ _inlineSed()
local replacement="$3" local replacement="$3"
local msg="$4" local msg="$4"
local cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@' local cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@'
local localFile
[ -f "$file" ] || { [ -f "$file" ] || {
echo "Missing file: $file" echo "Missing file: $file"
exit 2 # Fatal exit 2 # Fatal
} }
# Local filename (for reporting)
localFile="$(echo "$file" | sed -e "s#^$projectDir/##")"
grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || { \ grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || { \
echo "Failed: ${msg:-replacement} in $file" echo "Failed: ${msg:-replacement} in $localFile"
return 1 return 1
} }
[ -n "$msg" ] && echo " $msg ($file)" [ -n "$msg" ] && echo " $msg ($localFile)"
return 0 return 0
} }
@ -209,7 +242,7 @@ replace()
"$file" \ "$file" \
"$key=.*" \ "$key=.*" \
"$key=$val" \ "$key=$val" \
"Replaced $key setting by '$val'" "Replaced $key by '$val'"
done done
} }
@ -232,9 +265,9 @@ replaceCsh()
_inlineSed \ _inlineSed \
"$file" \ "$file" \
"setenv *$key [^ #]*" \ "setenv [ ]*$key [^ #]*" \
"setenv $key $val" \ "setenv $key $val" \
"Replaced $key setenv by '$val'" "Replaced $key by '$val'"
done done
} }
@ -323,7 +356,13 @@ unset adjusted optMpi
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help* | --help*) -help-c*) # Compat help
printHelp -compat
;;
-help-f*) # Full help
printHelp -full
;;
-h | -help*) # Short help
printHelp printHelp
;; ;;
'') '')
@ -516,12 +555,12 @@ CONFIG_CSH
_inlineSed $(_foamEtc config.sh/mpi) \ _inlineSed $(_foamEtc config.sh/mpi) \
"FOAM_MPI=$expected" \ "FOAM_MPI=$expected" \
"FOAM_MPI=$optMpi" \ "FOAM_MPI=$optMpi" \
"Replaced 'FOAM_MPI=$expected' setting by 'FOAM_MPI=$optMpi'" "Replaced 'FOAM_MPI=$expected' by 'FOAM_MPI=$optMpi'"
_inlineSed $(_foamEtc config.csh/mpi) \ _inlineSed $(_foamEtc config.csh/mpi) \
"FOAM_MPI $expected" \ "FOAM_MPI $expected" \
"FOAM_MPI $optMpi" \ "FOAM_MPI $optMpi" \
"Replaced 'FOAM_MPI $expected' setting by 'FOAM_MPI $optMpi'" "Replaced 'FOAM_MPI $expected' by 'FOAM_MPI $optMpi'"
replaceEtc bashrc WM_MPLIB OPENMPI replaceEtc bashrc WM_MPLIB OPENMPI
replaceEtcCsh cshrc WM_MPLIB OPENMPI replaceEtcCsh cshrc WM_MPLIB OPENMPI
@ -711,11 +750,11 @@ CONFIG_CSH
shift shift
;; ;;
-vtk) -llvm)
# Replace vtk_version=... # Replace mesa_llvm=...
optionValue=$(getOptionValue "$@") optionValue=$(getOptionValue "$@")
replaceEtc config.sh/vtk vtk_version "$optionValue" replaceEtc config.sh/vtk mesa_llvm "$optionValue"
replaceEtc config.csh/vtk vtk_version "$optionValue" replaceEtc config.csh/vtk mesa_llvm "$optionValue"
adjusted=true adjusted=true
shift shift
;; ;;
@ -729,6 +768,42 @@ CONFIG_CSH
shift shift
;; ;;
-vtk)
# Replace vtk_version=...
optionValue=$(getOptionValue "$@")
replaceEtc config.sh/vtk vtk_version "$optionValue"
replaceEtc config.csh/vtk vtk_version "$optionValue"
adjusted=true
shift
;;
-llvm-path)
# Replace LLVM_ARCH_PATH=...
optionValue=$(getOptionValue "$@")
replaceEtc config.sh/vtk LLVM_ARCH_PATH \""$optionValue\""
replaceEtcCsh config.csh/vtk LLVM_ARCH_PATH \""$optionValue\""
adjusted=true
shift
;;
-mesa-path)
# Replace MESA_ARCH_PATH...
optionValue=$(getOptionValue "$@")
replaceEtc config.sh/vtk MESA_ARCH_PATH \""$optionValue\""
replaceEtcCsh config.csh/vtk MESA_ARCH_PATH \""$optionValue\""
adjusted=true
shift
;;
-vtk-path)
# Replace VTK_DIR...
optionValue=$(getOptionValue "$@")
replaceEtc config.sh/vtk VTK_DIR \""$optionValue\""
replaceEtcCsh config.csh/vtk VTK_DIR \""$optionValue\""
adjusted=true
shift
;;
## Misc ## ## Misc ##

View File

@ -1,4 +1,5 @@
#!/bin/sh #!/bin/sh
exec "@PROJECT_DIR@"/etc/openfoam "$@"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
@ -11,16 +12,8 @@
# License # License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
# #
# Script
# openfoam [options] [args]
#
# Description # Description
# Forwarding to the OpenFOAM etc/openfoam bash session script. # Forwarding to OpenFOAM etc/openfoam bash session script.
# Uses a hard-code directory path (eg, generated with autoconfig).
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Hard-coded directory path (eg, autoconfig)
projectDir="@PROJECT_DIR@"
exec "$projectDir"/etc/openfoam "$@"
#------------------------------------------------------------------------------

1
doc/modules/README Normal file
View File

@ -0,0 +1 @@
Modules-related documents when collated for an installation package.

View File

@ -9,12 +9,11 @@
# Copyright (C) 2016-2018 OpenCFD Ltd. # Copyright (C) 2016-2018 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, licensed under GNU General Public License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
# <http://www.gnu.org/licenses/>.
# #
# File # File
# etc/config.sh/gperftools # etc/config.sh/gperftools
# - sourced by OpenFOAM-*/etc/bashrc # Not normally sourced by OpenFOAM-*/etc/bashrc
# #
# Description # Description
# Setup file for GPERFTOOLS binaries/libraries. # Setup file for GPERFTOOLS binaries/libraries.

View File

@ -147,7 +147,6 @@ _foamEtc -config settings
_foamEtc -config mpi _foamEtc -config mpi
_foamEtc -config paraview -- "$@" # Pass through for evaluation _foamEtc -config paraview -- "$@" # Pass through for evaluation
_foamEtc -config vtk _foamEtc -config vtk
_foamEtc -config gperftools
_foamEtc -config adios2 _foamEtc -config adios2
_foamEtc -config CGAL _foamEtc -config CGAL
_foamEtc -config scotch _foamEtc -config scotch

View File

@ -35,7 +35,7 @@
# etc/openfoam -DWM_COMPILER=Clang # etc/openfoam -DWM_COMPILER=Clang
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Auto-detect from location # Auto-detect from location. Do not call from within the etc/directory itself!
projectDir="$(\cd "$(dirname "${0%/*}")" && \pwd -L)" projectDir="$(\cd "$(dirname "${0%/*}")" && \pwd -L)"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@ -56,6 +56,7 @@ options:
-show-api | -version Print META-INFO api value and exit -show-api | -version Print META-INFO api value and exit
-show-patch Print META-INFO patch value and exit -show-patch Print META-INFO patch value and exit
-show-prefix Print project directory and exit -show-prefix Print project directory and exit
-test-tutorial Forward arguments to tutorials/AutoTest
-verbose Set FOAM_VERBOSE=true (interactive only) -verbose Set FOAM_VERBOSE=true (interactive only)
-help Print the usage -help Print the usage
@ -93,6 +94,7 @@ getApiInfo()
# No inheritance of FOAM_SETTINGS # No inheritance of FOAM_SETTINGS
unset FOAM_SETTINGS unset FOAM_SETTINGS
unset _foamEtcDir _foamSettings _foamScriptCommand unset _foamEtcDir _foamSettings _foamScriptCommand
unset optTestTut
# Parse options # Parse options
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
@ -114,6 +116,10 @@ do
exit $? exit $?
;; ;;
-test-tutorial) # Run tutorials/AutoTest
optTestTut=true
;;
-c) # Shell command -c) # Shell command
_foamScriptCommand="$2" _foamScriptCommand="$2"
[ -n "$_foamScriptCommand" ] || { [ -n "$_foamScriptCommand" ] || {
@ -196,7 +202,7 @@ fi
unset interactive unset interactive
if [ "$#" -eq 0 ] && [ -z "$_foamScriptCommand" ] if [ "$#" -eq 0 ] && [ -z "$_foamScriptCommand" ] && [ -z "$optTestTut" ]
then then
# Interactive shell, chain off via a file # Interactive shell, chain off via a file
interactive=true interactive=true
@ -263,6 +269,15 @@ then
fi fi
if [ -n "$optTestTut" ]
then
sourceBashrc
exec "$WM_PROJECT_DIR/tutorials/AutoTest" "$@"
exit $? # Safety
fi
# An application or a shell script # An application or a shell script
# It may actually be a script with a '#!/project-path/bin/openfoam', # It may actually be a script with a '#!/project-path/bin/openfoam',

199
tutorials/AutoTest Executable file
View File

@ -0,0 +1,199 @@
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2020 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# tutorials/AutoTest dir [.. dirN]
#
# Description
# Run foamRunTutorials with specified tutorial directories
# Creates/destroys a temporary directory for each test.
#
# Environment
# Requires an initialized OpenFOAM environment.
#
# Note
# Potentially useful for debian autopkgtest
#
#------------------------------------------------------------------------------
# Auto-detect from location
#Unused# projectDir="$(\cd "$(dirname "${0%/*}")" && \pwd -L)"
#------------------------------------------------------------------------------
printHelp() {
cat<<USAGE
usage: ${0##*/} [OPTION] dir [.. dirN]
options:
-1 Modify case controlDict to run only one time step (default)
-full Do not modify controlDict (run tutorial to completion)
-debian Any modifications when running with autopkgtest
-help Print the usage
Run foamRunTutorials with specified tutorial directories.
Creates/destroys a temporary directory for each.
USAGE
exit 0 # A clean exit
}
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error encountered:"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
echo "See '${0##*/} -help' for usage"
echo
exit 1
}
#------------------------------------------------------------------------------
unset optDebian optVerbose
optRunLimit=1
# Parse options
while [ "$#" -gt 0 ]
do
case "$1" in
-h*)
printHelp
;;
-1)
optRunLimit="${1#-}"
;;
-full)
unset optRunLimit
;;
-debian)
# Redirect stderr to stdout, if autopkgtest (tests/control)
# does NOT use "Restrictions: allow-stderr"
exec 2>&1
;;
--)
break
;;
-*)
die "unknown option $1"
;;
*)
break
;;
esac
shift
done
#------------------------------------------------------------------------------
# Basic sanity checks
[ -n "$FOAM_TUTORIALS" ] || export FOAM_TUTORIALS="$WM_PROJECT_DIR"/tutorials
[ -d "${WM_PROJECT_DIR:?}" ] || die "No OpenFOAM environment: $WM_PROJECT_DIR"
[ -d "$FOAM_TUTORIALS" ] || die "No OpenFOAM tutorials : $FOAM_TUTORIALS"
#------------------------------------------------------------------------------
#
# Modify case controlDicts to run only one time step
#
modifyCaseControlDict()
{
for dict in $(find . -name "controlDict*" -type f)
do
cp -f "${dict}" "${dict}.orig"
sed \
-e 's/\(startFrom[ \t]*\)\([A-Za-z]*\);/\1 latestTime;/' \
-e 's/\(stopAt[ \t]*\)\([A-Za-z]*\);/\1 nextWrite;/' \
-e 's/\(writeControl[ \t]*\)\([A-Za-z]*\);/\1 timeStep;/' \
-e 's/\(writeInterval[ \t]*\)\([-.0-9A-Za-z]*\);/\1 '"$optRunLimit"';/' \
"${dict}.orig" > "${dict}"
done
}
#------------------------------------------------------------------------------
nTests="$#"
nPassed=0
for testdir in "$@"
do
testdir="${testdir#tutorials/}"
testdir="$(echo "$testdir" | sed -e 's@^//*@@; s@//*$@@;')"
suffix="$(echo "$testdir" | sed -e 's@//*@_@g')"
if [ -n "$testdir" ] && [ -d "$FOAM_TUTORIALS/$testdir" ]
then
(
echo "Run test: $testdir"
set -e
TESTDIR="$(mktemp --directory --suffix=".$suffix")"
trap 'rm -rf $TESTDIR' 0 INT QUIT ABRT PIPE TERM
cp -r "$FOAM_TUTORIALS/$testdir"/* "$TESTDIR"/
cd "$TESTDIR"
if [ -n "$optRunLimit" ]
then
set +e
modifyCaseControlDict
set -e
fi
nInput="$(ls | wc -l)"
foamRunTutorials
nOutput="$(ls | wc -l)"
if [ "$nInput" = 0 ]
then
echo "No input for $testdir" 1>&2
exit 1
elif [ "$nOutput" = "$nInput" ]
then
echo "Run failure for $testdir" 1>&2
exit 1
else
echo "run: OK"
fi
) && nPassed=$((nPassed + 1))
else
echo "No tutorial: $testdir" 1>&2
fi
done
if [ "$nTests" = 0 ]
then
die "No tests specified"
elif [ "$nPassed" = "$nTests" ]
then
echo "Passed all $nTests tests"
else
echo "Passed $nPassed/$nTests tests" 1>&2
exit 1
fi
#------------------------------------------------------------------------------

1
tutorials/modules/README Normal file
View File

@ -0,0 +1 @@
Modules-related tutorials when collated for an installation package.

View File

@ -23,6 +23,7 @@
# findSystemInclude # findSystemInclude
# findLibrary # findLibrary
# findExtLib # findExtLib
# versionCompare
# #
# Internal variables used # Internal variables used
# extLibraries # extLibraries
@ -318,6 +319,74 @@ then
return 2 return 2
} }
# Compare version tuples with syntax similar to POSIX shell,
# but respecting dot separators.
#
# arg1 OP arg2
# OP is one of -eq, -ne, -lt, -le, -gt, or -ge.
# Returns true for a successful comparison.
# Arg1 and arg2 normally comprise positive integers, but leading content
# before a '-' is stripped.
# Missing digits are treated as '0'.
#
# Eg,
# versionCompare "software-1.2.3" -gt 1.1 && echo True
#
# Ad hoc handling of "git" version as always newest.
# "git" -gt "1.2.3" : True
# "1.2.3" -lt "git" : True
versionCompare()
{
[ "$#" -eq 3 ] || {
echo "Compare needs 3 arguments (was given $#)" 1>&2
return 2
}
local arg1="${1#*-}" # Strip leading prefix-
local op="${2}"
local arg2="${3#*-}" # Strip leading prefix-
local result='' # Empty represents 'equal'
arg1="${arg1:-0}."
arg2="${arg2:-0}."
if [ "$arg1" = "$arg2" ]; then unset arg1 arg2 # Identical
elif [ "${arg1#git}" != "$arg1" ]; then result='more' # (git > arg2)
elif [ "${arg2#git}" != "$arg2" ]; then result='less' # (arg1 < git)
fi
while [ -z "$result" ] && [ -n "${arg1}${arg2}" ]
do
local digits1="${arg1%%.*}"
local digits2="${arg2%%.*}"
arg1="${arg1#*.}"
arg2="${arg2#*.}"
: "${digits1:=0}"
: "${digits2:=0}"
# Other handling of non-integer values?
if [ "$digits1" -lt "$digits2" ]; then result='less'
elif [ "$digits1" -gt "$digits2" ]; then result='more'
fi
done
case "$op" in
(-eq | eq) [ -z "$result" ] ;;
(-ne | ne) [ -n "$result" ] ;;
(-lt | lt) [ 'less' = "$result" ] ;;
(-gt | gt) [ 'more' = "$result" ] ;;
(-le | le) [ 'less' = "${result:-less}" ] ;;
(-ge | ge) [ 'more' = "${result:-more}" ] ;;
(*)
echo "Unknown operator: '$op'" 1>&2
return 2
;;
esac
}
fi fi