#! /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 files COPYING and Copyright.html.  COPYING can be found at the root
# of the source code distribution tree; Copyright.html can be found at the
# root level of an installed copy of the electronic HDF5 document set and
# is linked from the top-level documents page.  It can also be found at
# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
##

# This tool is adapted from the mpicc command of the MPICH Software.

############################################################################
##                                                                        ##
## 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="/usr/local"
exec_prefix="${prefix}"
libdir="${exec_prefix}/lib"
includedir="${prefix}/include"
HL="hl"

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

host_os="freebsd9.1"

prog_name="`basename $0`"

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

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

SHOW="eval"
CXXBASE="c++"
CXXLINKERBASE="c++"
CXXFLAGS=" -O2 -pipe -fno-strict-aliasing "
CPPFLAGS=" "
LDFLAGS=" -pthread"
LIBS="-lz -lm "

CXX="${HDF5_CXX:-$CXXBASE}"
CXXLINKER="${HDF5_CLINKER:-$CXXLINKERBASE}"

USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"

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 " "
  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, 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 "   HDF5_CXX                 -  use a different C++ compiler"
  echo "   HDF5_CXXLINKER           -  use a different linker"
  echo " "
  exit 1
}

# Show the configuration summary of the library recorded in the
# libhdf5_cpp.settings file reside in the lib directory.
showconfigure()
{
  cat ${libdir}/libhdf5_cpp.settings
  status=$?
}

# Main
status=0

if test "$#" = "0"; then
  # No parameters specified, issue usage statement and exit.
  usage
fi

case "$CXX" in
  gcc)
    kind="gcc"
    ;;
  mpicc|mpcc|mpicc_r)
    # Is this gcc masquarading as an MPI compiler?
    if test "`${CXX} -v 2>&1 | sed -n 2p | cut -c1-3`" = "gcc"; then
      kind="gcc"
    else
      # Nope
      kind="$host_os"
    fi
    ;;
  *)
    kind="$host_os"
    ;;
esac

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"
      ;;
    -showconfig)
      showconfigure
      exit $status
      ;;
    -help)
      usage
      ;;
    *\"*)
      qarg="'"$arg"'"
      allargs="$allargs $qarg"
      ;;
    *\'*)
      qarg='\"'"$arg"'\"'
      allargs="$allargs $qarg"
      ;;
    *)
      allargs="$allargs $qarg"

	if [ -s "$arg" ] ; then
	    ext=`expr "$arg" : '.*\(\..*\)'`
	    if [ "$ext" = ".C" -o "$ext" = ".cxx" -o "$ext" = ".cpp" -o \
		 "$ext" = ".cc" -o "$ext" = ".c" -o "$ext" = ".CC" ] ; 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
            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 "$dash_c" = "yes" -a "$do_compile" = no -a "$do_link" = no ; then
    # -c was specified.  Force do_compile on.
    do_compile=yes
fi

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

  $SHOW $CXX -I$includedir $CPPFLAGS $CXXFLAGS $compile_args
  status=$?

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

if test "x$do_link" = "xyes"; then
  # conditionnaly link with the hl library  
    if test "X$HL" = "Xhl"; then
     link_args="$link_args ${libdir}/libhdf5_hl.a ${libdir}/libhdf5_cpp.a ${libdir}/libhdf5.a $LIBS"
    else
     link_args="$link_args ${libdir}/libhdf5_cpp.a ${libdir}/libhdf5.a $LIBS"
    fi
  $SHOW $CXXLINKER -I$includedir $CPPFLAGS $CXXFLAGS $LDFLAGS $clibpath $link_objs $link_args
  status=$?
fi

exit $status
