ENH: installation helpers
---- install-dirs: a general directory installer Copy installs non-binary (platform) directories. Eg, install-dirs -prefix=... -devel install-dirs -prefix=... -default -no-app ---- install-platform: a platform (binary) installer This is primarily driven by the need to install into system mpi directories. The problem noted in issue #1893 is caused by the rpm-mpi-hooks (fedora and redhat-8). For the additional mpi library qualifier (openmpi-x86_64) to be added to the requirements, the mpi-specific libraries (eg, libPstream.so) need to be installed in the mpi system directory (eg, /usr/lib64/openmpi). However, then need symlinks from the system locations back to our local directories to ensure that the libraries are correctly found via our LD_LIBRARY_PATH and we don't get dummy libraries. ---- update-mpi-links: a post-install update hook Expected paths are registered as persistent information into the hook during packaging. Triggering the hook after installation completes the creation of the symlinks. Normal usage, ``` prefix="/tmp/local-install/openfoam" bin/tools/install-dirs -prefix="$prefix" -common bin/tools/install-platform -prefix="$prefix" ``` Installs - /tmp/local-install/openfoam/META-INFO - /tmp/local-install/openfoam/bin - /tmp/local-install/openfoam/etc - /tmp/local-install/openfoam/platforms/linux64GccDPInt32Opt/bin - /tmp/local-install/openfoam/platforms/linux64GccDPInt32Opt/lib Can also place architecture-dependent bits elsewhere, ``` prefix="/tmp/local-install/openfoam" multi_arch="$(dpkg-architecture -qDEB_TARGET_MULTIARCH)" bin/tools/install-dirs -prefix="$prefix" -common bin/tools/install-platform -exec-prefix="$prefix/$multi_arch" ``` Installs - /tmp/local-install/openfoam/META-INFO - /tmp/local-install/openfoam/bin - /tmp/local-install/openfoam/etc - /tmp/local-install/openfoam/x86_64-linux-gnu/bin - /tmp/local-install/openfoam/x86_64-linux-gnu/lib Can use it to flatten out platforms entirely, ``` prefix="/tmp/local-install/openfoam" bin/tools/install-dirs -prefix="$prefix" -common bin/tools/install-platform -exec-prefix="$prefix" ``` Installs - /tmp/local-install/openfoam/META-INFO - /tmp/local-install/openfoam/bin - /tmp/local-install/openfoam/etc - /tmp/local-install/openfoam/lib
This commit is contained in:
parent
c2bf9e1cc8
commit
9fe09ad21d
430
bin/tools/install-dirs
Executable file
430
bin/tools/install-dirs
Executable file
@ -0,0 +1,430 @@
|
|||||||
|
#!/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
|
||||||
|
# install-dirs
|
||||||
|
#
|
||||||
|
# Example usage
|
||||||
|
# install-dirs -prefix=/opt/openfoam/openfoamVER -core
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# Simple installer to copy architecture-independent directories.
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
printHelp() {
|
||||||
|
cat<<USAGE
|
||||||
|
|
||||||
|
Usage: ${0##*/} [OPTION]
|
||||||
|
|
||||||
|
input options:
|
||||||
|
-source=SOURCE Source directory
|
||||||
|
[\$WM_PROJECT_DIR ${WM_PROJECT_DIR:-''}]
|
||||||
|
-platform=PLATFORM OpenFOAM platform name [\$WM_OPTIONS ${WM_OPTIONS:-''}]
|
||||||
|
-foam-mpi=FOAM_MPI OpenFOAM mpi name [\$FOAM_MPI ${FOAM_MPI:-''}]
|
||||||
|
|
||||||
|
target options:
|
||||||
|
-prefix=PREFIX Top-level installation directory in PREFIX ['']
|
||||||
|
|
||||||
|
selections:
|
||||||
|
-[no-]common [do not] install (bin, etc, META-INFO)
|
||||||
|
-[no-]devel [do not] install (applications, src, wmake)
|
||||||
|
-[no-]doc [do not] install (doc)
|
||||||
|
-[no-]tut [do not] install (tutorials)
|
||||||
|
-no-app, -no-apps do not install (applications)
|
||||||
|
-no-src do not install (src)
|
||||||
|
-no-wmake do not install (wmake)
|
||||||
|
|
||||||
|
bundled selections:
|
||||||
|
-core Select: -common -devel
|
||||||
|
-default Select: -common -devel -doc -tut
|
||||||
|
|
||||||
|
tuning options:
|
||||||
|
-collate Collate modules (doc, tutorials)
|
||||||
|
-collate-doc Collate modules (doc) into doc/modules
|
||||||
|
-collate-tut Collate modules (tutorials) into tutorials/modules
|
||||||
|
|
||||||
|
general options:
|
||||||
|
-dry-run, -n Do not perform any operations
|
||||||
|
-force, -f Ignored
|
||||||
|
-verbose, -v Additional verbosity
|
||||||
|
-help Print the help and exit
|
||||||
|
|
||||||
|
|
||||||
|
Simple installer to copy OpenFOAM non-binary directories.
|
||||||
|
|
||||||
|
Example,
|
||||||
|
${0##*/} -prefix=/opt/openfoamVER
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
exit 0 # A clean exit
|
||||||
|
}
|
||||||
|
|
||||||
|
unset optDryRun hadError
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
# Report error and exit
|
||||||
|
warnOrDie()
|
||||||
|
{
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
hadError=true
|
||||||
|
while [ "$#" -ge 1 ]; do echo "Error: $1" 1>&2; shift; done
|
||||||
|
else
|
||||||
|
die "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Get the option's value (argument), or die on missing or empty value
|
||||||
|
# $1 option=value
|
||||||
|
getOptionValue()
|
||||||
|
{
|
||||||
|
local value="${1#*=}"
|
||||||
|
# Remove any surrounding double quotes
|
||||||
|
value="${value%\"}"
|
||||||
|
value="${value#\"}"
|
||||||
|
|
||||||
|
[ -n "$value" ] || die "'${1%=}' option requires a value"
|
||||||
|
echo "$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Test for '-no-' or '-without-' prefix. Return "false" or "true"
|
||||||
|
# $1 option
|
||||||
|
# [$2] truth value <true>
|
||||||
|
getBoolOption()
|
||||||
|
{
|
||||||
|
case "$1" in
|
||||||
|
(-no-* | -without-*) echo "false" ;;
|
||||||
|
(*) echo "${2:-true}" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Defaults from current OpenFOAM environment
|
||||||
|
sourceDir="$WM_PROJECT_DIR"
|
||||||
|
platform="$WM_OPTIONS"
|
||||||
|
foam_mpi="$FOAM_MPI"
|
||||||
|
|
||||||
|
unset install_common install_devel
|
||||||
|
unset install_app install_src install_wmake
|
||||||
|
unset install_doc optCollate_doc
|
||||||
|
unset install_tut optCollate_tut
|
||||||
|
unset optCollate
|
||||||
|
|
||||||
|
unset prefix exec_prefix bindir libdir libdir_mpi optVerbose
|
||||||
|
|
||||||
|
# Parse options
|
||||||
|
while [ "$#" -gt 0 ]
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
-h | -help*) printHelp ;;
|
||||||
|
-n | -dry-run) optDryRun="(dry-run) " ;;
|
||||||
|
-v | -verbose) optVerbose=true ;;
|
||||||
|
-f | -force) echo "Ignored option: ${1%%=*}" 1>&2 ;;
|
||||||
|
|
||||||
|
# Inputs
|
||||||
|
-source=*) sourceDir="$(getOptionValue "$1")" ;;
|
||||||
|
-platform=*) echo "Ignored option: ${1%%=*}" 1>&2 ;;
|
||||||
|
-foam-mpi=*) echo "Ignored option: ${1%%=*}" 1>&2 ;;
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
-prefix=*) prefix="$(getOptionValue "$1")" ;;
|
||||||
|
-exec-prefix=*) echo "Ignored option: ${1%%=*}" 1>&2 ;;
|
||||||
|
|
||||||
|
# Selections
|
||||||
|
-common | -no-common) install_common="$(getBoolOption "$1")" ;;
|
||||||
|
-devel | -no-devel) install_devel="$(getBoolOption "$1")" ;;
|
||||||
|
-doc | -no-doc) install_doc="$(getBoolOption "$1")" ;;
|
||||||
|
-tut | -no-tut) install_tut="$(getBoolOption "$1")" ;;
|
||||||
|
-no-app | -no-apps) install_app="$(getBoolOption "$1")" ;;
|
||||||
|
-no-src) install_src="$(getBoolOption "$1")" ;;
|
||||||
|
-no-wmake) install_wmake="$(getBoolOption "$1")" ;;
|
||||||
|
|
||||||
|
-core)
|
||||||
|
install_common=true
|
||||||
|
install_devel=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
-default | -all)
|
||||||
|
[ "$1" = "-all" ] && echo "Compat: treat $1 like -default" 1>&2
|
||||||
|
install_common=true
|
||||||
|
install_devel=true
|
||||||
|
install_doc=true
|
||||||
|
install_tut=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
-collate | -no-collate)
|
||||||
|
optCollate="$(getBoolOption "$1")"
|
||||||
|
if [ "${optCollate:-false}" = false ]
|
||||||
|
then
|
||||||
|
unset optCollate optCollate_doc optCollate_tut
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
-collate-doc) optCollate_doc=true ;;
|
||||||
|
-collate-tut) optCollate_tut=true ;;
|
||||||
|
|
||||||
|
(*) die "Unknown option/argument: $1" ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
[ "${install_common:-false}" = false ] && unset install_common
|
||||||
|
if [ "${install_devel:-false}" = false ]
|
||||||
|
then
|
||||||
|
unset install_devel install_app install_src install_wmake
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${install_doc:-false}" = false ]
|
||||||
|
then
|
||||||
|
unset install_doc
|
||||||
|
elif [ "$optCollate_doc" = true ] || [ "$optCollate" = true ]
|
||||||
|
then
|
||||||
|
install_doc=collate
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${install_tut:-false}" = false ]
|
||||||
|
then
|
||||||
|
unset install_tut
|
||||||
|
elif [ "$optCollate_tut" = true ] || [ "$optCollate" = true ]
|
||||||
|
then
|
||||||
|
install_tut=collate
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Input checks
|
||||||
|
[ -d "$sourceDir" ] || warnOrDie "Invalid -source directory: $sourceDir"
|
||||||
|
|
||||||
|
# Installation sanity check
|
||||||
|
[ -n "$prefix" ] || warnOrDie "Must specify -prefix"
|
||||||
|
|
||||||
|
if [ -n "$hadError" ]
|
||||||
|
then
|
||||||
|
echo "Errors encounters in dry-run. Stopping" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${install_common}${install_devel}${install_doc}${install_tut}" ]
|
||||||
|
then
|
||||||
|
exec 1>&2
|
||||||
|
echo "Nothing specified to install"
|
||||||
|
echo
|
||||||
|
echo "See '${0##*/} -help' for usage"
|
||||||
|
echo
|
||||||
|
exit 0 # Treat as not an error
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Report settings
|
||||||
|
echo "Preparing install with the following parameters" 1>&2
|
||||||
|
echo "source:" 1>&2
|
||||||
|
echo " directory $sourceDir" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
echo "target" 1>&2
|
||||||
|
echo " prefix ${prefix-[]}" 1>&2
|
||||||
|
##echo " binary ${install_binary:-[disabled]}" 1>&2
|
||||||
|
echo " common ${install_common:-[disabled]}" 1>&2
|
||||||
|
echo -n " devel " 1>&2
|
||||||
|
if [ -n "$install_devel" ]
|
||||||
|
then
|
||||||
|
echo -n "true" 1>&2
|
||||||
|
[ "$install_app" = false ] && echo -n " [app=disabled]" 1>&2
|
||||||
|
[ "$install_src" = false ] && echo -n " [src=disabled]" 1>&2
|
||||||
|
[ "$install_wmake" = false ] && echo -n " [wmake=disabled]" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
else
|
||||||
|
echo "[disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
echo " doc ${install_doc:-[disabled]}" 1>&2
|
||||||
|
echo " tut ${install_tut:-[disabled]}" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Proper umask
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
# The commands
|
||||||
|
copy_cmd="cp -a ${optVerbose:+-v}"
|
||||||
|
mkdir_cmd="mkdir -p"
|
||||||
|
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
if [ -n "$optVerbose" ]
|
||||||
|
then
|
||||||
|
copy_cmd="echo cp -a"
|
||||||
|
mkdir_cmd="echo mkdir -p"
|
||||||
|
else
|
||||||
|
copy_cmd="true"
|
||||||
|
mkdir_cmd="true"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Copy file or directory to <prefix>
|
||||||
|
doCopy()
|
||||||
|
{
|
||||||
|
$mkdir_cmd "$prefix" 2>/dev/null
|
||||||
|
|
||||||
|
for i in "$@"
|
||||||
|
do
|
||||||
|
if [ -e "$sourceDir/$i" ]
|
||||||
|
then
|
||||||
|
$copy_cmd "$sourceDir/$i" "$prefix"
|
||||||
|
nCopied="x$nCopied"
|
||||||
|
else
|
||||||
|
echo "Missing? $sourceDir/$i" 1>&2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "${optDryRun}${#nCopied} items copied" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Collate (doc | tutorials)
|
||||||
|
# Eg,
|
||||||
|
# modules/{NAME}/tutorials
|
||||||
|
# => tutorials/modules/{NAME}
|
||||||
|
collateModuleFiles()
|
||||||
|
{
|
||||||
|
local subDir="$1"
|
||||||
|
local subTarget="$prefix/$subDir/modules"
|
||||||
|
|
||||||
|
if [ -d "$sourceDir/modules" ]
|
||||||
|
then
|
||||||
|
(
|
||||||
|
cd "$sourceDir/modules" || exit
|
||||||
|
|
||||||
|
$mkdir_cmd "$subTarget"
|
||||||
|
|
||||||
|
for i in $(find . -mindepth 2 -maxdepth 2 -name "$subDir" -type d)
|
||||||
|
do
|
||||||
|
$mkdir_cmd "$subTarget/${i%/*}"
|
||||||
|
$copy_cmd "$i"/* "$subTarget/${i%/*}"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# common
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install common:"
|
||||||
|
if [ -n "$install_common" ]
|
||||||
|
then
|
||||||
|
echo "${message} bin etc META-INFO" 1>&2
|
||||||
|
doCopy bin etc META-INFO
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
# develop (or source)
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install devel:" 1>&2
|
||||||
|
unset dirNames blockMessage
|
||||||
|
if [ -n "$install_devel" ]
|
||||||
|
then
|
||||||
|
if [ "$install_wmake" = false ]
|
||||||
|
then
|
||||||
|
blockMessage="$blockMessage [wmake=disabled]"
|
||||||
|
else
|
||||||
|
dirNames="$dirNames wmake"
|
||||||
|
fi
|
||||||
|
if [ "$install_src" = false ]
|
||||||
|
then
|
||||||
|
blockMessage="$blockMessage [src=disabled]"
|
||||||
|
else
|
||||||
|
dirNames="$dirNames src"
|
||||||
|
fi
|
||||||
|
if [ "$install_app" = false ]
|
||||||
|
then
|
||||||
|
blockMessage="$blockMessage [app=disabled]"
|
||||||
|
else
|
||||||
|
dirNames="$dirNames applications"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$dirNames" ]
|
||||||
|
then
|
||||||
|
echo "${message}${dirNames}${blockMessage}" 1>&2
|
||||||
|
doCopy $dirNames # Unquoted - uses word splitting
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
# doc
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install doc:" 1>&2
|
||||||
|
if [ -n "$install_doc" ]
|
||||||
|
then
|
||||||
|
echo "${message}" 1>&2
|
||||||
|
doCopy doc
|
||||||
|
|
||||||
|
if [ "$install_doc" = collate ]
|
||||||
|
then
|
||||||
|
echo "${optDryRun}Collate module doc:" 1>&2
|
||||||
|
collateModuleFiles doc
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
# tutorials
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install tutorials:" 1>&2
|
||||||
|
if [ -n "$install_tut" ]
|
||||||
|
then
|
||||||
|
echo "${message}" 1>&2
|
||||||
|
doCopy tutorials
|
||||||
|
|
||||||
|
if [ "$install_tut" = collate ]
|
||||||
|
then
|
||||||
|
echo "${optDryRun}Collate module tutorials:" 1>&2
|
||||||
|
collateModuleFiles tutorials
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
[ -n "$optVerbose" ] && echo 1>&2
|
||||||
|
echo "${optDryRun}Done" 1>&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
exit 0 # clean exit
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
375
bin/tools/install-platform
Executable file
375
bin/tools/install-platform
Executable file
@ -0,0 +1,375 @@
|
|||||||
|
#!/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
|
||||||
|
# install-platform
|
||||||
|
#
|
||||||
|
# Example usage
|
||||||
|
# install-platform -prefix=/opt/openfoam/openfoamVER
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# Simple installer to copy OpenFOAM binary bin/, lib/ (platforms)
|
||||||
|
# directories.
|
||||||
|
#
|
||||||
|
# Note
|
||||||
|
# The platforms/tools directory still must be handled separately
|
||||||
|
#
|
||||||
|
# Layout of OpenFOAM platforms
|
||||||
|
#
|
||||||
|
# platforms
|
||||||
|
# |-- <WM_OPTIONS>
|
||||||
|
# |-- bin
|
||||||
|
# | |-- ...
|
||||||
|
# `-- lib
|
||||||
|
# |-- ...
|
||||||
|
# |-- dummy
|
||||||
|
# | `-- ...
|
||||||
|
# |-- sys-openmpi
|
||||||
|
# | |-- libPstream.so
|
||||||
|
# | `-- libptscotchDecomp.so
|
||||||
|
# `-- paraview-MAJ.MIN
|
||||||
|
# `-- ...
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
printHelp() {
|
||||||
|
cat<<USAGE
|
||||||
|
|
||||||
|
Usage: ${0##*/} [OPTION]
|
||||||
|
|
||||||
|
input options:
|
||||||
|
-source=SOURCE Source directory
|
||||||
|
[\$WM_PROJECT_DIR ${WM_PROJECT_DIR:-''}]
|
||||||
|
-platform=PLATFORM OpenFOAM platform name [\$WM_OPTIONS ${WM_OPTIONS:-''}]
|
||||||
|
-foam-mpi=FOAM_MPI OpenFOAM mpi name [\$FOAM_MPI ${FOAM_MPI:-''}]
|
||||||
|
|
||||||
|
target options:
|
||||||
|
-prefix=PREFIX Top-level installation directory in PREFIX ['']
|
||||||
|
-exec-prefix=EPREFIX Architecture-dependent in EPREFIX
|
||||||
|
[PREFIX/platforms/PLATFORM]
|
||||||
|
-bindir=DIR bin directory [EPREFIX/bin]
|
||||||
|
-libdir=DIR lib directory [EPREFIX/lib]
|
||||||
|
-mpi-libdir=DIR mpi libdir [<libdir>/FOAM_MPI]
|
||||||
|
|
||||||
|
tuning options:
|
||||||
|
-no-bin Do not install bin directory
|
||||||
|
-no-lib Do not install lib directory
|
||||||
|
-no-mpi Do not install mpi lib directory
|
||||||
|
-mpi-only Only install mpi lib directory
|
||||||
|
-mpi-mkdir Create foam-mpi directory within libdir
|
||||||
|
|
||||||
|
general options:
|
||||||
|
-dry-run, -n Do not perform any operations
|
||||||
|
-force, -f Ignored
|
||||||
|
-verbose, -v Additional verbosity
|
||||||
|
-help Print the help and exit
|
||||||
|
|
||||||
|
|
||||||
|
Simple installer to copy OpenFOAM binary bin/, lib/ (platforms) directories.
|
||||||
|
|
||||||
|
Example,
|
||||||
|
${0##*/} -prefix=/opt/openfoamVER
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
exit 0 # A clean exit
|
||||||
|
}
|
||||||
|
|
||||||
|
unset optDryRun hadError
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
# Report error and exit
|
||||||
|
warnOrDie()
|
||||||
|
{
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
hadError=true
|
||||||
|
while [ "$#" -ge 1 ]; do echo "Error: $1" 1>&2; shift; done
|
||||||
|
else
|
||||||
|
die "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Get the option's value (argument), or die on missing or empty value
|
||||||
|
# $1 option=value
|
||||||
|
getOptionValue()
|
||||||
|
{
|
||||||
|
local value="${1#*=}"
|
||||||
|
# Remove any surrounding double quotes
|
||||||
|
value="${value%\"}"
|
||||||
|
value="${value#\"}"
|
||||||
|
|
||||||
|
[ -n "$value" ] || die "'${1%=}' option requires a value"
|
||||||
|
echo "$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Test for '-no-' or '-without-' prefix. Return "false" or "true"
|
||||||
|
# $1 option
|
||||||
|
# [$2] truth value <true>
|
||||||
|
getBoolOption()
|
||||||
|
{
|
||||||
|
case "$1" in
|
||||||
|
(-no-* | -without-*) echo "false" ;;
|
||||||
|
(*) echo "${2:-true}" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Defaults from current OpenFOAM environment
|
||||||
|
sourceDir="$WM_PROJECT_DIR"
|
||||||
|
platform="$WM_OPTIONS"
|
||||||
|
foam_mpi="$FOAM_MPI"
|
||||||
|
|
||||||
|
unset install_bin install_lib
|
||||||
|
unset optMkdir_mpi
|
||||||
|
install_mpi=true
|
||||||
|
|
||||||
|
unset prefix exec_prefix bindir libdir libdir_mpi optVerbose
|
||||||
|
|
||||||
|
# Parse options
|
||||||
|
while [ "$#" -gt 0 ]
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
-h | -help*) printHelp ;;
|
||||||
|
-n | -dry-run) optDryRun="(dry-run) " ;;
|
||||||
|
-v | -verbose) optVerbose=true ;;
|
||||||
|
-f | -force) echo "Ignored option: ${1%%=*}" 1>&2 ;;
|
||||||
|
|
||||||
|
# Inputs
|
||||||
|
-source=*) sourceDir="$(getOptionValue "$1")" ;;
|
||||||
|
-platform=*) platform="$(getOptionValue "$1")" ;;
|
||||||
|
-foam-mpi=*) foam_mpi="$(getOptionValue "$1")" ;;
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
-prefix=*) prefix="$(getOptionValue "$1")" ;;
|
||||||
|
-exec-prefix=*) exec_prefix="$(getOptionValue "$1")" ;;
|
||||||
|
|
||||||
|
-bindir=*) bindir="$(getOptionValue "$1")" ;;
|
||||||
|
-libdir=*) libdir="$(getOptionValue "$1")" ;;
|
||||||
|
-mpi-libdir=*) libdir_mpi="$(getOptionValue "$1")" ;;
|
||||||
|
|
||||||
|
-no-bin) install_bin=false ;;
|
||||||
|
-no-lib) install_lib=false ;;
|
||||||
|
-no-mpi) install_mpi=false ;;
|
||||||
|
-mpi-only) install_mpi=exclusive ;;
|
||||||
|
-mpi-mkdir) optMkdir_mpi=true ;;
|
||||||
|
|
||||||
|
(*) die "Unknown option/argument: $1" ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Default <exec_prefix> based on <prefix>
|
||||||
|
if [ -z "$exec_prefix" ] && [ -n "$prefix" ]
|
||||||
|
then
|
||||||
|
exec_prefix="$prefix/platforms/$platform"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Default <bindir>, <libdir> based on <exec_prefix>
|
||||||
|
if [ -n "$exec_prefix" ]
|
||||||
|
then
|
||||||
|
[ -n "$bindir" ] || bindir="$exec_prefix/bin"
|
||||||
|
[ -n "$libdir" ] || libdir="$exec_prefix/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Default <mpi-libdir> based on <libdir> and <foam-mpi>
|
||||||
|
if [ -z "$libdir_mpi" ] && [ -n "$libdir" ]
|
||||||
|
then
|
||||||
|
libdir_mpi="$libdir/$foam_mpi"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Exclusions
|
||||||
|
if [ "$install_bin" = false ] || [ "$install_mpi" = exclusive ]
|
||||||
|
then
|
||||||
|
unset bindir
|
||||||
|
fi
|
||||||
|
if [ "$install_lib" = false ] || [ "$install_mpi" = exclusive ]
|
||||||
|
then
|
||||||
|
unset libdir
|
||||||
|
fi
|
||||||
|
if [ "$install_mpi" = false ]
|
||||||
|
then
|
||||||
|
unset libdir_mpi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Input checks
|
||||||
|
|
||||||
|
sourcePlatform="$sourceDir/platforms/$platform"
|
||||||
|
|
||||||
|
[ -d "$sourceDir" ] || warnOrDie "Invalid -source directory: $sourceDir"
|
||||||
|
[ -n "$platform" ] || warnOrDie "No -platform detected or specified"
|
||||||
|
[ -n "$foam_mpi" ] || warnOrDie "No -foam-mpi detected or specified"
|
||||||
|
|
||||||
|
[ -d "$sourcePlatform" ] || \
|
||||||
|
warnOrDie "Missing platforms directory for: $platform"
|
||||||
|
|
||||||
|
|
||||||
|
# Installation sanity check
|
||||||
|
[ -n "$bindir$libdir$libdir_mpi" ] || \
|
||||||
|
warnOrDie "Must specify at least one of -prefix, -exec-prefix, -bindir, -libdir, -mpi-libdir"
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "$hadError" ]
|
||||||
|
then
|
||||||
|
echo "Errors encounters in dry-run. Stopping" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Report settings
|
||||||
|
echo "Preparing install with the following parameters" 1>&2
|
||||||
|
echo "source:" 1>&2
|
||||||
|
echo " directory $sourceDir" 1>&2
|
||||||
|
echo " platform $platform" 1>&2
|
||||||
|
echo " foam-mpi $foam_mpi" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
echo "target (mpi-install: $install_mpi)" 1>&2
|
||||||
|
echo " prefix ${prefix-[]}" 1>&2
|
||||||
|
echo " exec-prefix ${exec_prefix:-[]}" 1>&2
|
||||||
|
echo " bindir ${bindir:-[]}" 1>&2
|
||||||
|
echo " libdir ${libdir:-[]}" 1>&2
|
||||||
|
echo " libdir(mpi) ${libdir_mpi:-[]}" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Proper umask
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
# The commands
|
||||||
|
copy_cmd="cp -a ${optVerbose:+-v}"
|
||||||
|
mkdir_cmd="mkdir -p"
|
||||||
|
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
if [ -n "$optVerbose" ]
|
||||||
|
then
|
||||||
|
copy_cmd="echo cp -a"
|
||||||
|
mkdir_cmd="echo mkdir -p"
|
||||||
|
else
|
||||||
|
copy_cmd="true"
|
||||||
|
mkdir_cmd="true"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# bin/
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install bindir:"
|
||||||
|
if [ -n "$bindir" ]
|
||||||
|
then
|
||||||
|
input="$sourcePlatform/bin"
|
||||||
|
|
||||||
|
echo "From $input" 1>&2
|
||||||
|
echo "${message} $bindir" 1>&2
|
||||||
|
|
||||||
|
$mkdir_cmd "$bindir" 2>/dev/null
|
||||||
|
|
||||||
|
for i in "$input/"*
|
||||||
|
do
|
||||||
|
if [ -e "$i" ]
|
||||||
|
then
|
||||||
|
$copy_cmd "$i" "$bindir"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
# lib/ without mpi
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install libdir(non-mpi):"
|
||||||
|
if [ -n "$libdir" ]
|
||||||
|
then
|
||||||
|
input="$sourcePlatform/lib"
|
||||||
|
|
||||||
|
echo "From $input" 1>&2
|
||||||
|
echo "${message} $libdir" 1>&2
|
||||||
|
|
||||||
|
$mkdir_cmd "$libdir" 2>/dev/null
|
||||||
|
|
||||||
|
for i in "$input/"*
|
||||||
|
do
|
||||||
|
if [ "${i##*/}" = "$foam_mpi" ]
|
||||||
|
then
|
||||||
|
if [ "$optMkdir_mpi" = true ]
|
||||||
|
then
|
||||||
|
$mkdir_cmd "$libdir/$foam_mpi"
|
||||||
|
fi
|
||||||
|
elif [ -e "$i" ]
|
||||||
|
then
|
||||||
|
$copy_cmd "$i" "$libdir"
|
||||||
|
else
|
||||||
|
echo "bogus lib entry? $i" 1>&2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
# lib/mpi
|
||||||
|
# ----
|
||||||
|
message="${optDryRun}Install libdir(mpi):"
|
||||||
|
if [ -n "$libdir_mpi" ]
|
||||||
|
then
|
||||||
|
input="$sourcePlatform/lib/$foam_mpi"
|
||||||
|
|
||||||
|
echo "From $input" 1>&2
|
||||||
|
echo "${message} $libdir_mpi" 1>&2
|
||||||
|
|
||||||
|
$mkdir_cmd "$libdir_mpi" 2>/dev/null
|
||||||
|
|
||||||
|
for i in "$input"/*
|
||||||
|
do
|
||||||
|
if [ -e "$i" ]
|
||||||
|
then
|
||||||
|
# Always verbose (not many files anyhow)
|
||||||
|
$copy_cmd -v "$i" "$libdir_mpi"
|
||||||
|
else
|
||||||
|
echo "bogus mpi-lib entry? $i" 1>&2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "${message} [disabled]" 1>&2
|
||||||
|
fi
|
||||||
|
# ----
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "$optDryRun" ]
|
||||||
|
then
|
||||||
|
[ -n "$optVerbose" ] && echo 1>&2
|
||||||
|
echo "${optDryRun}Done" 1>&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
exit 0 # A clean exit
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
75
bin/tools/update-mpi-links.in
Normal file
75
bin/tools/update-mpi-links.in
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
FOAM_MPI="@FOAM_MPI@"
|
||||||
|
FOAM_SYSTEM_MPI_LIBBIN="@FOAM_SYSTEM_MPI_LIBBIN@"
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# ========= |
|
||||||
|
# \\ / 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.
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# Update of links from system mpi lib/ to local lib/mpi-name
|
||||||
|
#
|
||||||
|
# Note
|
||||||
|
# Normally located as a trigger within the platforms/ directory
|
||||||
|
# Uses hard-coded values (eg, generated with autoconfig).
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
|
||||||
|
# Local values
|
||||||
|
FOAM_LIBBIN="$(pwd -P)/lib"
|
||||||
|
FOAM_MPI_LIBBIN="$FOAM_LIBBIN/$FOAM_MPI"
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
echo "Link OpenFOAM ($FOAM_MPI) from system locations"
|
||||||
|
echo "Target: $FOAM_MPI_LIBBIN"
|
||||||
|
echo "Source: $FOAM_SYSTEM_MPI_LIBBIN"
|
||||||
|
|
||||||
|
if [ -z "$FOAM_MPI" ]
|
||||||
|
then
|
||||||
|
echo "FOAM_MPI not defined - skipping"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ -z "$FOAM_SYSTEM_MPI_LIBBIN" ]
|
||||||
|
then
|
||||||
|
echo "FOAM_SYSTEM_MPI_LIBBIN not defined - skipping"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ ! -d "$FOAM_SYSTEM_MPI_LIBBIN" ]
|
||||||
|
then
|
||||||
|
echo "No system mpi lib: $FOAM_SYSTEM_MPI_LIBBIN"
|
||||||
|
echo "... not updating"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ ! -d "$FOAM_LIBBIN" ]
|
||||||
|
then
|
||||||
|
echo "Missing $FOAM_LIBBIN"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
mkdir -p "$FOAM_MPI_LIBBIN"
|
||||||
|
|
||||||
|
# Create symlinks
|
||||||
|
(
|
||||||
|
cd "$FOAM_MPI_LIBBIN" || exit
|
||||||
|
|
||||||
|
for i in "$FOAM_SYSTEM_MPI_LIBBIN"/*
|
||||||
|
do
|
||||||
|
if [ -f "$i" ]
|
||||||
|
then
|
||||||
|
ln -svf "$i" "${i##*/}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
exit 0 # clean exit
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
Loading…
Reference in New Issue
Block a user