#!/bin/bash
#
# PDT Trace host setup script for hybrid application use.
#
# -----------------------------------------------------------------------------
# Licensed Materials - Property of IBM
# 5724-S84
# (C) Copyright IBM Corp. 2007,2007 All Rights Reserved
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with
# IBM Corp.
#

export PROGRAM_STRING

# ==========================================
# Process the traceh command arguments.
# ==========================================

# Note that we use '"$@"' to let each command-line parameter expand to a 
# separate word. The quotes around '$@' are essential!
# We need TEMP as the 'eval set --' would nuke the return value of getopt.

TEMP=`getopt -o hl --long help,listenv,runid: -n traceh -- "$@"`

if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi

# Note the quotes around '$TEMP': they are essential!
eval set -- "$TEMP"
while true ; do
	case "$1" in
		-h|--help) 
                     printf "%s\n"   "usage: traceh [OPTION] ... <application name> [<application arguments>]"
                     printf "%s\n"   "  NOTE 1: if application arguments contain switches (ex/ -p or --myOpt),"
                     printf "%s\n\n" "        then all the arguments must be placed in double quotes"
                     printf "%s\n"   "  OPTIONS: "
                     printf "%s\n"   "  -h, --help "
                     printf "%s\n"   "  -l, --listenv    Prints out trace environment variable informantion "
                     printf "%s\n"   "      --runid      Specifies a prefix to be prepended to the base trace"
                     printf "%s\n"   "                    directory associated with the trace of this application."
                     printf "%s\n"   "                    Default is a date/time based directory name."
                     printf "%s\n"   "                    Note that this is used to coordinate PDTR analysis."
                exit 0 ;;
		-l|--listenv) 
                     export SCRIPT_DEBUG=true
                     shift 1 ;;
		--runid) 
                     export PDT_TRACE_OUTPUT_PREFIX=$2 ;
                     shift 2 ;;
		--) shift ; break ;;
		*) echo "Internal error!" ; exit 1 ;;
	esac
done


for arg do 
  PROGRAM_STRING="$PROGRAM_STRING $arg"
done

# ==========================================
# Application Environment Variables

# Trace setup
if [ ! "$SDK_PROTOTYPE_ROOT" ] ; then
  export SDK_PROTOTYPE_ROOT=/opt/cell/sdk/prototype
fi
if [ ! "$HYBRID_PERF_TOOLS_DIR" ] ; then
  export HYBRID_PERF_TOOLS_DIR=$SDK_PROTOTYPE_ROOT/usr/bin
fi
source $HYBRID_PERF_TOOLS_DIR/perfToolHostSetup

# Set up the trace output file location
declare TIMESTAMP=`date +%Y%m%d%H%M%S`
if [ "$PDT_TRACE_OUTPUT_PREFIX" ] ; then
  export "PDT_TRACE_OUTPUT=$PERF_DATA_DIR/trace/${PDT_TRACE_OUTPUT_PREFIX}"
else
  export PDT_TRACE_OUTPUT=$PERF_DATA_DIR/trace/$TIMESTAMP
fi

rm -rf $PDT_TRACE_OUTPUT
mkdir -p $PDT_TRACE_OUTPUT  

# Export Accelerator Environment Variables

if [ "$LD_LIBRARY_PATH" ] ; then
  export LD_LIBRARY_PATH=$SDK_ROOT/usr/lib64/trace:$SDK_PROTOTYPE_ROOT/usr/lib64/trace:$LD_LIBRARY_PATH
else
  export LD_LIBRARY_PATH=$SDK_ROOT/usr/lib64/trace:$SDK_PROTOTYPE_ROOT/usr/lib64/trace
fi
export LD_LIBRARY_PATH=$SDK_PROTOTYPE_ROOT/usr/lib64/dacs/trace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$SDK_PROTOTYPE_ROOT/usr/lib64/alf/trace:$LD_LIBRARY_PATH

if [ "$ACCEL_LD_LIBRARY_PATH64" ] ; then
  export ACCEL_LD_LIBRARY_PATH64=$SDK_ROOT/usr/lib64/trace:$SDK_PROTOTYPE_ROOT/usr/lib64/trace:$ACCEL_LD_LIBRARY_PATH64
else
  export ACCEL_LD_LIBRARY_PATH64=$SDK_ROOT/usr/lib64/trace:$SDK_PROTOTYPE_ROOT/usr/lib64/trace
  export DACS_START_ENV_LIST="$DACS_START_ENV_LIST;ACCEL_LD_LIBRARY_PATH64"
fi
export ACCEL_LD_LIBRARY_PATH64=$SDK_ROOT/usr/lib64/dacs/trace:$ACCEL_LD_LIBRARY_PATH64
export ACCEL_LD_LIBRARY_PATH64=$SDK_ROOT/usr/lib64/alf/trace:$ACCEL_LD_LIBRARY_PATH64
export ACCEL_LD_LIBRARY_PATH64=$SDK_PROTOTYPE_ROOT/usr/lib64/dacs/trace:$ACCEL_LD_LIBRARY_PATH64
export ACCEL_LD_LIBRARY_PATH64=$SDK_PROTOTYPE_ROOT/usr/lib64/alf/trace:$ACCEL_LD_LIBRARY_PATH64

if [ "$OPT_OPTIONS" ] ; then
  export DACS_START_ENV_LIST="$DACS_START_ENV_LIST;OPT_OPTIONS"
fi
if [ "$PDT_TRACE_OUTPUT" ] ; then
  export DACS_START_ENV_LIST="$DACS_START_ENV_LIST;PDT_TRACE_OUTPUT"
fi
if [ "$SDK_ROOT" ] ; then
  export DACS_START_ENV_LIST="$DACS_START_ENV_LIST;SDK_ROOT"
fi

export DACS_START_PARENT="$HYBRID_PERF_TOOLS_DIR/tracea %e %a"

if [ ! "$PROGRAM_STRING" ] ; then
  printf "$SCRIPT: Error - no program name specified.\n"
  exit 22
fi

export PDT_OUTPUT_PREFIX=`hostname`_

if [ "$SCRIPT_DEBUG" ] ; then
  echo
  echo "****** traceh debug *******"
  echo "SDK_ROOT=$SDK_ROOT"
  echo "SDK_PROTOTYPE_ROOT=$SDK_PROTOTYPE_ROOT"
  echo "PROGRAM_STRING=$PROGRAM_STRING"
  echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
  echo "ACCEL_LD_LIBRARY_PATH64=$ACCEL_LD_LIBRARY_PATH64"
  echo "DACS_START_PARENT=$DACS_START_PARENT"
  echo "DACS_START_ENV_LIST=$DACS_START_ENV_LIST"
  echo "PDT_CONFIG_FILE=$PDT_CONFIG_FILE"
  echo "PDT_TRACE_OUTPUT=$PDT_TRACE_OUTPUT"
  echo "****** traceh debug end *******"
fi

exec $PROGRAM_STRING

if [ "$result != 0" ] ; then
  echo "return code from $PROGRAM_STRING = $result"
fi

exit $result

