BUG: failed check for scotch headers on ubuntu (closes #543)

- installed under /usr/include/scotch/scotch.h

ENH: obtain fallback value for SCOTCH_VERSION from the header

COMP: add support for metis, scotch static libraries (eg, EasyBuild)
This commit is contained in:
Mark Olesen
2017-07-20 12:15:08 +02:00
parent b85457fc35
commit 01292a9a76

View File

@ -7,11 +7,30 @@ cd ${0%/*} || exit 1 # Run from this directory
: ${FOAM_EXT_LIBBIN:=/usr/lib$WM_COMPILER_LIB_ARCH} # Extra safety : ${FOAM_EXT_LIBBIN:=/usr/lib$WM_COMPILER_LIB_ARCH} # Extra safety
export FOAM_EXT_LIBBIN export FOAM_EXT_LIBBIN
# Check for the existence of any of the files
# On success, echoes the file found and returns 0, otherwise returns 2
findFirstFile()
{
local file
for file
do
if [ -f "$file" -a -r "$file" ]
then
echo "$file"
return 0
fi
done
return 2
}
# Test for metis. # Test for metis.
# - return 0 and export METIS_ARCH_PATH on success # - return 0 and export METIS_ARCH_PATH on success
hasMetis() hasMetis()
{ {
local warning="==> skip metis" local warning="==> skip metis"
local header label settings
unset METIS_ARCH_PATH METIS_VERSION unset METIS_ARCH_PATH METIS_VERSION
settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis) || { settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis) || {
@ -27,28 +46,30 @@ hasMetis()
fi fi
# Header # Header
local header=$METIS_ARCH_PATH/include/metis.h header=$(findFirstFile \
if [ "${METIS_ARCH_PATH##*-}" = system ] $METIS_ARCH_PATH/include/metis.h \
then /usr/include/metis.h \
[ -f "$header" ] || header=/usr/include/metis.h ) || {
fi
[ -f "$header" ] || {
echo "$warning (no header)" echo "$warning (no header)"
return 2 # file not found return 2 # file not found
} }
# Library # Library
[ -r $FOAM_EXT_LIBBIN/libmetis.so ] || \ [ "${METIS_ARCH_PATH##*-}" = system ] || \
[ -r $METIS_ARCH_PATH/lib/libmetis.so ] || \ findFirstFile \
[ -r $METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.so ] || \ $FOAM_EXT_LIBBIN/libmetis.so \
[ "${METIS_ARCH_PATH##*-}" = system ] || { $METIS_ARCH_PATH/lib/libmetis.a \
$METIS_ARCH_PATH/lib/libmetis.so \
$METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.a \
$METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.so \
> /dev/null || {
echo "$warning (missing library)" echo "$warning (missing library)"
return 2 return 2
} }
# Ensure consistent sizes between OpenFOAM and metis header # Ensure consistent sizes between OpenFOAM and metis header
# Extract IDXTYPEWIDTH from metis.h: regex as per ThirdParty Allwmake # Extract IDXTYPEWIDTH from metis.h: regex as per ThirdParty Allwmake
local label=$(sed -ne 's/^.*#define *IDXTYPEWIDTH *\([1-9][0-9]\).*/\1/p' $header) label=$(sed -ne 's/^.*#define *IDXTYPEWIDTH *\([1-9][0-9]\).*/\1/p' $header)
: ${label:=unknown} : ${label:=unknown}
if [ "$WM_LABEL_SIZE" = "$label" ] if [ "$WM_LABEL_SIZE" = "$label" ]
@ -67,6 +88,7 @@ hasMetis()
hasScotch() hasScotch()
{ {
local warning="==> skip scotch" local warning="==> skip scotch"
local header label settings
unset SCOTCH_ARCH_PATH SCOTCH_VERSION unset SCOTCH_ARCH_PATH SCOTCH_VERSION
settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch) || { settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch) || {
@ -82,33 +104,54 @@ hasScotch()
fi fi
# Header # Header
local header=$SCOTCH_ARCH_PATH/include/scotch.h header=$(findFirstFile \
if [ "${SCOTCH_ARCH_PATH##*-}" = system ] $SCOTCH_ARCH_PATH/include/scotch.h \
then /usr/include/scotch/scotch.h \
[ -f "$header" ] || header=/usr/include/scotch.h /usr/include/scotch.h
fi ) || {
[ -f "$header" ] || {
echo "$warning (no header)" echo "$warning (no header)"
return 2 # file not found return 2 # file not found
} }
# Library # Library
[ -r $FOAM_EXT_LIBBIN/libscotch.so ] || \ [ "${SCOTCH_ARCH_PATH##*-}" = system ] || \
[ -r $SCOTCH_ARCH_PATH/lib/libscotch.so ] || \ findFirstFile \
[ -r $SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.so ] || \ $FOAM_EXT_LIBBIN/libscotch.so \
[ "${SCOTCH_ARCH_PATH##*-}" = system ] || { $SCOTCH_ARCH_PATH/lib/libscotch.a \
$SCOTCH_ARCH_PATH/lib/libscotch.so \
$SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.a \
$SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.so \
> /dev/null || {
echo "$warning (missing library)" echo "$warning (missing library)"
return 2 return 2
} }
# Ensure consistent sizes between OpenFOAM and scotch header # Ensure consistent sizes between OpenFOAM and scotch header
# extract 'typedef int64_t SCOTCH_Num' or equivalent # extract 'typedef int64_t SCOTCH_Num' or equivalent
local label=$(sed -ne \ label=$(sed -ne \
's/^.*typedef *\([^ ]*\) *SCOTCH_Num.*/\1/ip' \ 's/^.*typedef *\([^ ]*\) *SCOTCH_Num.*/\1/ip' \
"$header") "$header")
: ${label:=unknown} : ${label:=unknown}
# No SCOTCH_VERSION set? Try to obtain from header
# extract #define SCOTCH_VERSION, SCOTCH_RELEASE, SCOTCH_PATCHLEVEL
[ -n "$SCOTCH_VERSION" ] || \
SCOTCH_VERSION=$(
eval $(
sed -ne \
's/^ *#define *SCOTCH_\(VERSION\|RELEASE\|PATCHLEVEL\) *\([0-9][0-9]*\).*$/\1=\2/p' \
"$header"
)
set -- $VERSION $RELEASE $PATCHLEVEL
IFS="."
[ "$#" -gt 0 ] && echo "scotch-$*"
)
# Failsafe value
: ${SCOTCH_VERSION:=scotch}
case "$WM_LABEL_SIZE:$label" in case "$WM_LABEL_SIZE:$label" in
(32:int32_t | 32:int | 64:int64_t | 64:long) (32:int32_t | 32:int | 64:int64_t | 64:long)
echo "Scotch (label=$label) - $SCOTCH_ARCH_PATH" echo "Scotch (label=$label) - $SCOTCH_ARCH_PATH"
@ -168,4 +211,5 @@ fi
wmake $targetType decompositionMethods wmake $targetType decompositionMethods
wmake $targetType decompose wmake $targetType decompose
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------