#! /bin/sh
##
## Copyright by the Board of Trustees of the University of Illinois.
## All rights reserved.
##

############################################################################
##                                                                        ##
## Things You May Have to Modify:                                         ##
##                                                                        ##
## If the following paths don't point to the place were HDF4 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@"

############################################################################
##                                                                        ##
## You shouldn't have to modify anything below this line.                 ##
##                                                                        ##
############################################################################

host_os="@host_os@"

prog_name="`basename $0`"

allargs=""
compile_args=""
libraries=""
link_args=""
link_objs=""

do_link="yes"
do_compile="no"
dash_o="no"
dash_c="no"
get_output_file="no"

SHOW="eval"
CCBASE="@CC@"
CLINKERBASE="@CC@"
CFLAGS="@CFLAGS@"
CPPFLAGS="@CPPFLAGS@"
LDFLAGS="@LDFLAGS@"
LIBS="@LIBS@"

CC="${HDF4_CC:-$CCBASE}"
CLINKER="${HDF4_CLINKER:-$CLINKERBASE}"

# 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="${HDF4_USE_SHLIB:-no}"
else
  USE_SHARED_LIB="${HDF4_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 HDF4 lib/ and include/"
  echo "                   subdirectories [default: $prefix]"
  echo "    -show        Show the commands without executing them"
  echo "    -shlib       Compile with shared HDF4 libraries [default for hdf4 built"
  echo "                                                     without static libraries]"
  echo "    -noshlib     Compile with static HDF4 libraries [default for hdf4 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 "                    HDF4. Check with your compiler's man pages for more"
  echo "                    information on which options are needed."
  echo " "
  echo " You can override the compiler, linker, and whether or not to use static"
  echo " or shared libraries to compile your program by setting the following"
  echo " environment variables accordingly:"
  echo " "
  echo "   HDF4_CC                  -  use a different C compiler"
  echo "   HDF4_CLINKER             -  use a different linker"
  echo "   HDF4_USE_SHLIB=[yes|no]  -  use shared or static version of the HDF4 library"
  echo "                                 [default: no]"
  echo " "
  exit 1
}

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 $outputfile"
      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)
      allargs="$allargs $arg"
      compile_args="$compile_args $arg"
      dash_c="yes"
      do_link="no"
      ;;
    -l*)
      libraries=" $libraries $arg "
      allargs="$allargs $arg"
      ;;
    -prefix=*)
      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
      ;;
    -echo)
      set -x
      ;;
    -show)
      SHOW="echo"
      ;;
    -shlib)
      USE_SHARED_LIB="yes"
      ;;
    -noshlib)
      USE_SHARED_LIB="no"
      ;;
    -help)
      usage
      ;;
    *\"*)
      qarg="'"$arg"'"
      allargs="$allargs $qarg"
      ;;
    *\'*)
      qarg='\"'"$arg"'\"'
      allargs="$allargs $qarg"
      ;;
    *)
      allargs="$allargs $qarg"

      if test -s "$arg"; then
        ext=`expr "$arg" : '.*\(\..*\)'`

        if test "x$ext" = "x.c"; then
          do_compile="yes"
          compile_args="$compile_args $arg"
          fname=`basename $arg .c`
          link_objs="$link_objs $fname.o"
        elif test "x$ext" = "x.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

if test "x$do_compile" = "xyes"; then
  if test "x$dash_c" != "xyes"; then
    compile_args="-c $compile_args"
  fi

  $SHOW $CC -I$includedir $CPPFLAGS $CFLAGS $compile_args
  status=$?

  if test "$status" != "0"; then
    exit $status
  fi
fi

if test "x$do_link" = "xyes"; then
  libraries=" $libraries -lmfhdf -ldf "
  link_args="$link_args -L${libdir}"

  if test "x$USE_SHARED_LIB" != "xyes"; then
    # The "-ldf" & "-lmfhdf" flags are in here already...This is a static
    # compile though, so change it to the static version (.a) of the library.
    new_libraries=""
    for lib in $libraries; do
      case "$lib" in
        -ldf)
          new_libraries="$new_libraries ${libdir}/libdf.a"
          ;;
        -lmfhdf)
          new_libraries="$new_libraries ${libdir}/libmfhdf.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 HDF4
  # module. It's okay if they're included twice in the compile line.
  link_args="$link_args $LIBS"

  $SHOW $CLINKER $CFLAGS $LDFLAGS $link_objs $link_args
  status=$?
fi

exit $status
