#!/bin/sh
#****************************************************************************
#*			TAU Portable Profiling Package			   **
#*			http://www.cs.uoregon.edu/research/tau	           **
#****************************************************************************
#*    Copyright 1997-2009						   **
#*    Department of Computer and Information Science, University of Oregon **
#*    Advanced Computing Laboratory, Los Alamos National Laboratory        **
#*    Research Center Juelich, ZAM Germany                                 **
#****************************************************************************
#*
#*  Permission to use, copy, modify, and distribute this software and its
#*  documentation for any purpose and without fee is hereby granted,
#*  provided that the above copyright notice appear in all copies and that
#*  both that copyright notice and this permission notice appear in
#*  supporting documentation, and that the name of University of Oregon (UO)
#*  and Los Alamos National Laboratory (LANL) not be
#*  used in advertising or publicity pertaining to distribution of
#*  the software without specific, written prior permission.  The
#*  University of Oregon and LANL makes no representations about the
#*  suitability of this software for any purpose.  It is provided "as is"
#*  without express or implied warranty.
#*
#*  THE UNIVERSITY OF OREGON AND LANL DISCLAIMS ALL WARRANTIES WITH REGARD TO
#*  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
#*  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF OREGON OR LANL BE LIABLE FOR
#*  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
#*  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
#*  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
#*  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#****************************************************************************

cwd=`pwd`

download()
{
  src="$1"
  dst="$2"
  local="$cwd/external_dependencies/$dst"
  echo "Looking for $local..."
  if [ -e $local ] ; then
    echo "Found $local, using it."
    cp $local $dst
  elif which wget >/dev/null 2>&1 ; then
    echo "wget: $src ==> $dst"
    wget --no-check-certificate -O "$dst" "$src"
  elif which curl >/dev/null 2>&1 ; then
    echo "curl: $src ==> $dst"
    curl -L "$src" > "$dst"
  else
    echo "ERROR: neither curl nor wget found in your path."
    exit 199
  fi
}

clone()
{
  src="$1"
  dst="$2"
  echo "git clone $src" "$dst"
  git clone "$src" "$dst"
}

# Install SOS dependencies such as EVPath
installsosdeps()
{
 installdir="$1"
 mkdir $installdir
 cd $installdir
 P=`pwd`

 #check if CMake exists
 cmake_major_version=`cmake --version | head -1 |  sed "s/[^0-9.]*\([0-9.]*\).*/\1/" | cut -d. -f1`
 cmake_cmd=`which cmake`

 #echo "CMAKE VERSION: $cmake_major_version"
 #echo "WHICH CMAKE: $cmake_which"

 if [ "x$cmake_cmd" = "x" ] || [ $cmake_major_version -lt 3 ] ; then
   echo 'ERROR: cmake version 3 or higher required to build SOS dependencies, exiting.'
   exit 1;
 fi

 echo "Install SOS deps"
 mkdir chaos
 cd chaos
 currdir=`pwd`

 echo "Install Sqlite3"
 mkdir sqlite3
 wget https://www.sqlite.org/2017/sqlite-autoconf-3210000.tar.gz
 tar -xvzf sqlite-autoconf-3210000.tar.gz
 cd sqlite-autoconf-3210000
 ./configure --prefix=$currdir/sqlite3
 make
 make install
 cd ..

 wget http://www.cc.gatech.edu/systems/projects/EVPath/chaos_bootstrap.pl
 #export FLEXPATH_DIR=$currdir/inst
 perl ./chaos_bootstrap.pl adios-1.13 $currdir/inst
 #perl ./chaos_build.pl
 mkdir build_area
 cd build_area 

 echo "Download SOS dependencies: $2 $3"
 download "$2" "$3" 
 echo "Extract SOS dependencies: $3"
 tar -xvf "$3"
 rm -f "$3"

 set -x
 #Install dill
 cd dill/source
 cmake  -DENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$currdir/inst $currdir/build_area/dill/source
 make all install
 cd ../..

 #Install cercs_env
 cd cercs_env/source
 cmake  -DENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$currdir/inst $currdir/build_area/cercs_env/source
 make all install
 cd ../..

 #Install atl
 cd atl/source
 cmake  -DENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$currdir/inst $currdir/build_area/atl/source
 make all install
 cd ../..

 #Install ffs
 cd ffs/source
 cmake  -DENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$currdir/inst $currdir/build_area/ffs/source
 make all install
 cd ../..

 #Install enet
 cd enet/source
 $currdir/build_area/enet/source/configure  CFLAGS='-g -O0' CPPFLAGS='-g -O0' --prefix=$currdir/inst
 make install
 cd ../..

 #Install evpath
 cd evpath/source
 cmake  -DENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$currdir/inst $currdir/build_area/evpath/source
 make all install
 cd ../../..

 # set path to Flexpath/EVPath (see above)
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${FLEXPATH_DIR}/lib/pkgconfig

 # Copy EVPath cmake file to its inst directory
 cd inst/lib/cmake/EVPath
 cp EVPathConfig.cmake ../../../
 cp EVPathTargets.cmake ../../../
 cd ../../../.. 

 echo "Install libfabric"
 git clone https://github.com/ofiwg/libfabric.git
 cd libfabric
 ./autogen.sh
 currdir=`pwd`
 ./configure --prefix=$currdir/inst
 make install
 cd inst/lib
 cp libfabric.* ../../../inst/lib
 cd ../../../..

 set +x

}

# Install SOS 
installsos()
{
 echo "installsos - current dir: `pwd`"
 #src="$1"
 dst="$1"
 #cd ../..
 #cd $dst
 currdir=`pwd`

 # Check if SQLITE3 is available 
 sqlite3_cmd=`which sqlite3`

 if [ "x$sqlite3_cmd" = "x" ] ; then
   echo 'ERROR: SQLITE3 required to build SOS, exiting.'
   exit 1;
 fi

 cd $dst
 #git checkout merge_of_doom
 mkdir build-linux
 cd build-linux

 export sosdir=$currdir/$dst/inst
 echo "EVPath Inst dir: $targetdir/$architecture/sos/chaos/inst"

 cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$currdir/$dst/inst -DEVPath_DIR=$targetdir/$architecture/sos/chaos/inst -DSQLite3_DIR=$targetdir/$architecture/sos/chaos/sqlite3 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DSOS_CLOUD_SYNC_WITH_EVPATH=TRUE ..
 
 make ; make install
}


fix_tilde_at_the_start_of_cube_path()
{
    cubedir=`echo $cubedir | sed -e "s,^~,$HOME,"g`
}

restore_perfdmf_and_paraprof()
{
    restore_paraprof
    restore_perfdmf
}


correction_perfdmf_and_paraprof()
{
    correction_paraprof
    correction_perfdmf
}



copy_own_cube_reader_if_selected()
{
    if test "x$cubedir" = "xown"; then
	confirmation_copy_of_own_jar_file
    fi
}

save_configure_env()
{
  # assuming configure is called from same directory
  # tau's configure doesn't work anyway from another directory
  _tauroot="."
  confenvdir="$_tauroot/.configure_env"

  md5sum="`which md5sum 2>/dev/null || which md5 2>/dev/null`"
  if [ "x$md5sum" == "x" ] ; then
    echo "Warning: can't find md5sum or md5."
    return
  fi
  argsum=`echo "$all_args" | $md5sum | awk '{print $1}'`

  mkdir -p "$confenvdir"
  confenvfile="$confenvdir/$argsum"
  set > "$confenvfile"
  fixmakeargs="$fixmakeargs confenvfile=$confenvfile"
}


select_cube_reader_jar()
{
    if test "x$cubedir" != "xown"; then

	check_another_cube_installation
	check_cube_installation

	#at that point cubedir is either correct or empty
	if test "x$cubedir" = "x"; then
	    warning_about_missing_cube_installation
	fi

    else
	# select the own classpath
	cubeclasspath='${TAUROOT}/${MACHINE}/lib/CubeReader.jar'
	makecubeclasspath="../contrib/CubeReader.jar"
    fi
    return 0
}


check_another_cube_installation()
{
    # check if CUBE in PATH
    testline=`cube_config.sh --name 2>&1`
    another_cube_present="no"
    if test "x$testline" = "xCUBE"; then
	another_cube_present="yes"
	another_cube_dir=`cube_config.sh --cube-dir`
	if test "x$another_cube_dir" != "x$cubedir"; then
	    warning_about_another_cube_installation $another_cube_dir
	    return 1
	fi
    fi

    # check if CUBE is not in PATH , but CUBE_DIR is set
    if test "x$CUBE_DIR" != "x"; then
	testline=`$CUBE_DIR/bin/cube_config.sh --name 2>&1`
	another_cube_present="no"
	if test "x$testline" = "xCUBE"; then
	    another_cube_present="yes"
	    another_cube_dir=`$CUBE_DIR/bin/cube_config.sh --cube-dir`
	    if test "x$another_cube_dir" != "x$cubedir"; then
		warning_about_another_cube_installation $another_cube_dir
		return 1
	    fi
	fi
    fi
    return 0
}


check_cube_installation()
{

    # check if cubedir points to CUBE
    if test "x$cubedir" != "x"; then
	if test "x$cubedir" = "xext"; then
	    if test "x$another_cube_dir" = "x"; then
		warning_about_general_missing_cube_installation
	    else
		cubedir=$another_cube_dir
	    fi
	fi

	fix_tilde_at_the_start_of_cube_path

	testline=`$cubedir/bin/cube_config.sh --name 2>&1`
	cuberoot=$cubedir
	#in the case one spezified /lib/directory of CUBE installation
	if test "x$testline" != "xCUBE"; then
	    testline=`$cubedir/../bin/cube_config.sh --name 2>&1`
	    cuberoot=$cubedir/../
	fi
	if test "x$testline" = "xCUBE"; then
	    #check if the cube installation was done with java reader
	    cubeclasspath=`$cuberoot/bin/cube_config.sh --classpath`
	    makecubeclasspath=$cubeclasspath
	    if [ "x$cubeclasspath" != "x" -a  -f $cuberoot/lib/CubeReader.jar ] ; then
		confirm_proper_cube_installation $cuberoot
	    fi
	else
	    warning_about_missing_cube_installation $cubedir
	fi
    fi
    return 0
}



correction_paraprof()
{
    # assuming configure is called from same directory
    # tau's configure doesn't work anyway from another directory

    cd ${tauroot}

    _tauroot="."
    echo "Adjust ParaProf to use CubeReader..."
    cat    ${_tauroot}/tools/src/paraprof/bin/paraprof.skel |
    sed -e 's,@CUBECLASSPATH@,'$cubeclasspath','  >   ${_tauroot}/tools/src/paraprof/bin/paraprof.new
    mv   ${_tauroot}/tools/src/paraprof/bin/paraprof.new   ${_tauroot}/tools/src/paraprof/bin/paraprof.skel

    cat   ${_tauroot}/tools/src/paraprof/Makefile |
    sed -e 's,@CUBECLASSPATH@,'$makecubeclasspath','  >  ${_tauroot}/tools/src/paraprof/Makefile.new
    mv ${_tauroot}/tools/src/paraprof/Makefile.new  ${_tauroot}/tools/src/paraprof/Makefile


}

correction_perfdmf()
{
    echo "Adjust PerfDmf to use CubeReader..."
    cat  ${_tauroot}/tools/src/perfdmf/Makefile.skel |
    sed -e 's,@CUBECLASSPATH@,'$makecubeclasspath','  >${_tauroot}/tools/src/perfdmf/Makefile.new
    mv ${_tauroot}/tools/src/perfdmf/Makefile.new ${_tauroot}/tools/src/perfdmf/Makefile
}



restore_paraprof()
{
    # assuming configure is called from same directory
    # tau's configure doesn't work anyway from another directory
    _tauroot="."
    echo "Unset ParaProf's cubeclasspath..."
    cat   ${_tauroot}/tools/src/paraprof/bin/paraprof.skel |
    sed -e 's,^CUBE_JAVA_READER=.*$,CUBE_JAVA_READER=@CUBECLASSPATH@,'  >  ${_tauroot}/tools/src/paraprof/bin/paraprof.new
    mv  ${_tauroot}/tools/src/paraprof/bin/paraprof.new  ${_tauroot}/tools/src/paraprof/bin/paraprof.skel

    cat  ${_tauroot}/tools/src/paraprof/Makefile |
    sed -e 's,^CUBE_JAVA_READER=.*$,CUBE_JAVA_READER=@CUBECLASSPATH@,'  > ${_tauroot}/tools/src/paraprof/Makefile.new
    mv ${_tauroot}/tools/src/paraprof/Makefile.new ${_tauroot}/tools/src/paraprof/Makefile


}

restore_perfdmf()
{
    # assuming configure is called from same directory
    # tau's configure doesn't work anyway from another directory
    _tauroot="."
    _tauroot="."
    echo "Unset Perfdmf cubeclasspath..."
    cat  ${_tauroot}/tools/src/perfdmf/Makefile |
    sed -e 's,^CUBE_JAVA_READER=.*$,CUBE_JAVA_READER=@CUBECLASSPATH@,'  > ${_tauroot}/tools/src/perfdmf/Makefile.new
    cp ${_tauroot}/tools/src/perfdmf/Makefile.new ${_tauroot}/tools/src/perfdmf/Makefile
}




confirmation_copy_of_own_jar_file()
{
    echo "===================================================="
    if [ -f ${tauroot}/tools/src/contrib/CubeReader.jar ]  ; then
	echo " Copy ${tauroot}/tools/src/contrib/CubeReader.jar to $JARTARGET"
	cp ${tauroot}/tools/src/contrib/CubeReader.jar $JARTARGET
    else
	echo "ERROR: Tau doesn't have own copy of CubeReader.jar under ${tauroot}/tools/src/contrib/"
	echo "       Please check the recent TAU distribution and report this bug to tau-bugs@cs.uoregon.edu"
	exit -1
    fi
    echo "===================================================="
    return 0

}



warning_about_another_cube_installation()
{
    echo "===================================================="
    echo "WARNING: CUBE is detected under $1"
    echo "===================================================="
    return 0
}


confirm_proper_cube_installation()
{
    echo "===================================================="
    echo "CUBE Reader is found under $1/lib."
    echo "CLASSPATH of it is $cubeclasspath"
    echo "===================================================="
    return 0
}

warning_about_missing_cube_installation()
{
    echo "===================================================="
    echo "ERROR: Cannot find CUBE installation under $1"
    echo "       Please check your option -cube=$cubedir"
    echo "Abort."
    echo "===================================================="
    exit -1
}

warning_about_general_missing_cube_installation()
{
    echo "===================================================="
    echo "ERROR: Cannot find CUBE installation."
    echo "       Please specify precise place of CUBE using option -cube=$cubedir"
    echo "Abort."
    echo "===================================================="
    exit -1
}




default=false

for arg in "$@"; do
    case $arg in
	default)
	    default=true
	    ;;
	-help)
	    echo "TAU Configuration Utility "
	    echo "***********************************************************************"
	    echo "Usage: configure [OPTIONS]"
	    echo "  where [OPTIONS] are:"
	    echo ""
	    echo "Compiler Options:"
	    echo "-c++=<compiler>  ............................ specify the C++ compiler."
	    echo "    options [CC|KCC|g++|*xlC*|cxx|pgc++|pgcpp|FCC|guidec++|aCC|c++|ecpc|"
	    echo "    armclang++|clang++|bgclang++|g++4|g++-*|icpc|scgcc|scpathCC|pathCC|orCC]."
	    echo "-cc=<compiler> ................................ specify the C compiler."
	    echo "     options [cc|gcc|clang|bgclang|gcc4|scgcc|KCC|pgcc|guidec|*xlc*|ecc|"
            echo "         armclang|pathcc|orcc]."
	    echo "-fortran=<compiler> ..................... specify the Fortran compiler."
	    echo "   options    [gnu|sgi|ibm|ibm64|hp|cray|pgi|absoft|fujitsu|sun|compaq|"
	    echo "   armflang|g95|open64|kai|nec|hitachi|intel|absoft|lahey|nagware|pathscale}"
	    echo "       gfortran|gfortran-*|gfortran4]"
	    echo "-upc=<compiler> ............................. specify the UPC compiler."
	    echo "     options [upc|gcc(GNU UPC) |upcc (Berkeley UPC) | cc (Cray CCE UPC)"
	    echo "-host=<host-type> ................ the type of system on which TAU runs"
	    echo "-host_sysroot=<path> ............................ host compiler sysroot"
	    echo "-hostutils..............................build TAU utils for <host-type>"
	    echo "-pdt=<dir> ........ Specify location of PDT (Program Database Toolkit)."
	    echo "-pdt_c++=<compiler>  ............ specify a different PDT C++ compiler."
	    echo "    options [CC|KCC|g++|*xlC*|cxx|pgc++|pgcpp|FCC|guidec++|aCC|c++|ecpc|"
	    echo "                                     g++-*|g++4|icpc|scgcc|pathCC|orCC]."
	    echo "-useropt='<param>' .......... arguments to compilers (defaults to -O2)."
	    echo ""
	    echo "Installation Options:"
	    echo "-prefix=<dir> ................ Specify a target installation directory."
	    echo "-exec-prefix=<arch> .......... Specify a target architecture directory."
	    echo "-arch=<architecture> ................... Specify a target architecture."
	    echo "       options      [xt3|craycnl|bgp|bgq|bgl|ibm64|ibm64linux|sunx86_64"
	    echo "           nec-sx-aurora|crayxmt|solaris2-64|mips32|sgin32|sgi64|sgio32"
	    echo "                                                 arm_linux|arm_android]"
	    echo "-bfd=<dir | download> ....... Specify a binutils directory or download."
	    echo "    Note: 'download' will download and build the library automatically."
	    echo "-unwind=<dir | download> ... Specify a libunwind directory or download."
	    echo "    Note: 'download' will download and build the library automatically."
	    echo ""
	    echo "-pin=<dir> ..... Specify location of Intel PIN instrumentation toolkit."
	    echo "MPI Options:"
	    echo "-mpi .......................... Specify use of TAU MPI wrapper library."
	    echo "-mpiinc=<dir> ............. Specify location of MPI include dir and use"
	    echo "                           the TAU MPI Profiling and Tracing Interface."
	    echo "-mpilib=<dir> ............. Specify location of MPI library dir and use"
	    echo "                           the TAU MPI Profiling and Tracing Interface."
	    echo "-mpilibrary=<library> ................ Specify a different MPI library."
	    echo "            e.g., -mpilibrary=-lmpi_r                                  "
	    echo ""
	    echo "OpenMP Options:"
	    echo "-openmp ........................................... Use OpenMP threads."
	    echo "-opari .................................................... Use Opari2."
	    echo "-opari1 .................................................... Use Opari."
	    echo "-opari_region ........ Only report performance data for OpenMP regions."
	    echo "-opari_construct .. Only report performance data for OpenMP constructs."
	    echo "-oparicomp=<compiler>...Specify which compiler sutie to compile Opari2."
	    echo "     options [gcc|ibm|intel|pathscale|pgi|studio]."
	    echo "-ompt=<dir | download | download-tr4 (default) | download-tr6 > ...... " 
            echo "    Specify a libiomp5 directory or download."
	    echo "    Note: 'download' will download and build the library automatically."
	    echo "    Note: 'download' only supports the LLVM/Intel OpenMP runtime."
	    echo ""
	    echo "SHMEM Options:"
	    echo "-shmem[=pshmem]............... Specify use of TAU SHMEM wrapper library."
	    echo "-shmeminc=<dir> ......... Specify location of SHMEM include dir and use"
	    echo "                         the TAU SHMEM Profiling and Tracing Interface."
	    echo "-shmemlib=<dir> ......... Specify location of SHMEM library dir and use"
	    echo "                           the TAU MPI Profiling and Tracing Interface."
	    echo "-shmemlibrary=<library> ............ Specify a different SHMEM library."
	    echo "            e.g., -shmemlibrary=-lsmac                                 "
	    echo ""
	    echo "-gpi=<dir> .................. Specify use of TAU's GPI wrapper library."
	    echo "GPGPU Options:"
	    echo "-cuda=<dir> ................ Specify location of the top level CUDA SDK"
	    echo "directory with include subdirectory. Enables OpenCL and CUDA profiling."
	    echo ""
	    echo "Other Options:"
	    echo "-iowrapper .................................... Build POSIX IO Wrapper."
	    echo "-dmapp ...................................... Build Cray DMAPP Wrapper."
	    echo "-pthread .................................. Use pthread thread package."
	    echo "-papithread .................................. Use PAPI thread package."
	    echo "-papi=<dir> ............... Specify location of PAPI (Performance API)."
	    echo "-likwid=<dir> ............................. Specify location of LIKWID."
	    echo "-beacon=<dir> ............... Specify location of BEACON."
	    echo "-jdk=<dir>  Build a library for profiling Java code with specified jdk."
	    echo "-android_sdk=<dir> ................ Android SDK used for APK injection."
	    echo "-android_version=VERSION ................. Android version, e.g. '4.4'."
	    echo "-android_platform=VERSION ........ Android platform version, e.g. '19'."
	    echo "-asmdex=<dir | download> ...... Specify a asmdex directory or download."
	    echo "-cube=<dir> | own | ext..... Specify location of CUBE or use TAU's jar."
	    echo "-vtf=<dir> ......... Specify location of VTF3 Trace Generation Package."
	    echo "-otf=<dir> ....... Specify location of Open Trace Format (OTF) Package."
	    echo "-otfinc=<dir> ....... Specify location of stand-alone OTF header files."
	    echo "-otflib=<dir> ...... Specify location of stand-alone OTF library files."
	    echo "-darshan=<dir> ............... Specify location of Darshan I/O package."
	    echo "-ebs2otf ............... Enable conversion of EBS traces to OTF format."
	    echo "-nocomm  ........ Disable tracking communication events in MPI library."
	    echo "-hpctoolkit-src-dir=<dir> .......... Specify patched HPCToolkit source."
	    echo "-hpctoolkit-install-dir=<dir> . Specify patched HPCToolkit Install dir."
	    echo "-scalasca=<dir>  ................ Specify location of SCALASCA package."
	    echo "-epilog=<dir>  ............ Specify location of EPILOG Tracing package."
	    echo "-epiloglib=<dir> ........... Specify full path to EPILOG lib directory."
	    echo "-epilogbin=<dir> ........... Specify full path to EPILOG bin directory."
	    echo "-epiloginc=<dir> ....... Specify full path to EPILOG include directory."
	    echo "-vampirtrace=<dir>  .. Specify location of VampirTrace Tracing package."
	    #    echo "-mon-mpi ..... Specify MPI as TAU monitoring transport layer.          "
	    #    echo "-mon-mrnet=<dir> .. Specify location to MRNet package as TAU monitoring"
	    #    echo "                    transport layer (ToM).                             "
	    #    echo "-mon-mrnet-lib=<dir> ............... Specify full path to MRNet library"
	    #    echo "                                     installation.                     "
	    #    echo "-mon-mrnet-use-lightweight ..... Instructs ToM to use MRNet lightweight"
	    #    echo "                                 interface.                            "
        echo "-scorep=<dir>  .................... Specify location of SCOREP package."
        echo "-python .. Automatically choose python options based on Python in path."
        echo "-pythoninc=<dir> ........ Specify location of Python include directory."
        echo "-pythonlib=<dir> ............ Specify location of Python lib directory."
        echo "-tag=<unique name> ........ Specify a tag to identify the installation."
#    echo "-TRACE ..................................... Generate TAU event traces."
#    echo "-MPITRACE ... Generate event traces for MPI events and their ancestors."
#    echo "-PROFILE ............ Generate profiles (summary statistics) (default)."
#    echo "-PROFILECALLPATH ......................... Generate call path profiles."
        echo "-mpit ............................... Enable MPI-T profiling interface."
        echo "-PROFILEPARAM .... Generate profiles with parameter mapped event data ."
        echo "-PROFILECOMMUNICATORS ... Generate profiles with MPI communicator info."
        echo "-PROFILEPHASE .......................... Generate phase based profiles."
#    echo "-DEPTHLIMIT ........... Disable instrumentation beyond a certain depth."
#    echo "-PROFILEMEMORY .. Track heap memory utilization at each function entry."
#    echo "-PROFILEHEADROOM .. Track memory free (or headroom) at each func entry."
#    echo "-COMPENSATE ........ Compensate for profiling measurement perturbation."
        echo "-BGLTIMERS .... Use fast low-overhead timers on IBM BlueGene/L systems."
        echo "-BGPTIMERS .... Use fast low-overhead timers on IBM BlueGene/P systems."
        echo "-BGQTIMERS .... Use fast low-overhead timers on IBM BlueGene/Q systems."
        echo "-SGITIMERS .......... Use fast nanosecond timers on SGI R10000 systems."
        echo "-CRAYTIMERS ............ Use fast nanosecond timers on Cray X1 systems."
        echo "-LINUXTIMERS ......... Use low overhead TSC Counter for wallclock time."
        echo "-CPUTIME .......... Use usertime+system time instead of wallclock time."
        echo "-PAPIWALLCLOCK ........ Use PAPI to access wallclock time. Needs -papi."
        echo "-PAPIVIRTUAL   .......... Use PAPI for virtual (user) time calculation."
        echo "-INTELCXXLIBICC   ......... Use Intel -cxxlib-icc option for compiling."
        echo "-noex .................. Use no exceptions while compiling the library."
	echo "-noplugins ...................... Do not build support for TAU plugins."
        echo "-nolm ................. On Ubuntu, do not add -lm while linking in TAU."
        echo "-DISABLE_MEMORY_MANAGER ..................... Disable TAU heap manager."
        echo "                       (Note: also disables sampling, marker tracking)."
        echo "-DISABLESHARED .................. Do not build libTAU.so shared object."
        echo "-PMI ...................... Enable Cray PMI for tracking topology info."
        echo "-ENABLE_EXPORT_DYNAMIC .................... Force -Wl,--export-dynamic."
        echo "-help ...................................... display this help message."
        echo "-fullhelp .............................. display the full help message."
        echo ""
        echo "More advanced options are available, use -fullhelp to see them."
        exit
        ;;

        -fullhelp)
        echo "TAU Configuration Utility "
        echo "***********************************************************************"
        echo "Usage: configure [OPTIONS]"
        echo "  where [OPTIONS] are:"
        echo "-c++=<compiler>  ............................ specify the C++ compiler."
        echo "    options [CC|KCC|g++|*xlC*|cxx|pgc++|pgcpp|FCC|guidec++|aCC|c++|ecpc|"
        echo "       armclang++|clang++|bgclang++|g++4|icpc|scgcc|scpathCC|pathCC|orCC]."
        echo "-cc=<compiler> ................................ specify the C compiler."
        echo "   options [cc|gcc|gcc4|scgcc|clang|pgcc|guidec|*xlc*|ecc|pathcc|orcc|armclang]."
        echo "-fortran=<compiler> ..................... specify the Fortran compiler."
        echo "   options    [gnu|sgi|ibm|ibm64|hp|cray|pgi|absoft|fujitsu|sun|compaq|"
        echo "   g95|open64|kai|nec|hitachi|intel|absoft|lahey|nag|nagware|pathscale}"  
        echo "   armflang|gfortran|gfortran-*|gfortran4]"
        echo "-upc=<compiler> ............................. specify the UPC compiler."
        echo "     options [upc|gcc(GNU UPC) |upcc (Berkeley UPC) | cc (Cray CCE UPC)"
        echo "-host=<host-type> ................ the type of system on which TAU runs"
        echo "                                     this is used for cross-compilation"
        echo "-host_sysroot=<path> ............................ host compiler sysroot"
        echo "-hostutils..............................build TAU utils for <host-type>"
        echo "                                     this is used for cross-compilation"
        echo "-pdt=<dir> ........ Specify location of PDT (Program Database Toolkit)."
        echo "-pdt_c++=<compiler>  ............ specify a different PDT C++ compiler."
        echo "    options [CC|KCC|g++|*xlC*|cxx|pgc++|pgcpp|FCC|guidec++|aCC|c++|ecpc|"
        echo "                        clang++|bgclang++|g++4|icpc|scgcc|pathCC|orCC]."
        echo "-pdtcompdir=<compilerdir> . specify a different PDT compiler directory."
        echo "-pdtarchdir=<archdir> . specify a different PDT architecture directory."
        echo "-useropt='<param>' .......... arguments to compilers (defaults to -O2)."
        echo "-extrashlibopts='<parameters>' ...... arguments for building libTAU.so."
        echo "-prefix=<dir> ................ Specify a target installation directory."
        echo "-exec-prefix=<arch> .......... Specify a target architecture directory."
        echo "-arch=<architecture> ................... Specify a target architecture."
        echo "       options      [xt3|craycnl|bgp|bgq|bgl|ibm64|ibm64linux|sunx86_64"
	echo "           nec-sx-aurora|crayxmt|solaris2-64|mips32|sgin32|sgi64|sgio32"
        echo "                                                 arm_linux|arm_android]"
        echo "-iowrapper .................................... Build POSIX IO Wrapper."
        echo "-pthread .................................. Use pthread thread package."
        echo "-papithread .................................. Use PAPI thread package."
        echo "-charm=<dir> .............................. Use charm++ thread package."
        echo "-sproc .................................. Use SGI sproc thread package."
        echo "-openmp ........................................... Use OpenMP threads."
        echo "-opari .................................................... Use Opari2."
        echo "-opari1 .................................................... Use Opari."
        echo "-opari_region .........Only report performance data for OpenMP regions."
        echo "-opari_construct .. Only report performance data for OpenMP constructs."
        echo "-oparicomp=<compiler>...Specify which compiler sutie to compile Opari2."
        echo "     options [gcc|ibm|intel|pathscale|pgi|studio]."
        echo "-ompt=<dir | download | download-tr4 (default) | download-tr6 > ...... "
        echo "    Specify a libiomp5 directory or download."
        echo "    Note: 'download' will download and build the library automatically."
        echo "    Note: 'download' only supports the LLVM/Intel OpenMP runtime."
        echo "-papi=<dir> ............... Specify location of PAPI (Performance API)."
	echo "-likwid=<dir> ............................. Specify location of LIKWID."
        echo "-beacon=<dir> ............... Specify location of BEACON."
        echo "-pdt=<dir> ........ Specify location of PDT (Program Database Toolkit)."
	echo "-pin=<dir> ..... Specify location of Intel PIN instrumentation toolkit."
        echo "-jdk=<dir>  Build a library for profiling Java code with specified jdk."
        echo "-android_sdk=<dir> ................ Android SDK used for APK injection."
        echo "-android_version=VERSION ................. Android version, e.g. '4.4'."
        echo "-android_platform=VERSION ........ Android platform version, e.g. '19'."
        echo "-asmdex=<dir | download> ...... Specify a asmdex directory or download."
        echo "-boost=<dir> ....................... Specify location of Boost Package."
        echo "-apex ......................................... Build the APEX package."
        echo "-dyninst=<dir> ................... Specify location of DynInst Package."
        echo "-dyninstinc=<dir> ............ Specify location of DynInst include dir."
        echo "-dyninstlib=<dir> ................ Specify location of DynInst lib dir."
        echo "-dwarf=<dir> ................ Specify location of the libdwarf Package."
        echo "-dwarflib=<dir> ... Specify location of the libdwarf library directory."
        echo "-bfd=<dir | download> ....... Specify a binutils directory or download."
        echo "    Note: 'download' will download and build the library automatically."
        echo "-unwind=<dir | download> ... Specify a libunwind directory or download."
        echo "    Note: 'download' will download and build the library automatically."
        echo "-cube=<dir> | own.| ext..... Specify location of CUBE or use TAU's jar."
        echo "-vtf=<dir> ......... Specify location of VTF3 Trace Generation Package."
        echo "-otf=<dir> ....... Specify location of Open Trace Format (OTF) Package."
        echo "-otfinc=<dir> ....... Specify location of stand-alone OTF header files."
        echo "-otflib=<dir> ...... Specify location of stand-alone OTF library files."
        echo "-ebs2otf ............... Enable conversion of EBS traces to OTF format."
        echo "-mpi .......................... Specify use of TAU MPI wrapper library."
        echo "-mpiinc=<dir> ............. Specify location of MPI include dir and use"
        echo "                           the TAU MPI Profiling and Tracing Interface."
        echo "-mpilib=<dir> ............. Specify location of MPI library dir and use"
        echo "                           the TAU MPI Profiling and Tracing Interface."
        echo "-mpilibrary=<library> ................ Specify a different MPI library."
        echo "            e.g., -mpilibrary=-lmpi_r                                  "
        echo "-shmem[=pshmem].............. Specify use of TAU SHMEM wrapper library."
        echo "-shmeminc=<dir> ......... Specify location of SHMEM include dir and use"
        echo "                         the TAU SHMEM Profiling and Tracing Interface."
        echo "-shmemlib=<dir> ......... Specify location of SHMEM library dir and use"
        echo "                           the TAU MPI Profiling and Tracing Interface."
        echo "-shmemlibrary=<library> ............ Specify a different SHMEM library."
        echo "            e.g., -shmemlibrary=-lsmac                                 "
        echo "-nocomm  ........ Disable tracking communication events in MPI library."
        echo "-cuda=<dir> ................ Specify location of the top level CUDA SDK"
        echo "directory with include subdirectory. Enables OpenCL and CUDA profiling."
        echo "-cudalibrary=<dir> ................ Additional options or library      "
        echo "            locations to add when linking to the cuda driver libraries."
        echo "-opencl=<dir> ................ Specify location of the top level OpenCL SDK"
        echo "  Note: This option is needed when used with -cuda=<dir> option. "
        echo "-hpctoolkit-src-dir=<dir> .......... Specify patched HPCToolkit source."
        echo "-hpctoolkit-install-dir=<dir> . Specify patched HPCToolkit Install dir."
        echo "-scalasca=<dir>  ................ Specify location of SCALASCA package."
        echo "-epilog=<dir>  ............ Specify location of EPILOG Tracing package."
        echo "-epiloglib=<dir> ........... Specify full path to EPILOG lib directory."
        echo "-epilogbin=<dir> ........... Specify full path to EPILOG bin directory."
        echo "-epiloginc=<dir> ....... Specify full path to EPILOG include directory."
        echo "-vampirtrace=<dir>  .. Specify location of VampirTrace Tracing package."
#    echo "-mon-mpi ..... Specify MPI as TAU monitoring transport layer.          "
#    echo "-mon-mrnet=<dir> .. Specify location to MRNet package as TAU monitoring"
#    echo "                    transport layer (ToM).                             "
#    echo "-mon-mrnet-lib=<dir> ............... Specify full path to MRNet library"
#    echo "                                     installation.                     "
#    echo "-mon-mrnet-use-lightweight ..... Instructs ToM to use MRNet lightweight"
#    echo "                                 interface.                            "
        echo "-scorep=<dir>  .................... Specify location of SCOREP package."
	    echo "-upcnetwork=<value> .. Specify network (mpi, udp,...) for Berkeley UPC."
	    echo "-gasnet=<dir>  ............ Specify location of GASNET for UPC wrapper."
	    echo "-python .. Automatically choose python options based on Python in path."
	    echo "-pythoninc=<dir> ........ Specify location of Python include directory."
	    echo "-pythonlib=<dir> ............ Specify location of Python lib directory."
	    echo "-tag=<unique name> ........ Specify a tag to identify the installation."
	    echo "-perfinc=<dir> ............. Specify a Perflib[LANL] include directory."
	    echo "-perflib=<dir> ................. Specify a Perflib[LANL] lib directory."
	    echo "-perflibrary=<library> ... Specify a different perflib runtime library."
	    echo "-ktau ........................................... Kernel TAU Profiling."
	    echo "-ktau_shctr ........................ Kernel TAU Profiling with shared- "
	    echo "                                                   OS counters support."
	    echo "-ktauinc=<dir> ............... Specify location of Linux Kernel source."
	    echo "-ktauincuser=<dir> ............... Specify location of KTAU user incls."
	    echo "-ktaulib=<dir> ............ Specify location of KTAU library libktau.a."
	    echo "-ktausym=<path to System.map>  ...... Specify location of Linux Kernel."
	    echo "                                                          Symbol Table."
	    echo "-stff=<dir> .... Location of RENCI Scalable Time-series filter library."
	    echo "-sddf=<dir> ...... SDDF library location; Only required for RENCI STFF."
	    #    echo "-TRACE ..................................... Generate TAU event traces."
	    #    echo "-MPITRACE ... Generate event traces for MPI events and their ancestors."
	    #    echo "-PROFILE ............ Generate profiles (summary statistics) (default)."
	    #    echo "-PROFILECALLPATH ......................... Generate call path profiles."
	    echo "-PROFILEPARAM .... Generate profiles with parameter mapped event data ."
	    echo "-PROFILECOMMUNICATORS ... Generate profiles with MPI communicator info."
	    echo "-PROFILEPHASE .......................... Generate phase based profiles."
	    #    echo "-DEPTHLIMIT ........... Disable instrumentation beyond a certain depth."
	    #    echo "-PROFILEMEMORY .. Track heap memory utilization at each function entry."
	    #    echo "-PROFILEHEADROOM .. Track memory free (or headroom) at each func entry."
	    #    echo "-COMPENSATE ........ Compensate for profiling measurement perturbation."
	    echo "-BGLTIMERS .... Use fast low-overhead timers on IBM BlueGene/L systems."
	    echo "-BGPTIMERS .... Use fast low-overhead timers on IBM BlueGene/P systems."
	    echo "-BGQTIMERS .... Use fast low-overhead timers on IBM BlueGene/Q systems."
	    echo "-SGITIMERS .......... Use fast nanosecond timers on SGI R10000 systems."
	    echo "-CRAYTIMERS ............ Use fast nanosecond timers on Cray X1 systems."
	    echo "-LINUXTIMERS ......... Use low overhead TSC Counter for wallclock time."
	    echo "-CPUTIME .......... Use usertime+system time instead of wallclock time."
	    echo "-PAPIWALLCLOCK ........ Use PAPI to access wallclock time. Needs -papi."
	    echo "-PAPIVIRTUAL   .......... Use PAPI for virtual (user) time calculation."
	    echo "-INTELCXXLIBICC   ......... Use Intel -cxxlib-icc option for compiling."
	    echo "-noex .................. Use no exceptions while compiling the library."
	    echo "-noplugins ...................... Do not build support for TAU plugins."
	    echo "-nolm ................. On Ubuntu, do not add -lm while linking in TAU."
            echo "-DISABLE_MEMORY_MANAGER ..................... Disable TAU heap manager."
            echo "                       (Note: also disables sampling, marker tracking)."
	    echo "-DISABLESHARED .................. Do not build libTAU.so shared object."
            echo "-PMI ...................... Enable Cray PMI for tracking topology info."
	    echo "-ENABLE_EXPORT_DYNAMIC .................... Force -Wl,--export-dynamic."
	    echo "-zeptodir=<dir> ............................. ZeptoOS install location."
	    echo "                              See http://www-unix.mcs.anl.gov/zeptoos/."
	    echo "-help ...................................... display this help message."
	    echo "-fullhelp .............................. display the full help message."
	    exit
	    ;;
    esac
done

# this causes `make install` to clean, since configure has been run
rm -f .clean

testlastcon=""
testlaststu=""
if [ -f .last_config ] ; then
    testlastcon=`cat .last_config`
fi

if [ -f .active_stub ] ; then
    testlaststu=`cat .active_stub`
fi


if [ $default = false ] ; then

    rm -f .last_config
    rm -f .active_stub
fi

# This method will escape spaces so that you can use ./configure `cat .last_config` when you've used them
for arg in "$@"; do
    # Thanks to Bernd Mohr for the following that handles quotes and spaces
    # -e 's/^x//'          removes the x at the start
    # -e 's/"/\\\"/g'      replaces " with \"
    # -e s,\',%@%\',g      replaces ' with %@%'
    # -e 's/%@%/\\\/g'     replaces %@% \
    # -e 's/ /\\\ /g'      replaces space with \space
    modarg=`echo "x$arg" | sed -e 's/^x//' -e 's/"/\\\"/g' -e s,\',%@%\',g -e 's/%@%/\\\/g' -e 's/ /\\\ /g'`
    modargs="$modargs $modarg"
done

if [ $default = false ] ; then
    #    echo "configured with:"
    #    echo ""
    #    echo "$modargs"
    #    echo ""
    if [ "$modargs" != "$testlastcon" ] ; then

        echo "$modargs" >> .all_configs

    fi
    echo "$modargs" > .last_config
fi

# test if we're using the bash shell
usingbash=no
readlink=`which readlink`
if [ "x$readlink" != "x" ] ; then
    if [ -x "$readlink" ] ; then
	symlink=`readlink /bin/sh`
	if [ "x$symlink" = "xbash" ] ; then
	    usingbash=yes
	fi
    fi
fi

# write tau_config.h that's used as meta-data containing the TAU configuration
if [ "$usingbash" = "yes" ] ; then
    modmodargs=`echo "x$modargs" | sed -e 's/^x//' -e 's#\\\#\\\\\\\\#g'`
else
    modmodargs=`echo "x$modargs" | sed -e 's/^x//' -e 's#\\\#\\\\\\\\\\\#g'`
fi

echo "#define TAU_CONFIG \"$modmodargs\"" > include/tau_config.h

START_DIR=`pwd`

# Default compilers and options
c_compiler=default
cxx_compiler=default
orig_c_compiler=default
orig_cxx_compiler=default
orig_fortran_compiler=default
pdt_cxx_compiler=default
fixmakeargs=""
useropt=-O2#-g
tag=no
pathscale=no
tautag=
orig_useropt="-O2 -g"
mpi=no
mpi2=no
mpiio=no
mpiinc=
mpilib=
mpilibargs_added_to_fixmakeargs=no
mpilibrary=no
mon_mpi=no
mrnet=no
mrnet_use_lightweight=no
mrnet_root=
mrnet_lib=
ibmmpi=no
shmem=no
pshmem=no
gpi=no
gpidir=
gpiinc=
gpilib=
gpilibrary=no
shmeminc=
shmemlib=
shmemlibrary=no
threadsafe=no
additional_mpiincs=
additional_mpilibs=
extra_linker_args=
pythoninc=
pythonlib=
python=no
sicortex=no
extradir=
extrashlibopts=
pthread=no
tbb=no
papithread=no
papipfm=no
gupc=no
papiperfctr=no
papisubdir=
charm=no
comm=yes
sproc=no
noex=no
plugins=yes
disableshared=no
pmi=no
setnode0=no
compensate=no
smarts=no
papi=no
likwid=no
beacon=no
beacondir="/"
darshan=no
enable_export_dynamic=no
perfsuite=no
perfsuitedir=
bfd=no
bfddir=
turnbfdoff=no
perf=no
perfincdir=
perflibdir=
perflibrary=
tcltk=yes
tcltkfile="/"
kai=no
pgi=no
craymic=no
fujitsu=no
guidef90=no
stdcxxlib=no
intelcxxlibicc=no
intelifort=no
intel=no
mpiwarnings=
gnu=no
sol2cc=no
suncc=no
compaq=no
open64=no
profile=no
profilestats=no
profilememory=no
profileheadroom=no
callpath=no
profileparam=no
profilecommunicators=no
depthlimit=no
phase=no
trace=no
mpit=no
mpitrace=no
debugprof=no
bgltimers=no
bgptimers=no
bgqtimers=no
sgitimers=no
craytimers=no
linuxtimers=no
alphatimers=no
cputime=no
papiwallclock=no
papivirtual=no
use_ansic=no
tauarch=unknown
host=
host_prefix=
host_sysroot=
pdtcompdir=
pdtarchdir=unknown
tauprefix=unknown
execprefix=unknown
taugcclibdir=unknown
tautoplevel=
tauoptions=
pdt_root_dir="."
pdt=no
pin=no
armci=no
vtf=no
otf=no
otfdir=
otfinc=
otflib=
download_otf=no
download_likwid=no
cubedir=own
ebs2otf=no
ebs_has_rt=no
ebs_clock_res="-1"
unwinder="none"
unwind_inc=
unwind_lib=
unwind_flag=
unwind_lib_flag=
unwind_extras=
download_unwind=no
download_scorep=no
tau_links_rt=no
opari=no
mpc=no
opari1=no
oparicomp=no
epilog=no
hpctoolkit=no
hpctoolkit_src_dir=
hpctoolkit_install_dir=
scalasca=no
scoreplibs=
scorep=no
epilogextralinkcmd=
epiloglib=no
epilogbin=no
epiloginc=no
epilogdir=no
epiloglibdir=no
epilogbindir=bin
epilogincdir=
vampirtrace=no
vampirtraceshow=no
upnetwork=unknown
upc=no
upc_compiler=default
forceshared=no
opari_region=no
opari_construct=no
boost=no
sos=no
sosdir=
download_sos=no
install_sos=no
adios=no
adiosdir=
#caliper=no
#caliperdir=
apex=no
dyninst=no
dyninstinc=no
dyninstlib=no
dwarf=no
java=no
asmdex=download
openmp=no
ompt=no
omptlib=
omptlibrary=-lomp
omptenabled=no
download_ompt=no
download_ompt_tr6=no
install_ompt=no
xlsmp=no
ibmxlc=no
ibmxlc_r=no
fortran_compiler=no
ktau=no
ktau_ng=no
ktau_merge=no
ktau_shctr=no
ktauinc=
ktauincuser=
ktaulib=
ktausym=
catamount=no
gpshmem=no
stff=no
stffdir=
sddf=no
sddfdir=
tau_uselm=yes
iowrapper=no
dmapp=no
zepto=no
zeptodir=
cuda=no
use_opencl=no
use_openacc=no
cupti=no
strsignal_ok=no
android_version=4.4
android_platform=19
disable_memory_manager=no

restore_perfdmf_and_paraprof



###############################################################
# PARSE OPTIONS
###############################################################
all_args="$@"
for arg in "$@"; do
    case $arg in

	-cc=*)
	    myarg=`echo $arg | sed 's/-cc=//'`
	    if [ $myarg = cc -o $myarg = gcc -o $myarg = gcc4 -o $myarg = gcc-5 -o $myarg = gcc-6 -o $myarg = gcc-7 -o $myarg = gcc-8 -o $myarg = KCC -o $myarg = pgcc -o $myarg = guidec -o $myarg = xlc -o $myarg = ecc -o $myarg = icc -o $myarg = powerpc64-linux-gcc -o $myarg = pathcc -o $myarg = fcc -o $myarg = orcc -o $myarg = opencc -o $myarg = qk-pgcc -o $myarg = scgcc -o $myarg = scpathcc -o $myarg = mips64el-gentoo-linux-gnu-gcc -o $myarg = powerpc64-bgq-linux-gcc -o $myarg = powerpc-bgp-linux-gcc -o $myarg = x86_64-w64-mingw32-gcc -o $myarg = mpiicc -o $myarg = mpifcc -o $myarg = mpifccpx -o $myarg = clang -o $myarg = bgclang -o $myarg = mpc_cc -o $myarg = mpc_icc -o $myarg = mpicc -o $myarg = mcc -o $myarg = oshcc -o $myarg = armclang ]
	    then
		c_compiler=$myarg

                if [  $c_compiler = mpc_cc -o  $c_compiler = mpc_icc  ]
                then
	 	  mpc_c_compiler=`$myarg -show | awk '{ print $1; }'`
                fi
	    else
		testxlc=`echo $myarg | sed -e 's/xlc//'`
		testmp=`echo $myarg | sed -e 's/^mp//'`
		if [ "y$testxlc" = "y$myarg"  -a "y$testmp" = "y$myarg" ]
		then
		    echo "WARNING: valid options for cc are 'cc', 'gcc', 'gcc4', 'gcc-*', 'KCC', 'guidec', '*xlc*', 'ecc', 'icc', 'pathcc', 'fcc', 'orcc', 'opencc', 'qk-pgcc', 'powerpc64-bgq-linux-gcc', 'powerpc-bgp-linux-gcc', 'x86_64-w64-mingw32-gcc', 'mcc', 'mpiicc', 'pgcc' , 'mpc_cc', 'mpc_icc', 'mpifcc', 'mpifccpx', 'clang', 'bgclang', 'mpicc', 'mcc', or 'oshcc'"
		    #       exit 1
		else
		    if [ "y$testxlc" != "y$myarg" ]
		    then
			c_compiler=$myarg
		    else
			c_compiler=`$myarg -show | awk '{ print $1; }'`
		    fi
		fi
	    fi
	    shift
	    ;;

	-c++=*)
	    myarg=`echo $arg | sed 's/-c++=//'`
	    if [ $myarg = CC -o $myarg = KCC -o $myarg = g++ -o $myarg = g++4 -o $myarg = g++-5 -o $myarg = g++-6 -o $myarg = g++-7 -o $myarg = g++-8 -o $myarg = cxx  -o $myarg = NCC -o $myarg = pgc++ -o $myarg = pgCC  -o $myarg = pgcpp -o $myarg = egcs -o $myarg = FCC -o $myarg = guidec++ -o $myarg = aCC -o $myarg = c++ -o $myarg = ecpc -o $myarg = icpc -o $myarg = powerpc64-linux-g++ -o $myarg = pathCC -o $myarg = orCC -o $myarg = openCC -o $myarg = qk-pgCC -o $myarg = scg++ -o $myarg = scpathCC -o $myarg = mips64el-gentoo-linux-gnu-g++ -o $myarg = powerpc-bgp-linux-g++ -o $myarg = powerpc64-bgq-linux-g++ -o $myarg = mpicxx  -o $myarg = x86_64-w64-mingw32-g++  -o $myarg = mpiicpc -o $myarg = mpiFCC -o $myarg = mpiFCCpx -o $myarg = mpc_cxx -o $myarg = mpc_icpc -o $myarg = clang++ -o $myarg = bgclang++ -o $myarg = mpicxx -o $myarg = mcxx -o $myarg = oshCC -o $myarg = oshc++ -o $myarg = oshcxx  -o $myarg = armclang++ ]
	    then
		cxx_compiler=$myarg
                if [  $cxx_compiler = mpc_cxx -o $cxx_compiler = mpc_icpc  ]
                then
                  mpc_include=`mpc_cxx -show | grep -o '[^ ]*include/mpcframework[^ ]*'`
	 	  mpc_cxx_compiler=`$myarg -show | awk '{ print $1; }'`
                fi

	    else
		testxlc=`echo $myarg | sed -e 's/xl//'`
		testmp=`echo $myarg | sed -e 's/^mp//'`
		if [ "y$testxlc" = "y$myarg" -a "y$testmp" = "y$myarg" ]
		then
		    echo "WARNING: valid options for c++ are 'CC', 'KCC', 'g++', 'g++4', '*xlC*', 'cxx' , 'NCC', 'egcs', 'pgCC', 'pgcpp', 'FCC', 'guidec++', 'aCC', 'ecpc', 'icpc', 'pathCC', 'c++', 'qk-pgCC', 'x86_64-w64-mingw32-g++', 'mpiicpc', 'mpiFCC', 'mpiFCCpx', 'orCC', 'openCC', 'mpc_cxx',  'mpc_icpc', 'clang++', 'bgclang++', 'mpicxx', 'mcxx', 'oshCC', oshcxx, 'oshc++', or 'armclang++' "
		    #       exit 1
		else
		    if [ "y$testxlc" != "y$myarg" ]
		    then
			cxx_compiler=$myarg
		    else
			cxx_compiler=`$myarg -show | awk '{ print $1; }'`
		    fi
		fi
	    fi
	    shift
	    ;;

	-pdt_c++=*)
	    pdt_cxx_full_path=`echo $arg | sed 's@-pdt_c++=@@g'`
	    myarg=`echo $arg |  echo $arg | sed 's@-pdt_c++=@@g' | sed 's@.*/@@g'`
	    pdt_cxx_compiler=$myarg

	    shift
	    ;;

	-fortran=*)
	    myarg=`echo $arg | sed 's/-fortran=//'`
	    if [ $myarg = gnu -o $myarg = sgi -o $myarg = ibm -o $myarg = ibm64 -o $myarg = hp -o $myarg = cray -o $myarg = pgi -o $myarg = pgf90 -o $myarg = absoft -o $myarg = fujitsu -o $myarg = sun -o $myarg = compaq -o $myarg = kai -o $myarg = hitachi -o $myarg = intel  -o $myarg = ifort -o $myarg = nec -o $myarg = absoft -o $myarg = lahey -o $myarg = nagware -o $myarg = nag -o $myarg = pathscale -o $myarg = gfortran -o $myarg = gfortran-5 -o $myarg = gfortran-6 -o $myarg = gfortran-7 -o $myarg = gfortran-8 -o $myarg = gfortran4 -o $myarg = g95 -o $myarg = open64 -o $myarg = openf90 -o $myarg = mpiifort -o $myarg = mpifrtpx -o $myarg = mpifrt -o $myarg = frt -o $myarg = mpif90 -o $myarg = mpc_f77 -o $myarg = mpc_ifort -o $myarg = mpc_gfortran -o $myarg = oshfort -o $myarg = caf -o $myarg = armflang ] ; then
		if [ $myarg = gnu ] ; then
		    fortran_compiler=gfortran
		else
		    fortran_compiler=$myarg
		fi
	    else
		echo "WARNING: valid options for fortran are 'gnu', 'sgi', 'ibm', 'ibm64', 'hp', 'cray', 'pgi', 'pgf90', 'absoft', 'fujitsu', 'sun', 'compaq', 'kai', 'hitachi', 'intel', 'ifort', 'nec' , 'absoft', 'lahey', 'nag/nagware', 'pathscale', 'gfortran', 'gfortran-*', 'g95', 'open64', 'openf90', 'mpiifort', 'mpifrtpx', 'frtpx', 'frt', 'mpifrt', 'mpif90', 'mpc_f77', or 'mpc_ifort', 'mpc_gfortran', 'oshfort', 'caf', or 'armflang' "
		exit 1
	    fi
	    shift
	    ;;
	-upc=*)
	    myarg=`echo $arg | sed 's/-upc=//'`
	    if [ $myarg = cc -o $myarg = upc -o $myarg = gcc -o $myarg = upcc -o $myarg = xlupc ]
	    then
		upc_compiler=$myarg
		upc=yes
	    else
		echo "WARNING: valid options for upc are 'cc (Cray CCE UPC compiler)', 'upc (GNU UPC compiler)', 'upcc (Berkeley UPC compiler)', 'xlupc (IBM XL UPC compiler)', and 'gcc'"
		exit 1
	    fi
	    shift
	    ;;

	-gnu)
	    c_compiler=gcc
	    cxx_compiler=g++
	    shift
	    ;;

	-dec)
	    c_compiler=cc
	    cxx_compiler=g++
	    shift
	    ;;

	-nolm)
            tau_uselm=no
            shift
            ;;

	-ibm)
	    c_compiler=xlc_r
	    cxx_compiler=xlC_r
	    shift
	    ;;

	-cfront)
	    c_compiler=cc
	    cxx_compiler=CC
	    shift
	    ;;

	-sgi)
	    c_compiler=cc
	    cxx_compiler=CC
	    shift
	    ;;

	-tag=*)
	    tag=yes
	    tautag=`echo $arg | sed -e 's/-tag=//'`
	    shift
	    ;;

	-pthread=*)
	    pthread=yes
	    ptdir=`echo $arg | sed -e 's/-pthread=//'`
	    shift
	    ;;

	-pthread)
	    pthread=yes
	    shift
	    ;;

	-tbb)
	    pthread=yes
	    tbb=yes
	    shift
	    ;;

	-papithread)
	    papithread=yes
	    shift
	    ;;

	-iowrapper)
	    iowrapper=yes
	    shift
	    ;;

	-dmapp)
	    dmapp=yes
	    shift
	    ;;

	-charm=*)
	    pthread=yes
	    charm=yes
	    charmdir=`echo $arg | sed -e 's/-charm=//'`
	    shift
	    ;;

	-COMPENSATE)
	    compensate=yes
	    shift
	    ;;


	-forceshared)
	    forceshared=yes
	    fixmakeargs="$fixmakeargs FORCESHARED"
	    shift
	    ;;

	-ktau)
	    ktau=yes
	    shift
	    ;;

	#voorhees
	-ktau-ng)
	    ktau_ng=yes
	    shift
	    ;;

	-ktau_merge)
	    ktau_merge=no
	    shift
	    ;;

	-ktau_shctr)
	    ktau_shctr=yes
	    shift
	    ;;

	-ktauinc=*)
	    ktauinc=`echo $arg | sed -e 's/-ktauinc=//' -e 's/ /#/g'`
	    if [ ! -d $ktauinc ]
	    then
		echo "Error: Cannot access KTAU include directory $ktauinc"
		exit 1
	    fi
	    shift
	    ;;

	-ktauincuser=*)
	    ktauincuser=`echo $arg | sed -e 's/-ktauincuser=//' -e 's/ /#/g'`
	    if [ ! -d $ktauincuser ]
	    then
		echo "Error: Cannot access KTAU user include directory $ktauincuser"
		exit 1
	    fi
	    shift
	    ;;

	-ktaulib=*)
	    ktaulib=`echo $arg | sed -e 's/-ktaulib=//' -e 's/ /#/g'`
	    if [ ! -d $ktaulib ]
	    then
		echo "Error: Cannot access KTAU user lib $ktaulib"
		exit 1
	    fi
	    shift
	    ;;

	-ktausym=*)
	    ktausym=`echo $arg | sed -e 's/-ktausym=//' -e 's/ /#/g'`
	    if [ ! -e $ktausym ]
	    then
		echo "Warning: Cannot access KTAU Linux Kernel Symbol Table $ktausym locally (Does it exist on the compute nodes?). Continuing."
	    fi
	    shift
	    ;;


	-mon-mpi)
	    mon_mpi=yes
	    shift
	    ;;

	-mon-mrnet=*)
	    mrnet=yes
	    mrnet_root=`echo $arg | sed -e 's/-mon-mrnet=//' -e 's/ /#/g'`
	    if [ ! -e $mrnet_root ]
	    then
		echo "Error: Cannot access MRNet root directory $mrnet_root"
		exit 1
	    fi
	    shift
	    ;;

	-mon-mrnet-lib=*)
	    mrnet=yes
	    mrnet_lib=`echo $arg | sed -e 's/-mon-mrnet-lib=//' -e 's/ /#/g'`
	    if [ ! -e $mrnet_lib ]
	    then
		echo "Error: Cannot access MRNet library directory $mrnet_lib"
		exit 1
	    fi
	    shift
	    ;;

	-mon-mrnet-use-lightweight)
	    mrnet_use_lightweight=yes
	    shift
	    ;;

	-nocomm)
	    comm=no
	    shift
	    ;;

	-sproc)
	    sproc=yes
	    shift
	    ;;

        -beacon=*)
            beacon=yes
	    beacondir=`echo $arg | sed -e 's/-beacon=//'`
	    if [ ! -d $beacondir ] ; then
		echo "Error: Cannot access BEACON directory $beacondir"
		exit 1
	    fi
            shift
            ;;
	-papi=*)
	    papi=yes
	    papidir=`echo $arg | sed -e 's/-papi=//'`
	    if [ ! -d $papidir ] ; then
		echo "Error: Cannot access PAPI directory $papidir"
		exit 1
	    fi
            if [ $papidir = "/usr" ]; then
		  fixmakeargs="$fixmakeargs PAPINOINC"
            fi
            if [ -r /sys/devices/power/events/energy-pkg.scale ] ; then
		  fixmakeargs="$fixmakeargs PAPI_PERF_RAPL"
            fi

	    shift
	    ;;

        -likwid=download*)
            echo "Downloading LIKWID..."
            likwid=yes
            download_likwid=yes
            shift
            ;;

         -likwid=*)
            likwid=yes
	    likwiddir=`echo $arg | sed -e 's/-likwid=//'`
	    if [ ! -d $likwiddir ] ; then
		echo "Error: Cannot access LIKWID directory $likwiddir"
		exit 1
	    fi
            shift
            ;;

	-gpi=*)
	    gpi=yes
	    gpidir=`echo $arg | sed -e 's/-gpi=//'`
	    if [ ! -d $gpidir ] ; then
		echo "Error: Cannot access GPI directory $papidir"
		exit 1
	    fi
	    fixmakeargs="$fixmakeargs GPI gpidir=$gpidir"
	    tauoptions="${tauoptions}-gpi"
	    shift
	    ;;

	-darshan=*)
	    darshan=yes
	    darshandir=`echo $arg | sed -e 's/-darshan=//'`
	    if [ ! -d $darshandir ] ; then
		echo "Error: Cannot access Darshan directory $papidir"
		exit 1
	    fi
	    shift
	    ;;

	-perfsuite=*)
	    perfsuite=yes
	    perfsuitedir=`echo $arg | sed -e 's/-perfsuite=//'`
	    fixmakeargs="$fixmakeargs TAU_PERFSUITE"
	    fixmakeargs="$fixmakeargs perfsuitelink=-L$perfsuitedir/lib#-lpshwpc"
	    fixmakeargs="$fixmakeargs perfsuiteinclude=-I$perfsuitedir/include"
	    if [ ! -d $perfsuitedir ] ; then
		echo "Error: Cannot access PerfSuite directory $perfsuitedir"
		exit 1
	    fi
	    shift
	    ;;

	-bfd=*)
	    bfd=yes
	    bfddir=`echo $arg | sed -e 's/-bfd=//'`
	    shift
	    ;;

	-unwinder=*)
	    unwinder=`echo $arg | sed -e 's/-unwinder=//'`
	    if [ "x$unwinder" = "xlibunwind" ] ; then
		unwind_flag="-DTAU_USE_LIBUNWIND"
		unwind_lib_flag="-lunwind"
	    elif [ "x$unwinder" = "xstackwalker" ] ; then
		unwind_flag="-DTAU_USE_STACKWALKER"
		unwind_lib_flag="-lstackwalk"
	    elif [ "x$unwinder" = "xnone" ] ; then
		echo "No Unwinding Support."
	    else
		echo "Error: Invalid Stack Unwinder $unwinder. Valid options are:"
		echo "libunwind, stackwalker, none (default)."
		exit 1
	    fi
	    shift
	    ;;

    -unwind=download*)
        echo "Downloading libunwind..."
        # So that the user doesn't have to specify the unwinder,
        # use libunwind as the default.
        unwinder="libunwind"
        unwind_flag="-DTAU_USE_LIBUNWIND"
        unwind_lib_flag="-lunwind#-Wl,-rpath,\$(UNWIND_LIB)"
        download_unwind=yes
        shift
        ;;

	-unwind=*)
	    unwind_dir=`echo $arg | sed -e 's/-unwind=//'`
        if [ $unwind_dir != "/usr" ]; then
	      unwind_inc="$unwind_dir/include"
	      unwind_lib="$unwind_dir/lib"
        fi
	    # So that the user doesn't have to specify the unwinder,
	    # use libunwind as the default.
	    if [ "x$unwinder" = "xnone" ] ; then
		unwinder="libunwind"
		unwind_flag="-DTAU_USE_LIBUNWIND"
		unwind_lib_flag="-lunwind#-Wl,-rpath,\$(UNWIND_LIB)"
	    fi
	    shift
	    ;;

	-unwindinc=*)
	    unwind_inc=`echo $arg | sed -e 's/-unwind_inc=//'`
	    shift
	    ;;

	-unwindlib=*)
	    unwind_lib=`echo $arg | sed -e 's/-unwind_lib=//'`
	    shift
	    ;;

	-unwindextras=*)
	    unwind_extras=`echo $arg | sed -e 's/-unwind_extras=//'`
	    shift
	    ;;

	-perfinc=*)
	    perf=yes
	    perfincdir=`echo $arg | sed -e 's/-perfinc=//'`
	    if [ ! -d $perfincdir ]
	    then
		echo "Error: Cannot access PERF include directory $perfincdir"
		exit 1
	    fi
	    shift
	    ;;

	-perflib=*)
	    perf=yes
	    perflibdir=`echo $arg | sed -e 's/-perflib=//'`
	    if [ ! -d $perflibdir ] ; then
		echo "Error: Cannot access PERF lib directory $perflibdir"
		exit 1
	    fi
	    shift
	    ;;

	-perflibrary=*)
	    perf=yes
	    perflibrary=`echo $arg | sed -e 's/-perflibrary=//' -e 's/ /#/g'`
	    shift
	    ;;

	-oparicomp=*)
	    opari=yes
	    openmp=yes
	    oparicomp=`echo $arg | sed -e 's/-oparicomp=//' -e 's/ /#/g'`
	    shift
	    ;;

	-opari)
	    opari=yes
	    openmp=yes
	    shift
	    ;;

	-opari=*)
	    opari=yes
	    oparidir=`echo $arg | sed -e 's@-opari=@@' -e 's@ @#@g'`
	    openmp=yes
	    shift
	    ;;
	-opari1)
	    opari1=yes
	    openmp=yes
	    shift
	    ;;

	-opari1=*)
	    opari1=yes
	    openmp=yes
	    shift
	    ;;

	-opari_region)
	    opari_region=yes
	    shift
	    ;;

	-opari_construct)
	    opari_construct=yes
	    shift
	    ;;

	-vampirtrace=*)
	    vampirtrace=yes
	    trace=yes
	    vampirtracedir=`echo $arg | sed -e 's/-vampirtrace=//'`
	    if [ ! -d $vampirtracedir ] ; then
		echo "Error: Cannot access VAMPIRTRACE directory $vampirtracedir"
		exit 1
	    fi
	    shift
	    ;;

	-upcnetwork=*)
	    upc=yes
	    upcnetwork=`echo $arg | sed -e 's/-upcnetwork=//'`
	    shift
	    ;;
	-gasnet=*)
	    gasnet=yes
	    gasnetdir=`echo $arg | sed -e 's/-gasnet=//'`
	    fixmakeargs="$fixmakeargs gasnet=$gasnetdir GASNET"
	    shift
	    ;;

	-epilog=*)
	    epilog=yes
	    trace=yes
	    epilogdir=`echo $arg | sed -e 's/-epilog=//'`
	    if [ ! -d $epilogdir ] ; then
		echo "Error: Cannot access EPILOG directory $epilogdir"
		exit 1
	    fi
	    shift
	    ;;

	-scalasca=*)
	    epilog=yes
	    trace=yes
	    epilogdir=`echo $arg | sed -e 's/-scalasca=//'`
	    if [ ! -d $epilogdir ] ; then
		echo "Error: Cannot access SCALASCA directory $epilogdir"
		exit 1
	    fi
	    if [ ! -r $epilogdir/bin/skin ]; then


		scorepdir=`which scorep | sed -e 's@bin/scorep@@g'`
		echo "scorepdir=$scorepdir"
		if [ -d $scorepdir ]; then
		    echo "Using the Score-P measurement substrate instead of Scalasca for vScalasca v2.0+"
		    echo "Using Score-P directory $scorepdir"
		    scalasca=no
		    epilog=no
		    epilogdir=no

		    trace=no

		    scorep=yes
		else
		    echo "Please configure TAU with the Score-P measurement substrate instead of Scalasca for vScalasca v2.0+. See http://www.score-p.org"
		fi
	    fi
	    shift
	    ;;

	-hpctoolkit-src-dir=*)
	    hpctoolkit=yes
	    hpctoolkit_src_dir=`echo $arg | sed -e 's/-hpctoolkit-src-dir=//'`
	    if [ ! -d $hpctoolkit_src_dir ] ; then
		echo "Error: Cannot access HPCTOOLKIT directory $hpctoolkit_src_dir"
		exit 1
	    fi
	    shift
	    ;;

	-hpctoolkit-install-dir=*)
	    hpctoolkit=yes
	    hpctoolkit_install_dir=`echo $arg | sed -e 's/-hpctoolkit-install-dir=//'`
	    if [ ! -d $hpctoolkit_install_dir ] ; then
		echo "Error: Cannot access HPCTOOLKIT directory $hpctoolkit_install_dir"
		exit 1
	    fi
	    shift
	    ;;

    -scorep=download*)
        echo "Downloading Score-P ..."
        download_scorep=yes
        scorep=yes
        shift
        ;;

	-scorep=*)
	    scorep=yes
	    scorepdir=`echo $arg | sed -e 's/-scorep=//'`
	    if [ ! -d $scorepdir ] ; then
		echo "Error: Cannot access SCOREP directory $scorepdir"
		exit 1
	    fi
        if [ "x$otf" != xyes ] ; then
           otf=yes
           otfdir=${scorepdir}
        fi
	    shift
	    ;;

	-epiloglib=*)
	    epilog=yes
	    epiloglib=yes
	    trace=yes
	    epiloglibdir=`echo $arg | sed -e 's/-epiloglib=//'`
	    shift
	    ;;

	-epilogbin=*)
	    epilog=yes
	    epilogbin=yes
	    trace=yes
	    epilogbindir=`echo $arg | sed -e 's/-epilogbin=//'`
	    shift
	    ;;

	-epiloginc=*)
	    epilog=yes
	    epiloginc=yes
	    trace=yes
	    epilogincdir=`echo $arg | sed -e 's/-epiloginc=//'`
	    shift
	    ;;

	-pdt=*)
	    pdt=yes
	    pdtdir=`echo $arg | sed -e 's/-pdt=//'`
	    if [ ! -d $pdtdir ] ; then
		echo "Error: Cannot access PDT directory $pdtdir"
		exit 1
	    fi
	    shift
	    ;;

	-pin=*)
	    pin=yes
	    pindir=`echo $arg | sed -e 's/-pin=//'`
	    if [ $pindir != "download" -a ! -d $pindir ] ; then
		echo "Error: Cannot access Intel PIN directory $pindir"
		exit 1
	    fi
	    shift
	    ;;

	-armci=*)
	    armci=yes
	    armcidir=`echo $arg | sed -e 's/-armci=//'`
	    if [ ! -d $armcidir ] ; then
		echo "Error: Cannot access ARMCI directory $armcidir"
		exit 1
	    fi
	    shift
	    ;;

	-vtf=*)
	    vtf=yes
	    trace=yes
	    vtfdir=`echo $arg | sed -e 's/-vtf=//'`
	    if [ ! -d $vtfdir ]
	    then
		echo "Error: Cannot access VTF3 directory $vtfdir"
		exit 1
	    fi
	    shift
	    ;;

	-cube=*)
	    cubedir=`echo $arg | sed -e 's/-cube=//'`
	    shift
	    ;;

        -otf=download*)
            echo "Downloading libotf2..."
            otf=yes
            download_otf=yes
            shift
            ;;

	-otf=*)
	    otf=yes
	    # don't set this! it will enable tracing by default. Just because
	    # specified an OTF generation library doesn't mean TRACING should be
	    # the default measurement!
	    # trace=yes
	    otfdir=`echo $arg | sed -e 's/-otf=//'`
	    if [ ! -d $otfdir ]
	    then
		echo "Error: Cannot access OTF directory $otfdir"
		exit 1
	    fi
	    shift
	    ;;

	-otfinc=*)
	    otfinc=`echo $arg | sed -e 's/-otfinc=//'`
	    if [ ! -d $otfinc ]
	    then
		echo "Error: Cannot access OTF include directory $otfinc"
		exit 1
	    fi
	    shift
	    ;;

	-otflib=*)
	    otflib=`echo $arg | sed -e 's/-otflib=//'`
	    if [ ! -d $otflib ]
	    then
		echo "Error: Cannot access OTF library directory $otflib"
		exit 1
	    fi
	    shift
	    ;;

	-ebs2otf)
	    ebs2otf=yes
	    shift
	    ;;

	-apex)
	    apex=yes
	    shift
	    ;;

	-boost=download)
	    boost=yes
        echo "Downloading Boost..."
	    shift
	    ;;

	-boost=*)
	    boost=yes
	    boostdir=`echo $arg | sed -e 's/-boost=//'`
	    if [ ! -d $boostdir ]
	    then
		echo "Error: Cannot access BOOST directory $boostdir"
		exit 1
	    fi
	    shift
	    ;;

	-sos=*)
	    sos=yes
        pthread=yes
	    sosdir=`echo $arg | sed -e 's/-sos=//'`
	    shift
	    ;;

	-adios=*)
	    adios=yes
        pthread=yes
	    adiosdir=`echo $arg | sed -e 's/-adios=//'`
	    if [ ! -d $adiosdir ]
	    then
		echo "Error: Cannot access ADIOS directory $adiosdir"
		exit 1
	    fi
	    shift
	    ;;

#	-caliper=*)
#	    caliper=yes
#	    caliperdir=`echo $arg | sed -e 's/-caliper=//'`
#	    if [ ! -d $caliperdir ]
#	    then
#		echo "Error: Cannot access CALIPER directory $caliperdir"
#		exit 1
#	    fi
#	    shift
#	    ;;

	-dyninst=download)
	    dyninst=yes
        boost=yes
        download_dyninst=yes
        echo "Downloading Dyninst..."
	    shift
	    ;;

	-dyninst=*)
	    dyninst=yes
	    dyninstdir=`echo $arg | sed -e 's/-dyninst=//'`
	    if [ ! -d $dyninstdir ]
	    then
		echo "Error: Cannot access DyninstAPI directory $dyninstdir"
		exit 1
	    fi
	    shift
	    ;;

	-dyninstinc=*)
	    dyninstinc=yes
	    dyninstincdir=`echo $arg | sed -e 's/-dyninstinc=//'`
	    if [ ! -d $dyninstincdir ]
	    then
		echo "Error: Cannot access DyninstAPI include directory $dyninstincdir"
		exit 1
	    fi
	    shift
	    ;;

	-dyninstlib=*)
	    dyninstlib=yes
	    dyninstlibdir=`echo $arg | sed -e 's/-dyninstlib=//'`
	    if [ ! -d $dyninstlibdir ]
	    then
		echo "Error: Cannot access DyninstAPI lib directory $dyninstlibdir"
		exit 1
	    fi
	    shift
        ;;

	-dwarf=*)
	    dwarf=yes
	    dwarfdir=`echo $arg | sed -e 's/-dwarf=//'`
	    if [ ! -d $dwarfdir ]
	    then
		echo "Error: Cannot access libdwarf directory $dwarfdir"
		exit 1
	    fi
	    shift
	    ;;

	-dwarflib=*)
	    dwarfdir=`echo $arg | sed -e 's/-dwarflib=//'`
	    if [ ! -d $dwarfdir ]
	    then
		echo "Error: Cannot access libdwarf directory $dwarfdir"
		exit 1
	    fi
	    fixmakeargs="$fixmakeargs dwarfopts=-L$dwarfdir#-Wl\,-rpath\,$dwarfdir"
	    dwarfdir=""
	    shift
	    ;;

	-openmp)
	    openmp=yes
	    shift
	    ;;

	-omptlib=*)
	    ompt=yes
	    openmp=yes
	    omptlib=`echo $arg | sed -e 's/-omptlib=//'`
	    if [ ! -d $omptlib ]
	    then
		echo "Error: Cannot access OpenMP runtime library directory $omptlib"
		exit 1
	    fi
	    shift
	    ;;

	-omptlibrary=*)
	    openmp=yes
	    omptlibrary=`echo $arg | sed -e 's/-omptlibrary=//'`
	    shift
	    ;;

	-ompt=download)
            echo "ompt=download"
	    openmp=yes
	    ompt=yes
	    download_ompt=yes
	    shift
	    ;;
	-ompt=download-tr4)
            echo "ompt=download-tr4"
	    openmp=yes
	    ompt=yes
	    download_ompt=yes
	    shift
	    ;;
	-ompt=download-tr6)
            echo "ompt=download-tr6"
	    openmp=yes
	    ompt=yes
	    download_ompt_tr6=yes
	    shift
	    ;;

	-ompt=*)
	    openmp=yes
	    ompt=yes
	    ompt_dir=`echo $arg | sed -e 's/-ompt=//'`
        if [ ! -d $ompt_dir ]
        then
          echo "Error: OMPT directory $ompt_dir cannot be accessed"
          exit 1
        fi
	    omptlib="${ompt_dir}/lib"
	    shift
	    ;;

	-ompt*)
	    openmp=yes
	    ompt=yes
	    shift
	    ;;

	-xlsmp=*)
	    xlsmp=yes
	    xlsmpdir=`echo $arg | sed -e 's/-xlsmp=//'`
	    if [ ! -d $xlsmpdir ]
	    then
		echo "Error: Cannot access xlsmp directory $xlsmpdir"
		exit 1
	    fi
	    shift
	    ;;

	-jdk=*)
	    java=yes
	    jdkdir=`echo $arg | sed -e 's/-jdk=//'`
	    #echo "jdkdir is $jdkdir"
	    if [ ! -d $jdkdir ]
	    then
		echo "Error: Cannot access JDK directory $jdkdir"
		exit 1
	    fi

	    shift
	    ;;

	-android_sdk=*)
	    android_sdk=`echo $arg | sed -e 's/-android_sdk=//'`
	    if [ ! -d $android_sdk ]
	    then
		echo "Error: Cannot access Android SDK directory $android_sdk"
		exit 1
	    fi

	    shift
	    ;;

	-android_version=*)
	    android_version=`echo $arg | sed -e 's/-android_version=//'`
	    shift
	    ;;

	-android_platform=*)
	    android_platform=`echo $arg | sed -e 's/-android_platform=//'`
	    shift
	    ;;

	-asmdex=*)
	    asmdex=`echo $arg | sed -e 's/-asmdex=//'`
	    shift
	    ;;

	-slog2=*)
	    trace=yes
	    shift
	    ;;


	-slog2)
	    trace=yes
	    shift
	    ;;

	-zeptodir=*)
	    zeptodir=`echo $arg | sed -e 's/-zeptodir=//' -e 's/ /#/g'`
	    if [ ! -e $zeptodir ]
	    then
		echo "ERROR: Cannot access the Zepto directory provided [$zeptodir]. Aborting."
		exit 1
	    fi
	    zepto=yes
	    disableshared=yes
	    c_compiler=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc
	    cxx_compiler=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++
	    fortran_compiler=yes
	    fixmakeargs="$fixmakeargs ZEPTO_GFORTRAN"
	    shift
	    ;;

	-useropt=*)
	    # Note you might be passed -g#-O3 which becomes -g -O3
	    orig_useropt=`echo $arg | sed -e 's/-useropt=//' -e 's/#/ /g'`
	    # Note you might be passed -g -O3 which becomes -g#-O3 here
	    useropt=`echo $arg | sed -e 's/-useropt=//' -e 's/ /#/g'`
	    echo "NOTE: Compiler optimization must be specified manually with useropt"
	    shift
	    ;;

	-extrashlibopts=*)
	    # Note you might be passed -g#-O3 which becomes -g -O3
	    extrashlibopts=`echo $arg | sed -e 's/-extrashlibopts=//' -e 's/ /#/g'`
	    # Note you might be passed -g -O3 which becomes -g#-O3 here
	    shift
	    ;;

	-mpit)
	    mpit=yes
	    shift
	    ;;

	-mpi)
	    mpi=yes
	    shift
	    ;;

	-mpiinc=*)
	    mpi=yes
	    mpiinc=`echo $arg | sed -e 's/-mpiinc=//' -e 's/ /#/g'`
	    if [ ! -d $mpiinc ] ; then
		echo "Error: Cannot access MPI include directory $mpiinc"
		exit 1
	    fi
	    shift
	    ;;

	-mpilib=*)
	    mpi=yes
	    mpilib=`echo $arg | sed -e 's/-mpilib=//' -e 's/ /#/g'`
	    if [ ! -d $mpilib ] ; then
		echo "Error: Cannot access MPI lib directory $mpilib"
		exit 1
	    fi
	    shift
	    ;;

	-mpilibrary=*)
	    # you may be passed -lmpich#-L/usr/opt/gm#-lgm#-lpthread#-ldl by installtau
	    mpilibrary=`echo $arg | sed -e 's/-mpilibrary=//' -e 's/#/ /g'`
	    shift
	    ;;

	-shmem)
	    shmem=yes
	    shift
	    ;;

	-shmem=*)
	    shmem=yes
	    tmp=`echo $arg | sed -e 's/-shmem=//' -e 's/#/ /g'`
            if [ "$tmp" == "pshmem" ] ; then
                 pshmem=yes
            fi
	    shift
	    ;;

	-ENABLE_TAUENV)
	    tauenv=yes
	    fixmakeargs="$fixmakeargs TAUENV"
	    shift
            ;;

	-shmeminc=*)
	    shmeminc=`echo $arg | sed -e 's/-shmeminc=//' -e 's/ /#/g'`
	    if [ ! -d $shmeminc ]
	    then
		echo "Error: Cannot access SHMEM include directory $shmeminc"
		exit 1
	    fi
	    shmem=yes
	    shift
	    ;;

	-shmemlib=*)
	    shmemlib=`echo $arg | sed -e 's/-shmemlib=//' -e 's/ /#/g'`
	    if [ ! -d $shmemlib ]
	    then
		echo "Error: Cannot access SHMEM lib directory $shmemlib"
		exit 1
	    fi
	    shmem=yes
	    shift
	    ;;

	-shmemlibrary=*)
	    shmemlibrary=`echo $arg | sed -e 's/-shmemlibrary=//' -e 's/#/ /g'`
	    shmem=yes
	    shift
	    ;;

    -shmemmpiinc=*)
	    shmemmpiinc=`echo $arg | sed -e 's/-shmemmpiinc=//' -e 's/#/ /g'`
	    if [ ! -d $shmemmpiinc ]
	    then
		echo "Error: Cannot access SHMEM include directory $shmemmpiinc"
		exit 1
	    fi
	    shmem=yes
	    shift
	    ;;

	-stff=*)
	    stffdir=`echo $arg | sed -e 's/-stff=//' -e 's/ /#/g'`
	    if [ ! -d $stffdir ] ; then
		echo "Error: couldn't find RENCI STFF library in $stffdir"
		exit 1
	    fi
	    stff=yes
	    shift
	    ;;

	-sddf=*)
	    sddfdir=`echo $arg | sed -e 's/-sddf=//' -e 's/ /#/g'`
	    if [ ! -d $sddfdir ] ; then
		echo "Error: couldn't find sddf library in $sddfdir"
		exit 1
	    fi
	    sddf=yes
	    shift
	    ;;

	-python)
	    pythonbin=`which python | sed 's,[^/]*$,,'`
	    python=yes
	    shift
	    ;;

	-pythoninc=*)
	    pythoninc=`echo $arg | sed -e 's/-pythoninc=//' -e 's/ /#/g'`
	    if [ ! -d $pythoninc ]
	    then
		echo "Error: Cannot access Python include directory $pythoninc"
		exit 1
	    fi
	    python=yes
	    shift
	    ;;

	-pythonlib=*)
	    pythonlib=`echo $arg | sed -e 's/-pythonlib=//' -e 's/ /#/g'`
	    if [ ! -d $pythonlib ]
	    then
		echo "Error: Cannot access Python lib directory $pythonlib"
		exit 1
	    fi
	    python=yes
	    shift
	    ;;

	-opt=*)
	    useropt=`echo $arg | sed -e 's/-opt=//' -e 's/ /_/g'`
	    shift
	    ;;

	-ansic)
	    use_ansic=yes
	    shift
	    ;;

	-PROFILE)
	    profile=yes
	    shift
	    ;;

	-MULTIPLECOUNTERS)
	    echo "-MULTIPLECOUNTERS is no longer necessary, all builds support multiple counters"
	    shift
	    ;;

	-PROFILECALLS)
	    echo "-PROFILECALLS is no longer supported, try downgrading to TAU 2.18.1"
	    exit 0
	    ;;

	-PROFILEPHASE)
	    phase=yes
	    shift
	    ;;

	-PROFILECALLPATH)
	    profile=yes
	    callpath=yes
	    shift
	    ;;
	-PROFILEPARAM)
	    profile=yes
	    profileparam=yes
	    shift
	    ;;

	-PROFILECOMMUNICATORS)
	    profile=yes
	    profilecommunicators=yes
	    shift
	    ;;


	-DEPTHLIMIT)
	    depthlimit=yes
	    shift
	    ;;

	-PROFILESTATS)
	    echo "-PROFILESTATS is no longer supported, try downgrading to TAU 2.18.1"
	    exit 0
	    ;;

	-PROFILEMEMORY)
	    profile=yes
	    profilememory=yes
	    shift
	    ;;

	-PROFILEHEADROOM)
	    profile=yes
	    profileheadroom=yes
	    shift
	    ;;

	-PROFILECALLSTACK)
	    echo "-PROFILECALLSTACK is no longer supported, try downgrading to TAU 2.18.1"
	    exit 0
	    ;;

	-TRACE)
	    trace=yes
	    shift
	    ;;

	-MPITRACE)
	    mpitrace=yes
	    shift
	    ;;

	-DEBUGPROF)
	    debugprof=yes
	    shift
	    ;;

	-BGLTIMERS)
	    bgltimers=yes
	    shift
	    ;;

	-BGPTIMERS)
	    bgptimers=yes
	    shift
	    ;;

	-BGQTIMERS)
	    bgqtimers=yes
	    shift
	    ;;

	-SGITIMERS)
	    sgitimers=yes
	    shift
	    ;;

	-CRAYTIMERS)
	    craytimers=yes
	    shift
	    ;;

	-LINUXTIMERS)
	    linuxtimers=yes
	    shift
	    ;;

	-ALPHATIMERS)
	    alphatimers=yes
	    shift
	    ;;

	-CPUTIME)
	    cputime=yes
	    shift
	    ;;

	-PAPIWALLCLOCK)
	    papiwallclock=yes
	    shift
	    ;;

	-PAPIVIRTUAL)
	    papivirtual=yes
	    shift
	    ;;

	-INTELCXXLIBICC)
	    intelcxxlibicc=yes
	    shift
	    ;;

	-noex)
	    # NO exceptions to be used while building the lib.
	    noex=yes
	    shift
	    ;;

	-noplugins)
	    # Do not build plugins
	    plugins=no
	    shift
	    ;;

	-DISABLESHARED)
	    # Disable shared library creation
	    disableshared=yes
	    shift
	    ;;

	-DISABLE_MEMORY_MANAGER)
	    # Disable heap management for sampling, signal handling
	    disable_memory_manager=yes
	    shift
	    ;;

	-PMI)
	    # Enable tracking Cray topology information using PMI 
	    pmi=yes
	    shift
	    ;;

	-ENABLE_EXPORT_DYNAMIC)
	    # Turn on -Wl,--export-dynamic flag during linking
	    enable_export_dynamic=yes
	    shift
	    ;;

	-setnode0)
	    # When this option is invoked, TAU sets the default node no to 0 instead
	    # of using -1. So, profile.0.0.0 is created even if TAU_PROFILE_SET_NODE(0)
	    # is not called in the application. Do not use with tracing
	    setnode0=yes
	    shift
	    ;;

	-arch=*)
	    tauarch=`echo $arg | sed -e 's/-arch=//' -e 's/ /_/g'`
	    shift
	    if [ $tauarch = i386_linux ]; then
		orig_useropt="$orig_useropt -m32"
	    fi
	    ;;

	-host=*)
	    host=`echo $arg | sed -e 's/-host=//' -e 's/ /_/g'`
	    host_prefix=${host}-
	    fixmakeargs="$fixmakeargs host=$host"
	    shift
	    ;;

	-hostutils)
	    fixmakeargs="$fixmakeargs HOSTUTILS"
	    shift
	    ;;

	-host_sysroot=*)
	    host_sysroot=`echo $arg | sed -e 's/-host_sysroot=//'`
	    fixmakeargs="$fixmakeargs host_sysroot=$host_sysroot"
	    shift
	    ;;

	-pdtcompdir=*)
	    pdtcompdir=`echo $arg | sed -e 's/-pdtcompdir=//' -e 's/ /_/g'`
	    shift
	    ;;

	-pdtarchdir=*)
	    pdtarchdir=`echo $arg | sed -e 's/-pdtarchdir=//' -e 's/ /_/g'`
	    shift
	    ;;

	-prefix=*)
	    tauprefix=`echo $arg | sed -e 's/-prefix=//' -e 's/ /_/g'`
	    fixmakeargs="$fixmakeargs tauprefix=$tauprefix"
	    shift
	    ;;

	-exec-prefix=*)
	    execprefix=`echo $arg | sed -e 's/-exec-prefix=//' -e 's/ /_/g'`
	    fixmakeargs="$fixmakeargs execprefix=$execprefix"
	    shift
	    ;;

	-cuda=*)
	    cudainclude=`echo $arg | sed -e 's/-cuda=//' -e 's/ /#/g'`/include
	    if [ ! -d $cudainclude ] ; then
		echo "Error: Cannot access GPU include directory $cudainclude"
		exit 1
	    fi
	    #		useropt="$useropt#-DTAU_MAX_THREADS=32"
	    cuda=yes
	    shift
	    ;;
	-cudalibrary=*)
	    cudalibrary=`echo $arg | sed -e 's/-cudalibrary=//' -e 's/ /#/g'`
	    fixmakeargs="$fixmakeargs cudalibrary=$cudalibrary"
	    shift
	    ;;

	-DISABLE_OPENCL)
	    opencl=disable
            use_opencl=no
	    shift
	    ;;

	-opencl=*)
	    openclinclude=`echo $arg | sed -e 's/-opencl=//' -e 's/ /#/g'`/include
	    if [ ! -d $openclinclude ] ; then
		echo "Error: Cannot access GPU include directory $openclinclude"
		if [ `uname -s ` = "Darwin" ];  then
		  echo "Adding -useropt=-framework openCL"
		  useropt="-framework#openCL"
		  fixmakeargs="$fixmakeargs OPENCL TAU_USE_GPU "
                  use_opencl=yes
		else
		  exit 1
		fi
	    fi
	    if [ -f "$openclinclude/CL/cl.h" ] ; then
		#			useropt="$useropt#-DTAU_MAX_THREADS=32"
		fixmakeargs="$fixmakeargs OPENCL TAU_USE_GPU openclinclude=$openclinclude"
                use_opencl=yes
	    else
		echo "Error: Cannot find GPU headers, TAU currently supports either CUDA or OpenCL"
	    fi
	    shift
	    ;;

	-cupti=*)
	    tauoptions="${tauoptions}-cupti"
	    cupti=`echo $arg | sed -e 's/-cupti=//' -e 's/ /#/g'`
	    if [ ! -d $cupti ] ; then
		echo "Error: Cannot access CUPTI include directory $cupti"
		exit 1
	    fi
	    if [ -f "$cupti/include/cupti_events.h" ] ; then
		fixmakeargs="$fixmakeargs CUPTI cuptiinclude=$cupti/include"
		cupti=yes
	    else
		echo "Error: Cannot find CUPTI headers."
		exit 1
	    fi
	    shift
	    ;;
	default)
	    echo "Fixing Makefiles"
	    ;;
	'')
	    #echo "NULL switch!"
	    # Required for HP/Compaq Tru64 machines.
	    ;;
	*)
	    echo "ERROR: Command line switch \`$arg' not recognized" 1>&2
	    echo "Run configure with -help to see a list of options" 1>&2
	    exit 1
	    ;;
	default)
	    echo "Fixing Makefiles"
	    ;;
	'')
	    #echo "NULL switch!"
	    # Required for HP/Compaq Tru64 machines.
	    ;;
	*)
	    echo "ERROR: Command line switch \`$arg' not recognized" 1>&2
	    echo "Run configure with -help to see a list of options" 1>&2
	    exit 1
	    ;;
    esac
done

# Check for Python
if [ "x$python"  = "xyes" ] ; then
  if [ "x$pythoninc" = "x" ] ; then
    pythoninc=`echo ${pythonbin}../include/python* | sed -e 's/ .*//g'`
    if [ ! -d $pythoninc ] ; then
        echo "Error: Cannot access Python include directory $pythoninc"
        exit 1
    fi
  fi
  if [ "x$pythonlib" = "x" ] ; then
    for libdir in "lib64" "lib32" "lib" ; do
      pythonlib=`echo ${pythonbin}../${libdir}/python* | sed -e 's/ .*//g'`
      if [ -d "$pythonlib" ] ; then
        break
      fi
    done
    if [ ! -d $pythonlib ] ; then
      echo "Error: Cannot access Python lib directory $pythonlib"
      exit 1
    fi
  fi
fi

if [ "x$upcnetwork" = "x" ] ; then
    if [ "$mpi" = "no" ] ; then
	#echo "NOTE: UPC network and MPI not specified.  Assuming -upcnetwork=smp."
	upcnetwork=smp
    else
	#echo "NOTE: UPC network not specified.  Assuming -upcnetwork=mpi."
	upcnetwork=mpi
    fi
else
    if [ "$upcnetwork" == mpi ] && [ "$mpi" == "no" ] ; then
	#echo "NOTE: Assuming -mpi because -upcnetwork=mpi."
	mpi=yes
    fi
fi

# -- some functions

configure_java () {

    taushell=sh
    if [ $machine = solaris2* -o $machine = alpha ] ; then
	taushell=ksh
    fi

}

configure_perfexplorer () {



    cat ${tauroot}/tools/src/perfdmf/bin/configure.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/perfdmf_configure
    chmod a+rx ${targetdir}/${architecture}/bin/perfdmf_configure
    cd ${targetdir}/${architecture}/bin
    /bin/rm -f taudb_configure
    ln -s perfdmf_configure taudb_configure
    cd ${tauroot}

    cat ${tauroot}/tools/src/perfdmf/bin/createapp.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/perfdmf_createapp
    chmod a+rx ${targetdir}/${architecture}/bin/perfdmf_createapp

    cat ${tauroot}/tools/src/perfdmf/bin/createexp.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/perfdmf_createexp
    chmod a+rx ${targetdir}/${architecture}/bin/perfdmf_createexp

    cat ${tauroot}/tools/src/perfdmf/bin/loadtrial.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/perfdmf_loadtrial
    chmod a+rx ${targetdir}/${architecture}/bin/perfdmf_loadtrial
    cd ${targetdir}/${architecture}/bin
    /bin/rm -f taudb_loadtrial
    ln -s perfdmf_loadtrial taudb_loadtrial
    cd ${tauroot}

    cat ${tauroot}/tools/src/perfdmf/bin/phaseconvert.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/phaseconvert
    chmod a+rx ${targetdir}/${architecture}/bin/phaseconvert

    cat ${tauroot}/tools/src/tau_user_setup.sh.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
	> ${targetdir}/${architecture}/bin/tau_user_setup.sh
    chmod a+rx ${targetdir}/${architecture}/bin/tau_user_setup.sh

	# stuff for SSL key configuration
    cp ${tauroot}/tools/src/perfdmf/bin/taudb_keygen ${targetdir}/${architecture}/bin/.
    cp ${tauroot}/tools/src/perfdmf/bin/taudb_install_cert ${targetdir}/${architecture}/bin/.

    # copy these files to the etc directory for tau_user_setup.sh to find and use
    mkdir -p ${targetdir}/etc
    cp ${tauroot}/tools/src/perfdmf/bin/derby.properties.skel ${targetdir}/etc
    cp ${tauroot}/tools/src/contrib/jython.registry ${targetdir}/etc

    cat ${tauroot}/tools/src/perfexplorer/bin/configure.skel |
    sed -e 's,@TAUROOTDIR@,'$tauroot',' \
	-e 's,@SHELL@,'$taushell',' \
	-e 's,@ARCH@,'$architecture',' \
	-e 's,@TARGETDIR@,'$targetdir',' \
	> ${tauroot}/tools/src/perfexplorer/configure
    chmod a+rx ${tauroot}/tools/src/perfexplorer/configure

    cat ${tauroot}/tools/src/perfexplorer/bin/perfexplorer_configure.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir',' \
	-e 's,@SHELL@,'$taushell',' \
	-e 's,@ARCH@,'$architecture',' \
	-e 's,@TARGETDIR@,'$targetdir',' \
	> ${targetdir}/${architecture}/bin/perfexplorer_configure
    chmod a+rx ${targetdir}/${architecture}/bin/perfexplorer_configure

    cat ${tauroot}/tools/src/java-1.4/configure-1.4.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir',' \
	-e 's,@SHELL@,'$taushell',' \
	-e 's,@ARCH@,'$architecture',' \
	-e 's,@TARGETDIR@,'$targetdir',' \
	> ${targetdir}/${architecture}/bin/configure-1.4
    chmod a+rx ${targetdir}/${architecture}/bin/configure-1.4


    if [ ! -d ${targetdir}/etc ] ; then
	mkdir -p ${targetdir}/etc
    fi
    cp ${tauroot}/tools/src/perfexplorer/bin/perfexplorer.skel ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.derby ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.h2 ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.mysql ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.oracle ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.postgresql ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/dbschema.db2 ${targetdir}/etc/.
    cp ${tauroot}/tools/src/perfexplorer/etc/java.policy ${targetdir}/etc/.
    if [ ! -d ${targetdir}/etc/topology ]; then
	cp -r ${tauroot}/etc/topology ${targetdir}/etc
	cp ${tauroot}/etc/blacklist.txt ${targetdir}/etc/.
    fi

    # copy PerfDMF schema files
    cp ${tauroot}/tools/src/perfdmf/etc/* ${targetdir}/etc/.

    # copy PTTS base html files
    if [ ! -r ${targetdir}/etc/ptts.html.index ] ; then
      cp ${tauroot}/etc/ptts.html.* ${targetdir}/etc/.
    fi 

    if [ ! -d ${targetdir}/tools/src/perfdmf/etc ] ; then
	mkdir -p ${targetdir}/tools/src/perfdmf/etc
    fi
    cp ${tauroot}/tools/src/perfdmf/etc/dbschema*.txt ${targetdir}/tools/src/perfdmf/etc/. 2>/dev/null


    BINTARGET=${targetdir}/${architecture}/bin
    JARTARGET=${targetdir}/${architecture}/lib


    #it needed JARTARGET
    #it modifies paraprof.skel
    copy_own_cube_reader_if_selected


    # install paraprof
    cat ${tauroot}/tools/src/paraprof/bin/paraprof.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > $BINTARGET/paraprof
    chmod a+rx $BINTARGET/paraprof

    # install ppscript
    cat ${tauroot}/tools/src/ppscript.skel |
    sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > $BINTARGET/ppscript
    chmod a+rx $BINTARGET/ppscript

    # install portal utils
    cat ${tauroot}/tools/src/tau_portal/bin/perfdmfdb.py.skel | sed -e 's,@BINDIR@,'$BINTARGET',' > $BINTARGET/perfdmfdb.py
    cat ${tauroot}/tools/src/tau_portal/bin/portal.py.skel | sed -e 's,@BINDIR@,'$BINTARGET',' > $BINTARGET/portal.py
    cp ${tauroot}/tools/src/tau_portal/bin/tau_portal.py $BINTARGET
    chmod a+rx $BINTARGET/tau_portal.py $BINTARGET/portal.py $BINTARGET/perfdmfdb.py

    cp include/tauarch.h.default include/tauarch.h
    if [ $default = "true" ] ; then
	echo "#define TAU_BIN_DIR \"default\"" >> include/tauarch.h
    else
	echo "#define TAU_BIN_DIR \"$BINTARGET\"" >> include/tauarch.h
	echo "#define TAU_LIB_DIR \"$targetdir/$machine/lib/shared$tauoptions\"" >> include/tauarch.h
    fi

    cat ${tauroot}/tools/src/perfexplorer/bin/perfexplorer.skel |
    sed -e 's,@TAUROOT@,'$targetdir',' \
	-e 's,@TAUSHELL@,'$taushell',' \
	-e 's,@TAUARCH@,'$architecture',' \
	-e 's,@RROOT@,'$rroot',' \
	-e 's,@ANALYSIS_ENGINE@,'weka',' \
	-e 's,@SERVER_HOSTNAME@,'$serverhostname',' \
	-e 's,@SERVER_OBJECT_PORT@,'$objectport',' \
	-e 's,@SERVER_RMIREGISTRY_PORT@,'$registryport',' \
	-e 's,@CONFIGFILE@,'$configfile',' \
	> $BINTARGET/perfexplorer
    chmod a+rx $BINTARGET/perfexplorer

    # install tau_gen_wrapper
    cp ${tauroot}/tools/src/tau_gen_wrapper $BINTARGET

    # install tau_macro.sh
    cp ${tauroot}/tools/src/tau_macro.sh $BINTARGET


    if [ ! -f $BINTARGET/jracy ] ; then
	cd $BINTARGET/; ln -s paraprof jracy; cd ${tauroot};
    fi

    #installs the tau_java handeler
    cat ${tauroot}/tools/src/tau_java.skel | sed -e 's,@JARTARGET@,'$JARTARGET',' -e 's,@JDKDIR@,'$jdkdir',' > $BINTARGET/tau_java
    chmod a+rx $BINTARGET/tau_java


    cp ${tauroot}/tools/src/paraprof/bin/paraprof.jar $JARTARGET
    cp ${tauroot}/tools/src/perfdmf/bin/perfdmf.jar $JARTARGET
    cp ${tauroot}/tools/src/perfexplorer/perfexplorer.jar $JARTARGET
    cp ${tauroot}/src/Profile/TAU.jar $JARTARGET
    cp ${tauroot}/tools/src/perfexplorer/perfexplorer-1.4.jar $JARTARGET
    cp ${tauroot}/tools/src/vis/bin/vis.jar $JARTARGET
    cp ${tauroot}/tools/src/vis-jogl2/bin/vis-jogl2.jar $JARTARGET
    cp ${tauroot}/tools/src/common/bin/tau-common.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jargs.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/google-gson-2.1/gson-2.1.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/batik-combined.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jfreechart-1.0.12.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jcommon-1.0.15.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jgraph.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jython.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jogl/jogl.jar $JARTARGET
    #Used for jogl2
    cp ${tauroot}/tools/src/contrib/jogl/jogl-all.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/jogl/gluegen-rt.jar $JARTARGET

    cp ${tauroot}/tools/src/contrib/derby.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/h2.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/mysql.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/postgresql.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/xerces.jar $JARTARGET
    cp ${tauroot}/tools/src/contrib/mesp.jar $JARTARGET
    cp ${tauroot}/tools/src/common/resources/tau16x16.gif $JARTARGET

    # install the perl scripts for ebs post-processing in the bin dir
    cp ${tauroot}/tools/src/tau_ebs_process.pl $BINTARGET
    cp ${tauroot}/utils/ebs2otf/tau_ebs2otf.pl $BINTARGET
    cp ${tauroot}/tools/src/pycoolr/bin/pycoolr $BINTARGET
    chmod a+rx $BINTARGET/pycoolr
    cp -r ${tauroot}/tools/src/pycoolr/src/pycoolrgui $BINTARGET

    # install post-mortem address translation tool
    cp ${tauroot}/tools/src/tau_resolve_addresses.py $BINTARGET
    chmod +x $BINTARGET/tau_resolve_addresses.py

    # install tau_baseline toool
    cp ${tauroot}/tools/src/tau_baseline $BINTARGET
    chmod +x $BINTARGET/tau_baseline

    case $machine in

	apple)
	    gunzip -c tools/src/contrib/jogl/apple/libjogl.jnilib.gz > $JARTARGET/libjogl.jnilib
	    gunzip -c tools/src/contrib/jogl/apple/libjogl_awt.jnilib.gz > $JARTARGET/libjogl_awt.jnilib
	    gunzip -c tools/src/contrib/jogl/apple/libjogl_cg.jnilib.gz > $JARTARGET/libjogl_cg.jnilib
	    cp tools/src/contrib/jogl/apple/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
	    cp tools/src/contrib/jogl/apple/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar

	    ;;

	i386_linux)
	    gunzip -c tools/src/contrib/jogl/i386_linux/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/i386_linux/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/i386_linux/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
	    gunzip -c tools/src/contrib/jogl/i386_linux/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    cp tools/src/contrib/jogl/i386_linux/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
            cp tools/src/contrib/jogl/i386_linux/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar

	    ;;

	arm_linux|arm64_linux)
	    gunzip -c tools/src/contrib/jogl/arm_linux/jogl.jar.gz > $JARTARGET/jogl.jar
	    gunzip -c tools/src/contrib/jogl/arm_linux/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/arm_linux/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so

	    cp tools/src/contrib/jogl/arm_linux/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
            cp tools/src/contrib/jogl/arm_linux/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar

            if [ -r tools/src/contrib/jogl/arm_linux/libjogl_drihack.so.gz ] ; then
              gunzip -c tools/src/contrib/jogl/arm_linux/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
            fi

            if [ ! -r /usr/lib/libGL.so.1 ]
            then
		echo "NOTE: Did not find OpenGL library, copying TAU's Mesa libGL.so.1 to arm_linux/lib directory"
		gunzip -c tools/src/contrib/jogl/arm_linux/libGL.so.1.gz > $JARTARGET/libGL.so.1
            fi


            if [ -r tools/src/contrib/jogl/arm_linux/gluegen.jar.gz -a -r tools/src/contrib/jogl/arm_linux/libgluegen-rt.so.gz ] ; then
              gunzip -c tools/src/contrib/jogl/arm_linux/libgluegen-rt.so.gz > $JARTARGET/libgluegen-rt.so
              gunzip -c tools/src/contrib/jogl/arm_linux/gluegen.jar.gz > $JARTARGET/gluegen.jar
            fi

	    ;;

	crayxmt)
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
	    ;;

	nec-sx-aurora)
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
	    ;;

	craycnl|sparc64fx)
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
	    ;;

	xt3)
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
	    ;;

	x86_64)
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
            cp tools/src/contrib/jogl/x86_64/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
            cp tools/src/contrib/jogl/x86_64/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar
	    ;;

        mic_linux)
            gunzip -c tools/src/contrib/jogl/x86_64/libjogl.so.gz > $JARTARGET/libjogl.so
            gunzip -c tools/src/contrib/jogl/x86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
            gunzip -c tools/src/contrib/jogl/x86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
            gunzip -c tools/src/contrib/jogl/x86_64/libjogl_cg.so.gz > $JARTARGET/libjogl_cg.so
            ;;


	ia64)
	    gunzip -c tools/src/contrib/jogl/ia64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/ia64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/ia64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	solaris2)
	    gunzip -c tools/src/contrib/jogl/solaris2/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/solaris2/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/solaris2/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	solaris2-64)
	    gunzip -c tools/src/contrib/jogl/solaris2-64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/solaris2-64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/solaris2-64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	sun386i)
	    gunzip -c tools/src/contrib/jogl/sun386i/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/sun386i/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/sun386i/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	sunx86_64)
	    gunzip -c tools/src/contrib/jogl/sunx86_64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/sunx86_64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/sunx86_64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	ppc64)
	    gunzip -c tools/src/contrib/jogl/ppc64/jogl.jar.gz > $JARTARGET/jogl.jar
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
            cp tools/src/contrib/jogl/ppc64/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
            cp tools/src/contrib/jogl/ppc64/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar
	    ;;

	ibm64linux)
            cp tools/src/contrib/jogl/ppc64/gluegen-rt-natives*.jar $JARTARGET/gluegen-rt-natives.jar
            cp tools/src/contrib/jogl/ppc64/jogl-all-natives*.jar $JARTARGET/jogl-all-natives.jar
            ;;

	bgp)
	    gunzip -c tools/src/contrib/jogl/ppc64/jogl.jar.gz > $JARTARGET/jogl.jar
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/ppc64/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    ;;

	bgq)
	    gunzip -c tools/src/contrib/jogl/bgq/jogl.jar.gz > $JARTARGET/jogl.jar
	    gunzip -c tools/src/contrib/jogl/bgq/libjogl.so.gz > $JARTARGET/libjogl.so
	    gunzip -c tools/src/contrib/jogl/bgq/libjogl_awt.so.gz > $JARTARGET/libjogl_awt.so
	    gunzip -c tools/src/contrib/jogl/bgq/libjogl_drihack.so.gz > $JARTARGET/libjogl_drihack.so
	    if [ -r ${JAVA_HOME}/lib/ppc64/libjawt.so ]; then
		/bin/rm -f $JARTARGET/libjawt.so
		ln -s ${JAVA_HOME}/lib/ppc64/libjawt.so $JARTARGET/libjawt.so
            fi
	    ;;

	*)
	    echo "Platform does not support JOGL, no 3d displays will be available in ParaProf"

	    ;;
    esac


}

make_directories () {
    if [ "$tauprefix" = "unknown" ] ; then
	fixmakeargs="$fixmakeargs tauprefix=$tauroot"
    fi

    # make bin dir if it does not exist
    if [ ! -d $tautoplevel/$architecture ] ; then
	mkdir -p $tautoplevel/$architecture
    fi
    if [ ! -d $tautoplevel/$architecture/bin ] ; then
	mkdir -p $tautoplevel/$architecture/bin
    fi

    # make lib dir if it does not exist
    if [ ! -d $tautoplevel/$architecture/lib ] ; then
	mkdir -p $tautoplevel/$architecture/lib
    fi
}


# -- set up portable echo command
case "`echo 'x\c'`" in
    'x\c')  echo="echo -n"  nnl= ;;     #BSD
    x)      echo="echo"     nnl="\c";;  #SysV
    *)      echo 'Cannot setup echo. What weird machine do you have?' 1>2&
        echo="echo"  nnl="\c" ;;
esac

# lth@cs.uoregon.edu: don't mess with the compiler if it is 'default'.
# The user may define TAU_CCOM as an environment variable or let it be blank;
# if blank, it is defaulted in archfind.

if [ "$c_compiler" != "" -a "$c_compiler" != "default" ]; then
    TAU_CCOM="$c_compiler"          # for 'archfind'
    if [ "$c_compiler" = mpc_cc ]
    then
      TAU_CCOM="$mpc_c_compiler"
    fi
    export TAU_CCOM
fi


echo "-------------------- TAU configure script ------------------"


tauroot=`pwd | sed -e 's,^/tmp_mnt/nfs,,' -e 's,^/tmp_mnt,,'`

if [ ${tauprefix} = unknown ] ; then
    targetdir=${tauroot}
    tautoplevel=$tauroot
else
    targetdir=${tauprefix}
    tautoplevel=$tauprefix
fi

cp include/tauroot.h.default include/tauroot.h
echo \#define TAUROOT \"$tauroot\" > include/tauroot.h
if [ $tauprefix != unknown ] ; then
    echo \#define TAUROOT \"$tauprefix\" > include/tauroot.h
fi

echo "  The TAU source code has just been configured to use the"
echo "  tau root directory $tauroot."
echo "  If you move the Tau distribution, you must run configure"
echo "  again and recompile"
echo "------------------------------------------------------------"

#
# Save configuration environment for future reference
#
md5sum="`which md5sum 2>/dev/null || which md5 2>/dev/null`"
if [ "x$md5sum" = "x" ] ; then
  echo "Warning: can't find md5sum or md5."
else
  confenvdir="$tauroot/.configure_env"
  argsum=`echo "$all_args" | $md5sum | awk '{print $1}'`
  mkdir -p "$confenvdir"
  confenvfile="$confenvdir/$argsum"
  set > "$confenvfile"
  fixmakeargs="$fixmakeargs confenvfile=$confenvfile"
fi

fixmakeargs="$fixmakeargs tauroot=$tauroot"
# Try and figure out architecture
detectarch=unknown
cd utils
detectarch=`./archfind`
detectxdev=`./archfind -x`
cd ..
if [ "x$detectarch" = "x" ] ; then
    detectarch=unknown
fi


case "$tauarch" in
  i386_linux|i386_solaris|arm_android|arm_linux|mpis32|ppc64)
    fixmakeargs="$fixmakeargs arch_width=32bit"
    ;;
  *)
    fixmakeargs="$fixmakeargs arch_width=64bit"
    ;;
esac

###############################################################
# if there are no arguments, GUESS at system configuration
if [ $tauarch = unknown -o $tauarch = none ]
then
    if [ $# = 1 ]
    then
	if [ $1 = default ]
	then
	    machine=$1
	fi
    else
        echo Attempting to auto-configure system, determining architecture...
        machine=$detectarch
        if [ $machine = unknown ]
        then
            echo I could not determine the architecture of this host
            echo You must give me a hint.
	    echo Perhaps, the C compiler is not working.
            echo Please check the licenses.
            exit 0
        fi
        echo I think this is a $machine...
    fi
else
    machine=$tauarch
    if [ $detectarch != unknown -a $machine != unknown ] ; then
        detectxdev=$machine
        if [ $detectarch != $machine ] ; then
	    echo WARNING\!\! Auto-detect:$detectarch overridden with $machine
        fi
    fi
fi

#detech the java version.
if [ "x$java" = "xyes" ]
then
    if [ "x$machine" = "xapple" ]
    then
	#echo "${jdkdir}/Commands/java -version"
	jv=`${jdkdir}/Commands/java -version 2>&1 | grep version | awk '{ print $3; }'| sed -e s/\"//g`
    else
	jv=`${jdkdir}/bin/java -version 2>&1 | grep version | awk '{ print $3; }'| sed -e s/\"//g`
    fi
    #echo "jv = $jv"
    major=`echo $jv | sed 's/\([0-9]*\).*/\1/g'`
    minor=`echo $jv | sed 's/'${major}'.\([0-9]*\).*/\1/g'`
    #echo "major = $major, minor = $minor"
    if [ "x$major" = "x1" ]
    then
	if [ $minor -lt 5 ]
	then
	    echo "Error: Please specify a JDK version 1.5 or later to use JVMTI based instrumentation"
	else
	    fixmakeargs="$fixmakeargs JVMTI jdkdir=$jdkdir"
	fi
    fi
fi


# use -m32 when specifying 32 bit on an Opteron/EM64T
if [ "x$detectarch" = "xx86_64" -a "x$machine" = "xi386_linux" ] ; then
    fixmakeargs="$fixmakeargs FORCEIA32"
fi


if [ $machine = mips ] ; then
    sicortex=yes
fi
if [ $machine = mips32 ] ; then
    sicortex=yes
fi

if [ $sicortex = yes ] ; then
    sicortexlink=""
    sicortexmpi=""
    if [ $epilog = yes ] ; then
	epiloglibdir=$epilogdir/lib
	elglibrary="-lelg"
	if [ $mpi = yes -a $openmp = yes ] ; then
	    # hybrid
	    sicortexlink="-L$epiloglibdir#-Wl,-whole-archive#-lfmpi#-lelg.ompi#-Wl,-no-whole-archive#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	elif [ $mpi = yes ] ; then
	    # mpi
	    sicortexlink="-L$epiloglibdir#-lfmpi#-lelg.mpi#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	elif [ $openmp = yes ] ; then
	    # openmp
	    sicortexlink="-L$epiloglibdir#-Wl,-whole-archive#-lelg.omp#-Wl,-no-whole-archive#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	else
	    # serial
	    sicortexlink="-L$epiloglibdir#-lelg#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	fi

    fi
    if [ $vampirtrace = yes ] ; then
	vampirtracelibdir=lib
	if [ $mpi = yes -a $openmp = yes ] ; then
	    # hybrid
	    sicortexlink="-L$vampirtracedir/$vampirtracelibdir#-Wl,-whole-archive#-lvt.fmpi#-lvt.ompi#-lotf#-Wl,-no-whole-archive#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	elif [ $mpi = yes ] ; then
	    # mpi
	    sicortexlink="-L$vampirtracedir/$vampirtracelibdir#-lvt.fmpi#-lvt.mpi#-lotf#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	elif [ $openmp = yes ] ; then
	    # openmp
	    sicortexlink="-L$vampirtracedir/$vampirtracelibdir#-Wl,-whole-archive#-lvt.omp#-lotf#-Wl,-no-whole-archive#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	else
	    # serial
	    sicortexlink="-L$vampirtracedir/$vampirtracelibdir#-lvt#-lotf#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-lscmpi"
	fi

    fi

    fixmakeargs="$fixmakeargs SICORTEX sicortexlink=${sicortexlink}"
fi


######################################################################
# If the default gcc/g++ is not used, Modify the Makefiles...
# Choose the c++ and cc compiler

case $machine in
    tc2000 | ksr1 | c90 | cray | t3e | crayx1 | craysv1)
	if [ $cxx_compiler = default ]
	then
            cxx_compiler=CC
	fi

	if [ $c_compiler = default ]
	then
            c_compiler=cc
	fi
	;;

    nec)
	if [ $cxx_compiler = default ]
	then
            cxx_compiler=c++
	fi

	if [ $c_compiler = default ]
	then
            c_compiler=cc
	fi
	;;

    apple)
	if [ "$cxx_compiler" = "default" ]
	then
            cxx_compiler=g++
	fi

	if [ "$c_compiler" = "default" ]
	then
            c_compiler=gcc
	fi
	;;


    cygwin)
	if [ $cxx_compiler = default ]
	then
            cxx_compiler=g++
	fi

	if [ $c_compiler = default ]
	then
            c_compiler=gcc
	fi
	;;

    alpha)
	if [ $cxx_compiler = default ]
	then
	    # If it has the HP/Compaq cxx compiler, use it
	    if [ -d /lib/cmplrs/cxx ]
            then
		cxx_compiler=cxx
            else
		cxx_compiler=g++
            fi
	    c_compiler=cc
	fi

	if [ $c_compiler = default ]
	then
            c_compiler=gcc
	fi
	;;

    rs6000 | ibm64)
	if [ $cxx_compiler = default ]
	then
            # If it has the IBM xlC compiler, use it
	    if [ -f /usr/bin/xlC -o -f /usr/vacpp/bin/xlC ]
            then
		cxx_compiler=xlC_r
		c_compiler=xlc_r
            else
		cxx_compiler=g++
            fi
	fi

	if [ $c_compiler = default ]
	then
            c_compiler=gcc
	fi
	;;

    bgl)
	if [ $cxx_compiler = default ]
	then
	    cxx_compiler=blrts_xlC
	    c_compiler=blrts_xlc
	fi
	;;

    bgp|bgq)
	if [ $cxx_compiler = default ] ; then
	    cxx_compiler=mpixlcxx_r
	    c_compiler=mpixlc_r

	    # test compiler version for 09.00.0000.0006 PMR bug fix
	    $echo "Checking version of IBM Compilers... ${nnl}"
	    version=`mpixlc -qversion | tail -n 1 | awk '{ print $2;}'`
	    echo "$version"
	    eval v1=${version/./;v2=}
	    eval v2=${v2/./;v3=}
	    eval v3=${v3/./;v4=}

	    pmr0006=no
	    if [ $v1 -gt 9 ] ; then pmr0006=yes ; fi
	    if [ $v1 -ge 9 -a $v2 -gt 0 ] ; then pmr0006=yes ; fi
	    if [ $v1 -ge 9 -a $v2 -ge 0 -a $v3 -gt 0 ] ; then pmr0006=yes ; fi
	    if [ $v1 -ge 9 -a $v2 -ge 0 -a $v3 -ge 0 -a $v4 -ge 6 ] ; then pmr0006=yes ; fi
	    if [ $pmr0006 = yes ] ; then
		echo "new"
	    else
		echo "old"
	    fi



	elif [ $cxx_compiler = mpicxx ] ; then
	    cxx_compiler=mpicxx
	    #      c_compiler=mpicc
	    #      gnu=yes
	    #      if [ $machine = bgp ]; then
	    #        fixmakeargs="$fixmakeargs GNU BGP_GFORTRAN COMPINST_GNU"
	    #      else
	    #        fixmakeargs="$fixmakeargs GNU BGQ_GFORTRAN COMPINST_GNU GNU46PLUS"
	    #      fi
	fi


	# default to this BFD installation
	# disabling for now, the BFD on BGP causes problems for the
	# shared library version of TAU (gpaw python)
	# if [ $bfd = no ] ; then
	# 	bfd=yes
	# 	bfddir=/bgsys/drivers/ppcfloor/gnu-linux
	# fi

	;;

    crayxmt)
        cxx_compiler=c++
        c_compiler=cc
	fixmakeargs="$fixmakeargs CRAYXMT"
        if [ $pdt_cxx_compiler = default ] ; then
	    pdt_cxx_full_path=/usr/bin/g++
	    pdt_cxx_compiler=/usr/bin/g++
	fi
	;;

    nec-sx-aurora)
        cxx_compiler=mpinc++
        c_compiler=mpincc
	default_fortran=mpinfort
	if [ $fortran_compiler = no ] ; then
	    fortran_compiler=mpinfort
	fi
	fixmakeargs="$fixmakeargs NEC_SX_AURORA"
	;;

    xt3)
	catamount=yes
	cxx_compiler=CC
	c_compiler=cc
	default_fortran=pgi
	if [ "x$PE_ENV" = xPGI ] ; then
	    #tauoptions="${tauoptions}-pgi"
	    pgi=yes
	    default_fortran=pgi
	    fixmakeargs="$fixmakeargs COMPINST_PGI"
	elif [ "x$PE_ENV" = xGNU ] ; then
	    gnu=yes
	    tauoptions="${tauoptions}-gnu"
	    default_fortran=gfortran
	    fixmakeargs="$fixmakeargs COMPINST_GNU"
	elif [ "x$PE_ENV" = xPATHSCALE ] ; then
	    tauoptions="${tauoptions}-pathscale"
	    default_fortran=pathscale
            pathscale=yes
	    fixmakeargs="$fixmakeargs COMPINST_GNU"
	fi
	if [ $fortran_compiler = no ] ; then
	    fortran_compiler=$default_fortran
	fi

	# unless specified, use g++
	if [ $pdt_cxx_compiler = default ] ; then
	    pdt_cxx_full_path=/usr/bin/g++
	    pdt_cxx_compiler=/usr/bin/g++
	fi
	;;

    craycnl)
	cxx_compiler=CC
	c_compiler=cc
	default_fortran=pgi
	if [ "x$CRAY_CPU_TARGET" = "xknc" ] ; then
	    fixmakeargs="$fixmakeargs CRAY_MIC"
	    tauoptions="${tauoptions}-mic"
	    craymic=yes
        fi

	if [ "x$PE_ENV" = xPGI ] ; then
	    #tauoptions="${tauoptions}-pgi"
	    pgi=yes
	    default_fortran=pgi
	    fixmakeargs="$fixmakeargs PGI COMPINST_PGI"
        elif [ "x$PE_ENV" = xGNU -a "x$CLANG_HOME" != "x" ]; then 
            llvm=yes
	    tauoptions="${tauoptions}-llvm"
	    default_fortran=gfortran
	    fixmakeargs="$fixmakeargs COMPINST_LLVM"
	elif [ "x$PE_ENV" = xGNU ] ; then
	    gnu=yes
	    tauoptions="${tauoptions}-gnu"
	    default_fortran=gfortran
	    fixmakeargs="$fixmakeargs COMPINST_GNU"
	elif [ "x$PE_ENV" = xPATHSCALE ] ; then
	    tauoptions="${tauoptions}-pathscale"
	    default_fortran=pathscale
            pathscale=yes
	    fixmakeargs="$fixmakeargs COMPINST_GNU USE_PATHCC"
	elif [ "x$PE_ENV" = xINTEL ] ; then
	    intel=yes
	    tauoptions="${tauoptions}-intel"
	    default_fortran=intel
	    fixmakeargs="$fixmakeargs COMPINST_INTEL9"
	elif [ "x$PE_ENV" = xCRAY ] ; then
	    tauoptions="${tauoptions}-cray"
	    default_fortran=cray
	    if [ $dmapp = no ]; then
		fixmakeargs="$fixmakeargs DMAPP"
            fi

	    # *CWL* - if bfd path is not explicitly specified, point
	    #         to the correct preset bfd path.
	    if [ "x$bfd" = "xno" ] ; then
		if [ "x$bfddir" = "x" ] ; then
		    bfddir="$CRAY_BINUTILS_ROOT"
		    # Do not try to enable bfd implicitly if we cannot
		    #    find a preset path for Cray compilers. Instead
		    #    disable implicit support for BFD. Cray compilers
		    #    currently have a problem with its library search
		    #    path in that it is different when the -shared
		    #    flag is used. As a result, the -lbfd link flags
		    #    previously discovered at configure time fail
		    #    at build time.
		    if [ "x$bfddir" != "x" ] ; then
			bfd=yes
                    fi
                fi
	    fi

	    # *CWL* - this is a horrid hack, but the CCE compilers on
	    #         the Cray XE6 behave differently when building
	    #         shared objects (see above) and it is not happy
	    #         with -lmpichcxx which is static. -lmpichcxx_cray
	    #         has to be used instead.
	    fixmakeargs="$fixmakeargs CRAYCNL_CCE"

	    touch conf_test.c
	    extradir=`CC -v conf_test.c 2>&1 | grep cray-c++ | sed -e 's/ /\n/g' | grep "/opt/cray/cce" | grep "lib/x86-64$" | uniq | grep -v rpath`
	    rm -f conf_test.c conf_test.o

	    # not implemented yet
	    fixmakeargs="$fixmakeargs COMPINST_CRAYCC"
	fi
	if [ $fortran_compiler = no ] ; then
	    fortran_compiler=$default_fortran
	fi

	# unless specified, use g++
	if [ $pdt_cxx_compiler = default ] ; then
	    # DO NOT SPECIFY THE PATH! If the user has compiled
	    # pdt with a different g++ than the one in /usr/bin,
	    # problems will happen. TRUST that /usr/bin is in the
	    # user's path, and if not, they don't want that g++.
	    pdt_cxx_full_path=g++
	    pdt_cxx_compiler=g++
	fi
	;;
    hitachi)
	if [ $cxx_compiler = default ]
	then
	    cxx_compiler=KCC
	    c_compiler=cc
	fi

	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs HITACHI_FORTRAN"
            fortran_compiler=yes
	fi
	;;

    sgi4k | sgi8k | sgin32 | sgi64)
	if [ $cxx_compiler = default ]
	then
	    # SGI has no 64 bit C++ compiler except "CC", so if we are an
	    # R8K, we have to use "CC"
	    if [ $machine = sgi8k -o $machine = sgin32 -o $machine = sgi64 ]
	    then
		cxx_compiler=CC
		c_compiler=cc
	    else
		# We are an SGI R4K-based machine, use NCC if available
		if [ -f /bin/NCC ]
		then
                    cxx_compiler=NCC
                    c_compiler=cc
		else
                    cxx_compiler=g++
		fi
            fi
        fi
	if [ $c_compiler = default ]
	then
            c_compiler=gcc
	fi
	;;

    *)
	if [ $cxx_compiler = default ]
	then
            cxx_compiler=g++
            if [ $fortran_compiler = no ] ; then
		fortran_compiler=gfortran
            fi
	fi
        if [ "x$fortran_compiler" = "xarmflang" ]; then
           fixmakeargs="$fixmakeargs ARMFLANG"
        fi

	if [ $c_compiler = default ]
	then
            c_compiler=gcc
	fi
	;;

esac
if [ "x$fortran_compiler" = "xno" ]; then
    echo "Not configuring for fortran."
    fixmakeargs="$fixmakeargs NOFORTRAN"
fi

if [ $cxx_compiler = clang++ -o $cxx_compiler = bgclang++ ]; then
    fixmakeargs="$fixmakeargs CLANG"
fi


if [ "$machine" = "apple" ] ; then
    mkdir -p apple/lib
    cp tools/src/common/resources/tau-medium.png apple/lib/
    compiler_name=`which $cxx_compiler | awk '{print $1;}'`
    if [ "$compiler_name" = "no" -o "$compiler_name" = "" ]; then
	echo "NOTE: No compilers found, please use option '-c++=<compilername>' if you have a C++ compiler"
	architecture=$machine
	make_directories
	configure_java
	configure_perfexplorer
	exit 0
    fi
fi


if [ $machine = craycnl -o $machine = bgq -o $machine = bgp -o $machine = bgl ] ; then
    config_compiler=`which $cxx_compiler`
    comp_minus_darshan=`echo $config_compiler | sed -e 's/darshan//g'`
    darshan_module_loaded=`env | grep LOADEDMODULES | grep darshan | wc -l`


    if [ $config_compiler = $comp_minus_darshan -a $darshan_module_loaded -eq 0 ] ; then
	echo "NOTE: Darshan test successful"
    else
	echo "NOTE: --------------------------------------------------------------"
	echo "NOTE: Darshan may not be used with TAU. Please use module unload darshan and re-configure TAU."
	echo "Darshan's wrapper libraries will clash with TAU wrappers. Exiting..."
	echo "NOTE: --------------------------------------------------------------"
	exit 1;
    fi
fi

if [ $machine = craycnl ] ; then

    cat <<EOF > conftest_shared.c
void foo() {
}
EOF
    $echo "Checking for CrayCNL shared library compatibility... ${nnl}"
    shared_opt="-shared -fPIC"

    if $c_compiler $orig_useropt $shared_opt -o conftest_shared.so conftest_shared.c -fPIC 1> /dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs CRAYCNL_SHARED"
    else
	echo "no"
	fixmakeargs="$fixmakeargs NOSHARED"
    fi

    /bin/rm -f conftest_shared.o conftest_shared.c conftest_shared.so
fi

######################################################################
# For template instantiations in the library -ptused for CC compilers
if [ $machine = sgi8k -o $machine = sgin32 -o $machine = sgi64 ]
then
    if [ $cxx_compiler = CC ]
    then
	fixmakeargs="$fixmakeargs SGICC"
	if [ $pdt = yes -a $pdt_cxx_compiler = default ]
        then
 	    fixmakeargs="$fixmakeargs PDTSGICC"
	fi
    fi
fi

if [ $machine = hitachi ]
then
    fixmakeargs="$fixmakeargs HITACHI"
fi

if [ $machine = t3e -a $cxx_compiler = CC ]
then
    fixmakeargs="$fixmakeargs CRAYCC"
fi

if [ $machine = crayx1 -o $machine = craysv1 -a $cxx_compiler = CC ]
then
    fixmakeargs="$fixmakeargs CRAYX1CC"
fi

######################################################################
# Set default Profiling Options in Makefiles
if [ $profile = no -a $trace = no -a $mpitrace = no  -a $machine != default ] ; then
    profile=yes
fi

if [ $profile = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILE"
fi

if [ $java = yes ] ; then
    tauoptions="${tauoptions}-jdk"
fi

if [ $profilestats = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILESTATS"
fi

if [ $profilememory = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILEMEMORY"
    tauoptions="${tauoptions}-memory"
fi

if [ $profileheadroom = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILEHEADROOM"
    tauoptions="${tauoptions}-headroom"
fi

if [ $tag = yes ] ; then
    tauoptions="${tauoptions}-${tautag}"
fi

if [ $callpath = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILECALLPATH"
    tauoptions="${tauoptions}-callpath"
fi

if [ $profileparam = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILEPARAM"
    tauoptions="${tauoptions}-param"
fi

if [ $profilecommunicators = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILECOMMUNICATORS PROFILEPARAM"
    tauoptions="${tauoptions}-communicators"
fi

if [ $depthlimit = yes ] ; then
    fixmakeargs="$fixmakeargs DEPTHLIMIT"
    tauoptions="${tauoptions}-depthlimit"
fi

if [ $phase = yes ] ; then
    fixmakeargs="$fixmakeargs PROFILECALLPATH PROFILEPHASE"
    tauoptions="${tauoptions}-phase"
    if [ $callpath = yes ] ; then
	echo "ERROR: Incompatible options specified."
	echo "You must choose between -PROFILECALLPATH and -PROFILEPHASE. You cannot choose both!!"
	exit 1
    fi
fi

if [ $setnode0 = yes -a $trace = no ] ; then
    fixmakeargs="$fixmakeargs SETNODE0"
    tauoptions="${tauoptions}-setnode"
fi

if [ $comm = no ] ; then
    fixmakeargs="$fixmakeargs NOCOMM"
    tauoptions="${tauoptions}-nocomm"
fi

if [ $iowrapper = yes ] ; then
    if [ $machine = rs6000 -o $machine = ibm64 ] ; then
        echo "WARNING!! Architecture does not support iowrapper"
    else
        fixmakeargs="$fixmakeargs IOWRAPPER"
    fi
fi

if [ "x$PE_ENV" = "xCRAY" -o $dmapp = yes ]; then
    if [ "x$CRAY_DMAPP_INCLUDE_OPTS" = "x" ] ; then
        echo "TAU: Please load the dmapp module on Cray to set CRAY_DMAPP_INCLUDE_OPTS environment variable and reconfigure TAU with the -dmapp configure option"
    else
        fixmakeargs="$fixmakeargs DMAPP"
    fi
fi


if [ $stff = yes ] ; then
    fixmakeargs="$fixmakeargs RENCI_STFF stffdir=${stffdir} sddfdir=${sddfdir}"
    tauoptions="${tauoptions}-stff"
    if [ $sddf = no -o "x$sddfdir" = "x" ]; then
        echo "Error: Must specify -sddf=/path/to/sddflib along with -stff=/path/to/stfflib!"
    fi
fi


if [ $trace = yes ] ; then
    cat <<EOF > tau_type_test.c
  #include <include/Profile/tau_types.h>

  int main(int argc, char **argv) {
    if (sizeof(x_int8) != 1 ||
        sizeof(x_int16) != 2 ||
        sizeof(x_int32) != 4 ||
        sizeof(x_int64) != 8) {
        return -1;
    }
    return 0;
  }
EOF

    if [ $catamount = no -a ! $machine = bgl -a ! $machine = bgp -a ! $machine = bgq -a ! $machine = mips -a ! $machine = mips32 ] ; then
	$echo "Checking type sizes... ${nnl}"
	if $c_compiler -I. $orig_useropt tau_type_test.c -o tau_type_test 1> /dev/null 2>&1 ; then
	    if ./tau_type_test 1> /dev/null 2>&1 ; then
		echo "ok"
	    else
		echo ""
		echo ""
		echo "Warning: couldn't find correct type sizes!"
		echo "Please contact tau-bugs@cs.uoregon.edu with your system details"
		echo ""
	    fi
	else
	    echo ""
	    echo ""
	    echo "Warning: couldn't find correct type sizes!"
	    echo "Please contact tau-bugs@cs.uoregon.edu with your system details"
	    echo ""
	fi
	rm -f tau_type_test.c tau_type_test
    fi

    fixmakeargs="$fixmakeargs TRACE"
fi

if [ $mpitrace = yes ] ; then
    fixmakeargs="$fixmakeargs MPITRACE"
fi


if [ $alphatimers = yes ] ; then
    fixmakeargs="$fixmakeargs ALPHATIMERS"
    tauoptions="${tauoptions}-alphatimers"
fi


if [ $bgltimers = yes ] ; then
    fixmakeargs="$fixmakeargs BGLTIMERS"
    tauoptions="${tauoptions}-bgltimers"
fi

if [ $bgptimers = yes ] ; then
    fixmakeargs="$fixmakeargs BGPTIMERS"
    tauoptions="${tauoptions}-bgptimers"
fi

if [ $bgqtimers = yes ] ; then
    fixmakeargs="$fixmakeargs BGQTIMERS"
    tauoptions="${tauoptions}-bgqtimers"
fi

if [ $craytimers = yes ] ; then
    fixmakeargs="$fixmakeargs CRAYTIMERS"
    tauoptions="${tauoptions}-craytimers"
fi

if [ $cputime = yes ] ; then
    fixmakeargs="$fixmakeargs CPUTIME"
fi


if [ $machine = sgi8k -o $machine = sgin32 -o $machine = sgi64 ] ; then
    if [ $cxx_compiler = g++ ] ; then
	fixmakeargs="$fixmakeargs SGIGNU"
    fi
fi

if [ $machine = freebsd ] ; then
    fixmakeargs="$fixmakeargs FREEBSD"
fi

if [ $machine = mic_linux ] ; then
    fixmakeargs="$fixmakeargs MIC_LINUX"
    orig_useropt="-xMIC-AVX512 -O2 "
fi

if [ $machine = apple ] ; then
    if [ $cxx_compiler = g++ -o $cxx_compiler = g++-5 -o $cxx_compiler = g++-6 -o $cxx_compiler = g++-7 -o $cxx_compiler = g++-8 -o $cxx_compiler = c++  -o $cxx_compiler = icpc ] ; then
	fixmakeargs="$fixmakeargs APPLECXX"
    fi
    if [ $cxx_compiler = pgCC -o $cxx_compiler = pgcpp ] ; then
	fixmakeargs="$fixmakeargs APPLEPGI"
    fi
    if [ $fortran_compiler = ibm -o $fortran_compiler = ibm64 ] ; then
	fixmakeargs="$fixmakeargs IBMXLFAPPLE"
	extradir=`which xlf90 | sed s/xlf90/../`
	fortran_compiler=yes
    fi
fi

if [ $machine = ppc64 -o $machine = bgl -o $machine = bgp -o $machine = bgq ] ; then
    if [ $cxx_compiler = g++ ] ; then
	if [ $fortran_compiler = no ] ; then
	    extradir=`which xlf90 | sed s/xlf90/../`
	    fixmakeargs="$fixmakeargs IBM_FORTRAN"
	fi
    fi
fi

if [ $machine = ibm64 -o $machine = ibm64linux ] ; then
    if [ $cxx_compiler = g++ -o $cxx_compiler = powerpc64-linux-g++ ] ; then
	if [ $fortran_compiler = no ] ; then
	    extradir=`which xlf90 | sed s/xlf90/../`
	    fixmakeargs="$fixmakeargs IBM64_FORTRAN"
	fi
    fi
fi

if [ $cxx_compiler = x86_64-w64-mingw32-g++ ]; then
    fixmakeargs="$fixmakeargs TAU_WINDOWS MINGW GNU"
fi

if [ $machine = t3e -a $cxx_compiler = KCC ] ; then
    fixmakeargs="$fixmakeargs CRAYKAI"
    if [ $fortran_compiler = no ] ; then
	fixmakeargs="$fixmakeargs CRAY_FORTRAN"
	fortran_compiler=yes
    fi
fi

if [ $machine = crayx1 -o $machine = craysv1 ] ; then
    if [ $fortran_compiler = no ] ; then
	fixmakeargs="$fixmakeargs CRAY_X1_FORTRAN"
	fortran_compiler=yes
    fi
fi


if [ $debugprof = yes ] ; then
    fixmakeargs="$fixmakeargs DEBUGPROF"
fi


orig_c_compiler=$c_compiler
orig_cxx_compiler=$cxx_compiler
orig_fortran_compiler=$fortran_compiler
# mpicxx may change it.
if [ $cxx_compiler = mpicxx ] ; then
    cxxloaded=`which mpicxx 2>/dev/null | wc -l`
    mpi=yes
    if [ $cxxloaded = 1 ]
    then
	c_compiler=`mpicc -show | awk '{ print $1;}' | sed -e 's@/.*/@@g'`
	cxx_compiler=`mpicxx -show | awk '{ print $1;}' | sed -e 's@/.*/@@g'`
	f90loaded=`which mpif90 2>/dev/null | wc -l`
	if [ $f90loaded = 1 -a "x$orig_fortran_compiler" = "xmpif90" ]
	then
            fortran_compiler=`mpif90 -show | awk '{ print $1;}' | sed -e 's@/.*/@@g'`
            if [ "x$fortran_compiler" = "xifort" ]; then
		fortran_compiler=intel
	    fi
            if [ "x$fortran_compiler" = "xxlf_r" -o "x$fortran_compiler" = "xxlf90_r"  -o "x$fortran_compiler" = "xxlf90" ]; then
                fixmakeargs="$fixmakeargs IBM64LINUX_XLF"
	    fi
            if [ "x$fortran_compiler" = "xxlflang" ]; then
                fixmakeargs="$fixmakeargs XLFLANG"
            fi
            if [ "x$fortran_compiler" = "xarmflang" ]; then
                fixmakeargs="$fixmakeargs ARMFLANG"
            fi
	    if [ "x$orig_fortran_compiler" = "xcaf" ]; then 
		fortran_compiler=caf
            fi
	else
            if [ "x$orig_fortran_compiler" = "xdefault" ]; then 
              fortran_compiler=no
            fi
	fi

	echo "NOTE: Found mpicxx in the path"
	if [ $machine = bgq -o $machine = bgp ]; then
            c_compiler=mpicc
            cxx_compiler=mpicxx
            is_gnu_compiler=`$cxx_compiler -show  2>/dev/null | awk ' { print $1;}' | xargs grep g++ | wc -l`
            if [ $is_gnu_compiler = 1 ]; then
              gnu=yes
              tauoptions="${tauoptions}-gnu"
            fi
	else
	    # All other machines besides IBM BG*
            is_internal_compiler_loaded=`which $cxx_compiler 2>/dev/null | wc -l`
            if [ $is_internal_compiler_loaded = 0 ]; then
		# Compiler is not loaded, use full path to it
		c_compiler=`mpicc -show | awk '{ print $1;}' `
		cxx_compiler=`mpicxx -show | awk '{ print $1;}' `
		fortran_compiler=`mpif90 -show | awk '{ print $1;}' `
            fi
            if [ "x$mpilibrary" = "xno" -a "x$scorep" = "xno" ]; then
		mpilibargs=`mpicxx -show | cut -d' ' -f2- | sed -e 's@ @#@g'`
		mpiflibargs=`mpif90 -show | cut -d' ' -f2- | sed -e 's@ @#@g' -e 's@-qthreaded@@g'`

		mpilibargs="-L$tautoplevel/$machine/lib#-lTauMpi\$(TAU_CONFIG)#$mpilibargs"
		mpiflibargs="-L$tautoplevel/$machine/lib#-lTauMpi\$(TAU_CONFIG)#$mpiflibargs"
	        fixmakeargs="$fixmakeargs mpilibargs=$mpilibargs mpiflibargs=$mpiflibargs"
	        mpilibargs_added_to_fixmakeargs=yes

            fi
            full_cxx_compiler=`mpicxx -show | tail -n 1 | awk '{ print $1; }'`
            full_cc_compiler=`mpicc -show | tail -n 1 | awk '{ print $1; }'`
            fixmakeargs="$fixmakeargs fullcxx=$full_cxx_compiler fullcc=$full_cc_compiler"
            mpi=yes
	fi
	# Do not use the internal compiler from mpicxx when BGP/BGQ is used.
    else
	echo "NOTE: Didn't find mpicxx in the path, using default values"
	gnu=yes
	tauoptions="${tauoptions}-gnu"
	if [ $machine = bgq ] ; then
            if [ -r /bgsys/drivers/ppcfloor/comm/gcc/bin/mpicxx -a -r /bgsys/drivers/ppcfloor/comm/gcc/bin/mpicc ] ; then
		echo "NOTE: Using /bgsys/drivers/ppcfloor/comm/gcc/bin/mpicxx"
		cxx_compiler=/bgsys/drivers/ppcfloor/comm/gcc/bin/mpicxx
		c_compiler=/bgsys/drivers/ppcfloor/comm/gcc/bin/mpicc
            else
		echo "ERROR: Please set your path to include mpicxx and reconfigure TAU."
		exit 1
            fi
	elif [ $machine = bgp ]; then
            if [ -r /soft/apps/gcc-4.3.2/comm/default/bin/mpicxx -a -r /soft/apps/gcc-4.3.2/comm/default/bin/mpicc ]; then
		echo "NOTE: Using /soft/apps/gcc-4.3.2/comm/default/bin/mpicxx"
		cxx_compiler=/soft/apps/gcc-4.3.2/comm/default/bin/mpicxx
		c_compiler=/soft/apps/gcc-4.3.2/comm/default/bin/mpicc
            else
		echo "ERROR: Please set your path to include mpicxx and reconfigure TAU."
		exit 1
            fi
	fi

    fi
    # Check for BG/P or BG/Q for GNU
    #    is_gnu_compiler=`$cxx_compiler -show  2>/dev/null | awk ' { print $1;}' | xargs grep g++ | wc -l'
    #    if [ "x$is_gnu_compiler" = "x1" ]; then
    #      gnu=yes
    #      if [ $machine = bgp ]; then
    #          fixmakeargs="$fixmakeargs GNU BGP_GFORTRAN COMPINST_GNU"
    #          tauoptions="${tauoptions}-gnu"
    #      elif [ $machine = bgq ]; then
    #          fixmakeargs="$fixmakeargs GNU BGQ_GFORTRAN COMPINST_GNU GNU46PLUS"
    #	  NOTE: FOUND GNU configuration"
    #          tauoptions="${tauoptions}-gnu"
    #      fi
    #    fi

fi

######################################################################
# Set default C++ compiler in all Makefiles
case $cxx_compiler in
    CC)
	echo "Default C++ compiler will be CC"
	fixmakeargs="$fixmakeargs USE_CFRONT"
	;;
    *llvm*|*clang*)
	echo "Using CLANG Compilers"
        fixmakeargs="$fixmakeargs CLANG COMPINST_LLVM"
        tauoptions="${tauoptions}-clang"
	if [ $machine = apple ]; then
	    gnu=yes
            fixmakeargs="$fixmakeargs taugcclibdir=/usr/lib taugccstdcxxlibdir=/usr/lib"
            fixmakeargs="$fixmakeargs APPLECXX"

        fi
        if [ $openmp = yes ]; then 
          fixmakeargs="$fixmakeargs CLANG_OPENMP"
        fi
        ;;

    *g++)
	echo "Default C++ compiler will be " \
            `$cxx_compiler -v 2>&1 | tail -1`
	gnu=yes
	# No fixmakeargs needed because it is the default
	;;

    g++-5)
	echo "Default C++ compiler will be " \
            `gcc-5 -v 2>&1 | tail -1 | sed 's/gcc-5/g++-5/g'`
	gnu=yes
	fixmakeargs="$fixmakeargs c_compiler=gcc-5 cxx_compiler=g++-5 GNU"
	# No fixmakeargs needed because it is the default
	;;


    g++-6)
	echo "Default C++ compiler will be " \
            `gcc-6 -v 2>&1 | tail -1 | sed 's/gcc-6/g++-6/g'`
	gnu=yes
	fixmakeargs="$fixmakeargs c_compiler=gcc-6 cxx_compiler=g++-6 GNU"
	# No fixmakeargs needed because it is the default
	;;

    g++-7)
	echo "Default C++ compiler will be " \
            `gcc-7 -v 2>&1 | tail -1 | sed 's/gcc-7/g++-7/g'`
	gnu=yes
	fixmakeargs="$fixmakeargs c_compiler=gcc-7 cxx_compiler=g++-7 GNU"
	# No fixmakeargs needed because it is the default
	;;

    g++-8)
	echo "Default C++ compiler will be " \
            `gcc-8 -v 2>&1 | tail -1 | sed 's/gcc-8/g++-8/g'`
	gnu=yes
	fixmakeargs="$fixmakeargs c_compiler=gcc-8 cxx_compiler=g++-8 GNU"
	# No fixmakeargs needed because it is the default
	;;

    *-g++|g++-*)
	echo "Default C++ compiler will be " \
            `$cxx_compiler -v 2>&1 | tail -1 | sed 's/gcc/g++/g'`
        cxx_compiler=g++
	gnu=yes
	# No fixmakeargs needed because it is the default
	;;

    g++4)
	echo "Default C++ compiler will be " \
            `gcc4 -v 2>&1 | tail -1 | sed 's/gcc4/g++4/g'`
	gnu=yes
	# No fixmakeargs needed because it is the default
	;;


    egcs)
	echo "Default C++ compiler will be " \
            `egcs -v 2>&1 | tail -1 | sed 's/gcc/egcs/g'`
	# No fixmakeargs needed because it is the default
	;;

    cxx)
	echo "Default C++ compiler will be the HP Tru64 cxx C++ compiler"
	fixmakeargs="$fixmakeargs USE_DECCXX"
	if [ $fortran_compiler = no ]
	then
            f90loaded=`which f90 | sed -e 's/f90/../g' | grep "^no"`
            if [ "x$f90loaded" = "x" ]
            then
    		# f90 module has been loaded and which f90 returns a path
		extradir="`which f90 | sed s/f90/../`"
		echo "Found f90 in `which f90`"
            fi
            fixmakeargs="$fixmakeargs COMPAQ_FORTRAN"
            fortran_compiler=yes
	fi
	;;

    *xl*)
	echo "Default C++ compiler will be IBMs xlC C++ compiler"
	fixmakeargs="$fixmakeargs USE_IBMXLC COMPINST_XL"
	if [ "$machine" = "apple" ]
	then
            fixmakeargs="$fixmakeargs IBMXLCAPPLE"
	    if [ $fortran_compiler = no ]
            then
		fixmakeargs="$fixmakeargs IBMXLFAPPLE"
            fi
	fi
	ibmxlc=yes

	if [ "$machine" = "bgp" -o "$machine" = "bgq" ] ; then
	    ibm_compiler=gxlc++
	else
	   if [ "$machine" = ibm64linux ] ; then 
	    ibm_compiler=$c_compiler
           else
	    ibm_compiler=$cxx_compiler
           fi
	fi
	compilerLocation=`which $ibm_compiler`

	if [ "x$compilerLocation" = "x/usr/bin/$ibm_compiler" ] ; then
	    # if xlc or blrts_xlc is found in /usr/bin, it is likely a
	    # symlink.  Since we use ../lib to locate the libraries
	    # we will dereference the symlink once.  Don't do it more
            # than once, or you'll end up with the wrong thing

	    # check for readlink first
	    readlink=`which readlink`
	    if [ "x$readlink" != "x" ] ; then
		if [ -x "$readlink" ] ; then
		    if [ -h $compilerLocation ] ; then
			compilerLocation=`readlink -f $compilerLocation`
		    fi
		fi
	    fi
	fi
	if [ "x$compilerLocation" = "x/usr/local/tools/check_compile_line/bgxlc++" ] ; then
            compilerLocation=`grep bgxlc++ /usr/local/tools/check_compile_line/bgxlc++ | awk '{ print $3;}'`
	fi


	extradircxx=`echo $compilerLocation | sed s/$ibm_compiler/../`

        if [ "$machine" = ibm64linux ] ; then
           if [ ! -r $extradircxx/lib/libibmc++.a ]; then
              cxxpath=`find $extradircxx -name libibmc++.a -print | tail -1`
              extradircxx=`echo $cxxpath | sed -e 's@lib/libibmc++.a@@g' -e 's@alllibs/libibmc++.a@@g'`
           fi
        fi

	extradir=`which xlf90 | sed s/xlf90/../`
	if [ $fortran_compiler = no ]
	then
	    if [ "$machine" = "ibm64" -o "$machine" = "ibm64linux" ]
            then
		fixmakeargs="$fixmakeargs IBM64_FORTRAN"
	    else
		fixmakeargs="$fixmakeargs IBM_FORTRAN"
	    fi
            fortran_compiler=yes
	fi
	threadtest=`echo $ibm_compiler | sed -e 's/_r//'`
	if [ "y$threadtest" = "y$ibm_compiler" ]
	then
	    echo "Not using the thread-safe version of the IBM compiler"
	else
	    ibmxlc_r=yes
            fixmakeargs="$fixmakeargs THREADSAFE_COMPILERS"
	    echo "Using thread-safe version of the IBM compiler"
            threadsafe=yes
	fi
	;;

    NCC)
	echo "Default C++ compiler will be SGI's Delta C++ compiler"
	fixmakeargs="$fixmakeargs USE_SGINCC"
	;;

    KCC)
	echo "Default C++ compiler will be KAI KCC C++ Compiler"
	kai=yes
	fixmakeargs="$fixmakeargs KAI"
	;;

    mcxx)
	echo "Default C++ compiler will be Mercurium C++ Compiler"
	gnu=yes
	shared_opt="-shared -fPIC"
	fixmakeargs="$fixmakeargs MERCURIUM"
	;;

    pgc++|pgCC|pgcpp)
	echo "Default C++ compiler will be PGI pgCC C++ Compiler"
	pgi=yes
	pgiflag=`pgcc -help | head -1 | grep 1.7 | wc -l`

	fixmakeargs="$fixmakeargs COMPINST_PGI"

	if [ $pgiflag = 1 ]
	then
	    echo  "Using PGI ver 1.7 Compiler"
            fixmakeargs="$fixmakeargs PGI PGI1.7"
	else
            fixmakeargs="$fixmakeargs PGI PGICC"
	fi

	if [ "x$fortran_compiler" = "xno" ]
	then
            extradir=`which pgcc | sed s/pgcc/../`
            fixmakeargs="$fixmakeargs PGI_FORTRAN"
            fortran_compiler=yes
	fi
	;;

    FCC|mpiFCCpx|mpiFCC)
	echo "Default C++ compiler will be Fujitsu C++ Compiler"
	fujitsu=yes
	orig_useropt="-O2"
	useropt="-O2"
	# -g interferes with optimizations for Fujitsu.
	fixmakeargs="$fixmakeargs FX"
	#mpiinc=`which mpiFCCpx | sed -e 's/\/bin\/mpiFCCpx$//'`/include
	mpiinc=`which mpiFCCpx | sed -e 's/\/bin\/mpiFCCpx$//'`/include/mpi/fujitsu
	if [ ! -d $mpiinc -a -r /opt/FJSVfxlang/1.2.0/include/mpi/fujitsu/mpi.h ]
	then
            mpiinc=/opt/FJSVfxlang/1.2.0/include/mpi/fujitsu/
	fi

	if [ -d $mpiinc ]
	then
            echo "Using MPI include directory $mpiinc"
	fi
	fixmakeargs="$fixmakeargs mpiincargs=-I$mpiinc"
	echo "Adding -I$mpiinc to MPI include"
	if [ $fortran_compiler = no -o $fortran_compiler = mpifrtpx -o $fortran_compiler = fujitsu ]
	then
            extradir=`which mpiFCCpx | sed s/mpiFCCpx/../`
            #fixmakeargs="$fixmakeargs FUJITSU_FORTRAN"
            fortran_compiler=yes
	fi
	if [ $machine = solaris2 -o $machine = solaris2-64 ]
	then
            extradir=`which FCC | sed s/FCC/../`
            fixmakeargs="$fixmakeargs FUJITSU_SOLARIS"
            fortran_compiler=yes
	fi
	;;

    guidec++)
	echo "Default C++ compiler will be KAI KAP/Pro OpenMP guidec++ Compiler"
	kai=yes
	fixmakeargs="$fixmakeargs KAI GUIDE OPENMP"
	openmp=yes
	tauoptions="${tauoptions}-guide"
	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs KAI_FORTRAN"
            guidef90=yes
            fortran_compiler=yes
	fi

	;;

    aCC)
	echo "Default C++ compiler will be HP aCC Compiler"
	fixmakeargs="$fixmakeargs ACC"
	tauoptions="${tauoptions}-acc"
	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs HP_FORTRAN"
            fortran_compiler=yes
	fi

	;;
    openCC|orCC)
	echo "Default C++ compiler will ORC Open64 orCC compiler"
	open64=yes
	fixmakeargs="$fixmakeargs OPEN64ORC"
	tauoptions="${tauoptions}-open64"
	if [ $c_compiler = default ]
	then
            c_compiler=orcc
	fi

	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs OPEN64ORC_FORTRAN"
            fortran_compiler=yes
	fi

	if [ $openmp = yes ]
	then
	    fixmakeargs="$fixmakeargs OPEN64_OPENMP"
	fi

	;;

    c++)
        if [ $machine = nec ]
	then
            echo "Default C++ compiler will be NEC c++ compiler"
            fixmakeargs="$fixmakeargs USE_NECCXX"
            tauoptions="${tauoptions}-cxx"
            if [ $fortran_compiler = no ]
            then
		extradir=`which f90 | sed s/f90/../`
		fixmakeargs="$fixmakeargs NEC_FORTRAN"
		fortran_compiler=yes
            fi
        else
            if [ $machine = crayxmt ]
            then
		echo "Default C++ compiler will be Cray c++ compiler"
            else
		echo "Default C++ compiler will be Apple c++ compiler"
		fixmakeargs="$fixmakeargs APPLECXX"
		tauoptions="${tauoptions}-cxx"
            fi
        fi

	;;

    ecpc)
	echo "Default C++ compiler will be Intel ecpc C++ compiler"
	fixmakeargs="$fixmakeargs USE_INTELCXX"
	tauoptions="${tauoptions}-ecpc"
	intel=yes
	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs INTEL_FORTRAN"
            fortran_compiler=intel
            extradir=`which efc | sed s/efc/../`
	fi

	if [ $intelcxxlibicc = yes ]
	then
            fixmakeargs="$fixmakeargs INTELCXXLIBICC"
	fi

	;;

    icpc)
	echo "Default C++ compiler will be Intel icpc C++ compiler"
	fixmakeargs="$fixmakeargs USE_INTELCXX COMPINST_INTEL9"
	tauoptions="${tauoptions}-icpc"
	intel=yes
	if [ $fortran_compiler = no ]
	then
            intelifort=`which ifort 2>/dev/null`
            if [ "y$intelifort" != "y"  -a -x "$intelifort" ] ; then
		fixmakeargs="$fixmakeargs INTEL32_FORTRAN"
		fortran_compiler=intel
		extradir=`which ifort | sed -e 's/\/bin\/ifort$//'`
            fi
	fi
	if [ $intelcxxlibicc = yes ]
	then
            fixmakeargs="$fixmakeargs INTELCXXLIBICC"
	fi

	;;
    mpiicpc)
	echo "Default C++ compiler will be Intel mpiicpc C++ compiler"
	fixmakeargs="$fixmakeargs MPIICPC USE_INTELCXX"
	tauoptions="${tauoptions}-icpc"
	intel=yes
	if [ $fortran_compiler = no  -o $fortran_compiler = mpiifort -o $fortran_compiler = intel ]
	then
            intelifort=`which mpiifort 2>/dev/null`
            if [ "y$intelifort" != "y"  -a -x "$intelifort" ] ; then
		fortran_compiler=intel
		extradir=`which mpiifort | sed -e 's/\/bin\/mpiifort$//'`
		fixmakeargs="$fixmakeargs MPIIFORT"
            fi
	fi
	;;
    pathCC|scpathCC)
	echo "Default C++ compiler will be PathScale pathCC C++ compiler"
	fixmakeargs="$fixmakeargs USE_PATHCC COMPINST_GNU"
	tauoptions="${tauoptions}-pathcc"
	pathscale=yes
	if [ $fortran_compiler = no ]
	then
            fixmakeargs="$fixmakeargs PATHSCALE_FORTRAN"
            fortran_compiler=pathscale
	fi

	;;

    qk-pgCC)
	echo "Default C++ compiler will be PGI pgCC C++ Compiler"
	pgi=yes
	fixmakeargs="$fixmakeargs PGI PGICC COMPINST_PGI"
	fixmakeargs="$fixmakeargs PGINOPRELINK"

	if [ $fortran_compiler = no ]
	then
            extradir=`which pgcc | sed s/pgcc/../`
            fixmakeargs="$fixmakeargs PGI_FORTRAN PGI_CATAMOUNT"
            fortran_compiler=yes
	fi
	;;

    mpc_cxx)
	if [ $machine = x86_64 -o $machine = mic_linux ] ; then
            #mpc_include=`mpc_cxx -show | grep '-I'`
            #mpc_include=`mpc_cxx -show | grep -o '[^ ]-I[^ ]*'`
            mpc_include=`mpc_cxx -show | grep -o '[^ ]*include/mpcframework[^ ]*'`
            full_cxx_compiler=`mpc_cxx -show | awk '{print $1;}'`
            full_cc_compiler=`mpc_cc -show | awk '{ print $1;}'`
            fixmakeargs="tau_build_cc=$full_cc_compiler tau_build_cxx=$full_cxx_compiler $fixmakeargs"
            #mpilibrary=`mpc_cxx -show | sed -e "s@$full_cxx_compiler@@g" | sed -e "s/ /#/g" -e "s/''//g"`
            mpilibrary=`mpc_cxx -show | sed -e "s@$full_cxx_compiler@@g" | sed -e "s/ /#/g" -e "s/''//g"`
            #full_cxx_compiler=`mpc_cxx -show -Dmain=mpc_user_main__ | sed -e "s@-fmpc-privatize@@g" -e "s/ /#/g" -e "s/''//g"`
            #full_cc_compiler=`mpc_cc -show -Dmain=mpc_user_main__ | sed -e "s@-fmpc-privatize@@g" -e "s/ /#/g" -e "s/''//g" `
	    #echo "CC=$cc_compiler"
	    #echo "CXX=$cxx_compiler"
	    #echo "mpilibrary=$mpilibrary"
	    tauoptions="${tauoptions}-mpc"
            fixmakeargs="$fixmakeargs MPC"
            mpc=yes
            mpi=yes
        fi
        ;;

    mpc_icpc)
    if [ $machine = x86_64 -o $machine = mic_linux ] ; then
            full_cxx_compiler=`mpc_icpc -show | awk '{print $1;}'`
            full_cc_compiler=`mpc_icc -show | awk '{ print $1;}'`
            fixmakeargs="tau_build_cc=$full_cc_compiler tau_build_cxx=$full_cxx_compiler $fixmakeargs"
            mpilibrary=`mpc_icpc -show | sed -e "s@$full_cxx_compiler@@g" | sed -e "s/ /#/g"`
            full_cxx_compiler=`mpc_icpc -show -Dmain=mpc_user_main__ | sed -e "s@-mSYMTAB_mpc_privatize @@g" -e "s/ /#/g"`
            full_cc_compiler=`mpc_icc -show -Dmain=mpc_user_main__ | sed -e "s@-mSYMTAB_mpc_privatize @@g" -e "s/ /#/g"`
        #echo "CC=$cc_compiler"
        #echo "CXX=$cxx_compiler"
        #echo "mpilibrary=$mpilibrary"
        tauoptions="${tauoptions}-mpc-intel"
            fixmakeargs="$fixmakeargs MPC MPCINTEL"
            mpc=yes
        fi
        ;;

    oshc++ | oshCC | oshcxx )
	echo "Using OpenSHMEM C++ compiler"
	fixmakeargs="$fixmakeargs GNU COMPINST_GNU GNU46PLUS"
	fixmakeargs="$fixmakeargs OPENSHMEM"
	gcclibdir=`oshcc  -print-libgcc-file-name | sed -e 's,[^/]*$,,'`
	stdcxxlibdir=`oshcc  -print-file-name=libstdc++.a | sed -e 's,[^/]*$,,'`
	fixmakeargs="$fixmakeargs taugcclibdir=$gcclibdir taugccstdcxxlibdir=$stdcxxlibdir"
	;;

    mpinc++)
	tauoptions="${tauoptions}-ncc"
	echo "Using NEC Compilers"
	fixmakeargs="$fixmakeargs NEC_COMPILERS"
	;;

    *mpicxx)
        internal_compiler=`$cxx_compiler -show | awk '{ print $1;}'`
        case $internal_compiler in
            *bgclang++)
		tauoptions="${tauoptions}-clang"
		if [ $machine = bgq ] ; then
                    fixmakeargs="$fixmakeargs CLANG BGCLANG"
		fi
		;;
            *g++)
		if [ $machine = bgq ] ; then
	            echo "Using GNU Compilers for BGQ"
		    fixmakeargs="$fixmakeargs GNU BGQ_GFORTRAN COMPINST_GNU GNU46PLUS"
		elif [ $machine = bgp ] ; then
	            echo "Using GNU Compilers for BGP"
                    fixmakeargs="$fixmakeargs GNU BGP_GFORTRAN COMPINST_GNU"
		else
                    echo "ERROR Unknown C++ compiler: $cxx_compiler"
		fi
		;;
            *xlC*)
		echo "Using IBM Compilers"
		ibmxlc=yes
		fixmakeargs="$fixmakeargs USE_IBMXLC COMPINST_XL"
		extradir=`which xlf90 | sed s/xlf90/../`
      		fixmakeargs="$fixmakeargs IBM_FORTRAN"

		;;
            *clang*)
		tauoptions="${tauoptions}-clang"
		echo "Using CLANG Compilers"
		fixmakeargs="$fixmakeargs CLANG"
		if [ $machine = apple ]; then
		    # MPI on Apple OS X has issues with shared objects
                    fixmakeargs="$fixmakeargs NOSHARED"
		fi
		;;
            *)
		echo "ERROR Unknown C++ compiler in mpicxx: $cxx_compiler"
		;;
        esac
	;;
    *)
	echo "ERROR Unknown C++ compiler: $cxx_compiler"
	exit 1
	;;

esac

######################################################################
# Set default F90 compiler in all Makefiles
echo "Setting F90 compiler based on requested: $fortran_compiler"
case $fortran_compiler in
    gnu)
	echo "Default Fortran compiler will be GNU"
	fixmakeargs="$fixmakeargs GNU_FORTRAN"
	;;

    gfortran|gfortran-*)
	echo "Default Fortran compiler will be GNU gfortran"
	if [ $cxx_compiler = scg++ ] ; then
            fixmakeargs="$fixmakeargs SC_GFORTRAN"
	else
	    gfortran=`which $fortran_compiler 2>&1`
            retval=$?
	    # when gfortran is not found, it returns a value of 1, otherwise it returns 0.
	    if [ "x$gfortran" != "x" -a "x$retval" != "x1" ] ; then
		if [ -x $gfortran ] ; then
		    taugfortranlibdir=`$fortran_compiler -print-libgcc-file-name | sed s/libgcc.a//`
		fi
		fixmakeargs="$fixmakeargs taugfortranlibdir=$taugfortranlibdir"
		fixmakeargs="$fixmakeargs GNU_GFORTRAN"
	    fi
	fi
        if [ $machine = apple ]; then 
	    fixmakeargs="$fixmakeargs APPLE_GFORTRAN"
        fi
	;;

    caf)
	echo "Default Fortran compiler will be caf"
        fixmakeargs="$fixmakeargs CAF"
	;;

    gfortran4)
	echo "Default Fortran compiler will be GNU gfortran4"
	gfortran4=`which gfortran4 2>&1`
	if [ "x$gfortran4" != "x" ] ; then
	    if [ -x $gfortran4 ] ; then
		taugfortranlibdir=`gfortran4 -print-libgcc-file-name | sed s/libgcc.a//`
	    fi
	    fixmakeargs="$fixmakeargs taugfortranlibdir=$taugfortranlibdir"
            fixmakeargs="$fixmakeargs GNU_GFORTRAN4"
	fi
	;;

    g95)
	echo "Default Fortran compiler will be G95"
	fixmakeargs="$fixmakeargs G95_FORTRAN"
	extradir=`g95 -print-libgcc-file-name | sed s/libgcc.a//`
	echo extra=$extradir
	;;

    sgi)
	echo "Default Fortran compiler will be SGI f90"
	fixmakeargs="$fixmakeargs SGI_FORTRAN"
	;;

    ibm)
	echo "Default Fortran compiler will be IBM xlf90"
	extradir=`which xlf90 | sed s/xlf90/../`
	fixmakeargs="$fixmakeargs IBM_FORTRAN"
	;;

    ibm64)
	echo "Default Fortran compiler will be IBM xlf90 (64 bits)"
	extradir=`which xlf90 | sed s/xlf90/../`
	fixmakeargs="$fixmakeargs IBM64_FORTRAN"
	;;

    hp)
	echo "Default Fortran compiler will be HP f90"
	extradir=`which f90 | sed s/f90/../`
	fixmakeargs="$fixmakeargs HP_FORTRAN"
	;;

    cray)
	echo "Default Fortran compiler will be Cray f90"
	if [ $machine = crayx1 -o $machine = craysv1 ]
	then
            fixmakeargs="$fixmakeargs CRAY_X1_FORTRAN"
	else
            fixmakeargs="$fixmakeargs CRAY_FORTRAN"
	fi
	;;

    pgi|pgf90)
	echo "Default Fortran compiler will be PGI pgf90"
	pgi=yes
	extradir=`which pgcc | sed s/pgcc/../`
	fixmakeargs="$fixmakeargs PGI_FORTRAN"
	;;

    pgfortran)
	echo "Default Fortran compiler will be PGI pgfortran"
	pgi=yes
	extradir=`which pgcc | sed s/pgcc/../`
	fixmakeargs="$fixmakeargs PGI_FORTRAN_OTHER"
	;;

    absoft)
	echo "Default Fortran compiler will be Absoft f90"
	extradir="`which f90 | sed s/f90/../`"
	fixmakeargs="$fixmakeargs ABSOFT_FORTRAN"
	;;

    fujitsu)
	echo "Default Fortran compiler will be Fujitsu F90"
	extradir=`which FCC | sed s/FCC/../`
	fixmakeargs="$fixmakeargs FUJITSU_FORTRAN"
	;;

    nec)
	echo "Default Fortran compiler will be NEC f90"
	extradir=`which f90 | sed s/f90/../`
	fixmakeargs="$fixmakeargs NEC_FORTRAN"
	;;

    lahey)
	echo "Default Fortran compiler will be Lahey lf95"
	extradir=`which lf95 | sed s/lf95/../`
	if [ -d $extradir/lib64 ]
	then
            fixmakeargs="$fixmakeargs LAHEY64_FORTRAN"
	else
            fixmakeargs="$fixmakeargs LAHEY_FORTRAN"
	fi
	;;

    nag*)
	echo "Default Fortran compiler will be Nagware nagfor"
	extradir=`which nagfor | sed s@\/nagfor@\/..@`
	fixmakeargs="$fixmakeargs NAGWARE_FORTRAN"
	;;

    pathscale)
	echo "Default Fortran compiler will be Pathscale pathf95"
	if [ $cxx_compiler = scpathCC -o $cxx_compiler = scg++ ]
	then
            extradir=`which scpathf95 | sed s@\/scpathf95@\/..@`
            fixmakeargs="$fixmakeargs SC_PATHSCALE"
	else
            extradir=`which pathf95 | sed s@\/pathf95@\/..@`
            fixmakeargs="$fixmakeargs PATHSCALE_FORTRAN"
	fi
	;;

    sun)
	echo "Default Fortran compiler will be SUN f90"
	fixmakeargs="$fixmakeargs SUN_FORTRAN"
	;;

    compaq)
	echo "Default Fortran compiler will be HP Tru64 f90"
	f90loaded=`which f90 | sed -e 's/f90/../g' | grep "^no"`
	if [ "x$f90loaded" = "x" ]
	then
            # f90 module has been loaded and which f90 returns a path
            extradir="`which f90 | sed s/f90/../`"
            echo "Found f90 in `which f90`"
	fi
	fixmakeargs="$fixmakeargs COMPAQ_FORTRAN"
	;;

    kai)
	echo "Default Fortran compiler will be KAI guidef90"
	fixmakeargs="$fixmakeargs KAI_FORTRAN"
	guidef90=yes
	;;

    open64|openf90)
	echo "Default Fortran compiler will be ORC Open64 orf90"
	fixmakeargs="$fixmakeargs OPEN64ORC_FORTRAN"
	;;

    intel|ifort)
	if [ $cxx_compiler = ecpc ]
	then
            echo "Default Fortran compiler will be Intel efc"
            fixmakeargs="$fixmakeargs INTEL_FORTRAN"
	else
            echo "Default Fortran compiler will be Intel ifort"
            fixmakeargs="$fixmakeargs INTEL32_FORTRAN"
            intelifort=`which ifort 2>/dev/null`
            if [ "y$intelifort" != "y" -a -x "$intelifort" ]
            then
		extradir=`which ifort | sed -e 's/\/bin\/ifort$//'`
            fi
	fi
	;;
    no)
	;;

    *)
	;;

esac

# Encode the full path of the C++/C compiler in the stub Makefile
if [ "x$full_cxx_compiler" = "x" ]
then
    full_cxx_compiler=`which $host_prefix$cxx_compiler`
    full_cc_compiler=`which $host_prefix$c_compiler`
    if [ $fujitsu = yes ]
    then
	# Fujitsu does not want full path to point to the absolute paths due to
	# frequent updates to the compiler on that system.
	full_cxx_compiler=$cxx_compiler
	full_cc_compiler=$c_compiler
    fi
fi
# This takes care of mpc_cxx setting this above
if [ $shmem = yes -a "x$cxx_compiler" = "xdefault" ]
then
    oshcc_var=`which oshcc 2>/dev/null`
    if [ "x$oshcc_var" != "x" -a $? = 0 ]
    then
	full_cxx_compiler=`which oshCC`
	if [ $? = 1 ]; then
	  full_cxx_compiler=`which oshc++`
	  if [ $? = 1 ]; then
	    full_cxx_compiler=`which oshcxx`
          fi
        fi
	full_cc_compiler=`which oshcc`
        gcclibdir=`oshcc  -print-libgcc-file-name | sed -e 's,[^/]*$,,'`
        stdcxxlibdir=`oshcc  -print-file-name=libstdc++.a | sed -e 's,[^/]*$,,'`
        fixmakeargs="$fixmakeargs taugcclibdir=$gcclibdir taugccstdcxxlibdir=$stdcxxlibdir"

    fi
fi


# PGI sanity check for -latomic
if [ $pgi = yes -a -d "$extradir" -a -r "$extradir/libatomic.a" ]; then 
   fixmakeargs="$fixmakeargs PGI_ATOMIC"
fi

# PGI sanity check for -lC
if [ $pgi = yes -a -d "$extradir" -a -r "$extradir/libC.a" ]; then
   fixmakeargs="$fixmakeargs PGI_C"
fi

if [ $scorep = yes ]; then
  swap_full_cxx_compiler=$full_cxx_compiler
  full_cxx_compiler=`which $orig_cxx_compiler`
  swap_full_c_compiler=$swap_full_c_compiler
  full_cc_compiler=`which $orig_c_compiler`
fi

fixmakeargs="$fixmakeargs fullcxx=$full_cxx_compiler fullcc=$full_cc_compiler"

if [ $scorep = yes ]; then
  full_cxx_compiler=$swap_full_cxx_compiler
  full_cc_compiler=$swap_full_cc_compiler
fi




######################################################################
# Set MPI options. First set the include dir if it is not specified
if [ $mpi = yes -a $machine = ibm64 ]
then
    ibmxlc_r=yes
    echo "Enabling threaded MPI libraries for IBM64"
    if [ $threadsafe = no ]
    then
	fixmakeargs="$fixmakeargs THREADSAFE_COMPILERS"
	threadsafe=yes
    fi
fi

if [ $machine = apple -a $cxx_compiler = icpc ] ; then
  fixmakeargs="$fixmakeargs APPLEINTEL"
fi

if [ $mpi = yes -a "x$mpiinc" = "x" ]
then
    case $machine in
	ppc64|ibm64linux)
            if [ -r /opt/ibmhpc/ppe.poe/include/mpi.h ]
            then
		mpiinc=/opt/ibmhpc/ppe.poe/include
		mpiincf90dir='-I/opt/ibmhpc/ppe.poe/include/thread'
		if [ $machine = ibm64linux ]
		then
		    mpiincf90dir='-I/opt/ibmhpc/ppe.poe/include/thread64'
		fi
		additional_mpiincs="$additional_mpiincs $mpiincf90dir"
            fi

            if [ -r /opt/ibmhpc/ppe.poe/include/ibmmpi/mpi.h ]
            then
		mpiinc=/opt/ibmhpc/ppe.poe/include/ibmmpi
		mpiincf90dir='-I/opt/ibmhpc/ppe.poe/include/ibmmpi/thread'
		if [ $machine = ibm64linux ]
		then
		    mpiincf90dir='-I/opt/ibmhpc/ppe.poe/include/ibmmpi/thread64'
		fi
		additional_mpiincs="$additional_mpiincs $mpiincf90dir"
            fi

            if [ -r /opt/ibmhpc/pecurrent/pempi/include/mpi.h ]
            then
		mpiinc=/opt/ibmhpc/pecurrent/pempi/include
		mpiincf90dir='-I/opt/ibmhpc/pecurrent/pempi/include/thread'
		if [ $machine = ibm64linux ]
		then
		    mpiincf90dir='-I/opt/ibmhpc/pecurrent/pempi/include/thread64'
		fi
		additional_mpiincs="$additional_mpiincs $mpiincf90dir"
            fi
	
            mpiinc_search=`which mpirun  | sed -e 's@//@/@g'| sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpcrun$//'`/include
		if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
		then
		    mpiinc=$mpiinc_search
		    echo "Using MPI include directory $mpiinc"
		    echo "machine is $machine"
		else
		    mpiinc_search=`which mpicc | sed -e 's/\/bin\/mpicc$//' -e 's/\/bin64\/mpicc$//'`/include
		    if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
		    then
		      mpiinc=$mpiinc_search
		      echo "Using MPI include directory $mpiinc"
                    else 
		      mpiinc_search=`which mpicc | sed -e 's/\/bin\/mpicc$//' -e 's/\/bin64\/mpicc$//'`/include64
                      if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
                      then
                        mpiinc=$mpiinc_search
                        echo "Using MPI include directory $mpiinc"
                        echo "machine is $machine"
                      fi
                    fi
                fi 
                if [ "x$mpiinc" = "x" -a "x$mpilib" = "x" ]; then
                  mpiinc_search=`$orig_c_compiler -show | sed -e 's@ @\n@g' | grep "^-I" | sed -e 's@-I@@'`
                  mpilib_search=`$orig_c_compiler -show | sed -e 's@ @\n@g' | grep "^-L" | sed -e 's@-L@@'`
                  if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h ];
                  then
		    mpiinc=$mpiinc_search
		    echo "Using MPI include directory $mpiinc"
                  fi
                  if [ -d $mpilib_search -a -r $mpilib_search/mpi.mod ]; then
		    mpilib=$mpilib_search
		    echo "Using MPI lib directory $mpilib"
                  fi 
                fi
            ;;
	rs6000|ibm64)
	    mpiinc=/usr/lpp/ppe.poe/include
	    mpiincf90dir='-I/usr/lpp/ppe.poe/include/thread'
	    if [ $machine = ibm64 ]
	    then
		mpiincf90dir='-I/usr/lpp/ppe.poe/include/thread64'
	    fi

            if [ $ibmxlc_r = yes ]
            then
		additional_mpiincs='-I/usr/lpp/ssp/css/include'
            fi
	    additional_mpiincs="$additional_mpiincs $mpiincf90dir"
            ;;
	bgl)
	    mpiinc=/bgl/BlueLight/ppcfloor/bglsys/include
            ;;
	bgp)
	    mpiinc=/bgsys/drivers/ppcfloor/comm/xl/include
            if [ $cxx_compiler = mpicxx ]; then
		mpiinc=/bgsys/drivers/ppcfloor/comm/include
            fi
            ;;
	bgq)
	    mpiinc=/bgsys/drivers/ppcfloor/comm/xl/include
            if [ $cxx_compiler = mpicxx ]; then
		mpiinc=/bgsys/drivers/ppcfloor/comm/gcc/include
            fi
            ;;
	t3e|crayx1|craysv1)
	    mpiinc=/opt/ctl/mpt/mpt/include
	    ;;
	xt3)
	    mpiinc=/opt/xt-mpt/default/mpich2-64/P2/include
	    ;;
	craycnl)
	    #	mpiinc=/opt/xt-mpt/default/mpich2-64/P/include
	    mpiinc=$CRAY_MPICH2_DIR/include
            if [ ! -r $mpiinc ] ; then
		echo "ERROR: $CRAY_MPICH2_DIR/include (CRAY_MPICH2_DIR/include) is not readable. Please configure with -mpiinc=<dir> to point to the MPI include directory."
		exit 1
            fi
            echo "Using MPI INCLUDE dir from $mpiinc"
	    ;;
	solaris2*)
	    mpiinc=/opt/SUNWhpc/include
	    ;;
	ppc)
            if [ $zepto = yes ]
            then
		mpiinc=$zeptodir/include
		if [ ! -e $mpiinc ]
		then
		    echo "ERROR: Cannot access Zepto MPI include directory [$mpiinc]. Aborting."
		    exit 1
		fi
		additional_mpiincs="$additional_mpiincs -DUSE_MPI -D__ZCL__ -DZCL_AD_HOC -I$zeptodir/include/ "
            fi
            ;;
	mic_linux)
            mpiinc_search=`which mpirun  | sed -e 's@//@/@g' | sed -e 's@intel64/bin/mpirun$@mic@' -e 's@bin/mpirun$@@' -e 's@bin64/mpirun$@@'`/include
            if [ -d $mpiinc_search -a "x$mpiinc" = "x" ]
            then
                mpiinc=$mpiinc_search
		echo "Using MPI include directory $mpiinc"
            fi
	    ;;
	*)
            if [ $mpc = yes ]
            then
		mpiinc=`which mpcrun | sed -e 's/\/bin\/mpcrun$//' -e 's/\/bin64\/mpcrun$//'`/include
              if [ -r $mpiinc/../mpc-libsctk_arch-dev/include/sctk_config_arch.h ]
              then
                echo "NOTE: Found sctk_config_arch.h in $mpiinc/mpc-libsctk_arch-dev/include"
                additional_mpiincs="-I$mpiinc/../mpc-libsctk_arch-dev/include"
              else
                if [ -r $mpiinc/sctk_config_arch.h -a $mpiinc/mpcframework/mpi.h ]
                then
                  echo "NOTE: Found sctk_config_arch.h in $mpiinc/mpc-libsctk_arch-dev/include"
                  additional_mpiincs="-I$mpiinc/mpcframework -I$mpiinc"
                fi
              fi
            else
		mpiinc_search=`which mpirun  | sed -e 's@//@/@g'| sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpcrun$//'`/include
		if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
		then
		    mpiinc=$mpiinc_search
		    echo "Using MPI include directory $mpiinc"
		    echo "machine is $machine"
		else
		    mpiinc_search=`which mpiexec | sed -e 's/\/bin\/mpiexec$//' -e 's/\/bin64\/mpiexec$//'`/include
		    if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
		    then
		        mpiinc=$mpiinc_search
			echo "Using MPI include directory $mpiinc"
		    else
			if [ -d $mpiinc_search -a ! -r $mpiinc_search/mpi.h ] ; then
			    if [ -r $mpiinc_search/mpich2/mpi.h -a "x$mpiinc" = "x" ] ; then
				mpiinc=$mpiinc_search/mpich2
				echo "Correction: Using MPI include directory $mpiinc instead"
			    else
				if [ -r $mpiinc_search/openmpi/mpi.h -a "x$mpiinc" = "x" ] ; then
				    mpiinc=$mpiinc_search/openmpi
				    echo "Correction: Using MPI include directory $mpiinc instead"
				else
				    mpiinc=""
				fi
			    fi
			else
			    mpiinc=""
			fi
		    fi
		fi
		if [ ! -r $mpiinc/mpi.h -a -r $mpiinc/mpich2/mpi.h ] ; then
		    mpiinc=$mpiinc/mpich2
		    echo "Correction: Using MPI include directory $mpiinc instead"
		fi
            fi
	    ;;
    esac
fi

# Add threaded include dir to the MPI include dir for IBM
if [ "x$mpiinc" != "x" ]
then
    case $machine in
	rs6000)
	    if [ -d /usr/lpp/ppe.poe/include/thread ]
	    then
		mpiincf90dir='-I/usr/lpp/ppe.poe/include/thread'
	    fi
	    if [ $ibmxlc_r = yes ]
	    then
		additional_mpiincs='-I/usr/lpp/ssp/css/include'
	    fi
	    additional_mpiincs="$additional_mpiincs $mpiincf90dir"
	    ;;
	ibm64)
	    if [ -d /usr/lpp/ppe.poe/include/thread64 ]
	    then
		mpiincf90dir='-I/usr/lpp/ppe.poe/include/thread64'
	    fi
	    if [ $ibmxlc_r = yes ]
	    then
		additional_mpiincs='-I/usr/lpp/ssp/css/include'
	    fi
	    additional_mpiincs="$additional_mpiincs $mpiincf90dir"
	    ;;
	*)
	    ;;
    esac
fi


if [ $mpi = yes -a "x$mpilib" = "x" ]
then
    case $machine in
	ppc64)
	    mpilib=no
            if [ -r /opt/ibmhpc/ppe.poe/lib/libmpi/libmpi_ibm.so ]
            then
		mpilib=/opt/ibmhpc/ppe.poe/lib/libmpi
            fi
            if [ -r /opt/ibmhpc/pecurrent/ppe.poe/lib/libmpi/libmpi_ibm.so ]
            then
		mpilib=/opt/ibmhpc/pecurrent/ppe.poe/lib/libmpi
            fi
            if [ "x$mpilib" != "xno" ]; then
		additional_mpilibs='-lpoe -llapi'
		mpilibrary="-lmpi_ibm $additional_mpilibs"
            fi
            ;;
	ibm64linux_deprecated)
# This logic no longer applies - use `which mpirun` to find mpilib directory.
	    mpilib=no
            if [ -r /opt/ibmhpc/ppe.poe/lib/libmpi64/libmpi_ibm.so ]
            then
		mpilib=/opt/ibmhpc/ppe.poe/lib/libmpi64
		additional_mpilibs='-lpoe -llapi'
		mpilibrary="-lmpi_ibm $additional_mpilibs"
            fi

            if [ -r /opt/ibmhpc/ppe.poe/lib64/libmpi_ibm.so ]
            then
		mpilib=/opt/ibmhpc/ppe.poe/lib64/
		additional_mpilibs='-lpoe -llapi'
            fi
            if [ -r /opt/ibmhpc/pecurrent/pempi/gnu/lib/libmpi64/libmpi_ibm.so -a -r /opt/ibmhpc/pecurrent/base/gnu/lib64/libpami.so ]
            then
		mpilib=/opt/ibmhpc/pecurrent/pempi/gnu/lib/libmpi64
		additional_mpilibs='-lpoe -L/opt/ibmhpc/pecurrent/base/gnu/lib64 -lpami'
            fi

            if [ "x$mpilib" != "xno" ]; then
		mpilibrary="-lmpi_ibm $additional_mpilibs"
		echo "Adding MPI libs from $mpilib"
		# Cases
		if [ -r $mpilib/libmpi_ibm.so ]; then
		    echo "NOTE: IBM MPI found!"
		    if [ -f $mpilib/libmpif90.a -o -f $mpilib/libmpif90.so ] ; then
			echo "Fortran libmpif90.* found"
			mpiflibargs="-L$mpilib -lmpif90 "
		    fi
		fi
            fi
            ;;

	rs6000|ibm64)
	    mpilib=/usr/lpp/ppe.poe/lib
            if [ $ibmxlc_r = yes ]
            then
		additional_mpilibs='-L/usr/lpp/ppe.poe/lib/threads -L/usr/lpp/ssp/css/lib -llapi_r'
            fi
	    ;;
	bgl)
            mpilib=/bgl/BlueLight/ppcfloor/bglsys/lib
	    additional_mpilibs='-lmsglayer.rts -ldevices.rts -lrts.rts -ldevices.rts'
            ;;
	bgp)
            mpilib=/bgsys/drivers/ppcfloor/comm/xl/lib
            if [ $cxx_compiler = mpicxx ]; then
		mpilib=/bgsys/drivers/ppcfloor/comm/lib
            fi
	    additional_mpilibs='-ldcmfcoll.cnk -ldcmf.cnk -lpthread -L/bgsys/drivers/ppcfloor/runtime/SPI -lSPI.cna'
	    ;;
	bgq)
            mpilib=/bgsys/drivers/ppcfloor/comm/xl/lib
            if [ $cxx_compiler = mpicxx ]; then
		mpilib=/bgsys/drivers/ppcfloor/comm/lib
            fi
	    #additional_mpilibs='-ldcmfcoll.cnk -ldcmf.cnk -lpthread -L/bgsys/drivers/ppcfloor/runtime/SPI -lSPI.cna'
	    additional_mpilibs='-L/bgsys/drivers/ppcfloor/gnu-linux/powerpc64-bgq-linux/lib -lc -lnss_files -lnss_dns -lresolv'
	    ;;
	t3e|crayx1|craysv1)
	    mpilib=/opt/ctl/mpt/mpt/lib/
	    ;;
	xt3)
	    mpilib=/opt/xt-mpt/default/mpich2-64/P2/lib
	    ;;
	craycnl)
	    mpilib=$MPICH_DIR/lib
	    ;;
	solaris2*)
	    mpilib=/opt/SUNWhpc/lib
	    ;;
	ppc)
            if [ $zepto = yes ]
            then
		mpilib=$zeptodir/lib
		if [ ! -e $mpilib ]
		then
		    echo "ERROR: Cannot access Zepto MPI lib directory [$mpilib]. Aborting"
		    exit 1
		fi
		additional_mpilibs="-L$zeptodir/lib -lmpich.zcl -ldcmfcoll.zcl -ldcmf.zcl -lpthread -lSPI.zcl -lzcl -lzoid_cn -lpthread -lrt -lm"
		mpilibrary="$additional_mpilibs"
            fi
            ;;
	mic_linux)
            if [ $mpc = yes ]
            then
		mpilib=`which mpcrun | sed -e 's/\/bin\/mpcrun$//'`/../mic/lib
            else
                mpilib_search=`which mpirun  | sed -e 's@//@/@g'| sed -e 's@intel64/bin/mpirun$@mic@' -e 's@bin/mpirun$@@' -e 's@bin64/mpirun$@@g'`/lib
		if [ ! -d $mpilib_search ] ; then
		    # Try the ".../lib64" directory instead of ".../lib"
                    mpilib_search=`which mpirun  | sed -e 's@//@/@g'| sed -e 's@intel64/bin/mpirun$@mic@' -e 's@bin/mpirun$@@' -e 's@bin64/mpirun$@@g'`/lib64
		fi
		if [ -d $mpilib_search -a "x$mpilib=x" ] ; then
                    mpilib=$mpilib_search
		    echo "Using MPI lib directory $mpilib"
		else
 		    mpilib=""
		fi
            fi
	    ;;
	*)
            if [ $mpc = yes ]
            then
		mpilib=`which mpcrun | sed -e 's/\/bin\/mpcrun$//'`/lib
            else
		mpilib_search=`which mpirun  | sed -e 's@//@/@g' | sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpirun$//'`/lib
		if [ ! -d $mpilib_search ] ; then
		    # Try the ".../lib64" directory instead of ".../lib"
		    mpilib_search=`which mpirun | sed -e 's@//@/@g' | sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpirun$//'`/lib64
		fi
		if [ -d $mpilib_search -a "x$mpilib" = "x" ] ; then
		    mpilib=$mpilib_search
		    echo "Using MPI lib directory $mpilib"
		else
 		    mpilib=""
		fi
            fi
	    ;;
    esac
fi

if [ "x$mpi" = "xyes" -a "x$mpiinc" = "x" ]; then
    echo "MPIINC is not set!"
    mpiinc_search=`which mpirun | sed -e 's@//@/@g' | sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpcrun$//'`/include
    if [ ! -d $mpiinc_search ] ; then
      # Try the ".../include64" directory instead of ".../include"
      mpiinc_search=`which mpirun  | sed -e 's@//@/@g'| sed -e 's@intel64/bin/mpirun$@mic@' -e 's@bin/mpirun$@@' -e 's@bin64/mpirun$@@g'`/include64
    fi

    if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
    then
         mpiinc=$mpiinc_search
	 echo "Using MPI include directory $mpiinc"
	 echo "machine is $machine"
    else
         mpiinc_search=`which mpicc | sed -e 's/\/bin\/mpicc$//' -e 's/\/bin64\/mpicc$//'`/include
	 if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
	 then
	   mpiinc=$mpiinc_search
	   echo "Using MPI include directory $mpiinc"
	 else
	   if [ -d $mpiinc_search -a ! -r $mpiinc_search/mpi.h ] ; then
	     if [ -r $mpiinc_search/mpich2/mpi.h -a "x$mpiinc" = "x" ] ; then
	       mpiinc=$mpiinc_search/mpich2
	       echo "Correction: Using MPI include directory $mpiinc instead"
	     else
	       if [ -r $mpiinc_search/openmpi/mpi.h -a "x$mpiinc" = "x" ] ; then
	         mpiinc=$mpiinc_search/openmpi
	         echo "Correction: Using MPI include directory $mpiinc instead"
	       else
		 mpiinc=""
	       fi
	     fi
	   else
	     mpiinc=""
	   fi
         fi
    fi
    if [ ! -r $mpiinc/mpi.h -a -r $mpiinc/mpich2/mpi.h ] ; then
	mpiinc=$mpiinc/mpich2
	echo "Correction: Using MPI include directory $mpiinc instead"
    fi
    if [ $machine = nec-sx-aurora ]; then 
      mpiinc_search=`which mpincc | sed -e 's/\/bin\/mpincc$//' -e 's/\/bin64\/mpincc$//'`/include
      if [ -d $mpiinc_search -a -r $mpiinc_search/mpi.h -a "x$mpiinc" = "x" ]
      then
        mpiinc=$mpiinc_search
        echo "Using MPI include directory $mpiinc"
      fi
    fi

  if [ "x$mpilib" = "x" ] ; then
    mpilib=""
    mpilib_search=`which mpirun | sed -e 's@//@/@g' | sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpirun$//'`/lib
    if [ ! -d $mpilib_search ] ; then
    # Try the ".../lib64" directory instead of ".../lib"
      mpilib_search=`which mpirun | sed -e 's/\/bin\/mpirun$//' -e 's/\/bin64\/mpirun$//'`/lib64
    fi
    if [ -d $mpilib_search -a "x$mpilib" = "x" ] ; then
      mpilib=$mpilib_search
      echo "Using MPI lib directory $mpilib"
    else
      mpilib_search=`which mpicc | sed -e 's/\/bin\/mpicc$//' -e 's/\/bin64\/mpicc$//'`/lib
      if [ -d $mpilib_search -a "x$mpilib" = "x" ] ; then
        mpilib=$mpilib_search
        echo "Using MPI lib directory $mpilib"
      else
        mpilib=""
      fi
    fi
  fi

fi
# echo "MPI include and libs checks done"



if [ "x$mpiinc" != "x" ] ; then
    # Check for OpenMPI and add additional include directory
    if [ -d $mpiinc/openmpi ] ; then
	echo "NOTE: Using OpenMPI"
	additional_mpiincs="-I$mpiinc/openmpi -I$mpiinc/openmpi/ompi"
    fi

    if [ -r $mpilib/mpi.mod ]; then
        echo "NOTE: Found mpi.mod in $mpilib, adding to include path"
        additional_mpiincs="$additional_mpiincs -I$mpilib"
    fi

    if [ -d $mpiinc ] ; then
        #echo "Include dir found. adding -I$mpiinc to INC"
	mpiincargs="$mpiincargs -I$mpiinc $additional_mpiincs"
	mpiincargs=`echo $mpiincargs | sed  -e 's/ /#/g'`
	fixmakeargs="$fixmakeargs mpiincargs=$mpiincargs"
    fi
fi


if [ $perf = yes ] ; then
    fixmakeargs="$fixmakeargs PERFLIB"
    tauoptions="${tauoptions}-perf"
    if [ "x$perfincdir" != "x" ] ; then
	fixmakeargs="$fixmakeargs perfincdir=$perfincdir"
    fi
    if [ "x$perflibdir" != "x" ] ; then
	fixmakeargs="$fixmakeargs perflibdir=$perflibdir"
    fi
    if [ "x$perflibrary" != "x" ] ; then
	fixmakeargs="$fixmakeargs perflibrary=$perflibrary"
    else
	if [ -f $perflibdir/libpapi.a ] ; then
	    perflibrary="-lperfrt#-lpapi"
	else
	    perflibrary="-lperfrt"
	fi
	fixmakeargs="$fixmakeargs perflibrary=$perflibrary"
    fi
fi

if [ $epilog = yes -a $epiloginc = no -a $epilogdir != no ] ; then
    if [ -f $epilogdir/include/elg_rw.h ] ; then
	epilogincdir=$epilogdir/include
    else
	if [ -f $epilogdir/include/be/elg_rw.h ] ; then
	    epilogincdir=$epilogdir/include/be
	else
	    epilogincdir=$epilogdir/src
	fi
    fi
fi

if [ $epilog = yes -a $epilogbin = no -a $epilogdir != no ] ; then
    if [ -f $epilogdir/bin/opari -o -f $epilogdir/bin/opari2 ] ; then
	epilogbindir=$epilogdir/bin
    else
	epilogbindir=$epilogdir/src
    fi
fi

if [ $epilog = yes -a -f $epilogbindir/skin ] ; then
    fixmakeargs="$fixmakeargs SCALASCA"
    scalasca=yes
    if [ $machine = craycnl -a -d $epilogdir/include/fe -a -d $epilogdir/lib/be ] ; then
	epiloglibdir=$epilogdir/lib/be
    fi
fi

if [ $epilog = yes -a $epiloglib = no -a $epilogdir != no ] ; then
    if [ -f $epilogdir/lib/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/lib
    elif [ -f $epilogdir/src/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/src
    elif [ -f $epilogdir/lib/be/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/lib/be
    elif [ -f $epilogdir/lib/fe/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/lib/fe
    elif [ -f $epilogdir/lib64/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/lib64
    elif [ -f $epilogdir/lib32/libelg.base.a ] ; then
	epiloglibdir=$epilogdir/lib32
    else
	echo "ERROR: PLEASE SPECIFY A VALID -epiloglib=<dir> option."
    fi
fi


if [ $vampirtrace = yes ] ; then
    # use vtcc/vtf90 -vt:show to get -I's and -L/-l's


    # prefer vtf90 over vtcc
    vtshow="no"
    if [ -f "$vampirtracedir/bin/vtcc" ] ; then
	vtshow="$vampirtracedir/bin/vtcc"
    fi
    if [ -f "$vampirtracedir/bin/vtf90" ] ; then
	vtshow="$vampirtracedir/bin/vtf90"
    fi

    if [ $vtshow != "no" ] ; then

	# test VampirTrace version
	$echo "Checking version of VampirTrace... ${nnl}"
	version=`$vampirtracedir/bin/vtcc -vt:version 2>&1`
	echo "$version"
	eval major=${version/./;minor=}
	minor=`echo $minor | sed 's/\([0-9]*\).*/\1/g'`

	# check if 5.7 or later
	if [ "x$major" = "x5" -a "x$minor" = "x7" ] ; then
	    fixmakeargs="$fixmakeargs VAMPIRTRACE_5_7_API"
	else
	    fixmakeargs="$fixmakeargs VAMPIRTRACE_5_12_API"
	fi

	vtserchk="seq"
	vtparchk="mpi"

	if [ $openmp = yes ] ; then
	    vtserchk="mt"
	    vtparchk="hyb"
	fi

	tmp=`$vtshow -vt:mpi -vt:show 2>&1`
	if [[ "$elements" == vtf90:\ unknown\ option* ]] ; then
	    if [ $openmp = yes ] ; then
		vtserchk="omp"
	    fi
	fi

	# first, find MPI libs
	elements=`$vtshow -vt:$vtparchk -vt:show 2>&1`
	if [[ "$elements" == vtf90:\ unknown\ option* ]] ; then
	    elements=`$vtshow -vt:$vtparchk -vt:showme 2>&1`
	fi
	vampirtraceincs=""
	vampirtracempilibs=""
	for arg in $elements ; do
	    case $arg in
		-I*)
		    vampirtraceincs="$vampirtraceincs#$arg"
		    ;;
		-L*)
		    vampirtracempilibs="$vampirtracempilibs#$arg"
		    ;;
		-l*)
		    vampirtracempilibs="$vampirtracempilibs#$arg"
		    ;;
	    esac
	done

	# now, find serial libs
	elements=`$vtshow -vt:show -vt:$vtserchk 2>&1`
	if [[ "$elements" == vtf90:\ unknown\ option* ]] ; then
	    elements=`$vtshow -vt:showme -vt:$vtserchk 2>&1`
	fi
	vampirtracelibs=""
	for arg in $elements ; do
	    case $arg in
		-L*)
		    vampirtracelibs="$vampirtracelibs#$arg"
		    ;;
		-l*)
		    vampirtracelibs="$vampirtracelibs#$arg"
		    ;;
	    esac
	done


	fixmakeargs="$fixmakeargs vampirtraceincs=$vampirtraceincs"
	fixmakeargs="$fixmakeargs vampirtracelibs=$vampirtracelibs"
	fixmakeargs="$fixmakeargs vampirtracempilibs=$vampirtracempilibs"

	vampirtraceshow=yes
    fi

    if [ -f $vampirtracedir/lib/libvt.a ] ; then
	vampirtracelibdir=lib
    else
	vampirtracelibdir=vtlib
    fi
fi

if [ $beacon = yes -a -d $beacondir -a -d $beacondir/include -a -d $beacondir/lib ]; then
    fixmakeargs="$fixmakeargs BEACON beacondir=$beacondir"
    tauoptions="${tauoptions}-beacon"
fi

if [ $papi = yes ] ; then
    fixmakeargs="$fixmakeargs PAPI papidir=$papidir"
    tauoptions="${tauoptions}-papi"
    p=$papidir/lib
    papisubdir=lib
    if [ $machine = "mips32" ] ; then
	papisubdir=lib32
	fixmakeargs="$fixmakeargs papisubdir=lib32"
    else
	if [ -f $p/libpapi.so -o -f $p/libpapi.a -o -f $p/libpapi64.so -o -f $p/libpapi64.a -o -f $p/libpapi.rts.a ] ; then
	    papisubdir=lib
	    fixmakeargs="$fixmakeargs papisubdir=lib"
	else
	    if [ -f $p/cnos64/libpapi.so ] ; then
		papisubdir=lib/cnos64
		fixmakeargs="$fixmakeargs papisubdir=lib/cnos64"
	    else
		if [ -f $p/xt-cnl/lib/libpapi.so ] ; then
		    papisubdir=xt-cnl/lib
		    fixmakeargs="$fixmakeargs papisubdir=xt-cnl/lib"
                else
		    if [ -f $papidir/lib64/libpapi.so -a $papidir != "/usr" ] ; then
			papisubdir=lib64
			fixmakeargs="$fixmakeargs papisubdir=lib64"
		    else
			papisubdir=src
			fixmakeargs="$fixmakeargs papisubdir=src"
		    fi
		fi
	    fi
	fi
    fi


    if [ -f $papidir/lib/libpfm.a ] ; then
	cat <<EOF > tau_papi_test.c
#include <papi.h>
int main (int argc, char **argv) {
  int papi_ver;
  papi_ver = PAPI_library_init(PAPI_VER_CURRENT);
}
EOF

        if $c_compiler $orig_useropt tau_papi_test.c -I$papidir/include -L$papidir/$papisubdir -lpfm -lpapi -lpfm -o tau_papi_test 1> /dev/null 2>&1 ; then
	    fixmakeargs="$fixmakeargs PAPIPFM"
	    papipfm=yes
	    papiperfctr=no
	else
          if $c_compiler $orig_useropt tau_papi_test.c -I$papidir/include -L$papidir/$papisubdir -lpfm -lpapi -lpfm -lperfctr -o tau_papi_test 1> /dev/null 2>&1 ; then
	    fixmakeargs="$fixmakeargs PAPIPFMPERFCTR"
	    papipfm=yes
	    papiperfctr=yes
	  fi
	fi

        if [ $machine = craycnl ] ; then
	    $c_compiler $orig_useropt -c -fPIC tau_papi_test.c -I$papidir/include
	    if $c_compiler $orig_useropt tau_papi_test.o -I$papidir/include -shared -o libtau_papi_test.so $papidir/$papisubdir/libpapi.a 1> /dev/null 2>&1 ; then
		echo "PAPI library links properly"
	    else
		if $c_compiler $orig_useropt tau_papi_test.o -I$papidir/include -shared -o libtau_papi_test.so $papidir/$papisubdir/libpapi.so 1> /dev/null 2>&1 ; then
              	    echo "PAPI library links properly with .so"
		    fixmakeargs="$fixmakeargs CRAYCNL_PAPI_SHARED"
		else
		    echo "NOTE: libpapi.a can't be called in a TAU shared object. Using -DISABLESHARED"
		    fixmakeargs="$fixmakeargs NOSHARED"
		fi
	    fi
        fi
	/bin/rm -f tau_papi_test.c tau_papi_test tau_papi_test.o libtau_papi_test.so
    fi
fi

if [ $darshan = yes ] ; then
    fixmakeargs="$fixmakeargs DARSHAN darshandir=$darshandir"
    tauoptions="${tauoptions}-darshan"
fi



######################################################################
# Set default CC compiler in all Makefiles

if [ "$mpi" = "yes" -a "$ibmxlc_r" = "no" -a "$ibmxlc" = "yes" -a "$machine" = "ibm64" ]
then
    echo "WARNING: PLEASE use xlC_r instead of xlC with MPI in 64 bit mode!! Reconfigure."
    echo "----------------------------------------------------------------"
fi

# Now check for SHMEM options
if [ $shmem = yes ]
then
    if [ "x$shmeminc" != "x" ]
    then
	if [ -d $shmeminc ]
	then
            shmem_h="$shmeminc/shmem.h"
            shmemdir="$shmeminc/.."
	    #echo "Include dir found. adding -I$mpiinc to INC"
	    shmemincargs="-I$shmeminc"
	    if [ -r $shmeminc/mpp/shmem.h ]
	    then
		shmemincargs="-I$shmeminc#-I$shmeminc/mpp"
	    fi
	    gpshmem=no
	    if [ -r $shmeminc/gpshmem.h ]
	    then
                if [ $pshmem = yes ] ; then
		    fixmakeargs="$fixmakeargs GPSHMEM_PSHMEM"
		    gpshmem_pshmem=yes
                else
		    fixmakeargs="$fixmakeargs GPSHMEM"
		    gpshmem=yes
                fi
	    fi
	    if [ -r $shmeminc/shmemx.h ]
	    then
                fixmakeargs="$fixmakeargs SHMEMX_H"
	    fi
	    shmembindir=`echo $shmeminc | sed -e 's@include@bin@g'`
	    if [ -r $shmembindir/oshcc ]
	    then
                if [ $pshmem = yes ] ; then
		    openshmem_pshmem=yes
		    fixmakeargs="$fixmakeargs OPENSHMEM_PSHMEM"
                else
		    openshmem=yes
		    fixmakeargs="$fixmakeargs OPENSHMEM"
                fi
	    fi
	    if [ -r $shmembindir/mpiexec_mpt ]
	    then
		if [  `nm -A $MPI_ROOT/lib/libsma.so | grep pshmem | wc -l` != 0 ] && [ $pshmem = yes ] ; then
		  fixmakeargs="$fixmakeargs SGI_MPT_PSHMEM"
                else
		  fixmakeargs="$fixmakeargs SGI_MPT_SHMEM"
                fi
	    fi
	fi
    else
	openshmem=no
	oshcc_var=`which oshcc 2>/dev/null`
  retval=$?
	if [ "x$oshcc_var" != "x" -a $retval = 0 ]
	then
	    openshmem_include_dir=`echo $oshcc_var | sed -e 's@bin/oshcc@include@g'`
	    shmemdir="$openshmem_include_dir/.."
	    if [ -r $openshmem_include_dir/mpp/shmem.h -a -r $openshmem_include_dir/../bin/mpiexec_mpt ]
	    then
		shmemincargs="-I$openshmem_include_dir#-I$openshmem_include_dir/mpp"
		if [  `nm -A $MPI_ROOT/lib/libsma.so | grep pshmem | wc -l` != 0 ] && [ $pshmem = yes ] ; then
		  fixmakeargs="$fixmakeargs SGI_MPT_PSHMEM"
                else
		  fixmakeargs="$fixmakeargs SGI_MPT_SHMEM"
                fi
	    else
		if [ -r $oshcc_var ]
		then
		    if [ -r $openshmem_include_dir/mpp/shmem.h ]
		    then
			shmemincargs="-I$openshmem_include_dir#-I$openshmem_include_dir/mpp"
		    fi
                    if [ $pshmem = yes ] ; then
		        openshmem_pshmem=yes
		        fixmakeargs="$fixmakeargs OPENSHMEM_PSHMEM"
                    else
		        openshmem=yes
		        fixmakeargs="$fixmakeargs OPENSHMEM"
                    fi
		fi
	    fi
            shmem_h="$openshmem_include_dir/shmem.h"
	    if [ -r $openshmem_include_dir/shmemx.h ]
	    then
                fixmakeargs="$fixmakeargs SHMEMX_H"
	    fi
	fi
	if [ $catamount = yes ]
	then
	    shmemincargs="-I/opt/xt-mpt/default/include/mpp#-I/opt/xt-mpt/default/include"
            shmemdir="/opt/xt-mpt/default"
	fi
	if [ $machine = craycnl ]
	then
	    if [ "x$MPT_DIR" = "x" -a "x$CRAY_SHMEM_DIR" != "x" ]
	    then
                shmemdir="$CRAY_SHMEM_DIR"
		if [ -r $CRAY_SHMEM_DIR/include/mpp/shmem.h ]
		then
		    shmemincargs="-I$CRAY_SHMEM_DIR/include/mpp/#-I$CRAY_SHMEM_DIR/include"
		fi
                shmem_h="$CRAY_SHMEM_DIR/include/mpp/shmem.h"
	    else
                shmemdir="$MPT_DIR/sma"
		if [ -r $MPT_DIR/sma/include/mpp/shmem.h ]
		then
		    shmemincargs="-I$MPT_DIR/sma/include/mpp/#-I$MPT_DIR/sma/include/"
                    shmem_h="$MPT_DIR/sma/include/mpp/shmem.h"
		else
		    if [ -r $CRAY_MPICH2_BASEDIR/sma64/include/shmem.h ] ; then
		      shmemincargs="-I$CRAY_MPICH2_BASEDIR/sma64/include/mpp#-I$CRAY_MPICH2_BASEDIR/sma64/include"
                      shmem_h="$CRAY_MPICH2_BASEDIR/sma64/include/mpp/shmem.h"
                    else
		      shmemincargs="-I/opt/mpt/default/xt/sma64/include/mpp#-I/opt/mpt/default/xt/sma64/include"
                      shmem_h="/opt/mpt/default/xt/sma64/include/mpp/shmem.h"
                    fi
		    # old options
		fi
	    fi
            fixmakeargs="$fixmakeargs CRAYSHMEM"
	fi
	if [ $machine = x86_64 -o $machine = ia64 ]
	then
	    mpiexec_mpt_var=`which mpiexec_mpt 2>/dev/null`
	    if [ "x$mpiexec_mpt_var" != "x" ]
	    then
		libsmafile=`echo $mpiexec_mpt_var | sed -e 's@bin/mpiexec_mpt@lib/libsma.so@g'`
		shmeminclude=`echo $mpiexec_mpt_var | sed -e 's@bin/mpiexec_mpt@include@g'`
                shmemdir="$shmeminclude/.."
                shmem_h="$shmeminclude/shmem.h"
	        if [ -r $shmeminclude/shmemx.h ]
	        then
                    fixmakeargs="$fixmakeargs SHMEMX_H"
	        fi
		if [ -r $libsmafile -a -d $shmeminclude -a "x$shmeminclude" != "x" ]
		then
		    shmemlibdir=`echo $mpiexec_mpt_var | sed -e 's@bin/mpiexec_mpt@lib@g'`
		    echo "Detected SGI MPT: Using $shmeminclude as include dir and $shmemlibdir as SHMEM lib dir"
		    if [  `nm -A $MPI_ROOT/lib/libsma.so | grep pshmem | wc -l` != 0 ] && [ $pshmem = yes ] ; then
		      fixmakeargs="$fixmakeargs SGI_MPT_PSHMEM"
                    else
		      fixmakeargs="$fixmakeargs SGI_MPT_SHMEM"
                    fi
		    shmemincargs="-I$shmeminclude#-I$shmeminclude/mpp"
		    if [ $shmemlibrary = no -a "x$shmemlib" = "x" ]
		    then
			shmemlib="$shmemlibdir"
			shmemlibrary=-lsma#-lmpi
		    fi
		fi
	    fi
	fi
    fi

    if [ "x$shmemlibrary" != "x" -a "$shmemlibrary" = "no" ]
    then
	shmemlibrary=-lsma
	if [ $gpshmem = yes ]
	then
	    shmemlibrary=-lgpshmem
	fi
    fi
    if [ "x$oshcc_var" = "x" ]
    then
	oshcc_var=`which oshcc  2>/dev/null`
	if [ "x$oshcc_var" != "x" -a "$?" = 0 ]
	then
            if [ $pshmem = yes ] ; then
                openshmem_pshmem=yes
     	        fixmakeargs="$fixmakeargs OPENSHMEM_PSHMEM"
            else
	        fixmakeargs="$fixmakeargs OPENSHMEM"
	        openshmem=yes
            fi
	fi
    fi
    if [ "x$oshcc_var" != "x" ]
    then
	openshmem_lib_dir=`echo $oshcc_var | sed -e 's@bin/oshcc@lib@g'`
	if [ -r $openshmem_lib_dir/libopenshmem.so -o -r $openshmem_lib_dir/libopenshmem.a ]
	then
	    shmemlibargs="$shmemlibargs -L$openshmem_lib_dir"
	    if [ "$shmemlibrary" = "no"  -o "$shmemlibrary" = "-lsma" ]
	    then
		shmemlibrary=-lopenshmem
	    fi
	fi
	if [ -r $openshmem_lib_dir/liboshmem.so -o -r $openshmem_lib_dir/liboshmem.a ]
	then
	    shmemlibargs="$shmemlibargs -L$openshmem_lib_dir"
	    if [ "$shmemlibrary" = "no"  -o "$shmemlibrary" = "-lsma" ]
	    then
		shmemlibrary=-loshmem
		if [ $pshmem = yes ] ; then
	            fixmakeargs="$fixmakeargs OPENMPI_SHMEM"
	        fi
	    fi
	fi
	if [ -r $openshmem_lib_dir/libshmem.so -o -r $openshmem_lib_dir/libshmem.a ]
	then
	    shmemlibargs="$shmemlibargs -L$openshmem_lib_dir"
	    if [ "$shmemlibrary" = "no"  -o "$shmemlibrary" = "-lsma" ]
	    then
		shmemlibrary=-lshmem
		if [ $pshmem = yes ] ; then
	            fixmakeargs="$fixmakeargs OPENMPI_SHMEM"
	        fi
	    fi
	fi
    if [ -r $openshmem_lib_dir/libsma.so -o -r $openshmem_lib_dir/libsma.a ]
    then
        shmemlibargs="$shmemlibargs -L$openshmem_lib_dir"
    fi
    fi

    if [ "x$shmemlib" != "x" ]
    then
	if [ -d $shmemlib ]
	then
	    #echo "Lib dir found. adding -L$shmemlib to LIB"
	    shmemlibargs="$shmemlibargs -L$shmemlib"
	fi
	shmembindir=`echo $shmemlib | sed -e 's@lib@bin@g'`
	if [ -r $shmembindir/oshcc ]
	then
            if [ $pshmem = yes ] ; then
                openshmem_pshmem=yes
     	        fixmakeargs="$fixmakeargs OPENSHMEM_PSHMEM"
            else
	        openshmem=yes
     	        fixmakeargs="$fixmakeargs OPENSHMEM"
            fi
	fi
	if [ -r $shmembindir/mpiexec_mpt ]
	then
            if [  `nm -A $MPI_ROOT/lib/libsma.so | grep pshmem | wc -l` != 0 ] && [ $pshmem = yes ] ; then
	      fixmakeargs="$fixmakeargs SGI_MPT_PSHMEM"
            else
	      fixmakeargs="$fixmakeargs SGI_MPT_SHMEM"
            fi
	    shmemlibrary=-lsma#-lmpi
	fi

    else
	if [ $catamount = yes ]
	then
	    shmemlibargs="$shmemlibargs -L/opt/xt-mpt/default/lib/cnos64"
	fi
	if [ $machine = craycnl ]
	then
	    if [ -r $MPT_DIR/sma/lib64/libsma.a ]
	    then
		shmemlibargs="$shmemlibargs -L$MPT_DIR/sma/lib64/"
	    else
		if [ -r $CRAY_SHMEM_DIR/lib64/libsma.a ] ; then
		  shmemlibargs="$shmemlibargs -L$CRAY_SHMEM_DIR/lib64/"
                else
		  shmemlibargs="$shmemlibargs -L/opt/mpt/default/xt/sma64/lib"
                fi
	    fi
            if [ $pshmem = yes ] ; then
                craycnl_pshmem = yes
	        fixmakeargs="$fixmakeargs CRAYCNL_PSHMEM"
            fi
	fi
    fi

    if [ "x$shmemmpiinc" != "x" ] ; then
	    shmemmpiincargs="-I$shmemmpiinc"
    fi

    if [ "x$shmem_h" != "x" -a -r "$shmem_h" ] ; then
      shmem_minor_version=`grep SHMEM_MINOR_VERSION "$shmem_h" | grep -v CRAY | grep -v OSHMEM | grep -v _SHMEM | awk '{print $3}'`
      if [ "x$shmem_minor_version" = "x" ]; then
        shmem_minor_version=`grep SHMEM_MINOR_VERSION "$shmem_h" | grep -v CRAY | grep -v OSHMEM | awk '{print $3}'`
      fi
      shmem_major_version=`grep SHMEM_MAJOR_VERSION "$shmem_h" | grep -v CRAY | grep -v OSHMEM | grep -v _SHMEM | awk '{print $3}'`
      if [ "x$shmem_major_version" = "x" ]; then
        shmem_major_version=`grep SHMEM_MAJOR_VERSION "$shmem_h" | grep -v CRAY | grep -v OSHMEM | awk '{print $3}'`
      fi
      echo "OpenSHMEM minor version: $shmem_minor_version major version: $shmem_major_version"
      if [ "$shmem_major_version" -lt 2 -a "$shmem_minor_version" -le 2 ] ; then
        orig_useropt="$orig_useropt -DSHMEM_1_2"
        useropt="$useropt#-DSHMEM_1_2"
        echo "Detected OpenSHMEM version 1.2 or earlier."
      fi 
    fi


    shmemlibargs="$shmemlibargs $shmemlibrary"
    shmemlibargs=`echo $shmemlibargs | sed  -e 's/ /#/g'`
    fixmakeargs="$fixmakeargs SHMEM"
    tauoptions="${tauoptions}-shmem"
    fixmakeargs="$fixmakeargs shmemlibargs=$shmemlibargs shmemincargs=$shmemincargs shmemdirargs=$shmemdir shmemmpiincargs=$shmemmpiincargs"
fi

gcclibdir=unknown
case $c_compiler in
  gcc|gcc4|gcc-5)
    echo "Default C compiler will be " `$c_compiler -v 2>&1 | tail -1`
    # I must set the gcclibdir in the Makefiles if we combine gcc, cc, and CC
    gcclibdir=`$c_compiler -v 2>&1 | awk '{print $4;}' | \
       awk -F/ '{for (i=2; i<NF; i++) printf("/%s",$i); printf("\n"); }'`
    ;;
  *)
    echo Default C compiler will be $c_compiler
    fixmakeargs="$fixmakeargs USE_CC"
    ;;
esac

if [ $upc_compiler = gcc -o $upc_compiler = upc ]
then
    gupc=yes
fi

if [ $upc_compiler = xlupc ]
then
    fixmakeargs="$fixmakeargs XLUPC"
fi

######################################################################
# Set default compiler options




if [ $scorep = yes ]
then
  swap_c_compiler=$c_compiler
  c_compiler=$orig_c_compiler
  swap_cxx_compiler=$cxx_compiler
  cxx_compiler=$orig_cxx_compiler
  swap_fortran_compiler=$fortran_compiler
  fortran_compiler=$orig_fortran_compiler
fi
fixmakeargs="c_compiler=$c_compiler cxx_compiler=$cxx_compiler useropt=$useropt extradir=$extradir extradircxx=$extradircxx extrashlibopts=$extrashlibopts $fixmakeargs"
# We really need mpicc as the linker for Score-P.

if [ $scorep = yes ]
then
  c_compiler=$swap_c_compiler
  cxx_compiler=$swap_cxx_compiler
  fortran_compiler=$swap_fortran_compiler
fi

######################################################################
# discover the paths for standard system include directories

cat << EOF > get_stdinc.C
#include <stddef.h>
#include <iostream>
EOF

cat << EOF > find_stdinc.awk
BEGIN {cinc=""; cppinc="";}
/^#[0123456789]+ ".+\/stddef.h"/ {cinc = substr(\$2, 2, length(\$2)-11);}
/^#line [0123456789]+ ".+\/stddef.h"/ {cinc = substr(\$3, 2, length(\$3)-11);}
/^# [0123456789]+ ".+\/stddef.h"/ {cinc = substr(\$3, 2, length(\$3)-11);}
/^#[0123456789]+ ".+\/iostream.h"/ {cppinc = substr(\$2, 2, length(\$2)-13);}
/^#line [0123456789]+ ".+\/iostream.h"/ {cppinc = substr(\$3, 2, length(\$3)-13);}
/^# [0123456789]+ ".+\/iostream.h"/ {cppinc = substr(\$3, 2, length(\$3)-13);}
END {printf("-I%s -I%s\n", cinc, cppinc);}
EOF

if [ $machine = hitachi ]
then
    stdinc="-I/usr/include"
else
    stdinc=`$cxx_compiler  -E get_stdinc.C | awk -f find_stdinc.awk`
fi

rm -f get_stdinc.C find_stdinc.awk


######################################################################
# Checking gcc 4.6+ version. It needs -lmpi to be added after -ltau
cat << EOF > gcc46test.C
#if (__GNUC__ > 4 )
#error "Using GCC 4.6+"
#elif ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
#error "Using GCC 4.6+"
#endif
EOF

if $cxx_compiler $orig_useropt -c gcc46test.C 1> /dev/null 2>&1
then
    echo "Not using GNU 4.6+ fixes" > /dev/null
else
    echo "NOTE: Using GNU 4.6+ fixes" > /dev/null
    fixmakeargs="$fixmakeargs GNU46PLUS"
fi
/bin/rm -f gcc46test.*


######################################################################
if [ $cxx_compiler = pgCC -o $cxx_compiler = pgc++ -o $cxx_compiler = pgcpp -o "x$PE_ENV" = "xPGI" ]
then
    cat <<EOF > pgitest.C
int foo(int x)
{
  return x;
}
EOF
    if $cxx_compiler $orig_useropt -c pgitest.C 1> /dev/null 2>&1
    then
	if $cxx_compiler $orig_useropt --prelink_objects pgitest.o 1> /dev/null 2>&1
	then
	    echo "PGI compiler supports the --prelink_objects option"
	else
	    echo "PGI compiler should not use --prelink_objects option for making libs"
	    fixmakeargs="$fixmakeargs PGINOPRELINK"
	fi
    else
	echo "ERROR: Your PGI compiler is not working! Please check the license file"
    fi
    /bin/rm -f pgitest.o pgitest.C libpgitest.a
cat <<EOF > pgiacctest.C
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <openacc.h>
#include "pgi_acc_prof.h"
extern "C" void
acc_register_library(acc_prof_reg reg, acc_prof_reg unreg, acc_prof_lookup lookup)
{
return ;
}
EOF
    if $cxx_compiler $orig_useropt -c pgiacctest.C 1> /dev/null 2>&1
    then
      echo "PGI compiler supports OpenACC profiling interface. Enabling OpenACC."
      fixmakeargs="$fixmakeargs PGI_OPENACC"
      use_openacc=yes
    else
      echo "PGI compiler doesn't support OpenACC profiling interface."
    fi
    /bin/rm -f pgiacctest.C pgiacctest.o

cat <<EOF > pgiacc15.c
#include <sys/types.h>
#include <openacc.h>
#include "pgi_acc_prof.h"

static void
Tau_openacc_callback( acc_prof_info* prof_info, acc_event_info* event_info, acc_api_info* api_info )
{
    int x;
    switch (prof_info->event_type) {
      case acc_ev_implicit_wait_start         :  x = 1;
      default: x = 2;
    }
    return;
}
EOF
    if $cxx_compiler $orig_useropt -c pgiacc15.c 1> /dev/null 2>&1
    then
      echo "PGI compiler supports PGI v15.x OpenACC API (acc_ev_implicit_wait_start)"
      fixmakeargs="$fixmakeargs PGI_OPENACC_15x"
    fi
    /bin/rm -f pgiacc15.c pgiacc15.o

fi

if [ $pgi = yes ]; then
  if [ -d $extradir/lib -a ! -r $extradir/lib/libstd.a ]; then
    echo "NOTE: PGI 16+ compiler does not provide libstd.* files in $extradir/lib"
    fixmakeargs="$fixmakeargs PGI_NO_LIBSTD"
  fi
fi

if [ $machine = craycnl -a $pmi = no ]; then
  echo "Testing for <pmi.h> header... ${nnl}"
cat <<EOF > pmitest.c
#include <pmi.h>
EOF
  if $cxx_compiler -c pmitest.c 1> /dev/null 2>&1 
  then
    echo "yes"
    fixmakeargs="$fixmakeargs CRAYCNL_PMI_FOUND"
  else
    echo "no."
    echo "WARNING! You may need to reconfigure TAU with -PMI if there are missing references during linking."
    echo "============="
  fi
fi


######################################################################
# If epilog is used, check and see if it supports v2.1s write interface
if [ $epilog =  yes ]
then
    echo "Checking epilog write interface:"
    cat << EOF > elgtest.C
#include <elg_rw.h>
int foo(ElgOut *out, elg_ui4 eventc)
{
  return ElgOut_write_NUM_EVENTS(out, eventc);
}
EOF
    if $cxx_compiler $orig_useropt -I$epilogincdir -c elgtest.C 1> /dev/null 2>&1
    then
	fixmakeargs="$fixmakeargs TAU2EPILOG"
    fi
    rm -f elgtest.C elgtest.o
fi



######################################################################
# Set some more Profiling options

if [ $stdcxxlib = yes ]
then
    fixmakeargs="$fixmakeargs STDCXXLIB"
fi


######################################################################
if [ $machine = craycnl ]
then
    #echo "This looks like a Cray Compute Node Linux (CNL) system..."
    fixmakeargs="$fixmakeargs CRAYCNL"
fi

######################################################################
if [ $catamount = yes ]
then
    #echo "This looks like a CATAMOUNT Cray RS system..."
    fixmakeargs="$fixmakeargs CATAMOUNT"

    if [ $fortran_compiler = pgi ]
    then
	fixmakeargs="$fixmakeargs PGI_CATAMOUNT"
    fi
fi

######################################################################
if [ $cxx_compiler = g++ -o $cxx_compiler = g++4 -o $cxx_compiler = g++-5 -o $cxx_compiler = g++-6 -o $cxx_compiler = g++-7 -o $cxx_compiler = g++-8 -o $cxx_compiler = egcs -o $cxx_compiler = powerpc64-linux-g++ -o $cxx_compiler = c++ -o $cxx_compiler = scg++ -o $cxx_compiler = mips64el-gentoo-linux-gnu-g++  -o $cxx_compiler = powerpc-bgp-linux-g++ -o $cxx_compiler = x86_64-w64-mingw32-g++ -o $cxx_compiler = powerpc64-bgq-linux-g++ ]
then
    if [ $machine != crayxmt ]
    then
	fixmakeargs="$fixmakeargs GNU COMPINST_GNU"

    fi
    if [ $machine = ibm64 -o $machine = rs6000 -o $machine = ppc64 -o $machine = bgl -o $machine = bgp -o $machine = ibm64linux -o $machine = bgq ]
    then
	tauoptions="${tauoptions}-gnu"
    fi
    taugcclibdir=`$host_prefix$c_compiler -print-libgcc-file-name | sed -e 's,[^/]*$,,'`
    echo "Using GNU lib dir as $taugcclibdir"
    taugccstdcxxlibdir=`$host_prefix$c_compiler -print-file-name=libstdc++.a | sed -e 's,[^/]*$,,'`
    if [ $machine = apple -a "x$taugcclibdir" = "x" -a "x$taugccstdcxxlibdir" = "x" ]; then
# if it is blank, please use TAU libs so we don't have a -L<blank> -lgcc_s.1
      taugcclibdir=${tauroot}/${machine}/lib
      taugccstdcxxlibdir=${tauroot}/${machine}/lib
      echo "taugcclibdir = $taugcclibdir taugccstdcxxlibdir=$taugccstdcxxlibdir"
    fi
    echo "Using GNU stdc++ lib dir as $taugccstdcxxlibdir"
    fixmakeargs="$fixmakeargs taugcclibdir=$taugcclibdir taugccstdcxxlibdir=$taugccstdcxxlibdir"
fi
######################################################################
# Checking the availability of the LD auditor. We need glibc 2.4 or greater and
# link.h and dlfn.h
cat << EOF > gccAuditorTest.c
#include <features.h>
#include <dlfcn.h>
#include <link.h>
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 4) || __GLIBC__ > 2)
#else
#error "GLIBC LD AUDITOR available."
#endif
EOF

$host_prefix$c_compiler $orig_useropt -c gccAuditorTest.c 1> /dev/null 2>&1
if [ "$?" = "0" ]
then
    echo "Using LD AUDITOR."
    fixmakeargs="$fixmakeargs LD_AUDITOR_AVAILABLE"
else
    echo "LD AUDITOR unavailable, disabling"
fi
/bin/rm -f gccAuditorTest.*


######################################################################
# Do we need -lm Ubuntu does!
if [ $machine != apple ]; then 
  if [ -f /etc/issue -a "x$tau_uselm" != "xno" -a `grep Ubuntu /etc/issue | wc -l ` = 1 ]; then
    tau_uselm=yes
    fixmakeargs="$fixmakeargs TAU_USELM"
  fi
fi

######################################################################
# TEST FOR ALL MACHINE TYPES
case $machine in
    hp9000s700 | hp9000s800)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine NO_RANLIB HP $fixmakeargs"
	# HP-ALLOCA HP_CFLAGS

	if [ `/bin/uname -r | cut -d. -f2` = 10 ] ; then
            echo This machine uses HPUX Version 10
            fixmakeargs="HPUX10 $fixmakeargs"
        fi

	if [ $c_compiler = cc ] ; then
	    fixmakeargs="HP_CFLAGS HP-ALLOCA $fixmakeargs"
	fi

	if [ $cxx_compiler = g++ ] ; then
	    fixmakeargs="HPGNU $fixmakeargs"
	fi

	if [ $pdt_cxx_compiler = aCC ] ; then
	    fixmakeargs="PDTHPACC $fixmakeargs"
	fi

	;;

    decstation)
	echo Found a \"$machine\" configuration definition
	#	fixmakeargs="arch=$machine MIPS_CC $fixmakeargs"
	# with gcc, there are no changes needed...
	fixmakeargs="arch=$machine $fixmakeargs"
	;;

    ppc64)
	echo "Found an IBM PPC-64 Linux configuration definition"
	fixmakeargs="arch=$machine PPC64 $fixmakeargs"
	linuxtimers=yes
	if [ $papi = yes ] ; then
	    fixmakeargs="$fixmakeargs PPC64PAPI"
	fi
	if [ $c_compiler = xlc -o $c_compiler = xlc_r ] ; then
	    fixmakeargs="$fixmakeargs PPC64XLC"
	fi
	if [ $fortran_compiler = ibm -o $fortran_compiler = ibm64 ] ; then
	    fixmakeargs="$fixmakeargs PPC64XLF"
	fi
        ;;

    bgp)
	echo "Found an IBM PPC-64 BG/P Linux configuration definition"
	fixmakeargs="arch=$machine BGP $fixmakeargs"
	if [ $papi = yes ] ; then
	    p=$papidir/lib
	    if [ -f $p/libpapi.a ] ; then
		fixmakeargs="$fixmakeargs BGPPAPI"
	    fi
	fi
        ;;
    bgq)
	echo "Found an IBM PPC-64 BG/Q Linux configuration definition"
	fixmakeargs="arch=$machine BGQ $fixmakeargs"
	if [ $papi = yes ] ; then
	    p=$papidir/lib
	    if [ -f $p/libpapi.a ] ; then
		fixmakeargs="$fixmakeargs BGQPAPI"
	    fi
	fi
        ;;
    bgl)
	echo "Found an IBM PPC-64 BGL Linux configuration definition"
	fixmakeargs="arch=$machine BGL $fixmakeargs"
	if [ $papi = yes ] ; then
	    p=$papidir/lib
	    if [ -f $p/libpapi.a ] ; then
		fixmakeargs="$fixmakeargs BGLPAPI"
	    else
		fixmakeargs="$fixmakeargs BGLPAPI_RTS"
	    fi
	fi
        ;;

    ia64)
	echo "Found an IA-64 configuration definition"
	fixmakeargs="arch=$machine $fixmakeargs"
	linuxtimers=yes
	if [ $papi = yes ] ; then
	    fixmakeargs="$fixmakeargs IA64PAPI"
	fi
	;;

    i386_linux)
	echo "Found a 32-bit x86 linux machine"
	linuxtimers=yes
	fixmakeargs="arch=$machine $fixmakeargs"
	;;

    crayxmt)
        echo "Found a Cray XMT configuration"
	fixmakeargs="arch=$machine $fixmakeargs"
        ;;

    x86_64|xt3|craycnl)
	echo "Found an x86_64 configuration definition"
	fixmakeargs="arch=$machine $fixmakeargs"
	linuxtimers=yes

	if [ $papi = yes ] ; then
	    if [ $papiperfctr = yes ] ; then
		fixmakeargs="$fixmakeargs X86_64PAPI"
	    else
		fixmakeargs="$fixmakeargs X86_64PAPI_NEW"
	    fi
        if [ "x$papidir" = "x/usr" -o "x$papidir" = "x/usr/" ]; then
		  fixmakeargs="$fixmakeargs PAPI_WITHOUT_LIB_INC"
        fi

	fi
	;;
    ibm64)
	echo Found a \"$machine\" configuration definition
        if [ `uname -s` = AIX ]
        then
	    fixmakeargs="arch=$machine $fixmakeargs SP1 IBM64"
        else
            if [ `uname -s ` = Linux ]
            then
		fixmakeargs="arch=$machine $fixmakeargs PPC64 IBM64"
            else
		fixmakeargs="arch=$machine $fixmakeargs IBM64"
            fi
        fi

	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs IBM64PAPI"
	fi
	;;
    ibm64linux)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs PPC64 IBM64LINUX"
	linuxtimers=yes
	if [ $papi = yes ] ; then
	    fixmakeargs="$fixmakeargs IBM64PAPILINUX"
	fi

        if [ $c_compiler = xlc -o $c_compiler=xlc_r ] ; then
            fixmakeargs="$fixmakeargs IBM64LINUX_XLC"
        fi

        if [ $fortran_compiler = ibm -o $fortran_compiler = ibm64 -o $fortran_compiler = xlf ] ; then
            fixmakeargs="$fixmakeargs IBM64LINUX_XLF"
        fi

	;;

    mips32)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs MIPS32 MIPS32LINUX"
	sicortex=yes
	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs MIPS32PAPI"
	fi
	;;

    mips)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs MIPS64 MIPS64LINUX"
	sicortex=yes
	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs MIPS64PAPI"
	fi
	;;

    rs6000)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs SP1"

	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs IBMPAPI"
	fi
	;;

    alpha)
	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs ALPHAPAPI"
	fi
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs"
	fixmakeargs="COMPAQ_ALPHA $fixmakeargs"
        if [ $pdt_cxx_compiler = cxx ]
        then
            fixmakeargs="$fixmakeargs PDTALPHACXX"
        fi
        if [ $guidef90 = yes ]
        then
            f90loaded=`which f90 | sed -e 's/f90/../g' | grep "^no"`
            if [ "x$f90loaded" = "x" ]
            then
    		# f90 module has been loaded and which f90 returns a path
		extradir="`which f90 | sed s/f90/../`"
		echo "Found f90 in `which f90`"
            fi
            fixmakeargs="$fixmakeargs extradir=$extradir COMPAQ_GUIDEF90"
        fi
	;;

    sgi4k | sgi8k | sgi32 | sgin32 | sgi64)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs"
	if [ $c_compiler = cc ]
        then
	    # Check CPU type for compiler optimization flags... (-mips2) (-mips4)
            if [ $machine = sgi4k ]
            then
	        fixmakeargs="$fixmakeargs MIPS_CC"
                fixmakeargs="$fixmakeargs MIPSR4K"
                echo "NOTE: *** This is an SGI Challenge (R4K) ***"
            else
                fixmakeargs="$fixmakeargs MIPSR8K"
		echo "NOTE: *** This is an SGI POWER Challenge/Origin (R8K, R10K) ***"
            fi
        fi
        if [ $machine = sgin32 ]
	then
	    fixmakeargs="$fixmakeargs ENABLEN32BIT"
	fi

        if [ $machine = sgi64 ]
	then
	    fixmakeargs="$fixmakeargs ENABLE64BIT"
	    if [ $papi = yes ]
	    then
		if [ -f $papidir/lib/libpapi64.so -o -f $papidir/src/libpapi64.so ]
		then
	    	    fixmakeargs="$fixmakeargs SGI64PAPI"
		fi
	    fi
	fi

        if [ $machine = sgi32 ]
	then
	    fixmakeargs="$fixmakeargs ENABLE32BIT"
	fi

	# Check for sgimp xdev enviroment
        if [ $detectxdev = sgimp -o $machine = sgi8k -o $machine = sgin32 -o $machine = sgi64 ]
        then
            fixmakeargs="$fixmakeargs SGIMP"
            if [ $fortran_compiler = no ]
	    then
		fixmakeargs="$fixmakeargs SGI_FORTRAN"
		fortran_compiler=yes
	    fi

        fi
	;;

    solaris2*)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine SOL2 $fixmakeargs"
        if [ "$tauarch" = "solaris2-64" ]
        then
	    fixmakeargs="$fixmakeargs SOLARIS64"
        fi

	if [ $papi = yes ]
 	then
	    fixmakeargs="$fixmakeargs SOL2PAPI"
	fi
	if [ $cxx_compiler = CC ]
	then
	    sol2cc=yes
	    fixmakeargs="$fixmakeargs SOL2CC"
	    if [ $openmp = yes ]
	    then
		fixmakeargs="$fixmakeargs SOL2CC_OPENMP"
	    fi
	    if [ $fortran_compiler = no ]
	    then
		fixmakeargs="$fixmakeargs SUN_FORTRAN"
		fortran_compiler=yes
            fi
        fi
	;;

    sun386i)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine SUN386I $fixmakeargs"
	if [ $cxx_compiler = CC ]
	then
	    fixmakeargs="$fixmakeargs SOL2CC"
	    if [ $openmp = yes ]
	    then
		fixmakeargs="$fixmakeargs SOL2CC_OPENMP"
	    fi
	    if [ $fortran_compiler = no ]
	    then
		fixmakeargs="$fixmakeargs SUN_FORTRAN"
		fortran_compiler=yes
            fi
        fi
	;;

    mic_linux)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs"
        if [ $cxx_compiler = mpiicpc -o $cxx_compiler=icpc ]; then
            fixmakeargs="$fixmakeargs MMIC"
        fi
        ;;

    sunx86_64)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs SUNX86_64"
	if [ $cxx_compiler = CC ] ; then
	    fixmakeargs="$fixmakeargs SOL2CC"
	    if [ $openmp = yes ] ; then
		fixmakeargs="$fixmakeargs SOL2CC_OPENMP"
	    fi
	    if [ $fortran_compiler = no ] ; then
		fixmakeargs="$fixmakeargs SUN_FORTRAN"
		fortran_compiler=yes
            fi
        fi
	;;


    sun4)
	echo Found a \"$machine\" configuration definition
        fixmakeargs="arch=$machine $fixmakeargs"
	;;

    c90)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine C90 CRAY-ALLOCA $fixmakeargs"
	# Check for T3D xdev enviroment
        if [ $detectxdev = t3d ]
        then
            fixmakeargs="$fixmakeargs T3D"
        fi
	;;

    t3e)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine T3E CRAY-ALLOCA $fixmakeargs"
	if [ $fortran_compiler = no ]
	then
	    fixmakeargs="$fixmakeargs CRAY_FORTRAN"
            fortran_compiler=yes
        fi
        ;;

    apple)
	if [ "x$unwind_lib_flag" = "x-lunwind" ] ; then
            unwind_inc="/usr/include"
            unwind_lib="/usr/lib/system"
            unwind_lib_flag="-framework System"
	    echo "Using Apple's system provided libunwind umbrella framework..."
	fi
	fixmakeargs="arch=$machine  $fixmakeargs"
        ;;

    arm_linux)
	echo Found a \"$machine\" configuration definition
	fixmakeargs="arch=$machine $fixmakeargs"
	if [ $papi = yes ] ; then
	    fixmakeargs="ARMLINUXPAPI $fixmakeargs"
	fi
	;;

    arm_android)
	echo Found a \"$machine\" configuration definition
	if [ "x$android_sdk" = "x" ]; then
	    echo "Error: No Android SDK specified. You may want to specify \"-android_sdk=<dir>\", \"-android_version=VERSION\", and \"-android_platform=VERSION\""
	    exit 1
	fi

	fixmakeargs="arch=$machine ANDROID android_sdk=$android_sdk android_version=$android_version android_platform=$android_platform $fixmakeargs"
	if [ $papi = yes ] ; then
	    fixmakeargs="ARMLINUXPAPI $fixmakeargs"
	fi
	;;

    unknown)
        echo unknown architecture.
	fixmakeargs="arch=$machine $fixmakeargs"
	;;

    default)
	#echo "fix make args $fixmakeargs"
	fixmakeargs="arch=$machine $fixmakeargs"
	;;

    -*)
	echo "Invalid option \`$1'" 1>&2
	exit 1
	;;

    *)
	echo No special modifications found for architecture \"$machine\"
	fixmakeargs="arch=$machine  $fixmakeargs"
	;;
esac

if [ $machine = x86_64 -o $machine = i386_linux -o $machine = ia64 -o $machine = suni386 -o $machine = sunx86_64 ] ; then
    if [ $cxx_compiler = CC ] ; then
	suncc=yes
        fixmakeargs="$fixmakeargs SUNCC"
        if [ $openmp = yes ] ; then
            fixmakeargs="$fixmakeargs SUNCC_OPENMP"
        fi
        if [ $fortran_compiler = no ] ; then
            fixmakeargs="$fixmakeargs SUN_FORTRAN"
            fortran_compiler=yes
        fi
    fi
fi

if [ $tauarch = none ] ; then
    architecture=
    fixmakeargs="$fixmakeargs arch= "
else
    if [ "x$execprefix" = "xunknown" ] ; then
	architecture=$machine
    else
	architecture=$execprefix
    fi
fi




# write out .h file to define this architecture __easily__
echo \#define TAU_$machine > ./include/tauarch.h
echo \#define TAU_ARCH \"$machine\" >> ./include/tauarch.h


make_directories



#####################################################################
# Is LINUXTIMERS available?
#####################################################################

if [ $cxx_compiler = x86_64-w64-mingw32-g++ ] ; then
    linuxtimers=no
fi
if [ $linuxtimers = yes ] ; then
    echo "LINUX_TIMERS enabled"
    fixmakeargs="$fixmakeargs LINUXTIMERS"
fi

######################################################################
# Install libunwind if requested
######################################################################
libunwind=libunwind-1.3-rc1
libunwindtgz=$libunwind.tar.gz
libunwindurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$libunwindtgz
if [ "x$unwind_dir" = "x" ]; then
  libunwinddir=${targetdir}/${architecture}
else
  libunwinddir=$unwind_dir
fi

libunwind_name=unwind
if [ $machine = mic_linux -o $craymic = yes ] ; then
  libunwind=libunwind-mic-1.1
  libunwindtgz=$libunwind.tgz
  libunwindurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$libunwindtgz
fi

if [ $machine = arm64_linux ] ; then
  libunwind=libunwind-1.3-rc1
  libunwindtgz=$libunwind.tar.gz
  libunwindurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$libunwindtgz
fi

if [ "x$unwind_dir" != "x" -a -d "$unwind_dir" ] ; then
  if [ -r $unwind_dir/$libunwindtgz ]; then
    echo "NOTE: Copying $unwind_dir/$libunwindtgz "
    cp $unwind_dir/$libunwindtgz .
    download_unwind=yes
  fi
fi

if [ "x$download_unwind" = xyes ] ; then
  if [ $machine = craycnl ] ; then
    unwind_dir=${libunwinddir}/${libunwind}-${c_compiler}-${PE_ENV}
  else
    unwind_dir=${libunwinddir}/${libunwind}-${c_compiler}
  fi
  prebfddir=`pwd`

  if [ -r "$unwind_dir/lib/lib${libunwind_name}.so" -o \
       -r "$unwind_dir/lib/lib${libunwind_name}.a" -o \
       -r "$unwind_dir/lib/lib${libunwind_name}.dylib" -o \
       -r "$unwind_dir/lib64/lib${libunwind_name}.so" -o \
       -r "$unwind_dir/lib64/lib${libunwind_name}.a" -o \
       -r "$unwind_dir/lib64/lib${libunwind_name}.dylib" ] ; then
    echo "Found: lib${libunwind_name}"
    echo "libunwind download already found, skipping"
  else
    echo "Not found in ${unwind_dir}: lib${libunwind_name}"
    # get the tar file
    if [ ! -f $libunwindtgz ] ; then
      download "$libunwindurl" "$libunwindtgz"
    fi

    # check the tar file
    if [ ! -f $libunwindtgz ] ; then
      echo "$libunwindtgz did not download.  Please download it manually from: "
      echo "$libunwindurl"
      echo "Please enter the directory containing the tarball: ${nnl}"
      read RESPONSE
      cp $RESPONSE/$libunwindtgz .
    else
      echo "expanding $libunwindtgz..."
      tar -xzf $libunwindtgz
      echo "removing $libunwindtgz..."
      rm $libunwindtgz
      if [ ${c_compiler}=mpc_cc -o ${c_compiler}=mpc_icc ]
      then
        unwind_c_compiler=gcc
        unwind_cxx_compiler=g++
      else
        unwind_c_compiler=${c_compiler}
        unwind_cxx_compiler=${cxx_compiler}
      fi

      if [ $craymic = no -a $machine != mic_linux ]; then
        configresult=0
        makeresult=0
        libunwind_log=configure.log
        cd $libunwind
        echo "configuring $libunwind... (see `pwd`/${libunwind_log} for log)..."
        if [ "x$machine" = "xbgq" ] ; then
          ./configure --prefix=${unwind_dir} CC=${unwind_c_compiler} CXX=${unwind_cxx_compiler} --disable-shared > ${libunwind_log} 2>&1
          cp src/unwind/Resume.c tmp.c
          sed 's/_Unwind_Resume/_Unwind_Resume_other/' tmp.c > src/unwind/Resume.c
          rm tmp.c
        elif [ "$machine" = "craycnl" ] ; then
          ./configure --prefix=${unwind_dir}  CC=${unwind_c_compiler} CXX=${unwind_cxx_compiler} CFLAGS=-fPIC CXXFLAGS=-fPIC --disable-shared --disable-minidebuginfo > ${libunwind_log} 2>&1
        else
          ./configure --prefix=${unwind_dir} CC=${unwind_c_compiler} CXX=${unwind_cxx_compiler} > ${libunwind_log} 2>&1
        fi
        configresult=$?
        if [ $configresult -eq 0 ] ; then
          libunwind_log=build.log
          echo "building ${libunwind}... (see `pwd`/${libunwind_log} for log)..."
          make -i > $libunwind_log  2>&1
          makeresult=$?
          if [ $makeresult -eq 0 ] ; then
          libunwind_log=install.log
          echo "installing ${libunwind} to ${unwind_dir}... (see `pwd`/${libunwind_log} for log)..."
            make -i install > $libunwind_log  2>&1
          makeresult=$?
          fi
        fi
        if [ $machine = arm64_linux ]; then
          configresult=0
          makeresult=0
          mv ../${libunwind}  ${unwind_dir}
        fi
        if [ $configresult -eq 0 ] && [ $makeresult -eq 0 ] ; then
          # Some systems install to lib64 instead of lib
          if [ -d "$unwind_dir/lib64" -a ! -d "$unwind_dir/lib" ] ; then
            tdir=$unwind_dir
	    pwddir=${PWD}
            cd $tdir
            ln -s lib64 lib
            cd $pwddir
          fi
          echo "...Success."
        else
          echo "ERROR BUILDING $libunwind!"
          echo "Please check `pwd`/config.log or `pwd`/${libunwind_log}"
        fi
      else
        # We need to install $libunwind
        mv ${libunwind} ${unwind_dir}
	echo "NOTE: Moving ${libunwind} to ${unwind_dir}"
      fi
    fi
  fi
  if [ $unwind_dir != "/usr" ]; then
    unwind_inc="$unwind_dir/include"
    if [ "x$machine" = "xbgq" ] ; then
      unwind_lib="$unwind_dir/lib64"
    else
      unwind_lib="$unwind_dir/lib"
    fi
  fi
  cd $prebfddir
fi #unwind=download

######################################################################
# Install Scalable Observation System (SOS) if requested
######################################################################

if [ "x$download_ompt" = xyes ] ; then
  echo "SOS (Scalable Observation System) installation requested"
fi

if [ "x$download_legacy_ompt" = xyes ] ; then
  echo "SOS (Scalable Observation System) installation requested"
fi

######################################################################
# Install Clang/LLVM OpenMP runtime with OMPT if requested
######################################################################

if [ $ompt = yes ]; then
  tauoptions="${tauoptions}-ompt"
  if [ "x$download_ompt_tr6" = "xyes" ]; then
    tauoptions="${tauoptions}-tr6"
  fi
  if [ "x$CRAY_CPU_TARGET" != "x" -a "x$PE_ENV" = "xINTEL" ] ; then
    fixmakeargs="$fixmakeargs INTEL_CRAY_MIC_KNL_OMPT"
  fi
fi

if [ "x$download_ompt_tr6" = "xyes" ] ; then
  libomp_oss=LLVM-openmp-master
  libomp_osstgz=LLVM-openmp-ompt-tr6.tar.gz
  libomp_ossurl=http://tau.uoregon.edu/${libomp_osstgz}
fi

if [ "x$download_ompt" = "xyes" ] ; then 
  libomp_oss=LLVM-openmp-0.2
  libomp_osstgz=${libomp_oss}.tar.gz
  libomp_ossurl=http://tau.uoregon.edu/${libomp_osstgz}
fi

  libomp_oss_name=iomp5
if [ "${omptlib}" = "" ] ; then
    # TODO: Please remove this check once TR6 (and newer) become the only supported OMPT version(s).
    # If we do not have separate directories for OMPT (legacy) and OMPT-TR6, then there are issues
    # in installing both together for comparison purposes.
    if [ "x$download_ompt_tr6" = "xyes" ] ; then
        libomp_ossdir_shared=${targetdir}/${architecture}/lib/shared-disable-tr6
        libomp_ossdir_static=${targetdir}/${architecture}/lib/static-disable-tr6
    else
        libomp_ossdir_shared=${targetdir}/${architecture}/lib/shared-disable
        libomp_ossdir_static=${targetdir}/${architecture}/lib/static-disable
    fi
else
    libomp_ossdir_shared=${omptlib}
    libomp_ossdir_static=${omptlib}
fi
libomp_ossinc=${targetdir}/include
libomp_cmake_instdir=${targetdir}/${architecture}

if [ ! -r ${libomp_ossdir_shared} ] ; then
  mkdir -p ${libomp_ossdir_shared}
fi
if [ ! -r ${libomp_ossdir_static} ] ; then
  mkdir -p ${libomp_ossdir_static}
fi
if [ ! -r ${libomp_ossinc} ] ; then
  mkdir -p ${libomp_ossinc}
fi

if [ "x$ompt_dir" != "x" -a -d "$ompt_dir" ] ; then
  if [ -r $ompt_dir/$libomp_osstgz ]; then
    echo "NOTE: Copying $ompt_dir/$libomp_osstgz"
    cp $ompt_dir/$libomp_osstgz .
    #if [ "x$download_ompt" != "xyes" ] ; then 
    #  download_ompt_tr6=yes
    #fi
  fi
fi

    ompt_c_compiler=$c_compiler
    ompt_cxx_compiler=$cxx_compiler
    if [ $gnu = yes ] ; then
      ompt_c_compiler=gcc
      ompt_cxx_compiler=g++
      libomp_oss_name=omp
    fi
    if [ "${architecture}" = "craycnl" ] ; then
      if [ "${intel}" = "yes" ] ; then
        ompt_c_compiler=icc
        ompt_cxx_compiler=icpc
        libomp_oss_name=omp
      fi
    fi

if [ "x$download_ompt" = "xyes" -o "x$download_ompt_tr6" = "xyes" ] ; then
  install_ompt=yes
  if [ ! -f "${libomp_ossdir_shared}/lib${libomp_oss_name}.so" -o  "${libomp_ossdir_shared}/lib${libomp_oss_name}.so" -ot "${libomp_oss}"  ]; then
    preomptdir=`pwd`

    #check Cmake exists
    cmake_cmd=`which cmake`
    if [ "x$cmake_cmd" = "x" ] ; then
        echo 'ERROR: cmake version 2.8 or higher required to build OMPT support.'
        exit 1;
    fi

    echo "Note: Building LLVM-OpenMP with ${ompt_c_compiler} and ${ompt_cxx_compiler}"

    if [ -r "${libomp_ossdir_static}/lib${libomp_oss_name}.so" -a ${libomp_ossdir_shared}/lib${libomp_oss_name}.so -ot ${libomp_oss} ] ; then
      echo "NOTE: ${libomp_ossdir_shared}/lib${libomp_oss_name}.so is older than ${libomp_oss} directory. Deleting and rebuilding."
      /bin/rm -rf ${libomp_oss}
    fi
    # get the tar file
    echo "downloading $libomp_osstgz..."
    if [ ! -f $libomp_osstgz ]; then
      download "$libomp_ossurl" "$libomp_osstgz"
    fi

    # check the tar file
    if [ ! -f $libomp_osstgz ] ; then
      echo "$libomp_osstgz did not download.  Please download it manually from: "
      echo "$libomp_ossurl"
      echo "Please enter the directory containing the tarball: ${nnl}"
      read RESPONSE
      cp $RESPONSE/$libomp_osstgz .
    else
      echo "expanding $libomp_osstgz..."
      tar -xzf $libomp_osstgz
      echo "removing $libomp_osstgz..."
      rm $libomp_osstgz
      cd $libomp_oss
      libomp_oss_log=build.log
      specialflags="-DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC"
      if [ "x$machine" = "xmic_linux" ] ; then
        libomp_oss_log=build-mic.log
        specialflags="-DLIBOMP_ARCH=mic"
	  fi

	  # fix the expected path for bin
      if [ -r $ompt_dir/${libomp_oss_name}.so ]; then
        /bin/rm -f $ompt_dir/${libomp_oss_name}.so
      fi

      echo "building $libomp_oss (see `pwd`/build-${ompt_cxx_compiler}/${libomp_oss_log} for log)..."
	  rm -rf build-${ompt_cxx_compiler}
	  mkdir build-${ompt_cxx_compiler}
	  cd build-${ompt_cxx_compiler}
      libomp_cmake_instdir=`pwd`
	  echo cmake -DCMAKE_C_COMPILER=${ompt_c_compiler} -DCMAKE_CXX_COMPILER=${ompt_cxx_compiler} -DCMAKE_INSTALL_PREFIX=${libomp_cmake_instdir} ${specialflags} ..
	  cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${ompt_c_compiler} -DCMAKE_CXX_COMPILER=${ompt_cxx_compiler} -DCMAKE_INSTALL_PREFIX=${libomp_cmake_instdir} ${specialflags} .. > $libomp_oss_log 2>&1
      result=$?
      if [ $result -eq 0 ] ; then
	    make clean
            make libomp-needed-headers >> $libomp_oss_log 2>&1
	    make >> $libomp_oss_log 2>&1
        result=$?
        if [ $result -eq 0 ] ; then
	      make install >> $libomp_oss_log 2>&1
          # copy the header to our source area, anyway - we need it.
          cp ./include/*.h ${START_DIR}/include/.
          libomp_ossdir_shared=${libomp_cmake_instdir}/lib
          libomp_ossdir_static=${libomp_cmake_instdir}/lib
          echo "...Success."
        else
          echo "ERROR BUILDING OMPT support!"
          echo "Please check `pwd`/${libomp_oss_log}"
		  exit 1;
        fi
      else
        echo "ERROR BUILDING OMPT support!"
        echo "Please check `pwd`/${libomp_oss_log}"
		exit 1;
      fi
    fi
  fi
  omptlib=${libomp_ossdir_shared}
  omptlibrary=-l${libomp_oss_name}
  cd $preomptdir
else
  # not building OMPT, but...
  install_ompt=yes
  if [ $ompt = "yes" -a ! -f ${START_DIR}/include/ompt.h ] ; then
    # we need the ompt header for building TAU
    cp ${omptlib}/../include/ompt.h ${START_DIR}/include/.
  fi
fi #ompt=download


if [ $machine = bgq -o $machine = bgp -o $machine = bgl ] ; then
    if [ $ompt = yes -o $xlsmp = yes ]; then
	comp=`which bgxlc_r`
	if [ "x$xlsmpdir" = "x" ]; then
            if [ -x $comp ]; then
		xlsmpdir=`echo $comp | sed -e 's@bgxlc_r@../../../../xlsmp@' `
		if [ ! -d $xlsmpdir ]; then
		    echo "NOTE: Could not locate the xlsmp directory using the location of bgxlc_r in your path."
		    echo "To enable ompt support in TAU using IBM XL compilers, please configure with -xlsmp=<dir> option to specify the full path to the xlsmp directory inside the compiler directory".
		    exit 1;
		fi
            fi
            if [ -d $xlsmpdir -a -r $xlsmpdir/bg/*/bglib64/ompt_full/libxllomp.a -a -r $xlsmpdir/bg/*/include/lomp/omp.h ]; then
		lompinc=`echo $xlsmpdir/bg/*/include `
		lomplib=`echo $xlsmpdir/bg/*/bglib64/ompt_full `
		echo "NOTE: Found LOMP include directory $lompinc"
		echo "NOTE: Found LOMP lib directory $lomplib"
		omptenabled=yes
		tauoptions="${tauoptions}-ompt"
		fixmakeargs="$fixmakeargs IBMOMPT lompinc=$lompinc lomplib=$lomplib"
            else
		echo "NOTE: Did not find lomp/omp.h or lib64/libxllomp.a in the xlsmp subdirectory. Not enabling OMPT support for IBM compilers."
            fi
	else
	    echo "bgxlc_r not found in the path. Cannot test for OMPT support."
	fi
    fi
else # intel OMPT support
    if [ $ompt = yes ]; then
	omptlinking="-Wl,-rpath,$omptlib#-L$omptlib#$omptlibrary"
        if [ "x$download_ompt_tr6" = "xyes" ] ; then
	  fixmakeargs="$fixmakeargs TAU_OMPT_TR6 omptlib=$omptlinking"
        else
          fixmakeargs="$fixmakeargs TAU_OMPT omptlib=$omptlinking"
        fi  
    fi 

fi


echo "***********************************************************************"

#####################################################################
# Compile/Link/Run checks
#####################################################################

if [ $machine = apple ] ; then 
cat <<EOF > apple_mach_port.cpp
#include <Profile/Profiler.h>
#include <Profile/TauMetaData.h>
EOF
  echo "Checking: Mac OS X mach_port bug. Is it ok?... ${nnl}"
  cp ./include/TAU.h.default ./include/TAU.h
if $cxx_compiler -DTAU_DOT_H_LESS_HEADERS -DPROFILING_ON -I./include -c apple_mach_port.cpp  1> /dev/null 2>&1 ; then
    echo "yes"
  else
    echo "no ${nnl}"
    if $cxx_compiler -DTAU_DOT_H_LESS_HEADERS -DPROFILING_ON -DTAU_APPLE_MACH_PORT_BUG -I./include -c apple_mach_port.cpp   1> /dev/null 2>&1; then
      echo " - it is fixed by APPLE_MACH_PORT_BUG" 
      fixmakeargs="$fixmakeargs APPLE_MACH_PORT_BUG"
    else
      echo " can't be fixed. TAU may not build."
    fi
  fi
  /bin/rm -f apple_mach_port.cpp apple_mach_port.o ./include/TAU.h 
fi

#####################################################################
# MPI Checks
#####################################################################


# Next, check the properties of the MPI implementation.
if [ "x$mpiinc" != "x" -o "x$mpilib" != "x" -o $mpi = yes ] ; then
    #echo "MPI is specified"
    mpi=yes
    fixmakeargs="$fixmakeargs MPI"
    tauoptions="${tauoptions}-mpi"

    mpicompiler=$cxx_compiler
    msuf=C

    if [ $machine = t3e ]
    then
	mpicompiler=$c_compiler
	msuf=c
    fi

    # The Intel compiler doesn't give an error, but a warning
    # if [ "$machine" = "craycnl" -a "$intel" == "yes" ]
    if [ "$intel" = "yes" ]
    then
	mpicompiler=$c_compiler
        mpiwarnings="-Werror"
	msuf=c
    fi
    if [ "x$llvm" = "xyes" ]
    then
	mpicompiler=$c_compiler
        mpiwarnings="-Werror"
	msuf=c
    fi
    if [ $c_compiler = "xlc" -o $c_compiler = "xlc_r" ]
    then
        mpiwarnings="-qhalt=w"
    fi
    if [ $c_compiler = "clang" -o $c_compiler = "armclang" ]
    then
        mpiwarnings="-Werror"
    fi  
    if [ $c_compiler = "ncc" -o $c_compiler = "mpincc" ]
    then
        mpiwarnings="-Werror"
    fi  
    if [ $c_compiler = "gcc" -a $machine = apple ]
    then
        mpiwarnings="-Werror"
    fi
 
    cat <<EOF > mpi_thread_test.$msuf
  #include <mpi.h>

  int main(int argc, char **argv)
  {
    int ret, req, provided;
    req = 0;
    ret = PMPI_Init_thread(&argc, &argv, req, &provided);
    return ret;
  }
EOF
  if [ "x$mpiinc" != "x" ]
  then
      # echo "mpiinc is specified"
      mpi_include=-I$mpiinc
  fi

  mpi_include="$mpi_include $mpiincargs"
  mpi_include=`echo $mpi_include | sed  -e 's/#/ /g'`

  cat <<EOF > mpi2.$msuf
  #include <mpi.h>

  int foo(MPI_Win win)
  {
    int ret;
    ret = MPI_Win_fence(MPI_MODE_NOPRECEDE, win);
    return ret;
  }
EOF

cat <<EOF > mpi_f_statuses_ignore.$msuf
  #include <mpi.h>

  //extern MPI_Fint * MPI_F_STATUSES_IGNORE;
  MPI_Fint * foo(void) {
    return MPI_F_STATUSES_IGNORE;
  }
EOF

cat <<EOF > mpi2iorequest.$msuf
  #include <mpi.h>

  int foo (MPI_File fh, void *buf, int count,
                          MPI_Datatype datatype, MPIO_Request *request)
  {
    return MPI_File_iread_shared (fh, buf, count, datatype, request);

  }
EOF

cat <<EOF > mpi3const.c
#include <mpi.h>

#ifndef TAU_MPICH3_CONST
#define TAU_MPICH3_CONST
#endif

int  MPI_Send( buf, count, datatype, dest, tag, comm )
TAU_MPICH3_CONST void * buf;
int count;
MPI_Datatype datatype;
int dest;
int tag;
MPI_Comm comm;
{
  return PMPI_Send(buf, count, datatype, dest, tag, comm);
}

EOF

cat <<EOF > openmpi3const.c
#include <mpi.h>

#ifndef TAU_MPICH3_CONST
#define TAU_MPICH3_CONST
#endif

int  MPI_Get_address( location, address )
TAU_MPICH3_CONST void * location;
MPI_Aint * address;
{
  return PMPI_Get_address( location, address );
}

int  MPI_Type_struct( count, blocklens, indices, old_types, newtype )
int count;
TAU_MPICH3_CONST int * blocklens;
TAU_MPICH3_CONST MPI_Aint * indices;
TAU_MPICH3_CONST MPI_Datatype * old_types;
MPI_Datatype * newtype;
{
  int  returnVal;

  returnVal = PMPI_Type_struct( count, blocklens, indices, old_types, newtype );
  return returnVal;
}


EOF

cat <<EOF > mpihindex1.c
#include <mpi.h>

int  MPI_Type_hindexed( count, blocklens, indices, old_type, newtype )
int count;
int * blocklens;
MPI_Aint * indices;
MPI_Datatype old_type;
MPI_Datatype * newtype;
{
  return PMPI_Type_hindexed( count, blocklens, indices, old_type, newtype );
}
EOF

cat <<EOF > mpihindex2.c
#include <mpi.h>

int  MPI_Type_hindexed( count, blocklens, indices, old_type, newtype )
int count;
const int * blocklens;
const MPI_Aint * indices;
MPI_Datatype old_type;
MPI_Datatype * newtype;
{
  return PMPI_Type_hindexed( count, blocklens, indices, old_type, newtype );
}
EOF

cat <<EOF > mpi2attr.$msuf
  #include <mpi.h>

  int foo(MPI_Win_copy_attr_function *f1, MPI_Type_copy_attr_function *f2,
        MPI_Comm_copy_attr_function *f3)
  {
    return 0;
  }

  int MPI_Type_get_attr(MPI_Datatype type, int type_keyval, void *attribute, int *flag)
  {
    return PMPI_Type_get_attr(type, type_keyval, attribute, flag);
  }
EOF

cat <<EOF > mpi2typeex.$msuf
  #include <mpi.h>

  int f1( void * sendbuf, void * recvbuf, int count, MPI_Datatype datatype
  , MPI_Op op, MPI_Comm comm)
  {
    return MPI_Exscan( sendbuf, recvbuf, count, datatype, op, comm) ;
  }

  int f2( MPI_Datatype type, MPI_Datatype * newtype)
  {
    return MPI_Type_dup( type, newtype) ;
  }

  int f3( int p, int r, MPI_Datatype * newtype)
  {
    return MPI_Type_create_f90_real( p, r, newtype) ;
  }

  int f4( int p, int r, MPI_Datatype * newtype)
  {
    return MPI_Type_create_f90_complex( p, r, newtype) ;
  }


EOF

cat <<EOF > mpi2add.$msuf
  #include <mpi.h>

  int f1( int * errorclass)
  {
    return MPI_Add_error_class( errorclass) ;
  }

  int f2( char * datarep, int incount, MPI_Datatype datatype, MPI_Aint * size)
  {
    return MPI_Pack_external_size( datarep, incount, datatype, size) ;
  }

EOF

cat <<EOF > mpi2file.$msuf
  #include <mpi.h>
  #include <stdio.h>

int main( int argc, char *argv[] )
{
    MPI_Fint handleA, handleB;
    int rc;
    int errs = 0;
    int rank;
    MPI_File cFile;

    MPI_Init( &argc, &argv );
    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
    rc = MPI_File_open( MPI_COMM_WORLD, "temp", MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE | MPI_MODE_CREATE, MPI_INFO_NULL, &cFile );
    if (rc) {
        printf( "Unable to open file \"temp\"\n" );fflush(stdout);
    }
    else {
        MPI_File_close( &cFile );
    }
    MPI_Finalize();
    return 0;
}


EOF

cat <<EOF > mpit.$msuf
#include <mpi.h>
int main(int argc, char **argv) {
    MPI_T_cvar_handle handle;
    MPI_T_enum enumtype;
    int provided, ncvars, npvars;

    MPI_T_init_thread(MPI_THREAD_SINGLE, &provided);
    MPI_Init(&argc, &argv);
    MPI_T_cvar_get_num(&ncvars);
    MPI_T_pvar_get_num(&npvars);

    MPI_Finalize();
}

EOF

cat <<EOF > mpi2grequest.$msuf
  #include <mpi.h>

  int foo(MPI_Grequest_query_function *grequest_query_fn,
              MPI_Grequest_free_function *grequest_free_fn,
              MPI_Grequest_cancel_function *grequest_cancel_fn,
              void *extra_state, MPI_Request *request)
  {
    return MPI_Grequest_start(grequest_query_fn,
              grequest_free_fn,
              grequest_cancel_fn,
              extra_state, request);

  }

  int bar(MPI_Request request)
  {
    return MPI_Grequest_complete(request);
  }

EOF
  cat <<EOF > mpi2datarep.$msuf
  #include <mpi.h>

  int foo( char * datarep, MPI_Datarep_conversion_function * read_conversion_fn, MPI_Datarep_conversion_function * write_conversion_fn, MPI_Datarep_extent_function * dtype_file_extent_fn, void * extra_state)
  {
    return MPI_Register_datarep( datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state);

  }

EOF

cat <<EOF > mpi2errhandler.$msuf
  #include <mpi.h>

  int foo (MPI_Comm_errhandler_fn *a, MPI_Errhandler *b)
  {
    return MPI_Comm_create_errhandler(a,b);

  }
  int bar (MPI_File_errhandler_fn * function, MPI_Errhandler * errhandler)
  {
    return MPI_File_create_errhandler(function, errhandler);
  }
EOF

cat <<EOF > mpi2hpconst.$msuf
  #include <mpi.h>
  /* HP MPI uses const char * instead of char * in the
     prototypes of the following routines */
  int foo(MPI_Info Info, const char *key, const char *value)
  {
    return PMPI_Info_set(Info, key, value);
  }
  int f1(MPI_Info a, const char * b, int c, char * d, int *e)
  {
    return PMPI_Info_get(a,b,c,d,e);
  }
  int f2(MPI_Info a, const char *b)
  {
    return PMPI_Info_delete(a,b);
  }
  int MPI_Info_get_valuelen(MPI_Info a, const char * b, int * c, int * d)
  { /* above decl triggers an error on T3E */
    return PMPI_Info_get_valuelen(a,b,c,d);
  }

EOF

cat << EOF > mpistatus.$msuf

  #include <mpi.h>
  #include <memory.h>
  int foo(MPI_Fint *status)
  {
    MPI_Status s;
    return MPI_Status_f2c(status, &s);
  }
EOF


if [ $machine = sgi64 -a $cxx_compiler = CC ]
then
    orig_useropt="$orig_useropt -64"
fi

$echo "Checking for thread-safe MPI interface... ${nnl}"
if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi_thread_test.$msuf  1> /dev/null 2>&1 ; then
    echo "yes"
    fixmakeargs="$fixmakeargs MPI_THREADED"
else
    echo "no"
fi

$echo "Checking for MPI 3 const interface... ${nnl}"
if $c_compiler $mpiwarnings $orig_useropt $mpi_include -c mpi3const.c  1> /dev/null 2>&1 ; then
    echo "no"
else
  if $c_compiler $mpiwarnings $orig_useropt $mpi_include -c mpi3const.c  -DTAU_MPICH3_CONST=const 1> /dev/null 2>&1 ; then
    echo "yes"
    fixmakeargs="$fixmakeargs MPICH3_CONST"

  else
    echo "no"
  fi
fi

$echo "Checking for OpenMPI 3 const interface..... ${nnl}"
if $c_compiler $mpiwarnings $orig_useropt $mpi_include -c openmpi3const.c -DTAU_MPICH3_CONST=const 1> /dev/null 2>&1 ; then
# MPICH requires the const keyword
  echo "yes"
  fixmakeargs="$fixmakeargs OPENMPI3_CONST"
else
  echo "no"
fi
rm -f openmpi3const.c openmpi3const.o mpi3const.c mpi3const.o a.out

$echo "Checking for MPI_Type_hindexed const interface... ${nnl}"
if $c_compiler $mpiwarnings $orig_useropt $mpi_include -c mpihindex1.c  1> /dev/null 2>&1 ; then
  echo "not needed"
else
  echo "yes"
  if $c_compiler $mpiwarnings $orig_useropt $mpi_include -c mpihindex2.c 1> /dev/null 2>&1 ; then
    echo "Using const in MPI_Type_hindexed interface "
      fixmakeargs="$fixmakeargs TAU_MPI_HINDEX_CONST"
  fi
fi
rm -f mpihindex1.c mpihindex2.c mpihindex1.o mpihindex2.o


if [ -d "$mpiinc/ulm" ] ; then
    echo "LA-MPI detected, working around broken MPI_Request_c2f()"
    fixmakeargs="$fixmakeargs LAMPI"
fi

$echo "Checking for MPI-2 interface... ${nnl}"
if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2.$msuf  1> /dev/null 2>&1 ; then
    echo "yes"
    if [ -r $mpilib/libmpi.so -a -r $mpilib/libmpi++.so -a -r $mpilib/libsma.so -a -r $mpilib/libxmpi.so ] ; then
	# Do not enable this for SGI Altix. Their MPI2 is not complete
	# SGI MPI2 is ok now. We can enable it. Perhaps...
	useropt="$useropt#-DTAU_MPI_F_STATUSES_IGNORE_ABSENT"
	fixmakeargs="$fixmakeargs MPI2 useropt=$useropt"
	echo "SGI MPI detected. Disabling MPI2 wrappers for SGI MPI"
	fixmakeargs="$fixmakeargs SGI_MPT_MPI"
    elif [ -r $mpilib/libfmpi.so -a -r $mpilib/libmpio.so  -a -r $mpilib/libtvscampi.so ] ; then
        # Scali does not use MPI2 PMPI interface properly.
	echo "Scali MPI detected. Disabling MPI2 wrappers for Scali MPI"
    elif [ -r $mpilib/liblam.a -o -r $mpilib/liblam.la ] ; then
        # LAM MPI's MPI2 PMPI interface is broken.
	echo "LAM MPI detected. Disabling MPI2 wrappers for LAM MPI"
    elif [ "$mpilibrary" = "-lscmpi" ] ; then
        # SiCortex's MPI2 interface is broken.
	echo "SiCortex detected. Disabling MPI2 wrappers"
	fixmakeargs="$fixmakeargs MPICH_IGNORE_CXX_SEEK"
    elif [ "$tauarch" = "bgp" -o "$tauarch" = "bgq" ] ; then
	echo "BGP MPI detected. Disabling MPI2 wrappers"
	fixmakeargs="$fixmakeargs MPICH_IGNORE_CXX_SEEK"
    else
	fixmakeargs="$fixmakeargs MPI2"
	mpi2=yes
    fi
else
    echo "no"
fi


if [ $mpi2 = yes ] ; then

    if [ $mpit = yes ]; then
      $echo "Checking for MPI-T  interface... ${nnl}"
      if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpit.$msuf  1> /dev/null 2>&1 ; then
    	  echo "yes"
	  fixmakeargs="$fixmakeargs MPI_T"
      else
	  echo "no"
      fi
    fi

    $echo "Checking for MPI-2 Grequest interface... ${nnl}"
    if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2grequest.$msuf  1> /dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs MPIGREQUEST"
    else
	echo "no"
    fi

    $echo "Checking for MPI-2 MPIO_Request interface... ${nnl}"
    if [ -f $mpilib/liblam.a -o -f $mpilib/liblammpi++.a ] ; then
	if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2iorequest.$msuf  1> /dev/null 2>&1 ; then
	    echo "yes"
	    fixmakeargs="$fixmakeargs MPIOREQUEST"
	    mpiio=yes
	else
	    echo "no"
	fi
    else
	echo "no"
    fi

    $echo "Checking for MPI_Datarep_conversion_function interface... ${nnl}"
    if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2datarep.$msuf  1> /dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs MPIDATAREP"
    else
	echo "no"
    fi

    $echo "Checking for Comm_create_errhandler interface... ${nnl}"
    if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2errhandler.$msuf  1> /dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs MPIERRHANDLER"
    else
	echo "no"
    fi

    $echo "Checking if MPI_Info_set takes const char * instead of char * args... ${nnl}"
    if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2hpconst.$msuf  1> /dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs MPICONSTCHAR"
    else
	echo "no"
    fi
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi_f_statuses_ignore.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI F_STATUSES_IGNORE types are defined..."
else
    echo "MPI F_STATUSES_IGNORE types are NOT defined..."
    fixmakeargs="$fixmakeargs MPI_F_STATUSES_IGNORE_ABSENT"
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2attr.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI-2 MPI*attr_functions are defined..."
    fixmakeargs="$fixmakeargs MPIATTR"
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2file.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI-2 MPI_File functions are defined..."
    fixmakeargs="$fixmakeargs MPIFILE"
else
    echo "MPI-2 MPI_File functions are NOT defined..."
    #echo $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2file.$msuf
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2typeex.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI-2 MPI_Type_dup and MPI_Exscan are defined..."
    fixmakeargs="$fixmakeargs MPITYPEEX"
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpi2add.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI-2 MPI_Add_error* functions are defined..."
    fixmakeargs="$fixmakeargs MPIADDERROR"
fi

if $mpicompiler $mpiwarnings $orig_useropt $mpi_include -c mpistatus.$msuf  1> /dev/null 2>&1 ; then
    echo "MPI_Status f2c/c2f found..."
else
    echo "MPI_Status c2f/f2c functions are needed"
    fixmakeargs="$fixmakeargs MPINEEDSTATUSCONV"
fi

/bin/rm -rf mpi_thread_test.$msuf mpi_thread_test.o mpi2.$msuf mpi2.o mpi2iorequest.o mpi2iorequest.$msuf mpi2grequest.o mpi2grequest.$msuf mpi2datarep.$msuf mpi2datarep.o mpi2errhandler.o mpi2errhandler.$msuf mpi2hpconst.o mpi2hpconst.$msuf mpi2attr.o mpi2attr.$msuf mpi_f_statuses_ignore.o mpi_f_statuses_ignore.$msuf mpi2typeex.o mpi2typeex.$msuf mpi2add.o mpi2add.$msuf mpistatus.o mpistatus.$msuf mpi2file.$msuf mpi2file.o mpi3const.o mpi3const.$msuf mpit.$msuf mpit.o
else
    if [ $mpi = yes -a $machine != ibm64 ]; then
      mpilibargs="$mpilibargs#-Wl,-rpath,\$(TAU_MPILIB_DIR)"
      mpiflibargs="$mpiflibargs#-Wl,-rpath,\$(TAU_MPILIB_DIR)"
    fi
    fixmakeargs="$fixmakeargs mpiincargs=$mpiincargs mpilibargs=$mpilibargs mpiflibargs=$mpiflibargs mpilib=$mpilib"
    mpilibargs_added_to_fixmakeargs=yes
fi



if [ $mpi = yes ] ; then
    #Check for SGI MPI
    mpimptloc=`which mpiexec_mpt 2>/dev/null`
    hasMPT=$?
    if [ $hasMPT = 0 ] ; then
	echo "Found SGI MPT MPI"
	fixmakeargs="$fixmakeargs SGI_MPT_MPI"
    fi


    wrapperlib="-L$tautoplevel/$machine/lib -lTauMpi\$(TAU_CONFIG)"

    # Epilog
    if [ $epilog = yes -a $mpi = yes ] ; then
	if [ $sicortex = yes ] ; then
	    wrapperlib="-L$epiloglibdir -Wl,-whole-archive -lelg.mpi -Wl,-no-whole-archive"
	else
	    wrapperlib="-L$epiloglibdir -lelg.mpi"
	fi

	if [ $openmp = yes ] ; then
	    if [ $sicortex = yes ] ; then
		wrapperlib="-L$epiloglibdir -Wl,-whole-archive -lelg.ompi -Wl,-no-whole-archive -Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic"
	    else
		wrapperlib="-L$epiloglibdir -lelg.ompi"
	    fi
	fi
    fi

    # VampirTrace
    if [ $vampirtrace = yes ] ; then
	if [ $vampirtraceshow = yes ] ; then
	    wrapperlib="\$(VAMPIRTRACEMPILIBS)"
	else
	    vtfortranwrapper=""
	    if [ -f $vampirtracedir/$vampirtracelibdir/libvt.fmpi.a ] ; then
		vtfortranwrapper="-lvt.fmpi"
	    fi

	    if [ -f $vampirtracedir/$vampirtracelibdir/libvt-fmpi.a ] ; then
		vtfortranwrapper="-lvt-fmpi"
	    fi

	    vtmpilib="-lvt.mpi"
	    if [ -f "$vampirtracedir/$vampirtracelibdir/libvt-mpi.a" ] ; then
		vtmpilib="-lvt-mpi"
	    fi

	    vtompilib="-lvt.ompi"
	    if [ -f "$vampirtracedir/$vampirtracelibdir/libvt-ompi.a" ] ; then
		vtompilib="-lvt-ompi"
	    fi

	    wrapperlib="-L$tautoplevel/$machine/lib -ltau\$(TAU_CONFIG) -L$vampirtracedir/$vampirtracelibdir $vtfortranwrapper $vtmpilib -lotf -lz"
	    if [ $openmp = yes ] ; then
		# should we have a -lvt.fmpi here?
		fixmakeargs="useropt=$useropt extrashlibopts=$extrashlibopts $fixmakeargs"
		if [ $sicortex = yes ] ; then
		    wrapperlib="$sicortexlink"
		else
		    wrapperlib="-L$tautoplevel/$machine/lib -ltau\$(TAU_CONFIG) -L$vampirtracedir/$vampirtracelibdir -Wl,-whole-archive $vtfortranwrapper $vtompilib -lotf -Wl,-no-whole-archive -lz"
		fi
	    fi
	fi
    fi

    if [ $scorep = yes ] ; then
	wrapperlib="\$(SCOREPMPILIBS)"
        if [ $mpi = yes ]; then
          wrapperlib="$wrapperlib -Wl,-rpath,\$(TAU_MPILIB_DIR)"
        fi
    fi

    if [ $perf = yes ] ; then
	wrapperlib="-L$\(PERFLIBDIR) \$(PERFLIBRARY)"
    fi

    mpilibargs="$wrapperlib $mpilibargs"
    wrapperC=$wrapperlib

    if [ "x$mpilib" != "x" ] ; then
	if [ -d $mpilib ] ; then
	    #echo "Lib dir found. adding -L$mpilib to LIB"
	    mpilibargs="$mpilibargs -L$mpilib"
	    if [ -r $mpilib/libmpi_r.a -a -r $mpilib/libmpi.a ] ; then
		fixmakeargs="$fixmakeargs IBMMPI"
		ibmmpi=yes
	    fi

	    if [ -f $mpilib/libfmpi.a -o -f $mpilib/libfmpi.so ] ; then
		#echo "Fortran fmpi.* found"
		mpiflibargs="-L$mpilib -lfmpi $wrapperlib"
	    else
		if [ $epilog = yes -a -f $epiloglibdir/libfmpi.a ] ; then
		    mpiflibargs="-lfmpi"
		    wrapperlib="$wrapperlib -lfmpi"
		fi
		if [ $epilog = yes -a -f $epiloglibdir/libelgfmpi.a ] ; then
		    mpiflibargs="-lelgfmpi"
		    wrapperlib="$wrapperlib -lelgfmpi"
		fi
		if [ $epilog = yes -a -f $epiloglibdir/libepk.ad.fmpi.a ] ; then
		    mpiflibargs="-lepk.ad.fmpi"
		    wrapperlib="$wrapperlib -lepk.ad.fmpi"
		fi
		# None of these options matter. It uses the include/Makefile options
		#echo "NOTE: ADDING -lfmpich to the Scalasca link line"
		if [ $epilog = yes -a -f $epiloglibdir/libcubew3.a ] ; then
		    wrapperlib="$wrapperlib -lcubew3"
		fi

		if [ -f $mpilib/libfmpich.cnk.a -o -f $mpilib/libfmpich.cnk.so ] ; then
		    mpiflibargs="-lfmpich.cnk"
		    #  wrapperlib="$wrapperlib -lfmpich.cnk"
		fi

		if [ -f $mpilib/libfmpich.a -o -f $mpilib/libfmpich.so ] ; then
		    #echo "Fortran fmpich.* found"
		    if [ $mpi2 = "yes" ] ; then
			#mpich2, must not use -lfmpich
			if [ -f /usr/lib/librt.a -a $catamount = no ] ; then
			    # mpich2 uses librt for aio_* routines
			    mpiflibargs="-L$mpilib $wrapperlib -lpthread -lrt"
			    mpilibargs="$mpilibargs -lpthread -lrt"
			else
			    mpiflibargs="-L$mpilib $wrapperlib"
			fi
		    else
			#mpich1, must use -lfmpich
			mpiflibargs="-L$mpilib -lfmpich $wrapperlib"
		    fi
		    # Does MPI_Init have weak bindings for Fortran (Infiniband MPI)
		    weakmpi=T
		    # by default it has a T for defined symbol in nm output */
		    weakmpi=`nm $mpilib/libfmpich.a | grep mpi_init | awk '{ print $2 ; }' | head -n 1 `
		    if [ "x$weakmpi" = "xW" ]
		    then
			echo "MPI has weak bindings for mpi_init Fortran bindings..."
			fixmakeargs="$fixmakeargs WEAKMPIINIT"
		    fi
		else
		    if [ -f $mpilib/liblamf77mpi.a -o -f $mpilib/liblamf77mpi.so ] ; then
			#echo "Fortran liblamf77mpi.* found"
			mpiflibargs="-L$mpilib -llamf77mpi $wrapperlib"
		    else
			if [ -f $mpilib/libmpi_f77.so ] ; then
			    #echo "Fortran libmpi_f77.* found"
			    mpiflibargs="-L$mpilib -lmpi_f77 $wrapperlib"
			else
			    #echo "No Fortran interface found"
			    mpiflibargs="$mpiflibargs $wrapperlib -L$mpilib"
			fi
		    fi
		fi
	    fi

	    # Cases
	    if [ -r $mpilib/libmpi.a -o -r $mpilib/libmpi.so -o -r $mpilib/libmpi.dylib ] ; then
		#echo "libmpi.* found!!"
		# OpenMPI
		mpilibrary_current=""
		if [ "x$mpilibrary" != "xno" ] ; then
		    # *CWL* - Set a temporary variable to hold any previously set value of mpilibrary
		    mpilibrary_current="$mpilibrary"
		fi

		# *CWL* - Work only on the temporary variable in this section
		if [ -r $mpilib/libmpi_cxx.so -o -r $mpilib/libmpi_cxx.dylib ] ; then
		    mpilibrary_current="$mpilibrary_current -lmpi -lmpi_cxx"
		fi

		if [ -r $mpilib/libmpi_f90.so -o -r $mpilib/libmpi_f90.dylib ] ; then
		    mpilibrary_current="$mpilibrary_current -lmpi_f90"
		fi

		if [ -r $mpilib/libmpi_f77.so -o -r $mpilib/libmpi_f77.dylib ] ; then
		    mpilibrary_current="$mpilibrary_current -lmpi_f77"
		fi

		# *CWL* - Propagate any changes to the temporary variable back to mpilibrary
		if [ "x$mpilibrary_current" != "x" ] ; then
		    mpilibrary="$mpilibrary_current"
		fi

		if [ "x$mpilibrary" = "xno" ] ; then
		    if [ $openmp = yes -o $pthread = yes ] ; then
		      if [ -r $mpilib/libmpi_mt.a -o -r $mpilib/libmpi_mt.so -o -r $mpilib/libmpi_mt.dylib ] ; then
		        mpilibrary=-lmpi_mt
                      else
		       mpilibrary=-lmpi
		      fi
                    else
		      mpilibrary=-lmpi
                    fi
		    echo "SETTING mpilibrary=$mpilibrary"
		    if [ -r $mpilib/libmpi++.so ] ; then
			mpilibrary='-lmpi -lmpi++'
			# SGI MPT
		    fi

		    if [ -r $mpilib/libopen-pal.a -a ! -r $mpilib/libmpi_cxx.so ]; then
			if [ -r $mpilib/libmpi_cxx.a ]; then
				LIBMPICXX='-lmpi_cxx'	
			fi

			echo "NOTE: OpenMPI configured with --disable_shared"
			mpilibrary="$LIBMPICXX -lmpi -lopen-rte -lopen-pal -lrt -ldl -lpthread -lutil"
			# check for -libverbs, sometimes necessary with OpenMPI
			if [ $machine != bgq -a $machine != craycnl ] ; then
			    if [ -r /usr/lib64/libibverbs.a -o -r /usr/lib64/libibverbs.so ] ; then
				mpilibrary="$mpilibrary -libverbs"
			    fi
			fi # BGQ has /usr/lib64/libibverbs.so but we do not want to link it.

			# check for -libverbs, sometimes necessary with OpenMPI
			if [ -r /usr/lib64/libnuma.a -o -r /usr/lib64/libnuma.so ] ; then
			    mpilibrary="$mpilibrary -lnuma"
			fi

			if [ -r $mpilib/libmpi_f90.a ] ; then
			    mpilibrary="$mpilibrary -lmpi_f90"
			fi

			if [ -r $mpilib/libmpi_f77.a ] ; then
			    mpilibrary="$mpilibrary -lmpi_f77"
			fi
		    fi

		    # See if threaded MPI should be used on AIX
		    if [ $ibmxlc_r = yes -a -r $mpilib/libmpi_r.a ] ; then
			mpilibrary="-lmpi_r $additional_mpilibs"
		    fi
		fi
		if [ -r $mpilib/libpmpi.a -o -r $mpilib/libpmpi.so ] ; then
		    #echo "libpmpi.* found "
		    mpilibargs="$mpilibargs -lpmpi $mpilibrary"
		    mpiflibargs="$mpiflibargs -lpmpi $mpilibrary"
		else
		    #echo "libpmpi.* not found -lmpi probably contains PMPI routines"
		    mpilibargs="$mpilibargs $mpilibrary"
		    mpiflibargs="$mpiflibargs $mpilibrary"
		fi
	    else
		#echo "libmpi.* not found!! Checking for mpich.*..."
		if [ -r $mpilib/libmpich.a -o -r $mpilib/libpmpich.so -o -r $mpilib/libmpich.rts.a -o -r $mpilib/libmpich.cnk.a ] ; then
		    fixmakeargs="$fixmakeargs MPICH_IGNORE_CXX_SEEK"
		    if [ $mpi2 = yes ] ; then
			fixmakeargs="$fixmakeargs MPICH2_MPI_INPLACE"
		    fi
		    #echo "MPICH found "
		    if [ "x$mpilibrary" = "xno" ] ; then
			if [ -r $mpilib/libmpich.rts.a ] ; then
         		    # For BG/L
			    mpilibrary="-lmpich.rts $additional_mpilibs"
			else
			    if [ -r $mpilib/libmpich.cnk.a ]; then
				# For BG/P
				mpilibrary="-lmpich.cnk $additional_mpilibs"
			    else
				if [ $machine = craycnl ]; then
	      			    if [ -r $mpilib/libmpich_cray.a ] ; then
					mpilibrary="-lmpich_cray $additional_mpilibs"
				    elif [ -r $mpilib/libmpich_intel.a ]; then
					mpilibrary="-lmpich_intel $additional_mpilibs"
				    elif [ -r $mpilib/libmpich_gnu.a ]; then
					mpilibrary="-lmpich_gnu $additional_mpilibs"
				    elif [ -r $mpilib/libmpich_pgi.a ]; then
					mpilibrary="-lmpich_pgi $additional_mpilibs"
				    else
					if [ "$craymic" = "no" ]; then
					  mpilibrary="-lmpich $additional_mpilibs"
					else
					  mpilibrary="$additional_mpilibs"
					fi
					#echo "Craymic=$craymic "
				    fi
				    echo "Using mpilibrary=$mpilibrary"
				else
				    mpilibrary="-lmpich $additional_mpilibs"
				fi
			    fi
			fi
		    fi

		    if [ -r $mpilib/libpmpich++.a -o -r $mpilib/libpmpich++.so ] ; then
			#echo "pmpich++ found"
			mpilibrary="-lpmpich++ $mpilibrary"
		    fi


		    if [ $machine = craycnl ]; then
			if [ -r $mpilib/libmpichcxx_cray.a ] ; then
			    mpilibrary="-lmpichcxx_cray $mpilibrary"
			elif [ -r $mpilib/libmpichcxx_intel.a ]; then
			    mpilibrary="-lmpichcxx_intel $mpilibrary"
			elif [ -r $mpilib/libmpichcxx_gnu.a ]; then
			    mpilibrary="-lmpichcxx_gnu $mpilibrary"
			elif [ -r $mpilib/libmpichcxx_pgi.a ]; then
			    mpilibrary="-lmpichcxx_pgi $mpilibrary"
			fi
		    else
			if [ -r $mpilib/libmpichcxx.a -o -r $mpilib/libmpichcxx.so ] ; then
			    #echo "mpichcxx found"
			    mpilibrary="-lmpichcxx $mpilibrary"
			fi
		    fi

		    if [ -r $mpilib/libpmpich.a -o -r $mpilib/libpmpich.so ] ; then
			#echo "pmpich found"
			mpilibargs="$mpilibargs -lpmpich $mpilibrary"
			mpiflibargs="$mpiflibargs -lpmpich $mpilibrary"
		    else
			#echo "pmpich not found"
			mpilibargs="$mpilibargs $mpilibrary"
			mpiflibargs="$mpiflibargs $mpilibrary"
		    fi

		    if [ -r /usr/lib/librt.a -o -r /usr/lib/librt.so ] ; then
			#echo "librt found"
			mpilibargs="$mpilibargs -lrt"
			mpiflibargs="$mpiflibargs -lrt"
		    fi

		    if [ $machine != bgq -a $machine != craycnl ] ; then
			if [ -r /usr/lib64/libibverbs.a -o -r /usr/lib64/libibverbs.so ] ; then
			    #echo "libibverbs found"
			    mpilibargs="$mpilibargs -libverbs"
			    mpiflibargs="$mpiflibargs -libverbs"
			fi
		    fi

		    if [ -r $mpilib/libscdma.a -a -r $mpilib/libpmi.a ] ; then
			# echo "add -lscdma -lpmi to the SiCortex link line"
			mpilibargs="$mpilibargs -lscdma -lpmi"
			mpiflibargs="$mpiflibargs -lscdma -lpmi"
		    fi
		else
		    if [ "x$mpilibrary" != "xno" ] ; then
			mpilibargs="$mpilibargs $mpilibrary"
			mpiflibargs="$mpiflibargs $mpilibrary"
		    fi
		fi
	    fi

	    # libmpi.* found. But libpmpi* not found.
	    # both found.
	    # libmpi.* not found - look for libmpich.*
	    # For fortran libfmpich.* look for libpmpi

	    # Check for libmpio.a
	    if [ -r $mpilib/libmpio.a ]
	    then
		mpilibargs="$mpilibargs -lmpio"
		mpiflibargs="$mpiflibargs -lmpio"
	    fi

	    # Special check for LAM MPI
	    if [ -r $mpilib/liblam.a ]
	    then
		echo "This looks like a LAM MPI installation. Adding -llam to link command line"

		if [ -r $mpilib/liblammpi++.a ] ; then
		    mpilibargs="$mpilibargs -llammpi++ -lmpi"
		    mpiflibargs="$mpiflibargs -llammpi++ -lmpi"
		fi
		mpilibargs="$mpilibargs -llam"
		mpiflibargs="$mpiflibargs -llam"
		if [ -f /usr/lib/libutil.a ]
		then
		    # This is a Linux box, add -lutil to the mpi libraries
		    echo "Adding -lutil to link command line for LAM MPI"
		    mpilibargs="$mpilibargs -lutil -ldl -lpthread"
		    mpiflibargs="$mpiflibargs -lutil -ldl -lpthread"
		fi
	    fi
	    # Special check for Intel MPI
	    if [ -r $mpilib/libmpiif.a ]
	    then
		echo "This looks like an Intel MPI installation."
		mpilibargs="$mpilibargs -lmpiif -ldl -lrt"
		mpiflibargs="$mpiflibargs -lmpiif -ldl -lrt"
	    fi
	    # Special check for HPMPI
	    if [ -r $mpilib/libmpi_hmp.a ] ; then
		echo "This looks like an HP/MPI installation."
		mpilibargs="$mpilibargs -ldl"
		mpiflibargs="$mpiflibargs -ldl"
	    fi
	    # Special check for ChaMPIon/Pro
	    if [ -r $mpilib/libcmpi.a ] ; then
		echo "This looks like a ChaMPIon/Pro installation."
		mpiextraargs=`cmpicc -v -echo | cut -c8- `
		mpilibargs="$mpilibargs $mpiextraargs"
		mpiflibargs="$mpiflibargs $mpiextraargs -lcmpi_fort"
	    fi
	    # Special check for VMI [NCSA] MPICH
	    if [ -r $mpilib/libvmi.a ] ; then
		echo "This looks like a VMI MPICH installation. Adding -lvmi -lpthread -ldl to link command line"
		mpilibargs="$mpilibargs -lvmi -lpthread -ldl"
		mpiflibargs="$mpiflibargs -lvmi -lpthread -ldl"
	    fi

	    mpilibargs=`echo $mpilibargs | sed  -e 's/ /#/g'`
	    mpiflibargs=`echo $mpiflibargs | sed  -e 's/ /#/g'`
	    if [ $papipfm = yes -a "x$mpilib" = "x/usr/lib" ] ; then
		echo "NOTE: Adding -L<papidir> before -L<mpidir> to use PAPI's libpfm"
		mpilibargs="-L$papidir/$\(PAPISUBDIR\)#$mpilibargs"
		mpiflibargs="-L$papidir/$\(PAPISUBDIR\)#$mpiflibargs"
	    fi
            if [ $mpi = yes -a $machine != ibm64 ]; then
              mpilibargs="$mpilibargs#-Wl,-rpath,\$(TAU_MPILIB_DIR)"
              mpiflibargs="$mpiflibargs#-Wl,-rpath,\$(TAU_MPILIB_DIR)"
	    fi
	    fixmakeargs="$fixmakeargs mpilibargs=$mpilibargs mpiflibargs=$mpiflibargs mpilib=$mpilib"
	    mpilibargs_added_to_fixmakeargs=yes

	    # now throw in non-wrapped MPI library lines
	    wrapperF=$wrapperlib
	    nowrapC=`echo $wrapperC | sed  -e 's/ /#/g'`
	    nowrapF=`echo $wrapperF | sed  -e 's/ /#/g'`
	    notaumpilibargs=`echo $mpilibargs | sed -e "s@$nowrapC@@"`
	    notaumpiflibargs=`echo $mpiflibargs | sed -e "s@$nowrapF@@"`
	    fixmakeargs="$fixmakeargs mpinowraplibargs=$notaumpilibargs mpinowrapflibargs=$notaumpiflibargs mpilib=$mpilib"

	    # Check to see if the MPI library contains a _r
	    mpithreadtest=`echo $mpilibrary | sed -e 's/_r//'`
	    if [ "y$mpithreadtest" = "y$mpilibrary" ] ; then
		echo "NOTE: MPI library does not have a threaded _r suffix "
	    else
		echo "NOTE: MPI library has a threaded _r suffix "
		fixmakeargs="$fixmakeargs MPI_R_SUFFIX"
	    fi # mpi _r check

	fi # If -d mpilib
    fi
else # if mpilib is specified
    if [ $openmp = yes ] ; then
	if [ $epilog = yes ] ; then
	    wrapperlib="-L$epiloglibdir#-lelg.omp#-ldl"
	    if [ -f $epiloglibdir/libcubew3.a ] ; then
		wrapperlib="$wrapperlib#-lcubew3"
	    fi
	    fixmakeargs="extrashlibopts=$wrapperlib $fixmakeargs"
	elif [ $vampirtrace = yes ] ; then
	    wrapperlib="-L$vampirtracedir/$vampirtracelibdir#-Wl,-whole-archive#-lvt.omp#-lotf#-Wl,-no-whole-archive#-lz#-ldl"
	    fixmakeargs="extrashlibopts=$wrapperlib $fixmakeargs"
	fi
    else
	if [ $epilog = yes ] ; then
	    wrapperlib="-L$epiloglibdir#-lelg.ser#-ldl"
	    if [ -f $epiloglibdir/libcubew3.a ] ; then
		wrapperlib="$wrapperlib#-lcubew3"
	    fi
	    fixmakeargs="extrashlibopts=$wrapperlib $fixmakeargs"
	elif [ $vampirtrace = yes ] ; then
	    wrapperlib="-L$vampirtracedir/$vampirtracelibdir#-lvt#-lotf#-lz#-Wl,-Bstatic#-lbfd#-liberty#-Wl,-Bdynamic#-ldl"
	    fixmakeargs="extrashlibopts=$wrapperlib $fixmakeargs"
	fi
    fi
fi



# Special magic for xt3 and craycnl
if [ $mpi = yes -a $mpilibargs_added_to_fixmakeargs = no ] ; then
    if [ $epilog = no -a $vampirtrace = no -a $scorep = no ]; then
	# On Crays, Pathscale compilers require  a -lmpichcxx for C and Fortran
	if [ $pathscale = yes ] ; then
	    mpilibargs="-L$tautoplevel/$machine/lib#-lTauMpi\$(TAU_CONFIG)#-lmpichcxx"
	else
	    mpilibargs="-L$tautoplevel/$machine/lib#-lTauMpi\$(TAU_CONFIG)"
	fi
	fixmakeargs="$fixmakeargs mpilibargs=$mpilibargs mpiflibargs=$mpiflibargs"
    else
	mpilibargs=""
	mpiflibargs=$mpilibargs
	fixmakeargs="$fixmakeargs mpilibargs=$mpilibargs mpiflibargs=$mpiflibargs"
    fi
fi

#####################################################################
# Test for C++ string library
#####################################################################
$echo "Checking for standard C++ library <string>... ${nnl}"
cat <<EOF > /tmp/tau$$.C
#include <string>
#include <vector>
#include <list>
#include <map>
using std::string;
using std::vector;
using std::pair;
using std::list;
using std::map;
void foo(void) { string s1; return; }
EOF

if $cxx_compiler -c /tmp/tau$$.C 1> /dev/null 2>&1 ; then
    echo "yes"
    stdcxxlib=yes
else
    echo "no (using <bstring.h> instead)"
fi
rm -f /tmp/tau$$.C tau$$.o

#####################################################################
# Test for explicit strsignal support in string library (TauInit.cpp)
#####################################################################
$echo "Check if valid to declare strsignal with <string.h>... ${nnl}"
cat <<EOF > /tmp/tau$$.cpp
#include <string.h>
extern "C" char *strsignal(int sig);
EOF

if $cxx_compiler -c /tmp/tau$$.cpp 1> /dev/null 2>&1 ; then
    echo "yes"
    strsignal_ok=yes
    fixmakeargs="$fixmakeargs TAU_STRSIGNAL_OK"
else
    echo "no"
fi
rm -f /tmp/tau$$.cpp tau$$.o



#####################################################################
# Check Runtime type info
#####################################################################
cat <<EOF > get_typeinfo1.C
#include <typeinfo>
using std::type_info;
#ifdef __GNUC__
#include <cxxabi.h>
using namespace std;
#endif /* GNUC */

EOF

$echo "Checking if C++ compiler supports Std Runtime Type Information... ${nnl}"
if $cxx_compiler $orig_useropt -c get_typeinfo1.C 1> /dev/null 2>&1 ; then
    echo "yes"
else
    echo "no"
    cat <<EOF > get_typeinfo2.C
#include <typeinfo.h>
EOF

$echo "Checking if C++ compiler supports Runtime Type Information (RTTI)... ${nnl}"
if $cxx_compiler $orig_useropt -c get_typeinfo2.C 1> /dev/null 2>&1 ; then
    echo "yes"
    fixmakeargs="$fixmakeargs RTTI"
else
    echo "no"
    fixmakeargs="$fixmakeargs NORTTI"
fi
fi
rm -f get_typeinfo1.C get_typeinfo2.C get_typeinfo*.o *.ti *.ii



#####################################################################
# Check if the open call accepts O_LARGEFILE
#####################################################################
cat << EOF > f1.c
      #define  _LARGEFILE64_SOURCE    1
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <fcntl.h>

      int main(int argc, char** argv) {
         int file = open ("asdf", O_LARGEFILE, 0600);
      }
EOF


$echo "Checking if open takes O_LARGEFILE... ${nnl}"
if $c_compiler $orig_useropt -c f1.c 1> /dev/null 2>&1 ; then
    fixmakeargs="$fixmakeargs TAU_LARGEFILE"
    echo "yes"
else
    echo "no"
fi
/bin/rm -f f1.o f1.c


##########################################################################
# Check if weak symbols are supported
##########################################################################
cat <<EOF > tau_weak_test.c
#pragma weak omp_get_thread_num=tau_omp_get_thread_num
int tau_omp_get_thread_num() {
  return 0;
}
EOF

$echo "Checking for weak symbols... ${nnl}"
if $c_compiler $orig_useropt tau_weak_test.c -c 1> /dev/null 2>&1 ; then
    weakfound=`nm tau_weak_test.o |  awk '{ print $2 ; }' | head -n 1`
    if [ "x$weakfound" = "xW" ] ; then
	echo "yes"
	fixmakeargs="$fixmakeargs TAU_WEAK_SUPPORTED"
    else
	echo "no"
    fi
else
    echo "no"
fi
/bin/rm -f tau_weak_test.o tau_weak_test.c
##########################################################################

######################################################################
# Install asmdex if we are building for Android
######################################################################
asmdextarball=asmdex-r1707.tar.bz2
asmdexurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$asmdextarball

if [ "x$machine" = "xarm_android" ]; then
    if [ -r "$targetdir/$architecture/lib/asmdex.jar" ]; then
	echo "Found: $targetdir/$architecture/lib/asmdex.jar"
	echo "asmdex.jar already found, skipping"
    else
	echo "asmdex.jar doesn't found, trying to build one..."
        # Check for ant before doing anything
        if ! which ant >/dev/null 2>&1 ; then
          echo "ERROR: Apache ant not found in your path.  Can't build asmdex."
          exit 199
        fi
	tmpdir="`pwd`/.tmp_asmdex_$$"
	mkdir -p "$tmpdir"
	cd "$tmpdir"
	if [ "x$asmdex" = "xdownload" ]; then
            download "$asmdexurl" "$asmdextarball"
	    if [ ! -f $asmdextarball ]; then
		echo "$asmdextarball did not download. Please download it manually from:"
		echo "$asmdexurl"
		echo "Please enter the directory containing asmdex: ${nnl}"
		read RESPONSE
		cp -r $RESPONSE .
		cd `basename $RESPONSE`
	    else
		tar jxf $asmdextarball
		for p in $START_DIR/tools/src/android/dexInjector/asmdex-*.patch; do
		    patch -p0 < $p
		done
		cd asmdex
	    fi
	else
	    if [ ! -d "$asmdex" ]; then
		echo "$asmdex is not a valid directory."
		echo "Please enter the directory containing asmdex: ${nnl}"
		read RESPONSE
		cp -r $RESPONSE .
		cd `basename $RESPONSE`
	    else
		cp -r $asmdex .
		cd `basename $asmdex`
	    fi
	fi

	ant -f build-main.xml jar
	mkdir -p $targetdir/$architecture/lib
	cp asmdex.jar $targetdir/$architecture/lib
	cd ../..
	rm -rf "$tmpdir"
    fi
fi
######################################################################
# Install PIN if requested
######################################################################
PINURL_x86_64=http://software.intel.com/sites/landingpage/pintool/downloads/pin-3.2-81205-gcc-linux.tar.gz
if [ "x$pindir" = "xdownload" ]; then
  if [ $machine = craycnl -o $machine = x86_64 -o $machine = i386_linux ]; then 
    currdir=${PWD}
    cd $targetdir/$machine; 
    if [ ! -L $targetdir/$machine/pin ] ; then 
# symlink does not exist, download PIN
      wget $PINURL_x86_64; tar zxf pin-*.tar.gz; /bin/rm -f pin-*.tar.gz; ln -s pin-* pin; 
    fi
    pindir=`readlink -f pin`; cd $currdir; 
  fi
fi

if [ $pin = yes -a "x$pindir" != "x" ]; then
    fixmakeargs="$fixmakeargs PIN pindir=$pindir"
    tauoptions="${tauoptions}-pin"
fi 

######################################################################
# Install SOS if requested
######################################################################
#sostgz=sos.tgz
#sostgz=sos_021318.tgz
sostgz=sos_041918.tgz
sosdepstgz=sosdeps.tgz
#sosdepsurl=http://tau.uoregon.edu/$sosdepstgz
sosdepsurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$sosdepstgz
sosurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/sos/$sostgz
#sosurl=http://tau.uoregon.edu/$sostgz
#sosurl=https://github.com/cdwdirect/sos_flow.git
sosmaindir=sos
sosrepo=sos_flow

echo "$sosdir"
if [ "x$sos" = "xyes" ] ; then
  if [ "x$sosdir" = xdownload ] ; then
    echo "Install SOS"
    p=`pwd`
    cd $targetdir/$architecture/; installsosdeps "$sosmaindir" "$sosdepsurl" "$sosdepstgz"; download "$sosurl" "$sostgz" ; tar zxf "$sostgz"; rm -f "$sostgz" ; installsos "$sosrepo"
    #cd $targetdir/$architecture/; installsosdeps "$sosmaindir" "$sosdepsurl" "$sosdepstgz"; clone "$sosurl" "$sosrepo"; installsos "$sosrepo"
  else
    if [ ! -d "$sosdir" ] ; then
      echo "Error: Cannot access SOS directory $sosdir"
      exit 1
    fi
  fi
fi

######################################################################
# Install BFD if requested
######################################################################
binutils=binutils-2.23.2
binutilstgz=$binutils.tar.gz
binutilsurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$binutilstgz

if [ $machine = arm64_linux -a ! -r $targetdir/$architecture/$binutils/include/bfd.h ] ; then
  binutilsurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/arm64-bfd.tgz
  binutilstgz=arm64-bfd.tgz
  p=`pwd`
  cd $targetdir/$architecture/; download "$binutilsurl" "$binutilstgz" ; tar zxf $binutilstgz; rm -f $binutilstgz ; cd ${p};
fi

if [ "x$bfddir" = xnone ]; then
  echo "BFD disabled."
  turnbfdoff=yes
fi

if [ "x$bfd" = "xyes" -a ! "$turnbfdoff" = yes ] ; then
  bfdtar=""
  prebfddir="`pwd`"
  if [ ! -e "$bfddir/lib" ] && [ -f "$bfddir/$binutilstgz" ]; then
    #if we do not have an install already at this location but we do have a valid tar file, build with the tar file here
    bfdtar="yes"
  fi

  if [ "x$bfddir" = xdownload ] || [ "x$bfdtar" = xyes ] ; then
    if [ "x$bfddir" = xdownload ]; then
      #only change the bfddir if we are downloading
      bfddir="$targetdir/$architecture/$binutils"
      if [ $machine = craycnl -a $craymic = yes ]; then
        bfddir="$targetdir/$architecture/$binutils-mic"
      fi
    fi
    if [ -r "$bfddir/lib/libbfd.a" ] ; then
      echo "Found: $bfddir/lib/libbfd.a"
      echo "BFD download already found, skipping"
    else
      if [ ! "x$bfdtar" = xyes ]; then
        #only download if we're set to download, otherwise we'll just build in the directory with the tarfile
        tempdir="`pwd`/.tmp_bfdbuild_$$"
        if [ -d /dev/shm -a -w /dev/shm ] ; then
          # some linux distributions set noexec flag when mount tmpfs on /dev/shm
          # make sure we can exec under /dev/shm
          execheck="/dev/shm/tau_$$"
          touch $execheck
          chmod +x $execheck
          if [ -x $execheck ]; then
            tempdir="/dev/shm/tau_bfdbuild_$$"
          fi
          rm -f $execheck
        fi
        mkdir -p "$tempdir"
        cd "$tempdir"
        download "$binutilsurl" "$binutilstgz"
	if [ $? != 0 -a "x$execheck" != "x" ]; then 
	  echo "Couldn't write to /dev/shm. Trying local directory."
	  cd $prebfddir
          tempdir="`pwd`/.tmp_bfdbuild_$$"
	  mkdir -p "$tempdir"
	  cd "$tempdir"
          download "$binutilsurl" "$binutilstgz"
        fi
           
        if [ ! -f "$binutilstgz" ] ; then
          echo "$binutilstgz did not download.  Please download it manually from: "
          echo "$binutilsurl"
          echo "Please enter the directory containing the tarball: ${nnl}"
          read RESPONSE
          cp "$RESPONSE/$binutilstgz" .
        fi
      else # bfdtar = yes
        cd "$bfddir"
        tempdir="$bfddir"
        # TAU uses -prefix=bfddir while configuring BFD. So, it must be set to TAU's dir
        bfddir=$targetdir/$architecture/$binutils
      fi

      # Extract binutils archive
      tar -xzf $binutilstgz
      cd $binutils

      # Configure binutils
      echo "Configuring binutils (see $tempdir/$binutils/tau_configure.log for details)..."
      case $machine in
      bgp)
        ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc \
            CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++ \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
        err=$?
        ;;
      bgq)
        ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc64-bgq-linux-gcc \
            CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc64-bgq-linux-g++ \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
        err=$?
        ;;
      rs6000|ibm64)
        ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            --prefix=$bfddir \
            --disable-nls --disable-werror --disable-largefile > tau_configure.log 2>&1
        err=$?
        ;;
      arm_android)
        patch -p1 <$START_DIR/android.binutils-2.23.2.patch && \
        ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            --host=$host \
            --prefix=$bfddir \
            --disable-nls --disable-werror  --disable-largefile  > tau_configure.log 2>&1
        err=$?
        ;;
      mic_linux)
        # Note: may need to search other paths than just /usr/linux-k1om-*
        k1om_bin="`ls -1d /usr/linux-k1om-* | sort -r | head -1`/bin"
        export PATH=$k1om_bin:$PATH
        ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            --host=x86_64-k1om-linux \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
        err=$?
        ;;
      apple)
	export CFLAGS="-Wno-error=unused-value -Wno-error=deprecated-declarations -fPIC"
	export CXXFLAGS="-Wno-error=unused-value -Wno-error=deprecated-declarations -fPIC"
	./configure --prefix=$bfddir --disable-nls --disable-werror > tau_configure.log 2>&1
	err=$?
        ;;
      sparc64fx)
        fccpxpath=`which fccpx | sed 's/\/bin\/fccpx$//'`
        if [ -r $fccpxpath/util/bin/sparc64-unknown-linux-gnu-ar ]; then
          echo "NOTE: Using ar from $fccpxpath/util/bin/sparc64-unknown-linux-gnu-ar"
          export PATH=$fccpxpath/util/bin:$PATH
        fi
        ./configure \
            CFLAGS="-fPIC -Xg" CXXFLAGS="-fPIC -Xg" \
                CC=$fccpxpath/bin/fccpx \
                CXX=$fccpxpath/bin/FCCpx \
                AR=sparc64-unknown-linux-gnu-ar \
		--host=sparc64-unknown-linux-gnu \
            	--prefix=$bfddir \
		--disable-nls --disable-werror > tau_configure.log 2>&1
	err=$?
	;;
      craycnl)
	unset CC CXX
	if [ $craymic = yes ]; then
          # Note: may need to search other paths than just /usr/linux-k1om-*
          k1om_bin="`ls -1d /usr/linux-k1om-* | sort -r | head -1`/bin"
          export PATH=$k1om_bin:$PATH
          ./configure \
            CFLAGS='-xMIC-AVX512 -fPIC' CXXFLAGS='-xMIC-AVX512 -fPIC' \
            --host=x86_64-k1om-linux \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
          err=$?
	else
          ./configure \
            CFLAGS=-fPIC CXXFLAGS=-fPIC \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
          err=$?
        fi
        ;;
      *)   
        #echo $c_compiler
        if [ "$c_compiler" = mpc_cc ]
        then
           ./configure \
            CFLAGS="-fPIC -Wno-error" CXXFLAGS="-fPIC -Wno-error" \
            CC=$mpc_c_compiler CXX=$mpc_cxx_compiler \
            --prefix=$bfddir \
            --disable-nls --disable-werror > tau_configure.log 2>&1
            err=$?	 
        else
	  if [ "$c_compiler" = pgcc ]
	  then
            ./configure \
              CFLAGS="-fPIC -noswitcherror" CXX=pgc++ CXXFLAGS=-fPIC \
              --prefix=$bfddir \
              --disable-nls --disable-werror > tau_configure.log 2>&1
              err=$?
          else 
            ./configure \
              CFLAGS=-fPIC CXXFLAGS=-fPIC \
              --prefix=$bfddir \
              --disable-nls --disable-werror > tau_configure.log 2>&1
              err=$?
          fi 
        fi
        ;;
      esac

      # Build and install binutils if configure successful
      if [ $err -ne 0 ] ; then
        echo "Error: BFD configuration failed. Cannot proceed with -bfd=download"
        exit 1
      else
        echo "Building (see $tempdir/$binutils/tau_build.log for details)..."
        make -j8 > tau_build.log 2>&1
        err=$?
        if [ $err -ne 0 ] ; then
          echo "Error: BFD build failed. Cannot proceed with -bfd=download"
          exit 1
        fi
        echo "Installing (see $tempdir/$binutils/tau_build.log for details)..."
        make install > tau_install.log 2>&1
        err=$?
        if [ $err -ne 0 ] ; then
          echo "Error: BFD installation failed. Cannot proceed with -bfd=download"
          exit 1
        fi
      fi

      # Some systems use lib64 instead of lib
      if [ -d "$bfddir/lib64" -a ! -d "$bfddir/lib" ] ; then
        pushd "$bfddir"
        ln -s lib64 lib
        popd
      fi

      # Install additional headers
      cp bfd/*.h "$bfddir/include"
      cp -R include/* "$bfddir/include"

      # Install additional libraries
      if [ -r libiberty/libiberty.a ] ; then
        cp libiberty/libiberty.a "$bfddir/lib"
      fi
      if [ -r opcodes/libopcodes.a ] ; then
        cp opcodes/libopcodes.a "$bfddir/lib"
      fi

      # Fix bfd.h
      sed -e 's/#if !defined PACKAGE && !defined PACKAGE_VERSION/#if 0/' "$bfddir/include/bfd.h" > "$tempdir/bfd.h"
      mv "$tempdir/bfd.h" "$bfddir/include"

      # Fix library paths on snow leopard
      if [ -r "$bfddir/lib/x86_64/libiberty.a" ] ; then
        cp "$bfddir/lib/x86_64/libiberty.a" "$bfddir/lib/libiberty.a"
      fi

      if [ ! "x$bfdtar" = xyes ] ; then
        #If we downloaded go back and remove the tempdir, otherwise just go back
        cd ../..
        rm -rf "$tempdir"
      fi
      cd "$prebfddir"

    fi # -r $bfddir/lib/libbfd.a
  fi # $bfddir = download || bfdtar = yes

  # One way or another, we now have a working BFD at $bfddir or we give up
  if [ ! -d $bfddir ] ; then
    echo "Error: Cannot access BFD directory $bfddir"
    exit 1
  fi
  if [ "$pin" = "no" ]; then
    bfdinclude="-I$bfddir/include"
    fixmakeargs="$fixmakeargs bfdinclude=$bfdinclude"
    bfdlink="-L$bfddir/lib -L$bfddir/lib64 -Wl\,-rpath\,$bfddir/lib -Wl\,-rpath\,$bfddir/lib64"
  fi 

  # The libintl.dylib library is in /opt/local/lib... is that everywhere?
  if [ "x$machine" = "xapple" ] ; then
    bfdlink="-L$bfddir/lib"
# do not use lib64 for BFD on Mac.
    bfdlink="$bfdlink -L/opt/local/lib"
    fixmakeargs="$fixmakeargs bfdlink=-L$bfddir/lib#-L$bfddir/lib64#-L/opt/local/lib"
  else
    if [ "$pin" = "no" ]; then
      fixmakeargs="$fixmakeargs bfdlink=-L$bfddir/lib#-L$bfddir/lib64#-Wl\,-rpath\,$bfddir/lib#-Wl\,-rpath\,$bfddir/lib64"
    fi
  fi
else
  fixmakeargs="$fixmakeargs bfdinclude= bfdlink= "
fi # bfd = yes && turnbfdoff != yes
bfdlink="-L$bfddir/lib -L$bfddir/lib64 -Wl,-rpath,$bfddir/lib -Wl,-rpath,$bfddir/lib64"




######################################################################
# Check for BFD
######################################################################
cat <<EOF > conftest_bfd.c
#define PACKAGE TAU
#define PACKAGE_VERSION 2.25
#include <bfd.h>
//#ifdef __APPLE__
//#include <crt_externs.h>
//char *** environ(void) { return (*_NSGetEnviron()); }
//#endif

void foo() {
   bfd_init();
   bfd *BfdImage = bfd_openr("/proc/self/exe", 0);
   if (!BfdImage) {}
   return;
}
EOF
$echo "Checking for bfd.h... ${nnl}"
if $c_compiler $orig_useropt -c conftest_bfd.c $bfdinclude 1> /dev/null 2>&1 ; then
    if [ "$turnbfdoff" = "yes" ] ; then
	# *CWL* this is for systems where BFD cannot be supported because
	# of whatever reasons. An example is the Cray XE6 (hopper) where
	# the Intel environment introduces a conflict between its own
	# stdio.h and libiberty.h
	echo "no"
    else
	if [ "$pin" = "no" ]; then
	  fixmakeargs="$fixmakeargs TAU_BFD"
	  echo "yes"
        fi
    fi
else
    echo "no"
fi
/bin/rm -f conftest_bfd.o conftest_bfd.c


######################################################################

######################################################################
# Check for ELF-BFD
######################################################################
cat <<EOF > conftest_elf_bfd.c
#define PACKAGE TAU
#define PACKAGE_VERSION 2.25
#include <stddef.h>
#include <bfd.h>
#include <elf-bfd.h>

void foo() {
    elf_symbol_type * symbol_type = NULL;
    (void)symbol_type;
    return;
}
EOF
$echo "Checking for elf-bfd.h... ${nnl}"
if $c_compiler $orig_useropt -c conftest_elf_bfd.c $bfdinclude 1> /dev/null 2>&1 ; then
    if [ "$turnbfdoff" = "yes" ] ; then
	echo "no"
    else
	if [ "$pin" = "no" ]; then
	  fixmakeargs="$fixmakeargs TAU_ELF_BFD"
	  echo "yes"
        fi
    fi
else
    echo "no"
fi
/bin/rm -f conftest_elf_bfd.o conftest_elf_bfd.c


######################################################################


######################################################################
# Check what is needed for linking with BFD
######################################################################
cat <<EOF > conftest_bfd.c
#ifdef MPC_MODULE_MPC_Config
#include <mpc.h>
#endif
#define PACKAGE TAU
#define PACKAGE_VERSION 2.25
#include <bfd.h>
int main(int argc, char **argv) {
   bfd_init();
   bfd *BfdImage = bfd_openr("/proc/self/exe", 0);
   if (!BfdImage) {}
   return 0;
}
EOF
$echo "Checking for linking dependencies for libbfd... ${nnl}"

BFDLIBS="-lbfd"

if [ $c_compiler = mpiicc ]; then
  BFDLIBS="-lbfd -liberty -ldl -lz"
fi
if [ $machine = apple ]; then 
  BFDLIBS="-lbfd -liberty -lintl -ldl -lz"
fi

bfd_worked="no"
if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
    bfd_worked="yes"
else
    BFDLIBS="-lbfd -liberty "  # -lz is not always available (e.g., BGQ)
    if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	bfd_worked="yes"
    else
	BFDLIBS="-lbfd -liberty -lz" # Next, check with -lz.
	if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	    bfd_worked="yes"
        else
	  BFDLIBS="-lbfd -liberty -lz -ldl" # Next, check with -lz -ldl.
	  if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	    bfd_worked="yes"
          else
	    BFDLIBS="-lbfd -liberty -lintl"
	    if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	        bfd_worked="yes"
            else
	        BFDLIBS="-lbfd -liberty -lintl -lz"
	        if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	            bfd_worked="yes"
                else
	          BFDLIBS="-lbfd -liberty -lintl -lz -ldl"
	          if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	            bfd_worked="yes"
                  else 
	            BFDLIBS="-lbfd -lz"
# Mac BFD
	            if $c_compiler $orig_useropt -o conftest_bfd conftest_bfd.c $bfdinclude $bfdlink $BFDLIBS 1> /dev/null 2>&1 ; then
	              bfd_worked="yes"
                    fi
                  fi
                fi
            fi
          fi
	fi
    fi
fi
if [ "$pin" = "yes" ]; then
   BFDLIBS=""
fi
if [ $bfd_worked = "yes" -a $machine = bgq ] ; then
    BFDLIBS=`echo $BFDLIBS | sed -e 's@-liberty@${TAU_BFD_DIR}/lib/libiberty.a@g'`
    fixmakeargs="$fixmakeargs bfddir=$bfddir"
fi

if [ $cxx_compiler = x86_64-w64-mingw32-g++ ]; then
    BFDLIBS="$BFDLIBS -lpsapi"
fi

if [ $bfd_worked = "no" -a "$machine" != "apple" -a $pin = no ] ; then
    echo "failed. Using -lbfd -liberty -lz."
    echo ""
    echo ""
    echo "VERY IMPORTANT NOTE: Please configure TAU with -bfd=download. If a firewall prevents wget from accessing this binutils tarball"
    echo "Please download http://tau.uoregon.edu/ext.tgz and untar it in this TAU directory and please use -bfd=download."
    echo "***********************************************************************"
    echo ""
    echo ""
    BFDLIBS="-lbfd -liberty -lz"
    if [ $tauarch = i386_linux ]; then
	BFDLIBS=""
    fi
else
    echo $BFDLIBS
fi

BFDLIBS=`echo $BFDLIBS | sed -e 's/ /#/g'`

# *CWL* - We do not want to use the discovered libraries if we are
#         using the Cray compilers *and* fail to find the preset
#         directories. The explanation for this can be found in
#         the script section for craycnl.
if [ "x$PE_ENV" = xCRAY -a "x$bfddir" = x ] ; then
    echo "WARNING: Failed to find BFD path for CCE compiler. Implicit BFD support disabled."
else
    fixmakeargs="$fixmakeargs bfdlibs=$BFDLIBS"
fi

/bin/rm -f conftest_bfd.o conftest_bfd.c conftest_bfd
######################################################################

######################################################################
# Check for demangle.h
######################################################################
cat <<EOF > conftest_demangle.c
#include <demangle.h>
void foo() {
   char *bar;
   bar = cplus_demangle(0, DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE | DMGL_TYPES);
   return;
}
EOF
$echo "Checking for demangle.h... ${nnl}"
demangle=""
if $c_compiler $orig_useropt -c conftest_demangle.c $bfdinclude 1> /dev/null 2>&1 ; then
    demangle="-DHAVE_GNU_DEMANGLE"
    fixmakeargs="$fixmakeargs TAU_DEMANGLE"
    echo "yes"
else
    echo "no"
fi

/bin/rm -f conftest_demangle.o conftest_demangle.c


######################################################################
# Check if BFD can be linked into a shared library
######################################################################
cat <<EOF > conftest_bfd.c
#include <bfd.h>
#  if defined(HAVE_GNU_DEMANGLE) && HAVE_GNU_DEMANGLE
#    include <demangle.h>
#  endif /* HAVE_GNU_DEMANGLE */

#ifdef __APPLE__
#include <crt_externs.h>
char *** environ(void) { return (*_NSGetEnviron()); }
#endif
void foo() {
   bfd_init();
   bfd *BfdImage = bfd_openr("/proc/self/exe", 0);
   if (!BfdImage) {}

#if defined(HAVE_GNU_DEMANGLE) && HAVE_GNU_DEMANGLE
      cplus_demangle(NULL, DMGL_PARAMS | DMGL_ANSI
			| DMGL_VERBOSE | DMGL_TYPES);
#endif /* HAVE_GNU_DEMANGLE */

   return;
}
EOF
$echo "Checking for shared library compatible libbfd... ${nnl}"
if [ $c_compiler = xlc -o $c_compiler = xlc_r -o $c_compiler = mpixlc -o $c_compiler = mpixlc_r ] ; then
    shared_opt="-qmkshrobj"
else
    shared_opt="-shared -fPIC"
fi

bfdlibs=`echo $BFDLIBS | sed -e 's/#/ /g'`
if [ "$turnbfdoff" = 'no' ]; then
    if $c_compiler $demangle $orig_useropt $shared_opt -o conftest_bfd.so conftest_bfd.c -fPIC $bfdinclude $bfdlink $bfdlibs 1> /dev/null 2>&1 ; then
	if [ "$pin" = "no" ]; then
	  fixmakeargs="$fixmakeargs TAU_BFDSHAREDLINK"
	  echo "yes"
        fi
    else
	echo "no"
    fi
fi
/bin/rm -f conftest_bfd.o conftest_bfd.c conftest_bfd.so
######################################################################

######################################################################
# Install Dyninst and its dependencies, if requested
######################################################################
libboost=boost_1_67_0
libboosttgz=$libboost.tar.gz
libboosturl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$libboosttgz

libdyninst=dyninst-9.3.2-working
libdyninsttgz=$libdyninst.tar.gz
libdyninsturl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$libdyninsttgz

dynlibiberty=dynlibiberty
dynlibibertytgz=${dynlibiberty}.tar.gz
dynlibibertyurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$dynlibibertytgz

dynelfutils=elfutils-0.168
dynelfutilsbz=${dynelfutils}.tar.bz2
dynelfutilsurl=http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/$dynelfutilsbz

if [ "x$dyninstdir" = "x" ]; then
  libdyninstdir=${targetdir}/${architecture}
else
  libdyninstdir=$dyninstdir
fi

libdyninst_name=dyninst

if [ "x$dyninstdir" != "x" -a -d "$dyninstdir" ] ; then
  if [ -r $dyninstdir/$libdyninsttgz ]; then
    echo "NOTE: Copying $dyninstdir/$libdyninsttgz "
    cp $dyninstdir/$libunwindtgz .
    download_dyninst=yes
  fi
fi

## Check for boost
if [ "x$boostdir" != "x" -a -d "$boostdir" ] ; then
  dyninstboostdir=${boostdir}
else
  dyninstboostdir=${libdyninstdir}/${libboost}
  boostdir=${dyninstboostdir}
fi
if [ "x$dyninstboostdir" != "x" -a -d "$dyninstboostdir" ] ; then
  echo "Boost : found : $dyninstboostdir"
  fixmakeargs="$fixmakeargs boostinc=-I${dyninstboostdir}/include"
else  
  if [ "x$boost" = xyes ] ; then
    echo "Boost : not found, downloading..."
    download_boost=yes
  fi
fi

## Download and install boost if necessary
if [ "x$download_boost" = xyes ] ; then
  prebfddir=`pwd`
  # get the tar file
  if [ ! -f $libboosttgz ] ; then
    download "$libboosturl" "$libboosttgz"
  fi
  # check the tar file
  if [ ! -f $libboosttgz ] ; then
    echo "$libboosttgz did not download.  Please download it manually from: "
    echo "$libboosturl"
    echo "Please enter the directory containing the tarball: ${nnl}"
    read RESPONSE
    cp $RESPONSE/$libboosttgz .
  else
    echo "expanding $libboosttgz..."
    rm -rf $dyninstboostdir
    mkdir $dyninstboostdir
    tar -xzf $libboosttgz -C $dyninstboostdir --strip-components=1 
    echo "removing $libboosttgz..."
    rm $libboosttgz
    cd $dyninstboostdir
    ./bootstrap.sh --prefix=${dyninstboostdir} # dyninst wants boost to be built in its src dir
    ./b2 install -j4
    fixmakeargs="$fixmakeargs boostinc=-I${dyninstboostdir}/include"
  fi
  cd $prebfddir
fi #end dowload_boost

if [ "x$download_dyninst" = xyes ] ; then

  dyninstdir=${libdyninstdir}/${libdyninst}
  prebfddir=`pwd`

  #check Cmake exists
  cmake_cmd=`which cmake`
  if [ "x$cmake_cmd" = "x" ] ; then
      echo 'ERROR: cmake version 2.8.11 or higher required to build Dyninst.'
      exit 1;
  fi

  if [ -r "$dyninstdir/lib/libdyninstAPI.so" -o \
       -r "$dyninstdir/lib/libdyninstAPI_RT.so" -o \
       -r "$dyninstdir/lib/libdynElf.so" ] ; then
    echo "Found: dyninst"
    echo "dyninst download already found, skipping"
  else
    echo "Not found in ${dyninstdir}: ${libdyninst_name}"
    # get the tar file
    if [ ! -f $libdyninsttgz ] ; then
      download "$libdyninsturl" "$libdyninsttgz"
    fi

    # check the tar file
    if [ ! -f $libdyninsttgz ] ; then
      echo "$libdyninsttgz did not download.  Please download it manually from: "
      echo "$libdyninsturl"
      echo "Please enter the directory containing the tarball: ${nnl}"
      read RESPONSE
      cp $RESPONSE/$libdyninsttgz .
    else
      echo "expanding $libdyninsttgz..."
      rm -rf $libdyninst
      mkdir $libdyninst
      tar -xzf $libdyninsttgz -C $libdyninst --strip-components=1
      echo "removing $libdyninsttgz..."
      rm $libdyninsttgz
      rm -rf $dyninstdir # remove and make the build dir
      mkdir $dyninstdir
      cd $dyninstdir     # go to the build dir
      ## Build shared libiberty
      mkdir ${dyninstdir}/libiberty
      download "$dynlibibertyurl" "$dynlibibertytgz"
      tar -xzf $dynlibibertytgz
      cd $dynlibiberty/libiberty
      ./configure --enable-shared --prefix=$PWD
      make
      ar rcs libiberty.a pic/*.o
      cp libiberty.a ${dyninstdir}/libiberty
      cd ../..
      rm -rf $dynlibiberty $dynlibibertytgz
      ## Build shared elfutils
      mkdir ${dyninstdir}/elfutils
      download "$dynelfutilsurl" "$dynelfutilsbz"
      tar -xf $dynelfutilsbz -C ${dyninstdir}/elfutils --strip-components=1
      cd ${dyninstdir}/elfutils
      ./configure --enable-shared --prefix=$PWD
      make
      make install
      cd ..
      rm -rf $dynelfutilsbz
      ## Now we can make Dyninst
      cmake ${prebfddir}/${libdyninst} -DBoost_INCLUDE_DIR=${dyninstboostdir} -DCMAKE_INSTALL_PREFIX=${dyninstdir} -DIBERTY_LIBRARIES=${dyninstdir}/libiberty/libiberty.a -DLIBDWARF_INCLUDE_DIR=${dyninstdir}/elfutils/include -DLIBDWARF_LIBRARIES=${dyninstdir}/elfutils/lib/libdw.so -DLIBELF_INCLUDE_DIR=${dyninstdir}/elfutils/include -DLIBELF_LIBRARIES=${dyninstdir}/elfutils/lib/libelf.so
      make -j8
      make install
      if [ -f ${dyninstdir}/elfutils/lib/libdw.so ]; then
          cp ${dyninstdir}/elfutils/lib/libdw* ${dyninstdir}/lib
          mv ${dyninstdir}/lib/libdw.so ${dyninstdir}/lib/libdwarf.so
      fi
      if [ -f ${dyninstdir}/elfutils/lib/libelf.so ]; then
          cp ${dyninstdir}/elfutils/lib/libelf* ${dyninstdir}/lib
      fi
      if [ -f ${dyninstdir}/libiberty/libiberty.a ]; then
          cp ${dyninstdir}/libiberty/libiberty.a ${dyninstdir}/lib
      fi
    fi
  fi
  cd $prebfddir
fi #dyninst=download


######################################################################
# Check that the Sampling allocator code is supported by compiler
######################################################################
cat <<EOF > conftest_ss_alloc.cpp
#include <Profile/TauSsAllocator.h>
#include <map>
#include <stddef.h>
using namespace std;

int main() {
map<int, int, std::less<int>, tau_ss_allocator< std::pair<int, int> > > *test =
new map<int, int, std::less<int>, tau_ss_allocator< std::pair<int, int> > >();
}
EOF
$echo "Checking for ss_allocator support... ${nnl}"
if $cxx_compiler $orig_useropt -c conftest_ss_alloc.cpp -I$tauroot/include 1> /dev/null 2>&1 ; then
    if [ $cxx_compiler = "pgCC" -o $cxx_compiler = "pgc++" ]
    then
	# PGI compilers do not play nice with the current allocator.
	echo "no"
    else
	fixmakeargs="$fixmakeargs TAU_SS_ALLOC_SUPPORT"
	echo "yes"
    fi
else
    echo "no"
fi
/bin/rm -f conftest_ss_alloc.o conftest_ss_alloc.cpp
######################################################################

######################################################################
# Check that basic librt linkage is supported by this system
#    Precise functionality support is system-dependent and should
#    be controlled by macros inside code accordingly.
######################################################################
cat <<EOF > conftest_rt_link_test.cpp
int main() {
}
EOF
$echo "Checking for librt linkage support ... ${nnl}"
if $host_prefix$cxx_compiler $orig_useropt -o conftest_rt_link_test conftest_rt_link_test.cpp -lrt 1> /dev/null 2>&1 ; then
    tau_links_rt=yes
    fixmakeargs="$fixmakeargs TAU_LINKS_RT"
    echo "yes"
else
    echo "no"
fi
/bin/rm -f conftest_rt_link_test conftest_rt_link_test.cpp

######################################################################
# Check that basic librt functionality is supported by this system
######################################################################
# *CWL* Don't bother checking for functionality if we cannot even link
#       the library.
if [ $tau_links_rt = "yes" ] ; then
    cat <<EOF > conftest_rt_test.cpp
#include <time.h>
#include <stdio.h>
int main() {
  double time_value = 0.0;
  struct timespec timeVal;
  int ret = clock_getres(CLOCK_REALTIME, &timeVal);
  if (ret != 0) {
    printf("-1");
    return -1;
  }
  time_value = (double)(timeVal.tv_sec)*1000000 +
               (double)(timeVal.tv_nsec)/1000.0;
  if (time_value <= 0) {
    printf("-1");
    return -1;
  } else if (time_value < 1.0) {
    time_value = 1.0; // 1us is the smallest resolution we will support
  }
  printf("%ld", (long)time_value);
}
EOF
    $echo "Checking for Basic librt Real Time Clock Signal support... ${nnl}"
    if $cxx_compiler $orig_useropt -o conftest_rt_test conftest_rt_test.cpp -lrt 1> /dev/null 2>&1 ; then
	ebs_has_rt=yes
	echo "yes"
    else
	echo "no"
    fi
    # CWL - bgp does not have an accurate return value for clock_getres()
    if [ $ebs_has_rt = "yes" -a $machine != "bgp" ] ; then
	# CWL - watch out for the lack of awk support on rare platforms.
	#       This is necessary to check that the compiled config test
	#       returns either the empty string "" or some numeric value.
	ebs_clock_res=`./conftest_rt_test | awk '/^[0-9]+$/'`
	# CWL - we cannot assume the above command actually succeeds
	if [ x$ebs_clock_res != "x" ] ; then
	    if [ $ebs_clock_res -le 0 ] ; then
		ebs_has_rt=no
		echo "No Sane Clock Signal Resolution. No effective Real Time support."
	    else
		echo "Smallest Sane Clock Signal Resolution = ${ebs_clock_res} microseconds"
	    fi
	else
	    ebs_has_rt=no
	    echo "No Sane Clock Signal Resolution. No effective Real Time support."
	fi
    fi
    #echo $tau_rt_value
    #echo $?

    /bin/rm -f conftest_rt_test conftest_rt_test.cpp
fi
######################################################################

######################################################################
# Check for tr1/unordered_map
######################################################################
cat <<EOF > conftest_hash_map.cc
#include <tr1/unordered_map>

int main() {
  std::tr1::unordered_map<int,int> theMap;
  theMap[5] = 6;
  std::tr1::unordered_map<int,int>::const_iterator it;
}
EOF
$echo "Checking for tr1/unordered_map... ${nnl}"
if $cxx_compiler $orig_useropt -c conftest_hash_map.cc 1> /dev/null 2>&1 ; then
    fixmakeargs="$fixmakeargs TAU_TR1_HASH_MAP"
    echo "yes"
else
    echo "no"
fi

/bin/rm -f conftest_hash_map.o conftest_hash_map.cc


######################################################################
# Check for pthread wrappable routines
######################################################################
if [ $pthread = yes ] ; then
    cat <<EOF > conftest_pthread.c
#include <pthread.h>

void foo() {
  int rc;
  pthread_mutexattr_t   mta;
  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  pthread_spinlock_t spinlock;
  pthread_barrier_t barrier;
  pthread_cond_t cond;

  rc = pthread_mutexattr_init(&mta);
  rc = pthread_mutex_init(&mutex, NULL);
  rc = pthread_mutex_lock(&mutex);
  rc = pthread_mutex_unlock(&mutex);
  rc = pthread_mutex_destroy(&mutex);

  rc = pthread_spin_init(&spinlock, PTHREAD_PROCESS_SHARED);
  rc = pthread_spin_lock(&spinlock);
  rc = pthread_spin_unlock(&spinlock);
  rc = pthread_spin_destroy(&spinlock);

  rc = pthread_cond_init(&cond, NULL);
  rc = pthread_cond_broadcast(&cond);
  rc = pthread_cond_wait(&cond, &mutex);
  rc = pthread_cond_signal(&cond);
  rc = pthread_cond_destroy(&cond);


  rc = pthread_barrier_init(&barrier, NULL, 0);
  rc = pthread_barrier_wait(&barrier);
}
EOF
  $echo "Checking for pthread wrappable routines... ${nnl}"
  if $c_compiler $orig_useropt -c conftest_pthread.c $bfdinclude 1> /dev/null 2>&1 ; then
      fixmakeargs="$fixmakeargs TAU_PTHREAD_WRAP"
      echo "yes"
  else
      echo "no"
  fi

  /bin/rm -f conftest_pthread.o conftest_pthread.c
fi

######################################################################
# Check for TLS, or Thread Local Storage
######################################################################

tlsfound=no

if [ $openmp = yes ] || [ $pthread = yes ] ; then
    cat <<EOF > conftest_tls.cc
__thread int number = -1;
int main() {
  return number;
}
EOF
  $echo "Checking for thread local storage support... ${nnl}"
  if $cxx_compiler $orig_useropt -c conftest_tls.cc 1> /dev/null 2>&1 ; then
      fixmakeargs="$fixmakeargs TLS_AVAILABLE"
      echo "yes"
      tlsfound=yes
  else
      echo "no"
  fi

  /bin/rm -f conftest_tls.o conftest_tls.cc
fi

######################################################################
# Check for declspec(thread) support
######################################################################
if [ $tlsfound = no ] ; then
  if [ $openmp = yes ] || [ $pthread = yes ] ; then
    cat <<EOF > conftest_dtls.cc
__declspec(thread) int number = -1;
int main() {
  return number;
}
EOF
    $echo "Checking for __declspec(thread) support... ${nnl}"
    if $cxx_compiler $orig_useropt -c conftest_dtls.cc 1> /dev/null 2>&1 ; then
	fixmakeargs="$fixmakeargs DTLS_AVAILABLE"
	echo "yes"
	tlsfound=yes
    else
	echo "no"
    fi

    /bin/rm -f conftest_dtls.o conftest_dtls.cc
  fi
fi

######################################################################
# Check for pthread_getspecific() support
######################################################################
if [ $tlsfound = no ] ; then
  if [ $openmp = yes ] || [ $pthread = yes ] ; then
    cat <<EOF > conftest_pgs.cc
#include "pthread.h"
static pthread_key_t key;
int number = 1;

int main() {
  pthread_key_create(&key, NULL);
  pthread_setspecific(key, &number);
  int *newnum;
  newnum = (int*)pthread_getspecific(key);
  return *newnum;
}
EOF
    $echo "Checking for pthread_getspecific() support... ${nnl}"
    if $cxx_compiler $orig_useropt -c conftest_pgs.cc 1> /dev/null 2>&1 ; then
	fixmakeargs="$fixmakeargs PGS_AVAILABLE"
	echo "yes"
	tlsfound=yes
    else
	echo "no"
    fi

    /bin/rm -f conftest_pgs.o conftest_pgs.cc
  fi
fi


######################################################################

# If TBB support is requested, then make that the tag, not pthread
if [ $tbb = yes ] ; then
    fixmakeargs="$fixmakeargs PTHREAD_AVAILABLE ptdir=$ptdir"
    fixmakeargs="$fixmakeargs TBB_AVAILABLE"
    tauoptions="${tauoptions}-tbb"
else
  if [ $pthread = yes ] ; then
      fixmakeargs="$fixmakeargs PTHREAD_AVAILABLE ptdir=$ptdir"
      tauoptions="${tauoptions}-pthread"
  fi
fi

if [ $ompt = yes -a $opari = yes ] ; then
  echo "ERROR: Please enable either OMPT or Opari for instrumentation, but not both"
  exit 1
fi

# GOMP wrapping is only available for openmp
if [ $openmp = yes ] ; then
    # GOMP wrapping is only available for GCC
    if [ $c_compiler = gcc ] || [ $machine = craycnl -a "x$PE_ENV" = xGNU ] ; then
	  # GOMP wrapping is not compatible with Opari.
	  if [ $opari = no ] ; then
	      if [ $opari1 = no ] ; then
	        if [ $ompt = no ] ; then
		      fixmakeargs="$fixmakeargs GOMP_AVAILABLE ptdir=$ptdir"
	        else
		      echo "NOT using GOMP wrapper (OMPT)"
			fi
		  else
		    echo "NOT using GOMP wrapper (Opari1)"
	      fi
	  else
	      echo "NOT using GOMP wrapper (Opari2)"
	  fi
    fi
fi

if [ $papithread = yes ] ; then
    if [ $papi = no ] ; then
	echo ""
	echo "Error: To use the PAPI thread layer, you must specify -papi=<dir>"
	echo ""
	exit
    fi

    if [ ! `uname -s ` = Linux ] ; then
	echo ""
	echo "Error: The PAPI thread layer only works on Linux"
	echo ""
	exit
    fi

    fixmakeargs="$fixmakeargs TAU_PAPI_THREADS"
    tauoptions="${tauoptions}-papithread"
fi

if [ $charm = yes ] ; then
    fixmakeargs="$fixmakeargs TAU_CHARM charmdir=$charmdir"
    tauoptions="${tauoptions}-charm"
fi

if [ $compensate = yes ] ; then
    fixmakeargs="$fixmakeargs COMPENSATE"
    tauoptions="${tauoptions}-compensate"
fi

if [ $sproc = yes ] ; then
    fixmakeargs="$fixmakeargs TAU_SPROC"
    tauoptions="${tauoptions}-sproc"
fi

if [ $python = yes ] ; then
    fixmakeargs="$fixmakeargs PYTHON pythoninc=$pythoninc pythonlib=$pythonlib"
    tauoptions="${tauoptions}-python"
    if [ $machine = rs6000 -a "x$pythonlib" = "x" ] ; then
	echo "ERROR: For IBM systems, please specify the -pythonlib=<dir> flag where *.py files and the config directory are located!"
	exit 1
    fi
fi
if [ $cuda = yes ] ; then
    if [ $disableshared = no ] ; then
	if [ -f "$cudainclude/cuda.h" ] ; then
	    fixmakeargs="$fixmakeargs CUDA TAU_USE_GPU cudainclude=$cudainclude"
	    if [ "$opencl" != "disable" ] ; then
		if [ "$use_opencl" = "no" -a -f "$cudainclude/CL/cl.h" ] ; then
		    $echo "Checking $cxx_compiler compatibility with OpenCL... ${nnl}"
		    cat <<EOF>opencl.cpp
#include "CL/cl.h"
EOF
		    if $cxx_compiler -I$cudainclude -c opencl.cpp 1>/dev/null 2>&1 ; then
			echo "yes"
			fixmakeargs="$fixmakeargs OPENCL TAU_USE_GPU openclinclude=$cudainclude"
                        use_opencl=yes
		    else
			echo "no"
		    fi
		    rm -f opencl.cpp opencl.o
		fi
		cudadir=`dirname $cudainclude`
		if [ $cupti = no -a -f "$cudadir/extras/CUPTI/include/cupti_events.h" ] ; then
		    tauoptions="${tauoptions}-cupti"
		    cupti="$cudadir/extras/CUPTI"
		    fixmakeargs="$fixmakeargs CUPTI cuptiinclude=$cupti/include"
		    echo "Using CUPTI library found in $cupti."
		    if [ $machine = craycnl ]; then
			# check if -lcuda is available to the linker somehow
		      fixmakeargs="$fixmakeargs CUPTI_NOCUDA"
                    fi
		fi
	    fi
	else
	    echo "Error: Cannot find GPU headers, TAU currently supports either CUDA or OpenCL"
	fi
    else
	echo "Error: Cannot configure CUDA with DISABLESHARED set!"
	exit 1
    fi
fi

if [ $python = yes -a $cuda = yes ] ; then
    #We need the boost/python libraries to build the TAU's pycuda interface.
    echo "Checking for boost/python ... ${nnl}"
    cat <<EOF>boost.cpp
#include "boost/python.hpp"
EOF
    pythoninc_cmd="$(echo $pythoninc | sed -e "s/ / -I/g")"
    #echo $cxx_compiler -I$pythoninc_cmd -c boost.cpp
    if $cxx_compiler -I$pythoninc_cmd -c boost.cpp 1>/dev/null 2>&1 ; then
	echo "yes"
	fixmakeargs="$fixmakeargs PYCUDA"
    else
	echo "boost/python libraries not found, skipping TAU's pycuda interface"
    fi
    rm -f boost.cpp boost.o
fi

if [ ! $cupti = no ]; then
    echo "Checking CUPTI version at $cupti/include ... ${nnl}"
    cat <<EOF > cupti_version.C
#include <cupti_version.h>
#if CUPTI_API_VERSION >= 2
#error CUPTI version >= 4.1 found.
#endif
EOF
    if $cxx_compiler -I$cupti/include -c cupti_version.C 1>/dev/null 2>&1 ; then
	echo "CUPTI version 4.0 found."
    else
	echo "CUPTI version >= 4.1 found."
	fixmakeargs="$fixmakeargs CUPTI_ACTIVITY"
    fi
    rm -f cupti_version.C cupti_version.o
fi

if [ $zepto = yes ] ; then
    tauoptions="${tauoptions}-zepto"
fi

if [ $ktau = yes ] ; then
    fixmakeargs="$fixmakeargs KTAU ktauinc=$ktauinc ktauincuser=$ktauincuser ktaulib=$ktaulib ktausym=$ktausym"
    tauoptions="${tauoptions}-ktau"
fi

if [ $ktau_ng = yes ] ; then
    fixmakeargs="$fixmakeargs KTAU_NG"
    tauoptions="${tauoptions}-ktau-ng"
fi

if [ $ktau_merge = yes ] ; then
    fixmakeargs="$fixmakeargs KTAU_MERGE ktauinc=$ktauinc ktauincuser=$ktauincuser ktaulib=$ktaulib ktausym=$ktausym"
    tauoptions="${tauoptions}-ktau_merge"
fi

if [ $ktau_shctr = yes ] ; then
    fixmakeargs="$fixmakeargs KTAU_SHCTR ktauinc=$ktauinc ktauincuser=$ktauincuser ktaulib=$ktaulib ktausym=$ktausym"
    tauoptions="${tauoptions}-ktau_shctr"
fi

if [ $vtf = yes ] ; then
    fixmakeargs="$fixmakeargs VTF vtfdir=$vtfdir"
fi

if [ "x$unwinder" != "xnone" ] ; then
    if [ $c_compiler = gcc -o $c_compiler = icc -o $c_compiler = pgcc -o $c_compiler = mpc_icc -o $c_compiler = mpc_cc ] ; then
	unwind_extras="-Wl\,-rpath=$unwind_lib"
    fi
    if [ "x$unwinder" = "xlibunwind" ] ; then
	if [ $machine = apple ] ; then
	    unwind_lib_flag="-framework#System"
	    unwind_extras=""
	fi
	fixmakeargs="$fixmakeargs TAU_UNWIND TAU_UNWIND_LIBUNWIND unwind_flag=$unwind_flag unwind_inc=$unwind_inc unwind_lib=$unwind_lib unwind_lib_flag=$unwind_lib_flag unwind_extras=$unwind_extras"
    else
	fixmakeargs="$fixmakeargs TAU_UNWIND TAU_UNWIND_STACKWALKER unwind_flag=$unwind_flag unwind_inc=$unwind_inc unwind_lib=$unwind_lib unwind_lib_flag=$unwind_lib_flag unwind_extras=$unwind_extras"
    fi
fi

if [ $ebs2otf = yes ] ; then
    if [ -f utils/ebs2otf/ebs2otf.so ] ; then
	touch utils/ebs2otf/ebs2otf.so
    fi
    fixmakeargs="$fixmakeargs EBS2OTF "
    if [ $otf = yes ] ; then
	echo "Warning: -otf option enables TAU Tracing as a default. EBS will only work with TAU profiles. Please make sure Profiles are enabled before use."
    fi
fi

if [ $ebs_has_rt = yes ] ; then
    fixmakeargs="$fixmakeargs EBS_HAS_RT ebs_clock_res=$ebs_clock_res"
fi

if [ $pdt_cxx_compiler != default ] ; then
    # Check if they specified -pdt_c++=/usr/bin/g++ instead of just g++
    if [ "x$pdt_cxx_full_path" != "x$pdt_cxx_compiler" ] ; then
	pdt_cxx_used=$pdt_cxx_full_path
    else
	pdt_cxx_used=$pdt_cxx_compiler
    fi

    fixmakeargs="$fixmakeargs PDTCXX pdtcxx=$pdt_cxx_used"
    if [ $machine = sgi8k -o $machine = sgin32 -o $machine = sgi64 ] ; then
	if [ $pdt_cxx_compiler = CC ] ; then
	    fixmakeargs="$fixmakeargs PDTSGICC"
	fi
    fi
fi


if [ $pdt = yes ] ; then
    fixmakeargs="$fixmakeargs PDT pdtdir=$pdtdir"
    tauoptions="${tauoptions}-pdt"
    if [ "x$pdtcompdir" != "x" ] ; then
	fixmakeargs="$fixmakeargs PDTARCH pdtcompdir=$pdtcompdir"
    fi

    if [ $pdtarchdir != unknown ] ; then
	fixmakeargs="$fixmakeargs PDTARCHITECTURE pdtarchdir=$pdtarchdir"
    fi

    if [ $machine = mic_linux -a $pdtarchdir = unknown ]; then
	fixmakeargs="$fixmakeargs PDTARCHITECTURE pdtarchdir=x86_64"
    fi

    # Check if PDT has Fortran statement level information
    cat <<EOF > checkpdt.cpp
  #include <pdbAll.h>

  int IsFortranDoStatement(pdbStmt::stmt_t k)
  {
	if (k == pdbStmt::ST_FDO) return 1;
	else return 0;
  }
EOF
    if [ $machine = alpha -a $cxx_compiler = cxx ]; then
	orig_useropt="$orig_useropt -x c++ -D__USE_STD_IOSTREAM"
    fi
    if $cxx_compiler $orig_useropt -I$pdtdir/include -c checkpdt.cpp 1> /dev/null 2>&1 ; then
	echo "PDT supports Fortran Loop Level information"
    else
	echo "IMPORTANT NOTE: Your PDT does not support Fortran Loop Level information."
	echo "***************You may want to upgrade to a newer release."
	echo "See http://www.cs.uoregon.edu/research/pdt"
	fixmakeargs="$fixmakeargs PDTNOFSTMTS"
    fi
    /bin/rm -f checkpdt.o checkpdt.cpp

    # Check if PDT has UPC statement level information
    cat <<EOF > checkpdt.cpp
  #include <pdbAll.h>

  int IsUPCStmt(pdbStmt::stmt_t k)
  {
        if (k == pdbStmt::ST_UPC_FORALL) return 1;
        else return 0;
  }
EOF
    if [ $machine = alpha -a $cxx_compiler = cxx ]; then
	orig_useropt="$orig_useropt -x c++ -D__USE_STD_IOSTREAM"
    fi
    if $cxx_compiler $orig_useropt -I$pdtdir/include -c checkpdt.cpp 1> /dev/null 2>&1 ; then
	echo "PDT supports UPC information"
    else
	echo "IMPORTANT NOTE: Your PDT does not support UPC statement level information."
	echo "***************You may want to upgrade to a newer release."
	echo "See http://www.cs.uoregon.edu/research/pdt"
	fixmakeargs="$fixmakeargs PDTNOUPC"
    fi
    /bin/rm -f checkpdt.o checkpdt.cpp
fi


if [ $armci = yes ]; then
    cat <<EOF>armcitest.c
#include <stdio.h>
#include <sys/types.h>
#include "parmci.h"
#include "armci.h"

int
ARMCI_AccV (int op, void *scale, armci_giov_t * darr, int len, int proc)
{
  int rval;
  rval = PARMCI_AccV (op, scale, darr, len, proc);
  return rval;
}
EOF
    if $cxx_compiler $orig_useropt -I$armcidir/include -c armcitest.c 1> /dev/null 2>&1 ; then
	echo "ARMCI check successful"
	fixmakeargs="$fixmakeargs ARMCI armcidir=$armcidir"
    else
	echo "ARMCI check unsuccessful. Does not support PARMCI interface found in GA 5.0+."
    fi
    /bin/rm -f armcitest.c armcitest.o
fi

if [ $vampirtrace = yes ]; then
    cat <<EOF>vttest.cpp
#include "Profile/Profiler.h"
#include "Profile/TauVampirTrace.h"
int foo(void)
{
  uint64_t x;
  return 0;
}
EOF
    if $cxx_compiler $orig_useropt -Iinclude -I$vampirtracedir/include -c vttest.cpp -DTRACING_ON -DTAU_DOT_H_LESS_HEADERS 1> /dev/null 2>&1 ; then
	echo "VampirTrace check successful"
    else
	echo "Using VampirTrace options for compiling"
	fixmakeargs="$fixmakeargs VAMPIRTRACEINTS"
    fi
    /bin/rm -f vttest.cpp vttest.o
fi

build_apex()
{
if [ $apex = yes ] ; then
    cd ${START_DIR}
    if [ $boost = no -a ${architecture} = "mic_linux" ] ; then
	    echo "Error: APEX requires Boost 1.54 or newer. Please specify the Boost installation location with the -boost option."
	    exit 1;
	fi
    if [ $openmp = no -a $pthread = no ] ; then
	    echo "Error: APEX is for multithreaded runtimes. Please configure TAU with thread support (pthread or OpenMP)."
	    exit 1;
	fi
    cmake_cmd=`which cmake`
    if [ "x$cmake_cmd" = "x" ] ; then
        echo 'ERROR: cmake version 2.8 or higher required to build APEX.'
        exit 1;
    fi
	echo "NOTE: Building APEX"
	apex_include_file=apex/apex.mk
	rm -f ${apex_include_file}
	touch ${apex_include_file}
	echo "CC=${c_compiler}" >> ${apex_include_file}
    echo "CXX=${cxx_compiler}" >> ${apex_include_file}
    echo "PREFIX=${targetdir}" >> ${apex_include_file}
    echo "TAUARCH=${architecture}" >> ${apex_include_file}
    echo "TAUOPTIONS=${tauoptions}" >> ${apex_include_file}
    echo "BOOSTROOT=${boostdir}" >> ${apex_include_file}
	if [ ! "x${bfddir}" = "x" ] ; then
        echo "BFDOPT=-USE_BFD=TRUE -DBFD_ROOT=${bfddir}" >> ${apex_include_file}
	else
		if [ ${bfd_worked} = "yes" ] ; then
        	echo 'BFDOPT=-DUSE_BFD=TRUE' >> ${apex_include_file}
		fi
	fi
	if [ ${architecture} = "mic_linux" ] ; then
		echo 'TAUCFLAGS=-DCMAKE_C_FLAGS=-xMIC-AVX512' >> ${apex_include_file}
		echo 'TAUCXXFLAGS=-DCMAKE_CXX_FLAGS="-xMIC-AVX512 -DBOOST_NO_CXX11_ALLOCATOR"' >> ${apex_include_file}
	fi
	if [ ! "x${omptlib}" = "x" ] ; then
		if [ "${download_ompt}" = "yes" ] ; then
        	echo "TAUOMPT=-DUSE_OMPT=TRUE -DOMPT_ROOT=${targetdir}/${architecture}" >> ${apex_include_file}
		else
        	echo "TAUOMPT=-DUSE_OMPT=TRUE -DOMPT_ROOT=${omptlib}" >> ${apex_include_file}
		fi
		if [ "${download_ompt_tr6}" = "yes" ] ; then
        	echo "TAUOMPT=-DUSE_OMPT_TR6=TRUE -DOMPT_ROOT=${targetdir}/${architecture}" >> ${apex_include_file}
		else
        	echo "TAUOMPT=-DUSE_OMPT_TR6=TRUE -DOMPT_ROOT=${omptlib}" >> ${apex_include_file}
		fi
	fi
	cp etc/Makefile.apex apex/Makefile
    fixmakeargs="$fixmakeargs APEX "
	make -C apex clean
fi
}

if [ $java = yes ] ; then
    fixmakeargs="$fixmakeargs JAVA jdkdir=$jdkdir"
fi

if [ $openmp = yes ] ; then


    #find openmp flag
    if [ "$sol2cc" = "yes" ]; then openmp_flag=-xopenmp; fi
    if [ "$suncc" = "yes" ]; then openmp_flag=-xopenmp=parallel; fi
    if [ "$compaq" = "yes" ]; then openmp_flag=-omp; fi
    if [ "$ibmxlc" = "yes" ]; then openmp_flag=-qsmp=omp; fi
    if [ "$open64" = "yes" ]; then openmp_flag=-mp; fi
    if [ "$gnu" = "yes" ]; then openmp_flag=-fopenmp; fi
    if [ "$pgi" = "yes" ]; then openmp_flag=-mp; fi
    if [ "$fujitsu" = "yes" ]; then openmp_flag=-Kopenmp; fi
    if [ "$default_fortran" = "cray" ]; then openmp_flag=-h#omp; fi
    if [ "$intel" = "yes" ]; then openmp_flag=-openmp; fi


    #checking OMP compiler nested supported
    echo -n "Checking OMP NESTED support..."
    touch omp_nested_test.c
    cat <<EOF>omp_nested_test.c
#include <omp.h>
#include <stdio.h>
int main()
{
 omp_get_thread_num();
 omp_get_level();
 omp_get_team_size(0);
 omp_get_ancestor_thread_num(0);
}
EOF

    $c_compiler $openmp_flag $orig_useropt omp_nested_test.c -o omp_nested_test > /dev/null 2>&1
    ./omp_nested_test > /dev/null 2>&1
    result=$?
    rm -f ./omp_nested_test ./omp_nested_test.c
    if [ $result = "0" ]; then
	echo "yes."
	fixmakeargs="$fixmakeargs TAU_OPENMP_NESTED"
    else
	echo "no."
	echo "OpenMP nested regions are not supported by this compiler."
    fi
    fixmakeargs="$fixmakeargs OPENMP"
    tauoptions="${tauoptions}-openmp"
fi

if [ $opari1 = yes ] ; then
    fixmakeargs="$fixmakeargs KOJAKOPARI"
    fixmakeargs="$fixmakeargs OPARI oparidir=$oparidir"
    tauoptions="${tauoptions}-opari"
fi

if [ $opari = yes ] ; then
    fixmakeargs="$fixmakeargs OPARI2 oparidir=$oparidir"
    if [ $oparicomp = no ] ; then
	if [ "x$fortran_compiler" = "xintel" ] ; then
	    oparicomp="$fortran_compiler"
	fi
	if [ "x$fortran_compiler" = "xpathscale" ] ; then
	    oparicomp="$fortran_compiler"
	fi
	if [ "x$fortran_compiler" = "xpgi" ] ; then
	    oparicomp="$fortran_compiler"
	fi
	if [ "x$fortran_compiler" = "xgfortran" -o x$fortran_compiler" = "xgfortran-5" -o x$fortran_compiler" = "xgfortran-6" -o x$fortran_compiler" = "xgfortran-7" -o x$fortran_compiler" = "xgfortran-8" ] ; then
	    oparicomp="gcc"
	fi
    fi
    if [ $oparicomp = no ] ; then
	oparicomp=
    fi
    fixmakeargs="$fixmakeargs oparicomp=$oparicomp"
    tauoptions="${tauoptions}-opari"
fi


if [ $vampirtrace = yes ] ; then
    fixmakeargs="$fixmakeargs VAMPIRTRACE vampirtracedir=$vampirtracedir"
    tauoptions="${tauoptions}-vampirtrace"
    if [ $mpi = yes ] ; then
	if [ $openmp = yes ] ; then
	    fixmakeargs="$fixmakeargs VAMPIRTRACEOMPI"
	else
	    fixmakeargs="$fixmakeargs VAMPIRTRACEMPI"
	fi
    else
	if [ $openmp = yes ] ; then
	    fixmakeargs="$fixmakeargs VAMPIRTRACEOMP"
	fi
    fi
fi

#if [ $scorep = yes ] ; then
#    fixmakeargs="$fixmakeargs SCOREP scorepdir=$scorepdir"
#    tauoptions="${tauoptions}-scorep"
#    scorepCommonLibs="-lbfd#-liberty#-lotf2#-lscorep_utilities"
#    if [ $mpi = yes ] ; then
#      if [ $openmp = yes ] ; then
#        fixmakeargs="$fixmakeargs SCOREPOMPI"
#	scorepLibs="-L${scorepdir}/lib#-lscorep_mpi#$scorepCommonLibs"
#      else
#        fixmakeargs="$fixmakeargs SCOREPMPI"
#	scorepLibs="-L${scorepdir}/lib#-lscorep_mpi#$scorepCommonLibs"
#      fi
#    else
#      if [ $openmp = yes ] ; then
#        fixmakeargs="$fixmakeargs SCOREPOMP"
#	scorepLibs="-L${scorepdir}/lib#-lscorep_serial#$scorepCommonLibs"
#      else
#	scorepLibs="-L${scorepdir}/lib#-lscorep_serial#$scorepCommonLibs"
#      fi
#    fi

#    fixmakeargs="$fixmakeargs scorepmpilibs=$scorepLibs"
#    fixmakeargs="$fixmakeargs scoreplibs=$scorepLibs"
#    fixmakeargs="$fixmakeargs scorepincs=-I$scorepdir/include#-I$scorepdir/include/scorep"


######################################################################
# Install scorep if requested
######################################################################
tauscorep=scorep
tauscoreptgz=$tauscorep.tgz
tauscorepurl=http://tau.uoregon.edu/$tauscoreptgz
if [ "x$scorepdir" = "x" ]; then
  tauscorepdir=${targetdir}/${architecture}
else
  tauscorepdir=$scorepdir
fi
tauscorep_name=scorep

if [ "x$tauscorepdir" != "x" -a -d "$tauscorepdir" ] ; then
  if [ -r $tauscorepdir/$tauscoreptgz ]; then
    echo "NOTE: Copying $tauscorepdir/$tauscoreptgz "
    cp $tauscorepdir/$tauscoreptgz .
    download_scorep=yes
  fi
fi

if [ "x$download_scorep" = xyes ] ; then
  if [ $machine = craycnl ] ; then
    scorepdir=${tauscorepdir}/${tauscorep}-${c_compiler}-${PE_ENV}
  else
    scorepdir=${tauscorepdir}/${tauscorep}-${c_compiler}
  fi

  if [ $tag = yes ] ; then
    scorepdir=${scorepdir}-$tautag
  fi

  if [ "x$otf" != xyes ] ; then
    otf=yes
    otfdir=${scorepdir}
  fi


  prescorepdir=`pwd`

  if [ -r "$scorepdir/bin/scorep" ]; then
    echo "Found: Score-P"
    echo "Score-P download already found, skipping"
  else
    echo "Not found in ${scorepdir}: ${tauscorep}"
    # get the tar file
    if [ ! -f $tauscoreptgz ] ; then
      download "$tauscorepurl" "$tauscoreptgz"
    fi

    # check the tar file
    if [ ! -f $tauscoreptgz ] ; then
      echo "$tauscoreptgz did not download.  Please download it manually from: "
      echo "$tauscorepurl"
      echo "Please enter the directory containing the tarball: ${nnl}"
      read RESPONSE
      if [ -r $RESPONSE/$tauscoreptgz ]; then
        cp $RESPONSE/$tauscoreptgz .
      else
        echo "ERROR: Couldn't copy Score-P tarball from $RESPONSE/$tauscoreptgz"
        exit 1;
      fi
    fi
    /bin/rm -rf scorep-*;
    echo "expanding $tauscoreptgz ..."
    tar -xzf $tauscoreptgz
    echo "removing $tauscoreptgz ..."
    rm $tauscoreptgz
  # Now we build Score-P
    cd scorep-*; mkdir -p build; cd build
    tau_scorep_config_options="../configure --prefix=${scorepdir} --enable-shared --without-otf2 --without-opari2 --without-cube --without-gui ${TAU_SCOREP_CONFIGURATION_OPTIONS}"
    if [ $papi = yes ]; then
      tau_scorep_config_options="${tau_scorep_config_options} --with-papi=$papidir --with-papi-header=$papidir/include --with-papi-lib=$papidir/$papisubdir"
    fi
    if [ $pdt = yes ]; then
      tau_scorep_config_options="${tau_scorep_config_options} --with-pdt=$pdtdir/${architecture}/bin"
    fi
    if [ $mpi = no ]; then
      tau_scorep_config_options="${tau_scorep_config_options} --without-mpi"
    fi
    if [ $shmem = no ]; then
      tau_scorep_config_options="${tau_scorep_config_options} --without-shmem"
    fi
    if [ "x$bfddir" != "x" ] ; then
      tau_scorep_config_options="${tau_scorep_config_options} --with-libbfd=$bfddir"

    fi
    if [ "x$unwind_dir" != "x" ] ; then
      tau_scorep_config_options="${tau_scorep_config_options} --with-libunwind=$unwind_dir"
    fi
    # Add other non-cross compile architectures here!
    if [ $machine = x86_64 -o $machine = ibm64linux -o $machine = ibm64 ]; then
      if [ $gnu = yes ]; then
        tau_scorep_config_options="${tau_scorep_config_options} --with-nocross-compiler-suite=gcc"
      fi
      if [ $intel = yes ]; then
        tau_scorep_config_options="${tau_scorep_config_options} --with-nocross-compiler-suite=intel"
      fi
      if [ $ibmxlc = yes  -o $ibmxlc_r = yes ]; then
        tau_scorep_config_options="${tau_scorep_config_options} --with-nocross-compiler-suite=ibm"
      fi
      if [ $pgi = yes ]; then
        tau_scorep_config_options="${tau_scorep_config_options} --with-nocross-compiler-suite=pgi"
      fi
      # Add MS studio here
    fi # machine  = x86_64 or ibm64linux
    echo "Score-P will be configured using $tau_scorep_config_options"
    /bin/rm -f ./x
    echo $tau_scorep_config_options > ./x
    tauscorep_log=tauscorep_config.log
    bash x > ${tauscorep_log} 2>&1 ;
    configresult=$?
    if [ $configresult -eq 0 ] ; then
      tauscorep_log=build.log
      echo "building ${tauscorep}... (see `pwd`/${tauscorep_log} for log)..."
      make -i -j 4 > ${tauscorep_log} 2>&1 ;
      makeresult=$?
      if [ $makeresult -eq 0 ] ; then
        tauscorep_log=install.log
        echo "installing ${tauscorep} to ${scorepdir}... (see `pwd`/${tau_scorep_log} for log)..."
        make install > ${tauscorep_log} 2>&1 ;
      else
        echo "Error building ${tauscorep}... (see `pwd`/${tauscorep_log} for log)..."
      fi
    else
      echo "ERROR: Score-P configure failed. See `pwd`/${tauscorep_log} for log"
      exit 1;
    fi
  fi
  cd $prescorepdir
fi # -scorep=download


if [ $scorep = yes ] ; then
    fixmakeargs="$fixmakeargs SCOREP scorepdir=$scorepdir"
    tauoptions="${tauoptions}-scorep"
    scorep11=`${scorepdir}/bin/scorep-config --version | grep "^1.1" | wc -l`
    scorepmetadata=`nm -A ${scorepdir}/lib/*.a | grep SCOREP_Tau_AddLocationProperty | wc -l `
    if [ $scorepmetadata != 0 ]; then
      fixmakeargs="$fixmakeargs SCOREPMETADATA"
      #echo "SCOREP: Adding TAU metadata..."
    fi
    x=`${scorepdir}/bin/scorep-config --adapter-init > /dev/null 2>&1`
    if [ $? = 0 ]; then
      scorep_adapter_init=yes
      fixmakeargs="$fixmakeargs SCOREP_ADAPTER_INIT"
      scorep_adapter="--adapter-init"
      if [ $opari = yes -a "x$oparidir" = "x" ]; then
        if [ `${scorepdir}/bin/scorep-info config-summary | grep "opari2 support:" | grep internal | wc -l` = 1 ]; then
          oparidir=${scorepdir}
        else
	  oparidir=`${scorepdir}/bin/scorep-info config-summary | grep "opari2 support:" | awk '{ print $7;}' | sed -e 's/opari2-config/../g'`
        fi
	echo "NOTE: Using Opari from $oparidir"
        fixmakeargs="$fixmakeargs oparidir=$oparidir"
      fi
    else
      scorep_adapter_init=no
    fi

    if [ $mpi = yes ]; then
      scorep_adapter="$scorep_adapter --mpp=mpi"
    else
      if [ $shmem = no ]; then
        scorep_adapter="$scorep_adapter --mpp=none"
      fi
    fi

    if [ $cuda = yes ]; then
      scorep_adapter="$scorep_adapter --cuda"
    else
      scorep_adapter="$scorep_adapter --nocuda"
    fi

    scorep_supports_opencl=no
    if [ -x $scorepdir/bin/scorep-config ]; then
       retval=`$scorepdir/bin/scorep-config --noopencl &>/dev/null `
       if [ $? = 0 ]; then
         scorep_supports_opencl=yes
         echo "NOTE: Score-P's scorep-config supports --noopencl option"
       fi
    fi

    if [ $scorep_supports_opencl = yes ]; then
       if [ $use_opencl = no ] ; then
         scorep_adapter="$scorep_adapter --noopencl"
       else
         scorep_adapter="$scorep_adapter --opencl"
       fi
    fi

    scorep_supports_openacc=no
    if [ -x $scorepdir/bin/scorep-config ]; then
       retval=`$scorepdir/bin/scorep-config --noopenacc &>/dev/null `
       if [ $? = 0 ]; then
         scorep_supports_openacc=yes
         echo "NOTE: Score-P's scorep-config supports --noopenacc option"
       fi
    fi

    if [ $scorep_supports_openacc = yes ]; then
       if [ $use_openacc = no ] ; then
         scorep_adapter="$scorep_adapter --noopenacc"
       else
         scorep_adapter="$scorep_adapter --openacc"
       fi
    fi

    if [ $shmem = yes ]; then
      scorep_adapter="$scorep_adapter --mpp=shmem"
    fi

    if [ $pthread = yes ]; then
      scorep_adapter="$scorep_adapter --thread=pthread"
    fi

    if [ $openmp = yes ]; then
      if [ $opari = yes ]; then
        scorep_adapter="$scorep_adapter --thread=omp:pomp_tpd --pomp"
      else
        if [ $ompt = yes ]; then
          #scorep_adapter="$scorep_adapter --thread=omp:ompt"
          scorep_adapter="$scorep_adapter --thread=omp"
        else
          scorep_adapter="$scorep_adapter --thread=omp:ancestry"
# Should we make an explicit option to enable Score-P thread=ancestry?
# It is enabled if ompt is not specified and opari is not specified.
        fi
      fi
    fi

    scorep_adapter="$scorep_adapter --user"

    if [ $scorep_adapter_init = yes ]; then
      echo ${scorepdir}/bin/scorep-config ${scorep_adapter}
      x=`${scorepdir}/bin/scorep-config ${scorep_adapter} > src/Profile/TauScorePAdapterInit.c`
      if [ $? = 0 ]; then
        echo "NOTE: Built TauScorePAdapterInit.c with scorep-config ${scorep_adapter}"
      else
       x=`${scorepdir}/bin/scorep-config --adapter-init >  src/Profile/TauScorePAdapterInit.c `
       echo "NOTE: Using the default adapter-init code in Score-P"
      fi
    fi
    #echo "SCORE-P version is 1.1? $scorep11"
    if [ $scorep11 = 0 ] ; then
	# default flags for Score-P 1.2+
	mod_scorep_adapter=`echo ${scorep_adapter} | sed -e 's/--adapter-init//g'`
	#echo "WE HAVE mod_scorep_adapter = ${mod_scorep_adapter}"
        if [ $machine = "mic_linux" ]; then
          mod_scorep_adapter="$mod_scorep_adapter --target=mic "
        fi
	scorepLibs=`${scorepdir}/bin/scorep-config --libs ${mod_scorep_adapter} | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g' -e  's@ @#@g'`
	scorepLD=`${scorepdir}/bin/scorep-config --ldflags ${mod_scorep_adapter} | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g' -e  's@ @#@g'`
	echo "Using scorepLD=$scorepLD"
	scorepExtraLibs='-lscorep_adapter_user_event#-lscorep_adapter_user_mgmt'
    fi
    # in Score-P version 1.1+... < 1.2 we needed to explicitly specify --hyb --omp --seq --mpi to get the right flags
    if [ $mpi = yes ] ; then
	if [ $openmp = yes ] ; then
	    fixmakeargs="$fixmakeargs SCOREPOMPI"
	    if [ $scorep11 = 1 ]; then
		scorepLibs=`${scorepdir}/bin/scorep-config --hyb --libs | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
		scorepLD=`${scorepdir}/bin/scorep-config --hyb --ldflags | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
	    fi
	else
	    fixmakeargs="$fixmakeargs SCOREPMPI"
	    if [ $scorep11 = 1 ]; then
		scorepLibs=`${scorepdir}/bin/scorep-config --mpi --libs | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
		scorepLD=`${scorepdir}/bin/scorep-config --mpi --ldflags | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
	    fi
	fi
    else
	if [ $openmp = yes ] ; then
	    fixmakeargs="$fixmakeargs SCOREPOMP"
	    if [ $scorep11 = 1 ]; then
		scorepLD=`${scorepdir}/bin/scorep-config --omp --ldflags | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
		scorepLibs=`${scorepdir}/bin/scorep-config --omp --libs  | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
	    fi
	else
	    if [ $scorep11 = 1 ]; then
		scorepLibs=`${scorepdir}/bin/scorep-config --seq --libs | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
		scorepLD=`${scorepdir}/bin/scorep-config --seq --ldflags | sed -e 's@-Wl,-rpath -Wl,/@-Wl,-rpath,/@g'`
	    fi
	fi
    fi
    #scorepLibs="$scorepLD $scorepLibs $scorepExtraLibs"
    scorepLibs="$scorepExtraLibs#$scorepLD#$scorepLibs"

    fixmakeargs="$fixmakeargs scorepmpilibs=\$(TAU_LIBS)\#-L$scorepdir/lib#-Wl,-rpath,$scorepdir/lib#$scorepLibs"
    if [ $mpi = no ]; then
      fixmakeargs="$fixmakeargs scoreplibs=-L$scorepdir/lib#-Wl,-rpath,$scorepdir/lib#$scorepLibs"
    fi
    fixmakeargs="$fixmakeargs scorepincs=-I$scorepdir/include#-I$scorepdir/include/scorep"


    if [ $opari = yes ] ; then
	# We should use the Opari2 provided by Score-P instead of TAU's Opari2 which may be older in some cases.
	scorep_opari_support=`${scorepdir}/bin/scorep-info config-summary | grep -iE 'opari[2-9] support' `
	if [ `echo $scorep_opari_support | grep internal | wc -l ` = 0 ]; then
            scorep_opari_bin_dir=`echo $scorep_opari_support | sed -e 's@.*via @@g' -e 's@opari2-config@@g' `
            if [ -x $scorep_opari_bin_dir/opari2 ]; then
		echo "NOTE: Using external Opari2 from $scorep_opari for OpenMP instrumentation"
            fi
            # When Score-P 1.1.1's internal Opari2 is usable, we should move this line outside the if statement
	    # so it applies to both the clauses internal as well as external
	    fixmakeargs="$fixmakeargs scorep_opari_bin_dir=$scorep_opari_bin_dir SCOREPOPARI2"
	else
	    scorep_opari_bin_dir=${scorepdir}/bin
	    if [ -x $scorep_opari_bin_dir/opari2 -a $scorep11 = 0 ]; then
		echo "NOTE: Using Score-Ps internal Opari2 from ${scorep_opari_bin_dir}/opari2"
		fixmakeargs="$fixmakeargs scorep_opari_bin_dir=$scorep_opari_bin_dir SCOREPOPARI2"
		# If it is scorep-1.1.1, please use TAU's Opari2. The internal Opari2 from Score-P 1.1.1 crashes.
		# It is ok to use Opari2 from Score-P 1.2+.
	    fi
	fi
    fi

    if [ $phase = yes ] ; then
	echo "********scorep and phase are on"
    fi

fi



######################################################################
# Install likwid if requested
######################################################################
liblikwid=likwid-update
liblikwidtgz=$liblikwid.tgz
liblikwidurl=http://www.cs.uoregon.edu/research/tau/$liblikwidtgz

if [ "x$likwid" = "xyes" ]; then 
    if [ "x$likwiddir" = "x" ]; then
        liblikwiddir=${targetdir}/${architecture}/likwid
    else
        liblikwiddir=$likwiddir
    fi
    echo "liblikwiddir = $liblikwiddir"

    if [ "x$likwiddir" != "x" -a -d "$likwiddir" ]; then 
        if [ -r $likwiddir/$liblikwidtgz ]; then
            echo "NOTE: Copying $likwiddir/$liblikwidtgz "
            cp $likwiddir/$liblikwidtgz . 
            download_likwid=yes 
        fi    
    fi

    if [ $download_likwid = yes ]; then
        echo "Downloading likwid"
        if [ -r "$liblikwiddir/lib/liblikwid.so" ]; then 
            echo "Found: liblikwid.so"
            echo "liblikwid download already found, skipping"
        else 
            echo "Not found in ${likwiddir}: liblikwid.so"
            if [ ! -f $liblikwidtgz ]; then 
                download "$liblikwidurl" "$liblikwidtgz"
            fi

            # check the tar file
            if [ ! -f $liblikwidtgz ]; then
                echo "$liblikwidtgz did not download. Please download it manually from:"
                echo "$liblikwidurl"
                echo "Please enter the directory containing the tarball: ${nnl}"
                read RESPONSE
                cp $RESPONSE/$liblikwidtgz .
            fi
            echo "expanding $liblikwidtgz..."
            tar -zxf  $liblikwidtgz
            echo "removing $liblikwidtgz..."
            /bin/rm -f $liblikwidtgz 
            cd likwid*; make PREFIX=$liblikwiddir BUILDDAEMON=false ACCESSMODE=perf_event BUILDFREQ=false MAX_NUM_THREADS=288; make PREFIX=$liblikwiddir BUILDDAEMON=false ACCESSMODE=perf_event BUILDFREQ=false MAX_NUM_THREADS=288 install  ; cd ..

        fi
        
    fi

    if [ -r $liblikwiddir/lib/liblikwid.so ]; then
        echo "Success..."
        fixmakeargs="$fixmakeargs TAU_LIKWID likwiddir=$liblikwiddir"
        tauoptions="${tauoptions}-likwid"
    fi
fi



######################################################################
# Install libotf2 if requested
######################################################################
libotf2=otf2
libotf2_dirname=otf2-2.1
libotf2tgz=$libotf2.tgz
libotf2url=http://www.cs.uoregon.edu/research/tau/$libotf2tgz

if [ "x$otfdir" = "x" ]; then
    libotf2dir=${targetdir}/${architecture}
else
    libotf2dir=$otfdir
fi

libotf2_name=otf2
if [ "x$otfdir" != "x" -a -d "$otfdir" ] ; then
    if [ -r $otfdir/$libotf2tgz ]; then
        echo "NOTE: Copying $otfdir/$libotf2tgz "
        cp $otfdir/$libotf2tgz .
        download_otf=yes
    fi
fi


if [ "x$download_otf" = xyes ] ; then
    if [ $machine = craycnl ] ; then
        otfdir=${libotf2dir}/${libotf2}-${c_compiler}-${PE_ENV}
    else
        otfdir=${libotf2dir}/${libotf2}-${c_compiler}
    fi
    preotfdir=`pwd`


    if [ -r "$otfdir/lib/lib${libotf2_name}.so" -o \
        -r "$otfdir/lib/lib${libotf2_name}.a" -o \
        -r "$otfdir/lib/lib${libotf2_name}.dylib" -o \
        -r "$otfdir/lib64/lib${libotf2_name}.so" -o \
        -r "$otfdir/lib64/lib${libotf2_name}.a" -o \
        -r "$otfdir/lib64/lib${libotf2_name}.dylib" ] ; then
        echo "Found: lib${libotf2_name}"
        echo "libotf2 download already found, skipping"
    else
        echo "Not found in ${otfdir}: lib${libotf2_name}"
        # get the tar file
        if [ ! -f $libotf2tgz ] ; then
            download "$libotf2url" "$libotf2tgz"
        fi

        # check the tar file
        if [ ! -f $libotf2tgz ] ; then
            echo "$libotf2tgz did not download.  Please download it manually from: "
            echo "$libotf2url"
            echo "Please enter the directory containing the tarball: ${nnl}"
            read RESPONSE
            cp $RESPONSE/$libotf2tgz .
        else
            echo "expanding $libotf2tgz..."
            tar -xzf $libotf2tgz
            echo "removing $libotf2tgz..."
            rm $libotf2tgz
            if [ ${c_compiler}=mpc_cc -o ${c_compiler}=mpc_icc ]
            then
                otf2_c_compiler=gcc
                otf2_cxx_compiler=g++
            else
                otf2_c_compiler=${c_compiler}
                otf2_cxx_compiler=${cxx_compiler}
            fi

            configresult=0
            makeresult=0
            libotf2_log=configure.log
            cd $libotf2_dirname
            echo "configuring $libotf2... (see `pwd`/${libotf2_log} for log)..."
            ./configure --prefix=${otfdir} CC=${otf2_c_compiler} CXX=${otf2_cxx_compiler} > ${libotf2_log} 2>&1
            configresult=$?
            if [ $configresult -eq 0 ] ; then
                libotf2_log=build.log
                echo "building ${libotf2}... (see `pwd`/${libotf2_log} for log)..."
                make -i > $libotf2_log  2>&1
                makeresult=$?
                if [ $makeresult -eq 0 ] ; then
                    libotf2_log=install.log
                    echo "installing ${libotf2} to ${otfdir}... (see `pwd`/${libotf2_log} for log)..."
                    make -i install > $libotf2_log  2>&1
                    makeresult=$?
                fi
            fi
            if [ $configresult -eq 0 ] && [ $makeresult -eq 0 ] ; then
                # Some systems install to lib64 instead of lib
                if [ -d "$otfdir/lib64" -a ! -d "$otfdir/lib" ] ; then
                    tdir=$otfdir
                    pwddir=${PWD}
                    cd $tdir
                    ln -s lib64 lib
                    cd $pwddir
                fi
                echo "...Success."
            else
                echo "ERROR BUILDING $libotf2!"
                echo "Please check `pwd`/config.log or `pwd`/${libotf2_log}"
            fi
        fi
    fi
    cd $preotfdir
fi

if [ $otf = yes ] ; then
    if [ "$otflib" = "" ] ; then
	if [ -d $otfdir/lib ]; then
	    otflib="$otfdir/lib"
	else
	    otflib="$otfdir/${architecture}/lib"
	fi
	echo "OTF Library implicitly set to $otflib"
    fi
    if [ "$otfinc" = "" ] ; then
	if [ -r $otfdir/include/otf.h ]; then
	    otfinc="$otfdir/include"
	else
	    if [ -r $otfdir/include/open-trace-format/otf.h ]; then
		otfinc="$otfdir/include/open-trace-format"
	    fi
	fi
    if [ "$otfinc" = "" ] ; then
        if [ -r $otfdir/include/otf2/otf2.h ]; then
            otfinc="$otfdir/include"
        fi
    fi
	echo "OTF Header directory implicitly set to $otfinc"
    fi
    if [ ! -d $otflib ]
    then
	echo "Error: No available OTF support. Library not found at $otflib."
	exit 1
    fi
    if [ ! -d $otfinc ]
    then
	echo "Error: No available OTF support. Headers not found at $otfinc."
	exit 1
    fi
    if [ $ebs2otf = yes -a ! -f $otfinc/OTF_Version.h ] ; then
	echo "Error: OTF_Version.h cannot be found. EBS will not support this version of OTF."
	exit 1
	# *CWL* Need version control code here. Still trying to decide the
	#    best way about it. The above conditional will at least trim away
	#    ancient versions of OTF.
    fi

    fixmakeargs="$fixmakeargs otflib=$otflib otfinc=$otfinc"
fi

if [ $epilog = yes ] ; then

    if [ -f $epiloglibdir/libcubew3.a ] ; then
	epilogextralinkcmd="$epilogextralinkcmd#-lcubew3"
    fi

    if [ -f $epiloglibdir/libepk.util.a ] ; then
	epilogextralinkcmd="$epilogextralinkcmd#-lepk.util"
    fi
    if [ $scalasca = yes -a -f /usr/lib/libswclock.a ] ; then
	epilogextralinkcmd="$epilogextralinkcmd#-lswclock"
    fi

    if [ -f $epiloglibdir/libsz.a ] ; then
	epilogextralinkcmd="$epilogextralinkcmd#-lsz"
    fi

    if [ -f $epiloglibdir/libsc.z.a ] ; then
	epilogextralinkcmd="$epilogextralinkcmd#-lsc.z"
    fi

    fixmakeargs="$fixmakeargs EPILOG epilogdir=$epilogdir epiloglibdir=$epiloglibdir epilogbindir=$epilogbindir epilogextralinkcmd=$epilogextralinkcmd epilogincdir=$epilogincdir"
    tauoptions="${tauoptions}-epilog"
    if [ $scalasca = yes ] ; then
	tauoptions="${tauoptions}-scalasca"
    fi
    if [ $mpi = yes ] ; then
	if [ $openmp = yes ] ; then
            fixmakeargs="$fixmakeargs EPILOGOMPI"
	else
            fixmakeargs="$fixmakeargs EPILOGMPI"
	fi
    else
	if [ $openmp = yes ] ; then
            fixmakeargs="$fixmakeargs EPILOGOMP"
	fi
    fi
fi


if [ -d $otfdir/include/otf2 ]; then
    fixmakeargs="$fixmakeargs OTF2 otfdir=$otfdir"
    otfversion_11=`$otfdir/bin/otf2-config --version | grep "^1.1" | wc -l `
    if [ $otfversion_11 = 1 ]; then
      fixmakeargs="$fixmakeargs OTF2_1_1"
    fi
    otfversion_12=`$otfdir/bin/otf2-config --version | grep "^1.2" | wc -l `
    if [ $otfversion_12 = 1 ]; then
      fixmakeargs="$fixmakeargs OTF2_1_2"
    fi
else
    if [ $otf = yes ] ; then
	fixmakeargs="$fixmakeargs OTF otfdir=$otfdir"
	if [ ! -d $otfdir/${architecture} -a -d $otfdir/src ] ; then
	    fixmakeargs="$fixmakeargs OTFSRC"
	fi
	if [ -r $otfdir/lib/libopen-trace-format.a ]; then
	    fixmakeargs="$fixmakeargs OTFLIB_LONGNAME"
	fi
    fi
fi


if [ $dyninstinc = yes ] ; then
    fixmakeargs="$fixmakeargs dyninstinc=$dyninstincdir DYNINST_INC"
    #dyninstdir=$dyninstincdir/..
    dyninst=yes
fi

if [ $dyninstlib = yes ] ; then
    fixmakeargs="$fixmakeargs dyninstlib=$dyninstlibdir DYNINST_LIB"
    dyninst=yes
fi

if [ $boost = yes ] ; then
    fixmakeargs="$fixmakeargs BOOST "
    if [ "x$boostdir" != "x" -a -d $boostdir -a -d $boostdir/include ]; then
      fixmakeargs="$fixmakeargs boostinc=-I$boostdir/include"
    fi
    if [ "x$boostdir" != "x" -a -d $boostdir -a -d $boostdir/lib ]; then
      fixmakeargs="$fixmakeargs boostlib=-L$boostdir/lib#-Wl,-rpath,$boostdir/lib"
    fi
fi

if [ $sos = yes ] ; then
    tauoptions="${tauoptions}-sos"
    fixmakeargs="$fixmakeargs SOS "
    fixmakeargs="$fixmakeargs sosdir=$sosdir"
fi

if [ $adios = yes ] ; then
    tauoptions="${tauoptions}-adios"
    fixmakeargs="$fixmakeargs ADIOS "
    fixmakeargs="$fixmakeargs adiosdir=$adiosdir"
fi

#if [ $caliper = yes ] ; then
#    tauoptions="${tauoptions}-caliper"
#    fixmakeargs="$fixmakeargs CALIPER "
#    fixmakeargs="$fixmakeargs caliperdir=$caliperdir"
#fi

if [ $dyninst = yes ] ; then
    fixmakeargs="$fixmakeargs DYNINST "
    if [ "x$dyninstdir" != "x" ]; then
      fixmakeargs="$fixmakeargs dyninstdir=$dyninstdir DYNINSTDIR"
      if [ ! -d $dyninstdir/lib ] ; then
	    fixmakeargs="$fixmakeargs DYNINST41"
      fi
    fi
    if [ "x$dyninstdir" != "x" ]; then
        if [ `grep isStaticExecutable $dyninstdir/include/* | wc -l` = 0 ]; then
        fixmakeargs="$fixmakeargs DYNINST_STATIC_REWRITING_UNSUPPORTED"
        fi
    else
        if [ `grep isStaticExecutable $dyninstincdir/* | wc -l` = 0 ]; then
        fixmakeargs="$fixmakeargs DYNINST_STATIC_REWRITING_UNSUPPORTED"
        fi
    fi
    if [ ! -d $dyninstdir/src/include -o ! -d $dyninstdir/include ] ; then
	fixmakeargs="$fixmakeargs DYNINST5.2"
    fi
    if [ -r $dyninstdir/$PLATFORM/lib/libcommon.so -o -r $dyninstdir/lib/libcommon.so -o -r $dyinstlibdir/libcommon.so ] ; then
	fixmakeargs="$fixmakeargs DYNINST6"
    fi
    if [ -r $dyninstdir/$PLATFORM/lib/libparseAPI.so -o -r $dyninstdir/lib/libparseAPI.so -o $dyninstlibdir/libparseAPI.so ] ; then
	fixmakeargs="$fixmakeargs DYNINST7"
    fi
    if [ -r $dyninstdir/include/walker.h -o $dyninstincdir/walker.h ] ; then
	fixmakeargs="$fixmakeargs DYNINST8"
    fi
    if [ -r $dyninstdir/include/version.h ] ; then
	fixmakeargs="$fixmakeargs DYNINST9"
    fi
fi


if [ $dwarf = yes ] ; then
    if [ ! -r $dwarfdir/lib/libdwarf.a ] ; then
	echo "ERROR: $dwarfdir/lib/libdwarf.a not found"
    else
	fixmakeargs="$fixmakeargs dwarfopts=-L$dwarfdir/lib#-Wl\,-rpath\,$dwarfdir/lib"
    fi
fi

if [ $papi = yes ] ; then
    if [ $pthread = yes -o $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs PAPIPTHREAD"
    fi
fi

if [ $opari = yes ] ; then
    if [ [[ $pthread = yes -a $openmp = no ]] -o $smarts = yes -o $java = yes ] ; then
	echo "ERROR: -opari option requires OpenMP threads package."
	echo "*****************************************************"
	exit 1
    fi
    if [ $opari_construct = yes -a $opari_region = no ] ; then
	fixmakeargs="$fixmakeargs OPARI_CONSTRUCT"
    fi
    if [ $opari_construct = no -a $opari_region = yes ] ; then
	fixmakeargs="$fixmakeargs OPARI_REGION"
    fi
fi
if [ $opari1 = yes ] ; then
    if [ $pthread = yes -o $smarts = yes -o $java = yes ] ; then
	echo "ERROR: -opari option requires OpenMP threads package."
	echo "*****************************************************"
	exit 1
    fi
    if [ $opari_construct = yes -a $opari_region = no ] ; then
	fixmakeargs="$fixmakeargs OPARI_CONSTRUCT"
    fi
    if [ $opari_construct = no -a $opari_region = yes ] ; then
	fixmakeargs="$fixmakeargs OPARI_REGION"
    fi
fi

if [ $upc_compiler = cc -o $upc_compiler = default ]; then
    if [ $machine = craycnl -a "x$PE_ENV" = xCRAY ]; then
	fixmakeargs="$fixmakeargs CRAY_UPC"
    fi
fi

if [ $upc = yes ]; then
    # If MPI is used -mpi already appears in the name. If it is not, add it
    if [ "x$upcnetwork" != "xmpi" ]; then
	tauoptions="${tauoptions}-$upcnetwork"
    fi

    if [ "$upc_compiler" == "upcc" ] ; then
	tauoptions="${tauoptions}-bupc"
	fixmakeargs="$fixmakeargs BUPC upcnetwork=$upcnetwork"
    elif [ $upc_compiler = gcc -o $upc_compiler = upc ]; then
	tauoptions="${tauoptions}-gupc"
	fixmakeargs="$fixmakeargs GUPC upcnetwork=$upcnetwork"
    else
	# default case: probably Cray upc
	tauoptions="${tauoptions}-upc"
    fi
fi

if [ $trace = yes ] ; then
    if [ $profile = yes ] ; then
        tauoptions="${tauoptions}-profile"
    fi
    if [ $profilestats = yes ] ; then
        tauoptions="${tauoptions}-profilestats"
    fi
    tauoptions="${tauoptions}-trace"
fi

if [ $mpitrace = yes ] ;  then
    tauoptions="${tauoptions}-mpitrace"
fi

if [ $mpit = yes ] ; then
    tauoptions="${tauoptions}-mpit"
fi


if [ $kai = yes ] ; then
    tauoptions="${tauoptions}-kcc"
fi

if [ $pgi = yes ] ; then
    tauoptions="${tauoptions}-pgi"
    if [ $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs PGIOPENMP"
    fi
fi

if [ $intel = yes ] ; then
    if [ $openmp = yes ] ; then
cat <<EOF > intel_openmptest.c
#include <omp.h>
int main() {
  return omp_get_max_threads();
}
EOF
	if  $c_compiler intel_openmptest.c -qopenmp -o intel_openmptest 1> /dev/null 2>&1 ; then
	  fixmakeargs="$fixmakeargs INTELOPENMP"
        else
	  if $c_compiler intel_openmptest.c -fopenmp -o intel_openmptest 1> /dev/null 2>&1 ;  then
	    fixmakeargs="$fixmakeargs INTEL_FOPENMP"
	  else
	    echo "Warning: INTEL : Neither -qopenmp nor -fopenmp options work. Going with the older -fopenmp option for now."
	    fixmakeargs="$fixmakeargs INTEL_FOPENMP"
          fi
        fi
	/bin/rm -f intel_openmptest.c intel_openmptest

    fi
fi


if [ $gnu = yes ] ; then
    if [ $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs GNUOPENMP"
    fi
fi



if [ "x$fortran_compiler" = "xintel" ] ; then
    intelifort=`which ifort 2>/dev/null`
    if [ "y$intelifort" != "y" ] ; then
	if [ -x $intelifort ]
	then
	    echo "Using Intel ifort as the Fortran Compiler"
	    fixmakeargs="$fixmakeargs INTELIFORT"
	fi
    fi
fi


# CHECK if Intel 8.0 compilers are available.
if [ $cxx_compiler = icpc -o $cxx_compiler = mpiicpc ] ; then
    echo "Checking version (8.0/8.1+) of Intel compilers"
    # Intel compilers changed from -cxxlib-icc to -cxxlib-gcc (default) in 8.1
    cat << EOF > f1.cpp
#include <iostream>
using namespace std;

extern "C" {
  void foo(int *x) {
    cout << "x = "<<*x<<endl;
  }
}
EOF

    cat << EOF > f2.c
int foo();
int main(int argc, char **argv) {
  return foo();
}
EOF

    $cxx_compiler -c f1.cpp
    icc -c f2.c
    if icc f1.o f2.o -o foo.exe -lcprts 1>/dev/null 2>&1 ; then
        echo "Intel v8.0 compilers used"
    else
        $cxx_compiler -c -cxxlib-icc f1.cpp 1>/dev/null 2>&1
        $cxx_compiler -c f1.cpp
        tau_opt_bits=
        if [ `uname -m` = x86_64 -a $machine = i386_linux ]; then
            # if someone is using the 32-bit intel compilers on an x86_64
            # then we need to use -m32 with g++ to get the 32-bit libstdc++
            tau_opt_bits=-m32
            fixmakeargs="$fixmakeargs INTEL32_ON_64"
        fi
        taugcclibdir=`g++ $tau_opt_bits -print-libgcc-file-name | sed -e 's,[^/]*$,,'`
        taugcclib=`g++ $tau_opt_bits -print-libgcc-file-name `
        taugcclib2dir=`which g++ | sed s/g++/../`
        if icc f1.o f2.o -o foo.exe -L$taugcclib2dir/lib -L$taugcclibdir -lstdc++ $taugcclib 1>/dev/null 2>&1 ; then
	    #          echo "Confirmed  - links with gcc libs"
            echo "Intel v8.1+ compilers used"
            if [ "x$taugcclib2dir" != "x/usr/bin/../lib" ] ; then
		if [ "x$machine" = "xx86_64" ] ; then
		    tauextralibopts="taugcclibopts=-L$taugcclib2dir/lib64"
		else
		      tauextralibopts="taugcclibopts=-L$taugcclib2dir/lib"
		fi
		# Here a different version of gcc is used (other than the one installed in /usr/bin)
            fi
            fixmakeargs="$fixmakeargs $tauextralibopts taugcclibdir=$taugcclibdir INTEL81FIX"
        fi
    fi
    /bin/rm -f f1.o f2.o f1.cpp f2.c foo.exe
    # Check over!
fi


if [ $cxx_compiler = icpc -o $cxx_compiler = mpiicpc ] ; then
    echo "Checking version (10.0+) of Intel compilers"
    version=`icpc -v 2>&1`
    t="Version 1"
    t1="icpc version 1"
    t2="icpc.orig version 1"
    testarg=${version#$t}
    testarg1=${version#$t1}
    testarg2=${version#$t2}


    if [ "y$testarg" != "y$version" -o "y$testarg1" != "y$version" -o "y$testarg2" != "y$version" ] ; then
        echo "Intel v10.0+ compilers found"
        fixmakeargs="$fixmakeargs INTEL10FIX COMPINST_GNU"
    else
	echo "Intel v10.0+ compilers NOT found"
    fi

    var=`which ifort | sed 's/\/bin\/ifort$//'`
    libdir="$var/lib"
    if [ ! -d "$var" ] ; then
	var=`which ifort | sed 's/\/bin\/intel64\/ifort$//'`
	libdir="$var/lib/intel64"
    fi
    if [ ! -d "$var" ] ; then
	var=`which ifort | sed 's/\/bin\/ia32\/ifort$//'`
	libdir="$var/lib/ia32"
    fi
    if [ ! -d "$var" ] ; then
	var=`which ifort | sed 's/\/bin\/ia64\/ifort$//'`
	libdir="$var/lib/ia64"
    fi
    if [ ! -d "$var" ] ; then
	echo "Error: Unable to identify ifort lib directory"
    fi
    if   [ -f "$libdir/for_main.o" ] ; then
       echo "Found $libdir/for_main.o"
    elif [ -f "$libdir/intel64/for_main.o" ] ; then
        libdir="$libdir/intel64"
       echo "Found $libdir/for_main.o"
    elif [ -f "$var/compiler/lib/mic/for_main.o" -a $machine = mic_linux ] ; then
        libdir="$var/compiler/lib/mic"
        echo "Found $libdir/for_main.o"
    elif [ -f "$var/compiler/lib/intel64/for_main.o" -a $machine = x86_64 ] ; then
        libdir="$var/compiler/lib/intel64"
       echo "Found $libdir/for_main.o"
    elif [ -f "$libdir/ia32/for_main.o" ] ; then
        libdir="$libdir/ia32"
    elif [ -f "$libdir/ia64/for_main.o" ] ; then
        libdir="$libdir/ia64"
    fi

    fixmakeargs="$fixmakeargs ifortlibdir=$libdir"
fi

if [ $cxx_compiler = icpc -o $cxx_compiler = mpiicpc ] ; then
    echo "Checking version (12.x) of Intel compilers"
    version=`icpc -v 2>&1`
    t="Version 12"
    t1="icpc version 12"
    testarg=${version#$t}
    testarg1=${version#$t1}

    if [ "y$testarg" != "y$version" -o "y$testarg1" != "y$version" ] ; then
        echo "Intel v12.x compilers found"
        fixmakeargs="$fixmakeargs INTEL12FIX"
    else
	echo "Intel v12.x compilers NOT found"
    fi
fi

if [ $ibmxlc = yes ] ; then
    if [ $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs IBMXLC_OPENMP"
    fi
fi

if [ $machine = hitachi ] ; then
    if [ $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs HITACHI_OPENMP"
    fi
fi

if [ $cxx_compiler = cxx ] ; then
    compaq=yes
    if [ $openmp = yes ] ; then
	fixmakeargs="$fixmakeargs COMPAQCXX_OPENMP"
    fi
    if [ $pthread = yes ] ; then
	fixmakeargs="$fixmakeargs COMPAQCXX_PTHREAD"
    fi
fi


if [ $fujitsu = yes ] ; then
    tauoptions="${tauoptions}-fujitsu"
fi


if [ $epilog = yes -o $vampirtrace = yes ] ; then
    if [ $forceshared = no -a $sicortex = no ] ; then
 	disableshared=yes
    fi
fi

if [ $disableshared = yes ] ; then
    fixmakeargs="$fixmakeargs NOSHARED"
fi

if [ $disable_memory_manager = yes ] ; then
    fixmakeargs="$fixmakeargs DISABLE_MEM_MANAGER"
fi

if [ $pmi = yes ] ; then
    fixmakeargs="$fixmakeargs CRAYCNL_PMI"
fi

if [ $disableshared = yes -a $python = yes ] ; then
    echo "ERROR: Shared libraries are disabled, but Python is specified"
    exit 1
fi

if [ $noex = yes ] ; then
    tauoptions="${tauoptions}-noex"
    if [ $kai = yes ] ; then
        fixmakeargs="$fixmakeargs KAINOEX"
    else
	# OTHER COMPILERS NO EXCEPTIONS... SGICC needs this
        fixmakeargs="$fixmakeargs SGICCNOEX"
    fi
fi

# Disable plugins on Apple because rdynamic flag has no effect on OS X 
# Removed. We use -dynamiclib and it works
#case "$machine" in
#    apple)
#     echo plugins="no"
#    ;;
#esac

if [ $machine = apple ]; then
    if [ -e /System/Library/PrivateFrameworks/CoreSymbolication.framework/CoreSymbolication ]; then
# Let us test if this works with the current compiler.
cat <<EOF > tau_apple_symbol.cpp
#include "CoreSymbolication.h"
EOF
        echo "Checking for Apple CoreSymbolication... ${nnl}"
        if $cxx_compiler -c tau_apple_symbol.cpp -Iinclude/Profile 1> /dev/null 2>&1 ; then
          echo "yes"
          fixmakeargs="$fixmakeargs CORESYMBOLICATION"
        else 
          echo "no"
        fi
        /bin/rm -f tau_apple_symbol.o 
    fi
fi

if [ $plugins = no ] ; then
    fixmakeargs="$fixmakeargs NOPLUGINS"
fi


if [ $hpctoolkit = yes ] ; then
    tauoptions="${tauoptions}-hpctoolkit"


    # check to make sure it is the patched version
    if [ ! -r $hpctoolkit_src_dir/README.TAU ] ; then
	echo "Didn't find patched HPCToolkit source in $hpctoolkit_src_dir"
	exit 1
    fi

    hpctoolkit_include="-I${hpctoolkit_src_dir}/src/tool/hpcrun/unwind/common"
    hpctoolkit_link="-L${hpctoolkit_install_dir}/lib/hpctoolkit#-lcsprof"

    fixmakeargs="$fixmakeargs HPCTOOLKIT hpctoolkit_include=${hpctoolkit_include} hpctoolkit_link=${hpctoolkit_link}"
fi

# TAUmon MPI
if [ $mon_mpi = yes ] ; then
    if [ $mrnet = yes ] ; then
	echo "ERROR: MRNet and MPI cannot simultaneously be used as TAUmon transport"
	exit 1
    fi
    if [ $mpi = yes ] ; then
	fixmakeargs="$fixmakeargs MON_MPI"
    else
	echo "ERROR: MPI TAUmon transport requires MPI support"
	exit 1
    fi
fi

# TAUmon MRNet
if [ $mrnet = yes ] ; then
    if [ $mon_mpi = yes ] ; then
	echo "ERROR: MRNet and MPI cannot simultaneously be used as TAUmon transport"
	exit 1
    fi
    if [ $mpi = yes ] ; then
	fixmakeargs="$fixmakeargs MRNET"
	if [ $mrnet_use_lightweight = yes ] ; then
	    fixmakeargs="$fixmakeargs mrnet_lw=-DMRNET_LIGHTWEIGHT"
	fi
	fixmakeargs="$fixmakeargs mrnet_root=${mrnet_root}"
	fixmakeargs="$fixmakeargs mrnet_inc=-I${mrnet_root}/include#-I${mrnet_root}/xplat/include#-I${mrnet_root}/lightweight/include"
	fixmakeargs="$fixmakeargs mrnet_lib=-L${mrnet_lib}#-lmrnet#-lxplat#-lmrnet_lightweight#-lxplat_lightweight#-ldl#-lm"
    else
	echo "ERROR: MRNet TAUmon transport requires MPI support"
	exit 1
    fi
fi

case "$machine" in
ia64|x86_64|i386_linux|bgp|bgq|mips|mips32|ibm64linux|ppc64)
    enable_export_dynamic="yes"
    ;;
apple)
    # Detect if -rdynamic is supported. gcc 4.6 does not support this.
    echo "Checking if -rdynamic is supported... ${nnl}"
    echo "int main(void) { return 0; }" > rdynamic_test.c
    if $c_compiler $orig_useropt rdynamic_test.c -rdynamic >/dev/null 2>&1 ; then
        echo "yes, passing -rdynamic to linker"
        extra_linker_args="${extralinker_args}#-rdynamic"
    else
        echo "no"
    fi
    rm -f rdynamic_test.c
    ;;
esac

if [ "$enable_export_dynamic" = "yes" -a "$pin" = "no" ] ; then
    extra_linker_args="${extralinker_args}#-Wl,--export-dynamic"
fi

if [ $cxx_compiler = x86_64-w64-mingw32-g++ ]; then
    extra_linker_args="${extralinker_args}#-Wl,--export-all-symbols,--enable-auto-image-base"
fi

fixmakeargs="$fixmakeargs extra_linker_args=$extra_linker_args"




#### END OF TAU OPTIONS. Make changes above this line
fixmakeargs="$fixmakeargs tauoptions=$tauoptions"


if [ $use_ansic = yes ] ; then
    fixmakeargs="$fixmakeargs ANSIC"
fi


if [ $sicortex = yes ] ; then
    fixmakeargs="$fixmakeargs SICORTEX extrashlibopts=${sicortexlink}"
fi


#selection of cube reader, external installation or provided .jar file
select_cube_reader_jar
correction_perfdmf_and_paraprof


echo "***********************************************************************"
echo "Installing utilities..."

configure_java

if [ ${tauprefix} = unknown ] ; then
    targetdir=${tauroot}
else
    targetdir=${tauprefix}
    if [ ! -d ${tauprefix} ] ; then
	echo "making directory $tauprefix "
	mkdir -p ${tauprefix}
	cp README LICENSE CREDITS ${tauprefix}
    fi
    if [ ! -d ${tauprefix}/${architecture} ] ; then
	echo "making directory $tauprefix/$architecture lib bin"
	mkdir ${tauprefix}/${architecture}
	mkdir ${tauprefix}/${architecture}/lib
	mkdir ${tauprefix}/${architecture}/bin
    else
	if [ "x$architecture" = "x" ] ; then
	    echo "making directory $tauprefix lib bin"
	    if [ ! -d ${tauprefix}/bin ] ; then
		mkdir ${tauprefix}/bin
	    fi
	    if [ ! -d ${tauprefix}/lib ] ; then
		mkdir ${tauprefix}/lib
	    fi
	fi
    fi
fi


BINTARGET=${targetdir}/${architecture}/bin
JARTARGET=${targetdir}/${architecture}/lib


# Install tau_compiler.sh
if [ ! -f /bin/bash ] ; then
    bashpath=`which bash`
    if [ ! -f $bashpath ] ; then
	echo "ERROR: You need a working bash shell in your path to use tau_compiler.sh"
	echo "Please add bash to your path and re-run configure."
	echo "**************************************************"
    else
	cat ${tauroot}/tools/src/tau_compiler.sh | sed -e 's#/bin/bash#'$bashpath'#'  > $BINTARGET/tau_compiler.sh
    fi
else
    cp ${tauroot}/tools/src/tau_compiler.sh $BINTARGET
fi

cp ${tauroot}/tools/src/tau_treemerge.pl $BINTARGET
cp ${tauroot}/tools/src/tau_coalesce $BINTARGET
cp ${tauroot}/tools/src/tau_javamax.sh $BINTARGET
cp ${tauroot}/tools/src/tau_header_replace.pl $BINTARGET
cp ${tauroot}/tools/src/tau_exec $BINTARGET
cp ${tauroot}/tools/src/tauex $BINTARGET
cp ${tauroot}/tools/src/taucc $BINTARGET
cp ${tauroot}/tools/src/taucxx $BINTARGET
cp ${tauroot}/tools/src/tauupc $BINTARGET
cp ${tauroot}/tools/src/taucaf $BINTARGET
cp ${tauroot}/tools/src/tauf90 $BINTARGET
cp ${tauroot}/tools/src/tauex.multiple $BINTARGET
cp ${tauroot}/tools/src/tau_cxx.sh $BINTARGET
cp ${tauroot}/tools/src/tau_cc.sh $BINTARGET
cp ${tauroot}/tools/src/tau_show_libs $BINTARGET
cp ${tauroot}/tools/src/tau_rewrite $BINTARGET
cp ${tauroot}/tools/src/tau_pebil_rewrite $BINTARGET
cp ${tauroot}/tools/src/tau_f90.sh $BINTARGET
cp ${tauroot}/tools/src/tau_f77.sh $BINTARGET
cp ${tauroot}/tools/src/tau_upc.sh $BINTARGET
cp ${tauroot}/tools/src/tau_caf.sh $BINTARGET
cp ${tauroot}/tools/src/tau_prof2json.py $BINTARGET
cp ${tauroot}/tools/src/contrib/tcollect10.ini $BINTARGET
# tau_exec works differently when it's named "tau_python"
cp ${tauroot}/tools/src/tau_exec $BINTARGET/tau_python
cp ${tauroot}/tools/src/tau_spark_python $BINTARGET/tau_spark_python
cp ${tauroot}/tools/src/tau_spark-submit $BINTARGET/tau_spark-submit
cp ${tauroot}/tools/src/tau_spark-submit $BINTARGET/tau_pyspark

if [ $pdtarchdir != unknown ]
then
    pdtarchcompdir=${pdtarchdir}/${pdtcompdir}
else
    pdtarchcompdir=${architecture}
fi
#copy over tau_header_inst.sh
if [ $pdt = yes ] ; then
    if [ $opari1 = yes ] ; then
	cat ${tauroot}/tools/src/tau_header_inst_opari1.sh | sed -e 's,@TAUROOTDIR@,'$targetdir',' -e 's,@ARCH@,'$architecture',' \
	    -e 's,@PDTROOTDIR@,'$pdtdir',' -e 's,@PDTARCH@, '$pdtarch',' > ${targetdir}/${architecture}/bin/tau_header_inst.sh
	chmod a+rx ${targetdir}/${architecture}/bin/tau_header_inst.sh
    fi
    if [ $opari = yes ] ; then
	cat ${tauroot}/tools/src/tau_header_inst.sh | sed -e 's,@TAUROOTDIR@,'$targetdir',' -e 's,@ARCH@,'$architecture',' \
	    -e 's,@PDTROOTDIR@,'$pdtdir',' -e 's,@PDTARCH@, '$pdtarch',' > ${targetdir}/${architecture}/bin/tau_header_inst.sh
	chmod a+rx ${targetdir}/${architecture}/bin/tau_header_inst.sh
    fi
    if [ -x ${pdtdir}/${pdtarchcompdir}/bin/smaqao ]
    then
	echo "TAU: PDT: Using binary rewriting capabilities from MAQAO in tau_rewrite"
	rm -f ${targetdir}/${architecture}/bin/tau_maqao
	ln -s ${pdtdir}/${pdtarchcompdir}/bin/smaqao ${targetdir}/${architecture}/bin/tau_maqao
	if [ -r ${pdtdir}/${pdtarchcompdir}/bin/tau_rewrite -a ${pdtdir}/${pdtarchcompdir}/bin/tau_rewrite -nt ${tauroot}/tools/src/tau_rewrite ]; then
	    # if Maqao has a newer tau_rewrite, use that instead!
	    echo "NOTE: Found a newer tau_rewrite in PDT. Using it instead."
	    cp ${pdtdir}/${pdtarchcompdir}/bin/tau_rewrite  $BINTARGET
	fi
    fi
    if [ -x ${pdtdir}/${pdtarchcompdir}/bin/pebil.static ]
    then
	echo "TAU: PDT: Using binary rewriting capabilities from PEBIL in tau_pebil_rewrite"
	rm -f ${targetdir}/${architecture}/bin/pebil.static
	ln -s ${pdtdir}/${pdtarchcompdir}/bin/pebil.static ${targetdir}/${architecture}/bin/pebil.static
    fi
fi

# Copy over tau_load.sh
if [ $mpi = yes ] ; then
    cat ${tauroot}/tools/src/tau_load.sh | sed -e 's,@TAUROOTDIR@,'$targetdir',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/tau_load.sh
    chmod a+rx ${targetdir}/${architecture}/bin/tau_load.sh
fi

if [ $ibmmpi = yes ] ; then
    cat ${tauroot}/tools/src/tau_poe | sed -e 's,@TAUROOTDIR@,'$targetdir',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/tau_poe
    chmod a+rx ${targetdir}/${architecture}/bin/tau_poe
fi

cp ${tauroot}/tools/src/jtau_tf/bin/TAU_tf.jar ${targetdir}/${architecture}/lib

cp ${tauroot}/tools/src/tau_multimerge/bin/tau_multimerge.jar ${targetdir}/${architecture}/lib

cat ${tauroot}/tools/src/contrib/slog2sdk/bin/jumpshot.skel | sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/jumpshot
chmod a+rx ${targetdir}/${architecture}/bin/jumpshot

cat ${tauroot}/tools/src/contrib/slog2sdk/bin/slog2print.skel |
sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/slog2print
chmod a+rx ${targetdir}/${architecture}/bin/slog2print

cat ${tauroot}/tools/src/tau2slog2/bin/tau2slog2.skel |
sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/tau2slog2
chmod a+rx ${targetdir}/${architecture}/bin/tau2slog2

cat ${tauroot}/tools/src/tau_multimerge/bin/tau_multimerge.skel |
sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' > ${targetdir}/${architecture}/bin/tau_multimerge
chmod a+rx ${targetdir}/${architecture}/bin/tau_multimerge

cp ${tauroot}/tools/src/contrib/slog2sdk/lib/jumpshot.jar ${targetdir}/${architecture}/lib
cp ${tauroot}/tools/src/contrib/slog2sdk/lib/traceTOslog2.jar ${targetdir}/${architecture}/lib
cp ${tauroot}/tools/src/contrib/slog2sdk/lib/slog2printserial.jar ${targetdir}/${architecture}/lib
cp ${tauroot}/tools/src/tau2slog2/bin/tau2slog2.jar ${targetdir}/${architecture}/lib



cat ${tauroot}/tools/src/tau-config.in |
sed -e 's,@TAUROOTDIR@,'$targetdir',' -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
    > ${targetdir}/${architecture}/bin/tau-config
chmod a+rx ${targetdir}/${architecture}/bin/tau-config

cp ${tauroot}/tools/src/tauinc.pl ${targetdir}/${architecture}/bin
chmod a+rx  ${targetdir}/${architecture}/bin/tauinc.pl

configure_perfexplorer

cat ${tauroot}/tools/src/TauIL/bin/tau_analyze.skel |
sed -e 's,@TAUROOTDIR@,'$targetdir','  -e 's,@SHELL@,'$taushell',' -e 's,@ARCH@,'$architecture',' \
    > ${targetdir}/${architecture}/bin/tau_analyze
chmod a+rx ${targetdir}/${architecture}/bin/tau_analyze

cat ${tauroot}/tools/src/TauIL/Makefile.inc.skel |
sed -e 's,@TAUROOTDIR@,'$tauroot',' \
    > ${tauroot}/tools/src/TauIL/Makefile.inc

cp ${tauroot}/tools/src/TauIL/bin/*.jar ${targetdir}/${architecture}/lib
cp ${tauroot}/tools/src/tau_throttle.sh ${targetdir}/${architecture}/bin

echo "... done"
echo "***********************************************************************"

# Install the Shared object library for LLVM-OMPT
if [ $ompt = yes -a $install_ompt = yes -a -r ${libomp_ossdir_shared}/lib${libomp_oss_name}.so -a -d ${targetdir}/${architecture}/lib ]; then
  if [ $machine = bgq -o $machine = bgp -o $machine = bgl ] ; then
    echo "BGQ ompt"
  else
    echo "TAU: Copying lib${libomp_oss_name}.so to ${targetdir}/${architecture}/lib/shared${tauoptions} ..."
    ompt_instdir=${targetdir}/${architecture}/lib
    # We also need to put the OpenMP runtime in the tauoptions directory, otherwise tau_exec doesn't find it when the application is not compiled using the TAU wrapper
    ompt_instdir_=${targetdir}/${architecture}/lib/shared${tauoptions}
    mkdir -p ${ompt_instdir}
    mkdir -p ${ompt_instdir_}
    cp ${libomp_ossdir_shared}/lib${libomp_oss_name}.so ${ompt_instdir}/lib${libomp_oss_name}.so ;
    cp ${libomp_ossdir_shared}/libomp.so ${ompt_instdir}/libomp.so ;

    # Copy the OpenMP runtime in the tauoptions directory as well
    cp ${libomp_ossdir_shared}/lib${libomp_oss_name}.so ${ompt_instdir_}/lib${libomp_oss_name}.so ;
    cp ${libomp_ossdir_shared}/libomp.so ${ompt_instdir_}/libomp.so ;

    echo "ompt_dir=$ompt_dir"
    omptlinking="-Wl,-rpath=${ompt_instdir}#-L${ompt_instdir}#$omptlibrary"
    if [ "x$download_ompt_tr6" = "xyes" ] ; then 
      fixmakeargs="$fixmakeargs TAU_OMPT_TR6 omptlib=$omptlinking"
    else
      fixmakeargs="$fixmakeargs TAU_OMPT omptlib=$omptlinking"
    fi 
    # also put them in the "disable" directory for later builds - but only do it once
    
    if [ "x$download_ompt_tr6" = "xyes" ] ; then
       ompt_instdir=${targetdir}/${architecture}/lib/shared-disable-tr6
    else
       ompt_instdir=${targetdir}/${architecture}/lib/shared-disable
    fi

    if [ ! ${libomp_ossdir_shared} = ${ompt_instdir} ] ; then
        mkdir -p ${ompt_instdir}
        cp ${libomp_ossdir_shared}/libomp.so ${ompt_instdir}/libomp.so ;
        cp ${libomp_ossdir_shared}/libgomp.so ${ompt_instdir}/libgomp.so ;
        cp ${libomp_ossdir_shared}/libiomp5.so ${ompt_instdir}/libiomp5.so ;
    fi
	# apex also needs the headers...
	mkdir -p ${targetdir}/${architecture}/include
    cp ${START_DIR}/include/omp*.h ${targetdir}/${architecture}/include
  fi
fi

# Install the Static object library for LLVM-OMPT
if [ $ompt = yes -a $install_ompt = yes -a -r ${libomp_ossdir_static}/lib${libomp_oss_name}.a -a -d ${targetdir}/${architecture}/lib ]; then
  if [ $machine = bgq -o $machine = bgp -o $machine = bgl ] ; then
    echo "BGQ ompt"
  else
    echo "TAU: Copying lib${libomp_oss_name}.a to ${targetdir}/${architecture}/lib/static${tauoptions} ..."
    ompt_instdir=${targetdir}/${architecture}/lib/static${tauoptions}
    mkdir -p ${ompt_instdir}
    cp ${libomp_ossdir_static}/lib${libomp_oss_name}.a ${ompt_instdir}/lib${libomp_oss_name}.a ;
    cp ${libomp_ossdir_static}/libomp.a ${ompt_instdir}/libomp.a ;
    echo "ompt_dir=$ompt_dir"

    # also put them in the "disable" directory for later builds - but only do it once
    if [ "x$download_ompt_tr6" = "xyes" ] ; then
      ompt_instdir=${targetdir}/${architecture}/lib/static-disable-tr6
    else 
      ompt_instdir=${targetdir}/${architecture}/lib/static-disable
    fi

    if [ ! ${libomp_ossdir_static} = ${ompt_instdir} ] ; then
        mkdir -p ${ompt_instdir}
        cp ${libomp_ossdir_static}/libomp.a ${ompt_instdir}/libomp.a ;
        cp ${libomp_ossdir_static}/libgomp.a ${ompt_instdir}/libgomp.a ;
        cp ${libomp_ossdir_static}/libiomp5.a ${ompt_instdir}/libiomp5.a ;
    fi
	# apex also needs the headers...
	mkdir -p ${targetdir}/${architecture}/include
    cp ${START_DIR}/include/omp*.h ${targetdir}/${architecture}/include
  fi
fi

# doing this now, so that tauoptions is defined.
build_apex

# Save the FixMakefile args
# Clear any old data
grep "^#" ./utils/FixMakefile.info > ./utils/FixMakefile.info~~0
/bin/mv ./utils/FixMakefile.info~~0 ./utils/FixMakefile.info
echo $fixmakeargs >> ./utils/FixMakefile.info

# Now FINALLY FixMakefile with the string I have built
utils/FixMakefile $fixmakeargs
retval=$?
if [ $retval -ne 0 ] ; then
  echo "ERROR: One or more TAU components could not be configured. Please check above for error messages"
  exit $retval
fi

# Use default setups, forget everything else (PHB)
if [ $machine = default ] ; then
    /bin/cp ./utils/FixMakefile.sed.default  ./utils/FixMakefile.sed
    /bin/cp ./utils/FixMakefile.info.default ./utils/FixMakefile.info
fi

sedout="./utils/FixMakefile.sed"
echo "Applying script to Makefile, please wait, this may take a while..."
# Change back to $START_DIR (defined at the top) to ensure we are in the tau2 directory
# before we execute this fairly dangerous 'find' command
cd $START_DIR
sed -f $sedout < Makefile.skel > Makefile
sed -f $sedout < include/Makefile.skel > include/Makefile
sed -f $sedout < src/Profile/Makefile.skel > src/Profile/Makefile
sed -f $sedout < src/TraceInput/Makefile.skel > src/TraceInput/Makefile
sed -f $sedout < src/wrappers/Makefile.skel > src/wrappers/Makefile
sed -f $sedout < utils/include/Makefile.skel > utils/include/Makefile

if [ $armci = yes ]; then
  sed -f $sedout < src/wrappers/armci/Makefile.skel > src/wrappers/armci/Makefile
fi


#############################################################################

echo " "
echo "***********************************************************************"
echo "Configuring TAU Build scripts..."


# Modify the Makefiles so include/Makefile is replaced by the TAU options
# for specific examples
#echo "s@include \(.*\)TAUROOTDIR\(.*\)@include $\(TAUROOTDIR\)/$architecture/lib/Makefile.tau$tauoptions@g" > utils/sedexamples.out
#echo "s@include/Makefile@$machine/lib/Makefile.tau$tauoptions@g" >utils/sedexamples.out
sedex="./utils/sedexamples.out"
echo "" > $sedex
echo "Modifying Makefiles in the examples subdirectory..."

# Prefix start from examples directory
pr=examples
exampleslist="instrument/Makefile mapping/embedded/Makefile \
  mapping/external/Makefile fork/Makefile selectiveAccess/Makefile"

if [ "x$fortran_compiler" != "xno" ] ; then
    exampleslist="$exampleslist fortran/Makefile f90/Makefile"
    echo "s@.*TAU_MAKEFILE_FORTRAN=\(.*\)@TAU_MAKEFILE_FORTRAN=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
fi

if [ $mpi = yes ] ; then
    echo "s@.*TAU_MAKEFILE_MPI=\(.*\)@TAU_MAKEFILE_MPI=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    if [ "$fortran_compiler" != "no" ] ; then
	echo "s@.*TAU_MAKEFILE_MPI_FORTRAN=\(.*\)@TAU_MAKEFILE_MPI_FORTRAN=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
    if [ $pdt = yes ] ; then
	echo "s@.*TAU_MAKEFILE_MPI_OPENMP=\(.*\)@TAU_MAKEFILE_MPI_OPENMP=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
fi

if [ $opari1 = yes -o $opari = yes ] ; then
    echo "s@.*TAU_MAKEFILE_OPARI=\(.*\)@TAU_MAKEFILE_OPARI=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex

fi

if [ $pthread = yes ] ; then
    echo "s@.*TAU_MAKEFILE_PTHREAD=\(.*\)@TAU_MAKEFILE_PTHREAD=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex

fi

if [ $papi = yes ] ; then
    echo "s@.*TAU_MAKEFILE_PAPI=\(.*\)@TAU_MAKEFILE_PAPI=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    if [ $pthread = yes ] ; then
	echo "s@.*TAU_MAKEFILE_PAPI_PTHREAD=\(.*\)@TAU_MAKEFILE_PAPI_PTHREAD=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi

fi

if [ $sproc = yes ] ; then
    echo "s@.*TAU_MAKEFILE_SPROC=\(.*\)@TAU_MAKEFILE_SPROC=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex

fi


if [ $pdt = yes ] ; then
    echo "s@.*TAU_MAKEFILE_PDT=\(.*\)@TAU_MAKEFILE_PDT=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex

    if [ $mpi = yes ] ; then
	echo "s@.*TAU_MAKEFILE_PDT_MPI=\(.*\)@TAU_MAKEFILE_PDT_MPI=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
    if [ $pthread = yes ] ; then
	echo "s@.*TAU_MAKEFILE_PDT_PTHREAD=\(.*\)@TAU_MAKEFILE_PDT_PTHREAD=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
    if [ $openmp = yes ] ; then
	echo "s@.*TAU_MAKEFILE_PDT_OPENMP=\(.*\)@TAU_MAKEFILE_PDT_OPENMP=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
    if [ $opari1 = yes -o $opari = yes ] ; then
	echo "s@.*TAU_MAKEFILE_PDT_OPARI=\(.*\)@TAU_MAKEFILE_PDT_OPARI=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
    if [ "$fortran_compiler" != "no" ] ; then
	echo "s@.*TAU_MAKEFILE_PDT_FORTRAN=\(.*\)@TAU_MAKEFILE_PDT_FORTRAN=$\(TAUROOT\)/$architecture/lib/Makefile.tau$tauoptions@" >> $sedex
    fi
fi

echo "Setting enduring example Makefiles."
sed  -f $sedex examples/Makefile.skel > examples/Makefile



# Modify the Makefiles only if prefix is not specified.
if [ $tauprefix = unknown ] ; then
    cp include/Makefile $machine/lib/Makefile.tau$tauoptions
fi

# If it is default, restore to original state
if [ "y$1"  = "ydefault" ] ; then
    #delete files created by configure
    rm -f Makefile
    rm -f include/Makefile
    rm -f src/Profile/Makefile
    rm -f src/TraceInput/Makefile
    rm -f src/wrappers/Makefile
    rm -f utils/include/Makefile
    rm -f examples/Makefile
    rm -f utils/FixMakefile.info
    rm -f include/TAU.h
    rm -f include/tauarch.h
    rm -f include/tau_config.h
    rm -f include/tauroot.h

    STUB="default"
else
    STUB="$tautoplevel/$architecture/lib/Makefile.tau$tauoptions"
fi

if [ $default = false ] ; then
    # replace TAU_MAKEFILE in TAU.h
    cat ./include/TAU.h.default | sed -e "s;^#define TAU_MAKEFILE.*\$;#define TAU_MAKEFILE \"$STUB\";" > include/TAU.h
fi

if [ $tauprefix != unknown ] ; then
    echo "TAU: Copying include directory to ${tauprefix}"
    cp -r include ${tauprefix}
    echo "TAU: Copying man directory to ${tauprefix}"
    cp -r man ${tauprefix}
fi

if [ $default = false ] ; then
    rm -f .active_stub
fi

if [ $default = false ] ; then
    #    echo "configured with:"
    #    echo ""
    #    echo "$modargs"
    #    echo ""

    if [ "$STUB" != "$testlaststu" ] ; then

	echo "$STUB" >> .active_stubs

    fi
    echo "$STUB" > .active_stub
fi

if [ $perf = yes ] ; then
    cp include/Makefile $tautoplevel/$architecture/lib/Makefile.tau$tauoptions
fi

if [ $tauprefix != unknown ] ; then
    echo "TAU: Copying examples directory to ${tauprefix}"
    cp -r examples ${tauprefix}
    cp .all_configs .last_config .active_stubs .active_stub ${tauprefix}
fi



# bye bye
echo
echo "Configuration complete!"
if [ $tauprefix != unknown ] ; then
    echo "   Please add " $tauprefix/$architecture/bin " to your path"
else
    echo "   Please add " $tauroot/$architecture/bin " to your path"
fi
echo '   Type "make install" to begin compilation'

if [ -d /usr/linux-k1om-*  -a $machine = x86_64 ]
then
   echo "NOTE: This system supports Intel MIC (KNC). You may configure with -arch=mic_linux for the older KNC to enable this option."
fi

if [ "x$PE_ENV" != "x" -a $machine = x86_64 ]
then
   echo "NOTE: This system supports the Cray CNL platform. You may configure with -arch=craycnl to enable this option."
fi


exit 0
