#!/bin/sh 
usage()
{
    cmd=`basename $0`
    echo ""
    echo " $cmd - Generates a wrapper library that can intercept "
    echo " at link time or at runtime routines specified in a header file"
    echo " Usage: $cmd <headerfile> <library>  [-w (default) | -d | -r] "
    echo " -w (default): generates wrappers for re-linking the application"
    echo " -d : generates wrappers by redefining routines during compilation in header files"
    echo " -r : generates wrappers that may be pre-loaded using tau_exec at runtime"
    echo "NOTE: $cmd reads the TAU_MAKEFILE  environment variable to get PDT settings"
    echo " Example: "
    echo " % $cmd hdf5.h /usr/lib/libhdf5.a "
    echo " generates a wrapper library that may be linked in using TAU_OPTIONS -optTauWrapFile=<wrapperdir>/link_options.tau"
    echo "" 
    exit 1
}

runtime_specified=0;
header_redirection_specified=0;
headerfile=""
library=""
modarg=""
if [ $# = 0 ] ; then
    usage
fi

if [ $# -gt 1 ]; then
  headerfile=$1
  library=$2
  shift;
  shift;
fi

for arg in "$@"; do
  case $arg in 
    -r)
      runtime_specified=1; 
      shift; 
      ;;
    -d)
      header_redirection_specified=1; 
      shift; 
      ;;
  esac
done

if [ "x$TAU_MAKEFILE" = "x" ] ;then
  echo "ERROR: Please set the TAU_MAKEFILE environment variable."
  exit 1
fi

if [ ! -r $TAU_MAKEFILE ] ;then
  echo "ERROR: environment variable TAU_MAKEFILE is set but the file is not readable"
  exit 1
fi


pdtdir=`grep PDTDIR= $TAU_MAKEFILE | sed -e 's/PDTDIR=//g' `
tauarch=`tau-config | grep TAUARCH | sed -e 's@TAUARCH=@@g' `
basedir=`tau-config | grep BASEDIR | sed -e 's@BASEDIR=@@g' `

parser=$pdtdir/$tauarch/bin/upcparse
baseheader=`basename $headerfile .h`
if [ "x$pdtdir" != "x" ]; then 
  if [ -d $pdtdir -a ! -x $parser ]; then
    echo "ERROR: Can't execute upcparse: $parser: Using PDT = $pdtdir, ARCH = $tauarch. Please upgrade to the latest PDT from http://tau.uoregon.edu/pdt.tgz"
    exit 1
  fi
  $parser $headerfile `tau_cc.sh -tau:showincludes` 
  mv $baseheader.pdb $headerfile.pdb 

  if [ $runtime_specified = 1 ] ; then
    runtimeopt='-r'
  else
    if [ $header_redirection_specified = 1 ]; then
      runtimeopt=''
    else 
      runtimeopt='-w'
    fi
  fi

  tau_wrap $headerfile.pdb $headerfile -o wr.c --upc cray $runtimeopt $library $* 
  dirname=`basename ${headerfile} .h`_wrapper

  sed -e 's/@@WRAPPER_LIBRARY@@/-lcray_upc_runtime_wrap/' $dirname/link_options.tau.master > $dirname/link_options.tau
else
  dirname=`basename ${headerfile} .h`_wrapper
fi
mkdir -p ${dirname}
cd ${dirname}
make
cd ..
mkdir -p ${basedir}/lib/wrappers/upc/cray
echo cp  ${dirname}/link_options.tau $basedir/lib/wrappers/upc/cray
cp  ${dirname}/link_options.tau $basedir/lib/wrappers/upc/cray
echo cp  ${dirname}/libcray_upc_runtime_wrap.a $basedir/lib/
cp  ${dirname}/libcray_upc_runtime_wrap.a $basedir/lib/
rm -f ${headerfile}.pdb 

