#! /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] " 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 " - 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