aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreschnett <eschnett@fb53df36-e548-4a1e-8150-ab98cbd5e786>2015-06-24 08:12:24 +0000
committereschnett <eschnett@fb53df36-e548-4a1e-8150-ab98cbd5e786>2015-06-24 08:12:24 +0000
commit1cc805af0e7071e7006597e513b5fc5230692efa (patch)
tree33b7f6068191d04cd6cad832fefa91f7f1ed494e
parenta0b7d0398a2b12566b86abf4c98f6e6d03184d35 (diff)
Revert recent changes that break building e.g. on Stampedesvn
git-svn-id: http://svn.cactuscode.org/projects/ExternalLibraries/HDF5/trunk@114 fb53df36-e548-4a1e-8150-ab98cbd5e786
-rwxr-xr-xsrc/detect.sh283
1 files changed, 141 insertions, 142 deletions
diff --git a/src/detect.sh b/src/detect.sh
index 047e2dd..7bef01a 100755
--- a/src/detect.sh
+++ b/src/detect.sh
@@ -10,7 +10,7 @@ if [ "$(echo ${VERBOSE} | tr '[:upper:]' '[:lower:]')" = 'yes' ]; then
fi
set -e # Abort on errors
-. $CCTK_HOME/lib/make/bash_utils.sh
+
################################################################################
# Check for old mechanism
@@ -23,100 +23,115 @@ if [ -n "${HDF5}" ]; then
exit 1
fi
-# Take care of requests to build the library in any case
-HDF5_DIR_INPUT=$HDF5_DIR
-if [ "$(echo "${HDF5_DIR}" | tr '[a-z]' '[A-Z]')" = 'BUILD' ]; then
- HDF5_BUILD=yes
- HDF5_DIR=
-else
- HDF5_BUILD=
-fi
-# HDF5 can be configures in different ways
+
+################################################################################
+# Decide which libraries to link with
+################################################################################
+
+# Set up names of the libraries based on configuration variables. Also
+# assign default values to variables.
HDF5_C_LIBS='hdf5_hl hdf5'
if [ "${HDF5_ENABLE_CXX:=no}" = 'yes' ]; then
HDF5_CXX_LIBS='hdf5_hl_cpp hdf5_cpp'
- HDF5_REQ='C++'
fi
if [ "${HDF5_ENABLE_FORTRAN:=yes}" = 'yes' ]; then
if [ "${F90}" != "none" ]; then
HDF5_FORTRAN_LIBS='hdf5hl_fortran hdf5_fortran'
- HDF5_REQ="$HDF5_REQ Fortran"
fi
fi
-if [ -n "$HDF5_REQ" ]; then
- echo "BEGIN MESSAGE"
- echo "Additional requested language support: $HDF5_REQ"
- echo "END MESSAGE"
-fi
-HDF5_REQ_LIBS="${HDF5_CXX_LIBS} ${HDF5_FORTRAN_LIBS} ${HDF5_C_LIBS}"
+
################################################################################
# Search
################################################################################
-if [[ -z "$HDF5_BUILD" ]]; then
- find_lib HDF5 hdf5 1 1.0 "$HDF5_REQ_LIBS" "hdf5.h" "$HDF5_DIR"
-
- # Sadly, pkg-config for HDF5 is good for paths, but bad for the list of
- # available (and necessary) library names, so we have to fix things
- if [ -n "$PKG_CONFIG_SUCCESS" ]; then
- HDF5_LIBS="hdf5_hl $HDF5_LIBS"
- find_libs "$HDF5_LIB_DIRS" "hdf5_hl"
- if [ -z "$FOUND" ]; then
- echo 'BEGIN ERROR'
- echo 'Detected problem with HDF5 libary at'
- echo " $HDF5_DIR ($HDF5_LIB_DIRS)"
- echo 'Library hdf5_hl not found.'
- echo 'END ERROR'
- exit 1
- fi
- if [ "${HDF5_ENABLE_CXX:=no}" = 'yes' ]; then
- HDF5_LIBS="hdf5_hl_cpp hdf5_cpp $HDF5_LIBS"
- find_libs "$HDF5_LIB_DIRS" "hdf5_hl_cpp hdf5_cpp"
- if [ -z "$FOUND" ]; then
- echo 'BEGIN ERROR'
- echo 'HDF5 Installation found at '
- echo " $HDF5_DIR ($HDF5_LIB_DIRS)"
- echo ' does not provide requested C++ support. Either specify the '
- echo ' location of a different HDF5 installation, or do not '
- echo ' require the HDF5 C++ interface if you do not need it '
- echo ' (set HDF5_ENABLE_CXX to "no").'
- echo 'END ERROR'
- exit 1
- fi
- fi
- if [ "${HDF5_ENABLE_FORTRAN:=yes}" = 'yes' ]; then
- HDF5_LIBS="hdf5hl_fortran hdf5_fortran $HDF5_LIBS"
- find_libs "$HDF5_LIB_DIRS" "hdf5hl_fortran hdf5_fortran"
- if [ -z "$FOUND" ]; then
- echo 'BEGIN ERROR'
- echo 'HDF5 Installation found at '
- echo " $HDF5_DIR ($HDF5_LIB_DIRS)"
- echo ' does not provide requested Fortran support. Either specify '
- echo ' location of a different HDF5 installation, or do not '
- echo ' require the HDF5 Fortran interface if you do not need it '
- echo ' (set HDF5_ENABLE_FORTRAN to "no").'
- echo 'END ERROR'
- exit 1
- fi
+
+if [ -z "${HDF5_DIR}" ]; then
+ echo "BEGIN MESSAGE"
+ echo "HDF5 selected, but HDF5_DIR not set. Checking some places..."
+ echo "END MESSAGE"
+
+ # We look in these directories
+ DIRS="/usr /usr/local /usr/local/hdf5 /usr/local/packages/hdf5 /usr/local/apps/hdf5 /opt/local ${HOME} ${HOME}/hdf5 c:/packages/hdf5"
+ # look into each directory
+ for dir in $DIRS; do
+ # libraries might have different file extensions
+ for libext in a so dylib; do
+ # libraries can be in /lib or /lib64
+ for libdir in lib64 lib; do
+ # These files must exist
+ FILES="include/hdf5.h $(for lib in ${HDF5_CXX_LIBS} ${HDF5_FORTRAN_LIBS} ${HDF5_C_LIBS}; do echo ${libdir}/lib${lib}.${libext}; done)"
+ # assume this is the one and check all needed files
+ HDF5_DIR="$dir"
+ for file in $FILES; do
+ # discard this directory if one file was not found
+ if [ ! -r "$dir/$file" ]; then
+ unset HDF5_DIR
+ break
+ fi
+ done
+ # don't look further if all files have been found
+ if [ -n "$HDF5_DIR" ]; then
+ break
+ fi
+ done
+ # don't look further if all files have been found
+ if [ -n "$HDF5_DIR" ]; then
+ break
+ fi
+ done
+ # don't look further if all files have been found
+ if [ -n "$HDF5_DIR" ]; then
+ break
fi
+ done
+
+ if [ -z "$HDF5_DIR" ]; then
+ echo "BEGIN MESSAGE"
+ echo "Did not find HDF5"
+ echo "END MESSAGE"
+ else
+ echo "BEGIN MESSAGE"
+ echo "Found HDF5 in ${HDF5_DIR}"
+ echo "END MESSAGE"
fi
fi
+
+
################################################################################
# Build
################################################################################
-THORN=HDF5
-if [ -n "$HDF5_BUILD" -o -z "${HDF5_DIR}" ]; then
+if [ -z "${HDF5_DIR}" \
+ -o "$(echo "${HDF5_DIR}" | tr '[a-z]' '[A-Z]')" = 'BUILD' ]
+then
echo "BEGIN MESSAGE"
echo "Using bundled HDF5..."
echo "END MESSAGE"
- check_tools "tar patch"
+ # Check for required tools. Do this here so that we don't require
+ # them when using the system library.
+ if [ "x$TAR" = x ] ; then
+ echo 'BEGIN ERROR'
+ echo 'Could not find tar command.'
+ echo 'Please make sure that the (GNU) tar command is present,'
+ echo 'and that the TAR variable is set to its location.'
+ echo 'END ERROR'
+ exit 1
+ fi
+ if [ "x$PATCH" = x ] ; then
+ echo 'BEGIN ERROR'
+ echo 'Could not find patch command.'
+ echo 'Please make sure that the patch command is present,'
+ echo 'and that the PATCH variable is set to its location.'
+ echo 'END ERROR'
+ exit 1
+ fi
# Set locations
+ THORN=HDF5
NAME=hdf5-1.8.14
SRCDIR="$(dirname $0)"
BUILD_DIR=${SCRATCH_BUILD}/build/${THORN}
@@ -128,33 +143,29 @@ if [ -n "$HDF5_BUILD" -o -z "${HDF5_DIR}" ]; then
echo "END MESSAGE"
INSTALL_DIR=${HDF5_INSTALL_DIR}
fi
+ DONE_FILE=${SCRATCH_BUILD}/done/${THORN}
HDF5_DIR=${INSTALL_DIR}
- # Fortran modules may be located in the lib directory
- HDF5_INC_DIRS="${HDF5_DIR}/include ${HDF5_DIR}/lib"
- HDF5_LIB_DIRS="${HDF5_DIR}/lib"
- HDF5_LIBS="${HDF5_CXX_LIBS} ${HDF5_FORTRAN_LIBS} ${HDF5_C_LIBS}"
+else
+ THORN=HDF5
+ DONE_FILE=${SCRATCH_BUILD}/done/${THORN}
+ mkdir ${SCRATCH_BUILD}/done 2> /dev/null || true
+ date > ${DONE_FILE}
fi
-if [ -n "$HDF5_DIR" ]; then
- # Fortran modules may be located in the lib directory
- : ${HDF5_RAW_LIB_DIRS:="$HDF5_LIB_DIRS"}
- HDF5_INC_DIRS="$HDF5_RAW_LIB_DIRS $HDF5_INC_DIRS"
- # We need the un-scrubbed inc dirs to look for a header file below.
- : ${HDF5_RAW_INC_DIRS:="$HDF5_INC_DIRS"}
-else
- echo 'BEGIN ERROR'
- echo 'ERROR in HDF5 configuration: Could neither find nor build library.'
- echo 'END ERROR'
-fi
-mkdir ${SCRATCH_BUILD}/done 2> /dev/null || true
-DONE_FILE=${SCRATCH_BUILD}/done/${THORN}
-date > ${DONE_FILE}
################################################################################
# Check for additional libraries
################################################################################
+# Set options
+# Fortran modules may be located in the lib directory
+HDF5_INC_DIRS="${HDF5_DIR}/include ${HDF5_DIR}/lib"
+HDF5_LIB_DIRS="${HDF5_DIR}/lib"
+HDF5_LIBS="${HDF5_CXX_LIBS} ${HDF5_FORTRAN_LIBS} ${HDF5_C_LIBS}"
+
+
+
# Check whether we are running on Windows
if perl -we 'exit (`uname` =~ /^CYGWIN/)'; then
is_windows=0
@@ -169,62 +180,48 @@ else
is_macos=1
fi
-# check installed library, assume that everything is fine if we build
-if [ -z "$HDF5_BUILD" -a -n "${HDF5_DIR}" ]; then
- # find public include file
- for dir in $HDF5_RAW_INC_DIRS; do
- if [ -r "$dir/H5pubconf.h" ]; then
- H5PUBCONF="$H5PUBCONF $dir/H5pubconf.h"
- fi
- done
- if [ -z "$H5PUBCONF" ]; then
- echo 'BEGIN ERROR'
- echo 'ERROR in HDF5 configuration: '
- echo "H5pubconf.h not found in $HDF5_RAW_INC_DIRS"
- echo 'END ERROR'
- fi
-
- # Check whether we have to link with libsz.a
- if grep -qe '#define H5_HAVE_LIBSZ 1' $H5PUBCONF 2> /dev/null; then
- test_szlib=0
- else
- test_szlib=1
- fi
- if [ $test_szlib -eq 0 ]; then
- HDF5_LIB_DIRS="$HDF5_LIB_DIRS $LIBSZ_DIR"
- if [ $is_windows -eq 0 ]; then
- HDF5_LIBS="$HDF5_LIBS sz"
- else
- HDF5_LIBS="$HDF5_LIBS szlib"
- fi
- fi
-
- # Check whether we have to link with libz.a
- if grep -qe '#define H5_HAVE_LIBZ 1' $H5PUBCONF 2> /dev/null; then
- test_zlib=0
- else
- test_zlib=1
- fi
- if [ $test_zlib -eq 0 ]; then
- HDF5_LIB_DIRS="$HDF5_LIB_DIRS $LIBZ_DIR"
- if [ $is_windows -eq 0 ]; then
- HDF5_LIBS="$HDF5_LIBS z"
- else
- HDF5_LIBS="$HDF5_LIBS zlib"
- fi
- fi
-
- # Check whether we have to link with MPI
- if grep -qe '#define H5_HAVE_PARALLEL 1' $H5PUBCONF 2> /dev/null; then
- test_mpi=0
- else
- test_mpi=1
- fi
- if [ $test_mpi -eq 0 ]; then
- HDF5_LIB_DIRS="$HDF5_LIB_DIRS $MPI_LIB_DIRS"
- HDF5_INC_DIRS="$HDF5_INC_DIRS $MPI_INC_DIRS"
- HDF5_LIBS="$HDF5_LIBS $MPI_LIBS"
- fi
+
+
+# Check whether we have to link with libsz.a
+if grep -qe '#define H5_HAVE_LIBSZ 1' ${HDF5_DIR}/include/H5pubconf.h 2> /dev/null; then
+ test_szlib=0
+else
+ test_szlib=1
+fi
+if [ $test_szlib -eq 0 ]; then
+ HDF5_LIB_DIRS="$HDF5_LIB_DIRS $LIBSZ_DIR"
+ if [ $is_windows -eq 0 ]; then
+ HDF5_LIBS="$HDF5_LIBS sz"
+ else
+ HDF5_LIBS="$HDF5_LIBS szlib"
+ fi
+fi
+
+# Check whether we have to link with libz.a
+if grep -qe '#define H5_HAVE_LIBZ 1' ${HDF5_DIR}/include/H5pubconf.h 2> /dev/null; then
+ test_zlib=0
+else
+ test_zlib=1
+fi
+if [ $test_zlib -eq 0 ]; then
+ HDF5_LIB_DIRS="$HDF5_LIB_DIRS $LIBZ_DIR"
+ if [ $is_windows -eq 0 ]; then
+ HDF5_LIBS="$HDF5_LIBS z"
+ else
+ HDF5_LIBS="$HDF5_LIBS zlib"
+ fi
+fi
+
+# Check whether we have to link with MPI
+if grep -qe '#define H5_HAVE_PARALLEL 1' ${HDF5_DIR}/include/H5pubconf.h 2> /dev/null; then
+ test_mpi=0
+else
+ test_mpi=1
+fi
+if [ $test_mpi -eq 0 ]; then
+ HDF5_LIB_DIRS="$HDF5_LIB_DIRS $MPI_LIB_DIRS"
+ HDF5_INC_DIRS="$HDF5_INC_DIRS $MPI_INC_DIRS"
+ HDF5_LIBS="$HDF5_LIBS $MPI_LIBS"
fi
# Add the math library which might not be linked by default
@@ -233,6 +230,7 @@ if [ $is_windows -eq 0 ]; then
fi
+
################################################################################
# Configure Cactus
################################################################################
@@ -246,7 +244,9 @@ echo "LIBZ_DIR = ${LIBZ_DIR}"
echo "HDF5_INSTALL_DIR = ${HDF5_INSTALL_DIR}"
echo "END MAKE_DEFINITION"
-# Is this necessary? Shouldn't the ZLIB thorn already take care of this?
+HDF5_INC_DIRS="$(${CCTK_HOME}/lib/sbin/strip-incdirs.sh ${HDF5_INC_DIRS})"
+HDF5_LIB_DIRS="$(${CCTK_HOME}/lib/sbin/strip-libdirs.sh ${HDF5_LIB_DIRS})"
+
ZLIB_INC_DIRS="$(${CCTK_HOME}/lib/sbin/strip-incdirs.sh ${ZLIB_INC_DIRS})"
ZLIB_LIB_DIRS="$(${CCTK_HOME}/lib/sbin/strip-libdirs.sh ${ZLIB_LIB_DIRS})"
@@ -263,4 +263,3 @@ echo "END MAKE_DEFINITION"
echo 'INCLUDE_DIRECTORY $(HDF5_INC_DIRS)'
echo 'LIBRARY_DIRECTORY $(HDF5_LIB_DIRS)'
echo 'LIBRARY $(HDF5_LIBS)'
-