#!/bin/sh
#
# $Id: mkfcphyspkgs.sh 213 2008-04-09 22:57:41Z cary $
#
# For building all external packages that facets depends on

# Store top directory
TOPDIR=$PWD

# The following variables should be set by a configure system
if test -z "$FCPREFIX"; then
  FCPREFIX=$HOME/software
fi
FCPREFIXDIR=`basename $FCPREFIX`
# echo FCPREFIXDIR = $FCPREFIXDIR

# Whether to build MPI if not found
if test "$BUILDMPI" = yes; then
  echo Will build MPI if not found.
fi

if test -z "$JNI_INCDIR"; then
# Put all possible paths here
  JAVAINCPATH="/usr/java/jdk1.6.0_04/include /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Headers"
  for i in $JAVAINCPATH; do
    if test -f $i/jni.h; then
      JNI_INCDIR=$i
      break
    fi
  done
fi
if test -n "$JNI_INCDIR"; then
  JNI_INC="JNI_INCLUDES=$JNI_INCDIR"
fi
echo JNI_INC = $JNI_INC

# Exit on failure
exitonfailure() {
  if test $1 != 0; then
    if test -n "$2"; then
      echo $2
      exit
    fi
    BUILD_FAILURES="$BUILD_FAILURES $3"
  fi
}

# Some versions
MPIPKG=openmpi-1.2.5
BABEL_VERSION=1.2.1-r6316
FORTHON_VERSION=0.7.8
HDF5_VERSION=1.6.5
NETCDF_VERSION=3.6.2
NUMPY_VERSION=1.0.3.1	# 1.0.4 does not work.  It messes with distutils.
			# 1.0.3 fails on Tiger
PACT_VERSION=2.1.0a
# PETSC_VERSION=uedge-Feb15-2008
PETSC_VERSION=uedge-Mar26-2008
PYPDB_VERSION=2b
PYTABLES_VERSION=2.0.2
TXBASE_VERSION=2.4.0

# Build Babel
buildBabel() {
  if test ! -f babel-${BABEL_VERSION}-${FCPREFIXDIR}-built -o babel-${BABEL_VERSION}-${FCPREFIXDIR}-built -ot babel-${BABEL_VERSION}.tar.gz; then
    cd $TOPDIR
    echo Building Babel.
    tar xzf babel-${BABEL_VERSION}.tar.gz
    cd babel-${BABEL_VERSION}
#    cmd="./configure --prefix=$FCPREFIX/babel-${BABEL_VERSION} --with-chasm=$FCPREFIX/chasm --enable-fortran90 $JNI_INC FC=gfortran"
    cmd="./configure --prefix=$FCPREFIX/babel-${BABEL_VERSION} --with-chasm=$FCPREFIX/chasm --enable-fortran90 --disable-java FC=gfortran"
    echo $cmd
    $cmd
    exitonfailure $? "Babel failed to configure.  Please check logs in $TOPDIR/babel-${BABEL_VERSION}."
    make 2>&1 | tee make.out
    exitonfailure $? "Babel failed to build.  Please check logs in $TOPDIR/babel-${BABEL_VERSION}."
    make $FCINSTALLOPT install 2>&1 | tee install.out
    rm -f $FCPREFIX/babel
    ln -s $FCPREFIX/babel-${BABEL_VERSION} $FCPREFIX/babel
    cd $TOPDIR
    touch babel-${BABEL_VERSION}-${FCPREFIXDIR}-built
  fi
  echo Babel installed in $FCPREFIX.
}

# Flags on os
case `uname` in

  Darwin)
    RPATH_FLAG=-L
    LTRPATH_FLAG=-L
    PYRPATH_FLAG=--lflags=-Wl,-L,
    FCINSTALLOPT="INSTALL=/usr/bin/install"
    ;;

  Linux)
    RPATH_FLAG=-Wl,--rpath,
    LTRPATH_FLAG=-Wl,-rpath,
    PYRPATH_FLAG=--lflags=-Wl,-rpath,
    ;;

esac

# Check gfortran version
if test -z "$FC"; then
  FC=gfortran
fi
unset FC_LDOPTS
case $FC in
  gfortran | /*/gfortran)
    vertmp=`$FC --version | sed -e 's/^GNU Fortran (GCC)//'`
    gfortranversion=`echo $vertmp | sed 's/ .*//'`
    case "$gfortranversion" in
      4.3.* | 4.4.*)
        echo gfortran is of sufficiently high version. Proceeding.
        case `uname` in
          Darwin)
            GFLIB=`gfortran --print-file-name libgfortran.3.dylib`
            echo GFLIB = $GFLIB
            GFLIBDIR=`dirname $GFLIB`
            GFLIBDIR=`readlink -f $GFLIBDIR`
            FC_LDOPTS="DYLD_LIBRARY_PATH=$GFLIBDIR:$DYLD_LIBRARY_PATH"
            ;;
          Linux)
            GFLIB=`gfortran --print-file-name libgfortran.so.3`
            GFLIBDIR=`dirname $GFLIB`
            GFLIBDIR=`readlink -f $GFLIBDIR`
            FC_LDOPTS="LD_LIBRARY_PATH=$GFLIBDIR:$LD_LIBRARY_PATH"
            ;;
        esac
        ;;
      *)
        echo gfortran not of sufficiently high version.
        echo Install per README-gfortran or set FC to set compiler.
        exit
      ;;
    esac
    ;;
  *)
    ;;
esac
echo FC_LDOPTS = "$FC_LDOPTS"

# Try to determine mpi
if test -z "$MPICC"; then
  MPICC=`which mpicc`
fi
if test -n "$MPICC"; then
  isopenmpi=`mpicc -show | grep open-rte`
else
  echo MPICC unknown.  Parallel packages will not be built unles BUILDMPI = yes.
  echo Set MPICC to build parallel packages.
fi

# Create bin path
mkdir -p $FCPREFIX/bin

# Build openmpi
if test -z "$MPICC" -o "$BUILDMPI" == yes; then
    if test ! -f ${MPIPKG}-${FCPREFIXDIR}-built -o ${MPIPKG}-${FCPREFIXDIR}-built -ot ${MPIPKG}.tar.bz2; then
      echo Building openmpi.
      tar xjf ${MPIPKG}.tar.bz2
      mkdir -p ${MPIPKG}/build
      cd ${MPIPKG}/build
  # Executables must know the shared library locations
  # Avoid the shared library problems.
      cmd="../configure --prefix=$FCPREFIX/${MPIPKG} --disable-shared --enable-static $FC_LDOPTS"
      echo $cmd
      $cmd
      exitonfailure $? "openmpi failed to configure. Please check logs in $TOPDIR/${MPIPKG}/build."
      make clean all
      exitonfailure $? "openmpi failed to build. Please check logs in $TOPDIR/${MPIPKG}/build."
      make install
      rm -f $FCPREFIX/openmpi $FCPREFIX/mpi
      ln -s $FCPREFIX/${MPIPKG} $FCPREFIX/openmpi
      ln -s $FCPREFIX/openmpi $FCPREFIX/mpi
  # We do not link $FCPREFIX/mpi/bin/* to $FCPREFIX/bin so that one
  # does not automatically use the new mpi, in case there is a system mpi
      cd $TOPDIR
      touch ${MPIPKG}-${FCPREFIXDIR}-built
      MPIDIR=$FCPREFIX/mpi
    fi
    echo Adding $FCPREFIX/mpi/bin to your path for this build.
    echo You will need to add this in your startup script.
    # Add to path
    pathhasmpi=`echo $PATH | grep $FCPREFIX/mpi/bin`
    if test -z "$pathhasmpi"; then
      dotfirst=`echo $PATH | grep ^\.`
      if test -n "$dotfirst"; then
        newpath=`echo $PATH | sed "s?:?:$FCPREFIX/mpi/bin:?"`
        PATH=$newpath
      else
        PATH=$FCPREFIX/mpi/bin:$PATH
      fi
    fi
    MPICC=$FCPREFIX/mpi/bin/mpicc
    echo OpenMPI installed in $FCPREFIX.
else
  MPIPKG=sysmpi
fi

# Find directories for OpenMPI
if test -n "$MPICC"; then
  tmpdir=`dirname $MPICC`
  tmpbase=`basename $MPICC`
# Do readlink to get directory, but not to change exec basename
  FCMPIDIR=`readlink -f $tmpdir`
  FCMPICC=$FCMPIDIR/$tmpbase
  FCMPIDIR=`dirname $FCMPIDIR`
fi

# Set library paths in case a system build with shared
echo FCMPICC = $FCMPICC
echo FCMPIDIR = $FCMPIDIR
LD_LIBRARY_PATH=$FCMPIDIR/lib:$LD_LIBRARY_PATH
echo LD_LIBRARY_PATH = $LD_LIBRARY_PATH
DYLD_LIBRARY_PATH=$FCMPIDIR/lib:$DYLD_LIBRARY_PATH
echo DYLD_LIBRARY_PATH = $DYLD_LIBRARY_PATH
sleep 1

# Build txbase
if test ! -f txbase-${TXBASE_VERSION}-${FCPREFIXDIR}-built -o txbase-${TXBASE_VERSION}-${FCPREFIXDIR}-built -ot txbase-${TXBASE_VERSION}.tar.gz; then
  echo Building txbase.
  cd $TOPDIR
  tar xzf txbase-${TXBASE_VERSION}.tar.gz
  mkdir -p txbase-${TXBASE_VERSION}/build
  cd txbase-${TXBASE_VERSION}/build
# Executables must know the shared library locations
  if test ! -d ${FCPREFIX}/txbase-${TXBASE_VERSION}/lib; then
    mkdir -p ${FCPREFIX}/txbase-${TXBASE_VERSION}/lib
  fi
  cmd="../configure --prefix=$FCPREFIX/txbase-${TXBASE_VERSION} LDFLAGS=${LTRPATH_FLAG}${FCPREFIX}/txbase-${TXBASE_VERSION}/lib"
  echo $cmd
  $cmd
  exitonfailure $? "txbase failed to configure.  Please check logs in $TOPDIR/txbase-${TXBASE_VERSION}/serial."
  make clean all 2>&1 | tee make.out
  exitonfailure $? "txbase failed to build.  Please check logs in $TOPDIR/txbase-${TXBASE_VERSION}/serial."
  make install 2>&1 | tee install.out
  rm -f $FCPREFIX/txbase
  ln -s $FCPREFIX/txbase-${TXBASE_VERSION} $FCPREFIX/txbase
# Finished
  cd $TOPDIR
  touch txbase-${TXBASE_VERSION}-${FCPREFIXDIR}-built
fi
echo Serial TXBASE installed in $FCPREFIX.
sleep 1

# Build serial HDF5
if test ! -f hdf5-${HDF5_VERSION}-${FCPREFIXDIR}-built -o hdf5-${HDF5_VERSION}-${FCPREFIXDIR}-built -ot hdf5-${HDF5_VERSION}.tar.gz; then
  echo Building serial HDF5.
  cd $TOPDIR
  tar xzf hdf5-${HDF5_VERSION}.tar.gz
  mkdir -p hdf5-${HDF5_VERSION}/serial
  cd hdf5-${HDF5_VERSION}/serial
# Executables must know the shared library locations
  if test ! -d ${FCPREFIX}/hdf5-${HDF5_VERSION}/lib; then
    mkdir -p ${FCPREFIX}/hdf5-${HDF5_VERSION}/lib
  fi
  cmd="../configure --prefix=$FCPREFIX/hdf5-${HDF5_VERSION} --enable-stream-vfd --enable-cxx CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=${LTRPATH_FLAG}${FCPREFIX}/hdf5-${HDF5_VERSION}/lib"
  echo $cmd
  $cmd
  exitonfailure $? "hdf5 failed to configure.  Please check logs in $TOPDIR/hdf5-${HDF5_VERSION}/serial."
  make clean all 2>&1 | tee make.out
  exitonfailure $? "hdf5 failed to build.  Please check logs in $TOPDIR/hdf5-${HDF5_VERSION}/serial."
  make install 2>&1 | tee install.out
  rm -f $FCPREFIX/hdf5
  ln -s $FCPREFIX/hdf5-${HDF5_VERSION} $FCPREFIX/hdf5
  (cd $FCPREFIX/bin; ln -sfh ../hdf5/bin/* .)
  cd $TOPDIR
  touch hdf5-${HDF5_VERSION}-${FCPREFIXDIR}-built
fi
echo Serial HDF5 installed in $FCPREFIX.
sleep 1

# Build parallel HDF5
if test -n "$FCMPICC"; then
  if test ! -f hdf5mpi-${HDF5_VERSION}-${FCPREFIXDIR}-built -o hdf5mpi-${HDF5_VERSION}-${FCPREFIXDIR}-built -ot hdf5-${HDF5_VERSION}.tar.gz; then
    echo Building parallel HDF5
    mkdir -p $TOPDIR/hdf5-${HDF5_VERSION}/parallel
    cd $TOPDIR/hdf5-${HDF5_VERSION}/parallel
    cmd="../configure --prefix=$FCPREFIX/hdf5-${HDF5_VERSION}-${MPIPKG} --enable-parallel --enable-stream-vfd --disable-shared --enable-static CC=$FCMPICC"
    echo $cmd
    $cmd
    exitonfailure $? "hdf5mpi failed to configure.  Pls check logs in $TOPDIR/hdf5-${HDF5_VERSION}/parallel"
    make 2>&1 | tee make.out
    exitonfailure $? "hdf5 failed to build.  Please check logs in $TOPDIR/hdf5-${HDF5_VERSION}/parallel."
    make install 2>&1 | tee install.out
    rm -f $FCPREFIX/hdf5mpi $FCPREFIX/hdf5-openmpi
    ln -s $FCPREFIX/hdf5-${HDF5_VERSION}-${MPIPKG} $FCPREFIX/hdf5mpi
    # ln -s $FCPREFIX/hdf5-openmpi $FCPREFIX/hdf5mpi
    cd $TOPDIR
    touch hdf5mpi-${HDF5_VERSION}-${FCPREFIXDIR}-built
  fi
fi
echo Parallel HDF5 installed in $FCPREFIX.
sleep 1

# Build serial NetCDF
if test ! -f netcdf-${NETCDF_VERSION}-${FCPREFIXDIR}-built -o netcdf-${NETCDF_VERSION}-${FCPREFIXDIR}-built -ot netcdf-${NETCDF_VERSION}.tar.gz; then
  echo Building NetCDF.
  cd $TOPDIR
  tar xzf netcdf-${NETCDF_VERSION}.tgz
  cd netcdf-${NETCDF_VERSION}
  ##
  ## Note: as of March 14 2008 netcdf will not build out of the box with gcc4.3. Need:
  ## 1) add #include <cstring> to cxx/ncvalues.cpp
  cat cxx/ncvalues.cpp | perl -ne "s/#include\s+\<string\>\s*\n/#include <string>\n#include <cstring>\n/;print" > cxx/ncvalues.cpp_patched; mv cxx/ncvalues.cpp_patched cxx/ncvalues.cpp
  ## 2) pretend compiler is Pgi
  cmd="./configure --prefix=$FCPREFIX/netcdf-${NETCDF_VERSION} CFLAGS=-fPIC CXXFLAGS=-fPIC --disable-shared --enable-static CPPFLAGS=-DpgiFortran FC=gfortran F77=gfortran"
  echo $cmd
  $cmd
  exitonfailure $? "netcdf failed to configure.  Please check logs in $TOPDIR/netcdf-${NETCDF_VERSION}."
  make clean all 2>&1 | tee make.out
  exitonfailure $? "netcdf failed to build.  Please check logs in $TOPDIR/netcdf-${NETCDF_VERSION}."
  make install 2>&1 | tee install.out
  rm -f $FCPREFIX/netcdf
  ln -s $FCPREFIX/netcdf-${NETCDF_VERSION} $FCPREFIX/netcdf
  (cd $FCPREFIX/bin; ln -sfh ../netcdf/bin/* .)
  cd $TOPDIR
  touch netcdf-${NETCDF_VERSION}-${FCPREFIXDIR}-built
fi
echo Serial NetCDF installed in $FCPREFIX.
sleep 1

# Set umask for python installations
umask 002

# Build numpy
if test ! -f numpy-${NUMPY_VERSION}-${FCPREFIXDIR}-built -o numpy-${NUMPY_VERSION}-${FCPREFIXDIR}-built -ot numpy-${NUMPY_VERSION}.tar.gz; then
  cd $TOPDIR
  echo Building numpy.
  tar xzf numpy-${NUMPY_VERSION}.tar.gz
  cd numpy-${NUMPY_VERSION}
  cmd="python setup.py install --prefix=$FCPREFIX"
  # Franklin: env LAPACK=/opt/acml/4.0.1a/gnu64/lib/libacml.a BLAS=/opt/acml/4.0.1a/gnu64/lib/libacml.a python setup.py LDFLAGS=-Wl,-rpath,/opt/acml/4.0.1a/gnu64/lib install --prefix=/project/projectdirs/vorpal/cary/franklin
  echo $cmd
  $cmd 2>&1 | tee install.out
  exitonfailure $? "numpy failed to build.  Please check logs in $TOPDIR/numpy-${NUMPY_VERSION}."
  cd $TOPDIR
  touch numpy-${NUMPY_VERSION}-${FCPREFIXDIR}-built
fi
echo numpy installed in $FCPREFIX.
sleep 1

# Fixing PYTHONPATH
PY_VERSION=`python -c "import sys; print sys.version[:3]"`
PYTHON_LIBDIR="python"$PY_VERSION
if test -d $FCPREFIX/lib/$PYTHON_LIBDIR/site-packages; then
  PYADDPATH=$FCPREFIX/lib/$PYTHON_LIBDIR/site-packages
elif test -d $FCPREFIX/lib64/$PYTHON_LIBDIR/site-packages; then
  PYADDPATH=$FCPREFIX/lib64/$PYTHON_LIBDIR/site-packages
fi
if test -z "$PYADDPATH"; then
  echo Location of python library installation unknown.  Bailing out.
  exit
fi
echo Adding $PYADDPATH to your PYTHONPATH for this build.
echo You will need to add this in your startup script.
hasnumpy=`echo $PYTHONPATH | grep $PYADDPATH`
if test -z "$hasnumpy"; then
  export PYTHONPATH=$PYADDPATH:$PYTHONPATH
fi
echo PYTHONPATH = $PYTHONPATH

# Build Forthon
if test ! -f Forthon-$FORTHON_VERSION-${FCPREFIXDIR}-built -o Forthon-$FORTHON_VERSION-${FCPREFIXDIR}-built -ot Forthon-$FORTHON_VERSION.tgz; then
  cd $TOPDIR
  echo Building Forthon.
  tar xzf Forthon-$FORTHON_VERSION.tgz
  cd Forthon-$FORTHON_VERSION
  cmd="python setup.py install --prefix=$FCPREFIX"
  echo $cmd
  $cmd 2>&1 | tee install.out
  exitonfailure $? "Forthon failed to build.  Please check logs in $TOPDIR/Forthon-$FORTHON_VERSION."
  cd $TOPDIR
  touch Forthon-$FORTHON_VERSION-${FCPREFIXDIR}-built
fi
echo Forthon installed in $FCPREFIX.
sleep 1

# Build pytables
if test ! -f pytables-${PYTABLES_VERSION}-${FCPREFIXDIR}-built -o pytables-${PYTABLES_VERSION}-${FCPREFIXDIR}-built -ot pytables-${PYTABLES_VERSION}.tar.gz; then
  cd $TOPDIR
  echo Building pytables.
  tar xzf pytables-${PYTABLES_VERSION}.tar.gz
  cd pytables-${PYTABLES_VERSION}
  cmd="python setup.py install --hdf5=$FCPREFIX/hdf5 --prefix=$FCPREFIX ${PYRPATH_FLAG}$FCPREFIX/hdf5/lib"
  echo $cmd
  $cmd 2>&1 | tee install.out
  exitonfailure $? "pytables failed to build.  Please check logs in $TOPDIR/pytables-${PYTABLES_VERSION}."
  cd $TOPDIR
  touch pytables-${PYTABLES_VERSION}-${FCPREFIXDIR}-built
fi
echo pytables installed in $FCPREFIX.
sleep 1

# Test for gfortran
GFORTRAN_LIB=`gfortran -print-file-name=libgfortran.so`
if test -n "$GFORTRAN_LIB"; then
  GFORTRAN_LIBDIR=`dirname $GFORTRAN_LIB`
  LD_LIBRARY_PATH=$GFORTRAN_LIBDIR:$LD_LIBRARY_PATH
else
  echo gfortran not found.  Will not build petsc.
fi

# Build serial PETSc
if test ! -f petsc-${PETSC_VERSION}-${FCPREFIXDIR}-built -o petsc-${PETSC_VERSION}-${FCPREFIXDIR}-built -ot petsc-${PETSC_VERSION}.tar.gz; then
  echo Building serial PETSc.
  tar xzf petsc-${PETSC_VERSION}.tar.gz
  rm -rf petsc-${PETSC_VERSION}-ser
  mv petsc-${PETSC_VERSION} petsc-${PETSC_VERSION}-ser
  cd petsc-${PETSC_VERSION}-ser
  export PETSC_DIR=$PWD
  cmd="config/configure.py --with-fc=gfortran --with-shared=0 --with-static=1 --with-mpi=0 --prefix=$FCPREFIX/petsc-${PETSC_VERSION} --with-default-arch=1 --with-debugging=0 --COPTFLAGS='-O2 -g' --with-x=0 --download-superlu"
# Franklin: config/configure.py --with-fc=gfortran --with-shared=0 --with-static=1 --with-mpi=0 --prefix=/project/projectdirs/vorpal/cary/franklin/petsc-uedge-Mar26-2008 --with-default-arch=1 --with-debugging=0 --COPTFLAGS='-O2 -g' --with-x=0 --download-superlu --with-blas-lib=/opt/xt-libsci/10.2.0/gnu/cnos64/lib/libsci.a --with-lapack-lib=/opt/xt-libsci/10.2.0/gnu/cnos64/lib/libsci.a
  echo $cmd
  $cmd
  exitonfailure $? "PETSc failed to configure. Please check logs in $TOPDIR/petsc-${PETSC_VERSION}-ser."
  export PETSC_ARCH=`(cd bmake; \ls) | grep 'opt$'`
  make 2>&1 | tee make.out
  exitonfailure $? "PETSc failed to build. Please check logs in $TOPDIR/petsc-${PETSC_VERSION}-ser."
  make install 2>&1 | tee install.out
  rm -f $FCPREFIX/petsc
  ln -s $FCPREFIX/petsc-${PETSC_VERSION} $FCPREFIX/petsc
  cd $TOPDIR
  touch petsc-${PETSC_VERSION}-${FCPREFIXDIR}-built
fi
echo Serial PETSc installed in $FCPREFIX.
sleep 1

# Build parallel PETSc
if test -n "$FCMPICC"; then
  if test ! -f petscmpi-${PETSC_VERSION}-${FCPREFIXDIR}-built -o petscmpi-${PETSC_VERSION}-${FCPREFIXDIR}-built -ot petsc-${PETSC_VERSION}.tar.gz; then
    echo Building parallel PETSc
    tar xzf petsc-${PETSC_VERSION}.tar.gz
    rm -rf petsc-${PETSC_VERSION}-par
    mv petsc-${PETSC_VERSION} petsc-${PETSC_VERSION}-par
    cd petsc-${PETSC_VERSION}-par
    export PETSC_DIR=$PWD
    cmd="config/configure.py --with-mpi-dir=$FCMPIDIR --with-shared=0 --with-static=1 --prefix=$FCPREFIX/petsc-${PETSC_VERSION}-${MPIPKG} --with-default-arch=1 --with-debugging=0 --COPTFLAGS=\"-O2 -g\" --with-x=0 --download-hypre"
    echo $cmd
    echo
    $cmd
    exitonfailure $? "PETSc failed to configure. Please check logs in $TOPDIR/petsc-${PETSC_VERSION}-par."
    export PETSC_ARCH=`(cd bmake; \ls) | grep 'opt$'`
    make 2>&1 | tee make.out
    exitonfailure $? "PETSc failed to build. Please check logs in $TOPDIR/petsc-${PETSC_VERSION}-par."
    make install 2>&1 | tee install.out
    rm -f $FCPREFIX/petscmpi $FCPREFIX/petsc-openmpi
    ln -s $FCPREFIX/petsc-${PETSC_VERSION}-${MPIPKG} $FCPREFIX/petscmpi
    cd $TOPDIR
    touch petscmpi-${PETSC_VERSION}-${FCPREFIXDIR}-built
  fi
fi
echo Parallel PETSc installed in $FCPREFIX.
sleep 1

# Build Chasm
if test ! -f chasm_1.4.RC3-${FCPREFIXDIR}-built -o chasm_1.4.RC3-${FCPREFIXDIR}-built -ot chasm_1.4.RC3.tar.gz; then
  cd $TOPDIR
  echo Building Chasm.
  rm -rf chasm_1.4.RC3
  tar xzf chasm_1.4.RC3.tar.gz
  mv chasm chasm_1.4.RC3
  cd chasm_1.4.RC3
  cmd="./configure --prefix=$FCPREFIX/chasm_1.4.RC3 --with-F90-vendor=GNU --with-F90=gfortran CFLAGS=-fPIC"
  echo $cmd
  $cmd
  exitonfailure $? "Chasm failed to configure.  Please check logs in $TOPDIR/chasm_1.4.RC3."
  make 2>&1 | tee make.out
  exitonfailure $? "Chasm failed to build.  Please check logs in $TOPDIR/chasm_1.4.RC3."
  make $FCINSTALLOPT install 2>&1 | tee installout
  rm -f $FCPREFIX/chasm
  ln -s $FCPREFIX/chasm_1.4.RC3 $FCPREFIX/chasm
  cd $TOPDIR
  touch chasm_1.4.RC3-${FCPREFIXDIR}-built
fi
echo Chasm installed in $FCPREFIX.
sleep 1

buildBabel

# Build pact
pacterror=0
if test ! -f pact-${PACT_VERSION}-${FCPREFIXDIR}-built -o pact-${PACT_VERSION}-${FCPREFIXDIR}-built -ot pact-${PACT_VERSION}.tar.gz; then
  echo Building pact
  tar xzf pact-${PACT_VERSION}.tar.gz
  mkdir -p pact-${PACT_VERSION}/build
  cd pact-${PACT_VERSION}/build
# Executables must know the shared library locations
  cmd='../configure --prefix='$FCPREFIX/pact-${PACT_VERSION}' CPPFLAGS=-fPIC FFLAGS=-fPIC'
  echo $cmd
  $cmd
  pacterror=$?
  exitonfailure $pacterror "" "pact failed to configure.  Please check logs in $TOPDIR/pact-${PACT_VERSION}/build."
  if test $pacterror = 0; then
    make 2>&1 | tee make.out
    pacterror=$?
    exitonfailure $pacterror "" "pact failed to build.  Please check logs in $TOPDIR/pact-${PACT_VERSION}/build."
    make install 2>&1 | tee install.out
    echo Pact installed in $FCPREFIX.
    rm -f $FCPREFIX/pact
    ln -s $FCPREFIX/pact-${PACT_VERSION} $FCPREFIX/pact
    cd $TOPDIR
    touch pact-${PACT_VERSION}-${FCPREFIXDIR}-built
  fi
fi
sleep 1

# Build PyPDB
if test $pacterror = 0; then
  if test ! -f PyPDB-$PYPDB_VERSION-${FCPREFIXDIR}-built -o PyPDB-$PYPDB_VERSION-${FCPREFIXDIR}-built -ot PyPDB-$PYPDB_VERSION.tar.gz; then
    cd $TOPDIR
    echo Building PyPDB.
    tar xzf PyPDB-$PYPDB_VERSION.tar.gz
    cd PyPDB-$PYPDB_VERSION
    cmd='python setup.py install --prefix='$FCPREFIX' --with-pact-dir='$FCPREFIX/pact-${PACT_VERSION}
    echo $cmd
    $cmd 2>&1 | tee install.out
    exitonfailure $? "" "PyPDB"
    echo PyPDB installed in $FCPREFIX.
    cd $TOPDIR
    touch PyPDB-$PYPDB_VERSION-${FCPREFIXDIR}-built
  fi
fi
sleep 1

# This just to document the builds of pdtoolkit and tau
if test -n ""; then

# Documentation of build of pdtoolkit
  cd $TOPDIR
  echo Building pdtoolkit.
  tar xzf pdtoolkit-3.12.tgz
  cd pdtoolkit-3.12
  ./configure -prefix=$FCPREFIX/pdtoolkit-3.1.2
  make
  make install
  rm $FCPREFIX/pdtoolkit
  ln -s $FCPREFIX/pdtoolkit-3.1.2 $FCPREFIX/pdtoolkit

# Installation of vtf3
  tar xvf vtf3-1.43.tar.gz -C $FCPREFIX

# Documentation of build of tau.  Must have 2.17.1.
  cd $TOPDIR
  echo Building tau.
  tar xzf tau-2.17.1.tar.gz
  cd tau-2.17.1
# need to determine actual location of mpi
  ./installtau -prefix=$FCPREFIX/tau-2.17.1 -pdt=$FCPREFIX/pdtoolkit -mpi -mpiinc=/usr/local/mpi/include -mpilib=/usr/local/mpi/lib

fi

# Fix perms
chmod -R a+r $FCPREFIX/{include,lib,lib64} 2>/dev/null

# Report failures
if test -n "$BUILD_FAILURES"; then
  echo $BUILD_FAILURES failed to build.
fi

# Summary

echo --------------------------------------
echo
echo You MUST add $PYADDPATH to your PYTHONPATH!
if test -n "$FCMPICC" -a "$BUILDMPI" = yes; then
  echo You MUST add $FCPREFIX/mpi/bin to your PATH!
  echo You MAY have to add $FCMPIDIR/lib to your LD_LIBRARY_PATH
fi
echo You MUST add $FCPREFIX/bin to your PATH!
echo
echo --------------------------------------

