371 lines
12 KiB
Bash
371 lines
12 KiB
Bash
#! /bin/sh
|
|
#
|
|
# Copyright by The HDF Group.
|
|
# Copyright by the Board of Trustees of the University of Illinois.
|
|
# All rights reserved.
|
|
#
|
|
# This file is part of HDF5. The full HDF5 copyright notice, including
|
|
# terms governing use, modification, and redistribution, is contained in
|
|
# the COPYING file, which can be found at the root of the source code
|
|
# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
|
|
# If you do not have access to either file, you may request a copy from
|
|
# help@hdfgroup.org.
|
|
#
|
|
|
|
############################################################################
|
|
## ##
|
|
## Things You May Have to Modify: ##
|
|
## ##
|
|
## If the following paths don't point to the place were HDF5 is installed ##
|
|
## on your system (i.e., you received a binary distribution or moved the ##
|
|
## files from the originally installed directory to another directory) ##
|
|
## then modify them accordingly to represent the new paths. ##
|
|
## ##
|
|
############################################################################
|
|
prefix="@prefix@"
|
|
exec_prefix="@exec_prefix@"
|
|
libdir="@libdir@"
|
|
includedir="@includedir@"
|
|
HL="@HL@"
|
|
|
|
############################################################################
|
|
## ##
|
|
## Things You Can Modify to Override HDF5 Library Build Components: ##
|
|
## ##
|
|
## (Advanced usage - know what you're doing - you're on your own here.) ##
|
|
## The three variables below can be used to insert paths and flags in ##
|
|
## FCFLAGS, LDFLAGS, or LIBS in the h5fc compile line: ##
|
|
## $FLINKER $FCFLAGS $H5BLD_FCFLAGS $F9XSUFFIXFLAG $LDFLAGS $LIBS ##
|
|
## $fmodules $link_objs $link_args $shared_link ##
|
|
## ##
|
|
## These settings can be overriden by setting HDF5_FCFLAGS, ##
|
|
## HDF5_LDFLAGS, or HDF5_LIBS in the environment. ##
|
|
## ##
|
|
############################################################################
|
|
FCFLAGSBASE=""
|
|
LDFLAGSBASE=""
|
|
LIBSBASE=""
|
|
|
|
############################################################################
|
|
## ##
|
|
## You shouldn't have to modify anything below this line. ##
|
|
## ##
|
|
############################################################################
|
|
|
|
# Constants definitions
|
|
EXIT_SUCCESS=0
|
|
EXIT_FAILURE=1
|
|
|
|
host_os="@host_os@"
|
|
|
|
prog_name="`basename $0`"
|
|
|
|
allargs=""
|
|
compile_args=""
|
|
link_args=""
|
|
link_objs=""
|
|
|
|
do_link="yes"
|
|
do_compile="no"
|
|
dash_o="no"
|
|
dash_c="no"
|
|
get_output_file="no"
|
|
|
|
SHOW="eval"
|
|
FCBASE="@FC@"
|
|
FLINKERBASE="@FC@"
|
|
|
|
# FCFLAGS and LDFLAGS are reserved for use by the script user.
|
|
# FLAGS brought from the hdf5 build are put in H5BLD_*FLAGS.
|
|
|
|
# User's FCFLAGS come after their H5BLD counterparts. User's LDFLAGS come just
|
|
# before clibpath, user's LIBS come after $link_objs and before the hdf5
|
|
# libraries in $link_args, followed by any external library paths and libraries
|
|
# from AM_LDFLAGS, LDFLAGS, AM_LIBS or LIBS carried in from the hdf5 build.
|
|
# The order of the flags is intended to give precedence to the user's flags.
|
|
H5BLD_FCFLAGS="@AM_FCFLAGS@ @FCFLAGS@"
|
|
F9XMODFLAG="@F9XMODFLAG@"
|
|
F9XSUFFIXFLAG="@F9XSUFFIXFLAG@"
|
|
H5BLD_LDFLAGS="@AM_LDFLAGS@ @LDFLAGS@"
|
|
H5BLD_LIBS="@LIBS@"
|
|
|
|
FC="${HDF5_FC:-$FCBASE}"
|
|
FLINKER="${HDF5_FLINKER:-$FLINKERBASE}"
|
|
FCFLAGS="${HDF5_FCFLAGS:-$FCFLAGSBASE}"
|
|
LDFLAGS="${HDF5_LDFLAGS:-$LDFLAGSBASE}"
|
|
LIBS="${HDF5_LIBS:-$LIBSBASE}"
|
|
|
|
# If a static library is available, the default will be to use it. If the only
|
|
# available library is shared, it will be used by default. The user can
|
|
# override either default, although choosing an unavailable library will result
|
|
# in link errors.
|
|
STATIC_AVAILABLE="@enable_static@"
|
|
if test "${STATIC_AVAILABLE}" = "yes"; then
|
|
USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"
|
|
else
|
|
USE_SHARED_LIB="${HDF5_USE_SHLIB:-yes}"
|
|
fi
|
|
|
|
usage() {
|
|
# A wonderfully informative "usage" message.
|
|
echo "usage: $prog_name [OPTIONS] <compile line>"
|
|
echo " OPTIONS:"
|
|
echo " -help This help message."
|
|
echo " -echo Show all the shell commands executed"
|
|
echo " -prefix=DIR Prefix directory to find HDF5 lib/ and include/"
|
|
echo " subdirectories [default: $prefix]"
|
|
echo " -show Show the commands without executing them"
|
|
echo " -showconfig Show the HDF5 library configuration summary"
|
|
echo " -shlib Compile with shared HDF5 libraries [default for hdf5 built"
|
|
echo " without static libraries]"
|
|
echo " -noshlib Compile with static HDF5 libraries [default for hdf5 built"
|
|
echo " with static libraries]"
|
|
echo " "
|
|
echo " <compile line> - the normal compile line options for your compiler."
|
|
echo " $prog_name uses the same compiler you used to compile"
|
|
echo " HDF5. Check with your compiler's man pages for more"
|
|
echo " information on which options are needed."
|
|
echo " "
|
|
echo " You can override the compiler and linker to compile your program by"
|
|
echo " setting the following environment variables accordingly:"
|
|
echo " "
|
|
echo " HDF5_FC - use a different Fortran 90 or 95 compiler"
|
|
echo " HDF5_FLINKER - use a different linker"
|
|
echo " HDF5_USE_SHLIB=[yes|no] - use shared or static version of the HDF5 library"
|
|
echo " [default: no except when built with only"
|
|
echo " shared libraries]"
|
|
echo " "
|
|
echo " You can also add or change paths and flags to the compile line using"
|
|
echo " the following environment varibles or by assigning them to their counterparts"
|
|
echo " in the 'Things You Can Modify to Override...'" section of $prog_name
|
|
echo " "
|
|
echo " Variable Current value to be replaced"
|
|
echo " HDF5_FCFLAGS \"$CFLAGSBASE\""
|
|
echo " HDF5_LDFLAGS \"$LDFLAGSBASE\""
|
|
echo " HDF5_LIBS \"$LIBSBASE\""
|
|
echo " "
|
|
echo " Note that adding library paths to HDF5_LDFLAGS where another hdf5 version"
|
|
echo " is located may link your program with that other hdf5 library version."
|
|
echo " "
|
|
exit $EXIT_FAILURE
|
|
}
|
|
|
|
# Show the configuration summary of the library recorded in the
|
|
# libhdf5.settings file reside in the lib directory.
|
|
showconfigure()
|
|
{
|
|
cat ${libdir}/libhdf5.settings
|
|
status=$?
|
|
}
|
|
|
|
# Main
|
|
status=$EXIT_SUCCESS
|
|
|
|
if test "$#" = "0"; then
|
|
# No parameters specified, issue usage statement and exit.
|
|
usage
|
|
fi
|
|
|
|
for arg in $@ ; do
|
|
if test "x$get_output_file" = "xyes"; then
|
|
link_args="$link_args $arg"
|
|
output_file="$arg"
|
|
get_output_file="no"
|
|
continue
|
|
fi
|
|
|
|
case "$arg" in
|
|
-c)
|
|
allargs="$allargs $arg"
|
|
compile_args="$compile_args $arg"
|
|
|
|
if test "x$do_link" = "xyes" -a -n "$output_file"; then
|
|
compile_args="$compile_args -o $output_file"
|
|
fi
|
|
|
|
do_link="no"
|
|
dash_c="yes"
|
|
;;
|
|
-o)
|
|
allargs="$allargs $arg"
|
|
dash_o="yes"
|
|
|
|
if test "x$dash_c" = "xyes"; then
|
|
compile_args="$compile_args $arg"
|
|
else
|
|
link_args="$link_args $arg"
|
|
do_link="yes"
|
|
get_output_file="yes"
|
|
fi
|
|
;;
|
|
-E|-M|-MT)
|
|
allargs="$allargs $arg"
|
|
compile_args="$compile_args $arg"
|
|
dash_c="yes"
|
|
do_link="no"
|
|
;;
|
|
-l*)
|
|
link_args="$link_args $arg"
|
|
allargs="$allargs $arg"
|
|
;;
|
|
-prefix=*)
|
|
prefix="`expr "$arg" : '-prefix=\(.*\)'`"
|
|
;;
|
|
-echo)
|
|
set -x
|
|
;;
|
|
-show)
|
|
SHOW="echo"
|
|
;;
|
|
-showconfig)
|
|
showconfigure
|
|
exit $status
|
|
;;
|
|
-shlib)
|
|
USE_SHARED_LIB="yes"
|
|
;;
|
|
-noshlib)
|
|
USE_SHARED_LIB="no"
|
|
;;
|
|
-help)
|
|
usage
|
|
;;
|
|
*\"*)
|
|
qarg="'"$arg"'"
|
|
allargs="$allargs $qarg"
|
|
;;
|
|
*\'*)
|
|
qarg='\"'"$arg"'\"'
|
|
allargs="$allargs $qarg"
|
|
;;
|
|
|
|
*) allargs="$allargs $arg"
|
|
if [ -s "$arg" ] ; then
|
|
ext=`expr "$arg" : '.*\(\..*\)'`
|
|
if [ "$ext" = ".f" -o "$ext" = ".F" -o \
|
|
"$ext" = ".for" -o "$ext" = ".FOR" -o \
|
|
"$ext" = ".ftn" -o "$ext" = ".FTN" -o \
|
|
"$ext" = ".f90" -o "$ext" = ".F90" -o \
|
|
"$ext" = ".f95" -o "$ext" = ".F95" -o \
|
|
"$ext" = ".f03" -o "$ext" = ".F03" -o \
|
|
"$ext" = ".f08" -o "$ext" = ".F08" ] ; then
|
|
do_compile="yes"
|
|
compile_args="$compile_args $arg"
|
|
fname=`basename $arg $ext`
|
|
link_objs="$link_objs $fname.o"
|
|
elif [ "$ext" = ".o" ] ; then
|
|
if test "x$dash_c" = "xyes" ; then
|
|
compile_args="$compile_args $arg"
|
|
else
|
|
do_link="yes"
|
|
link_objs="$link_objs $arg"
|
|
fi
|
|
elif test "x$ext" = "x.a"; then
|
|
# This is an archive that we're linking in
|
|
libraries=" $libraries $arg "
|
|
else
|
|
compile_args="$compile_args $arg"
|
|
link_args="$link_args $arg"
|
|
fi
|
|
else
|
|
compile_args="$compile_args $arg"
|
|
link_args="$link_args $arg"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# It's possible that there isn't a modules flag...
|
|
fmodules=""
|
|
if test -n "$F9XMODFLAG"; then
|
|
fmodules="${F9XMODFLAG}${includedir}"
|
|
fi
|
|
|
|
if test "x$do_compile" = "xyes"; then
|
|
if test "x$dash_c" != "xyes"; then
|
|
compile_args="-c $compile_args"
|
|
fi
|
|
|
|
|
|
$SHOW $FC $H5BLD_FCFLAGS $FCFLAGS ${F9XSUFFIXFLAG} ${fmodules} $compile_args
|
|
status=$?
|
|
|
|
if test "$status" != "0"; then
|
|
exit $status
|
|
fi
|
|
fi
|
|
|
|
|
|
if test "x$do_link" = "xyes"; then
|
|
shared_link=""
|
|
# conditionnaly link with the hl library
|
|
if test "X$HL" = "Xhl"; then
|
|
libraries=" $libraries -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 "
|
|
else
|
|
libraries=" $libraries -lhdf5_fortran -lhdf5 "
|
|
fi
|
|
link_args="$link_args -L${libdir}"
|
|
|
|
case "$host_os" in
|
|
linux*) flag="@fortran_linux_linker_option@-rpath -Wl," ;;
|
|
hpux*) flag="-Wl,+b -Wl," ;;
|
|
freebsd*|solaris*) flag="-R" ;;
|
|
rs6000*|aix*) flag="-L" ;;
|
|
sgi) flag="-rpath " ;;
|
|
*) flag="" ;;
|
|
esac
|
|
|
|
if test -n "$flag"; then
|
|
shared_link="${flag}${libdir}"
|
|
fi
|
|
|
|
if test "x$USE_SHARED_LIB" != "xyes"; then
|
|
# The hdf5 library "-l" flags are in here already. This is a static
|
|
# compile though, so change it to the static versions (.a) of the libraries.
|
|
new_libraries=""
|
|
for lib in $libraries; do
|
|
case "$lib" in
|
|
-lhdf5)
|
|
new_libraries="$new_libraries ${libdir}/libhdf5.a"
|
|
;;
|
|
-lhdf5_hl)
|
|
new_libraries="$new_libraries ${libdir}/libhdf5_hl.a"
|
|
;;
|
|
-lhdf5_fortran)
|
|
new_libraries="$new_libraries ${libdir}/libhdf5_fortran.a"
|
|
;;
|
|
-lhdf5hl_fortran)
|
|
new_libraries="$new_libraries ${libdir}/libhdf5hl_fortran.a"
|
|
;;
|
|
*)
|
|
new_libraries="$new_libraries $lib"
|
|
;;
|
|
esac
|
|
done
|
|
libraries="$new_libraries"
|
|
fi
|
|
|
|
for lib in $libraries; do
|
|
if echo $link_args | grep " $lib " > /dev/null ||
|
|
echo $link_args | grep " $lib$" > /dev/null; then
|
|
:
|
|
else
|
|
link_args="$link_args $lib "
|
|
fi
|
|
done
|
|
|
|
# The LIBS are just a bunch of -l* libraries necessary for the HDF5
|
|
# module. It's okay if they're included twice in the compile line.
|
|
link_args="$link_args $H5BLD_LDFLAGS $H5BLD_LIBS"
|
|
|
|
# User's FCFLAGS come after their H5BLD counterparts. User's LDFLAGS come just
|
|
# before clibpath, user's LIBS come after $link_objs and before the hdf5
|
|
# libraries in $link_args, followed by any external library paths and libraries
|
|
# from AM_LDFLAGS, LDFLAGS, AM_LIBS or LIBS carried in from the hdf5 build.
|
|
# The order of the flags is intended to give precedence to the user's flags.
|
|
$SHOW $FLINKER $FCFLAGS $H5BLD_FCFLAGS $F9XSUFFIXFLAG $LDFLAGS $fmodules $link_objs $LIBS $link_args $shared_link
|
|
status=$?
|
|
fi
|
|
|
|
exit $status
|