#! /bin/csh -f

#====================================
# If the cice binary is passed as an argument and the file exists,
# copy it into the run directory and don't build the model.

set ciceexe = "UnDEFineD"
if ($#argv == 1) then
  set ciceexe = $1
  echo "${0}: ciceexe = ${ciceexe}"
  if (-e ${ciceexe}) then

    source ./cice.settings
    source ${ICE_CASEDIR}/env.${ICE_MACHCOMP} -nomodules || exit 2
    if !(-d ${ICE_RUNDIR}) mkdir -p ${ICE_RUNDIR}
    cp -p ${ciceexe} ${ICE_RUNDIR}/cice

    echo "`date` ${0}:${ICE_CASENAME} build copied ${ciceexe}"  >> ${ICE_CASEDIR}/README.case
    if ( ${ICE_TEST} != ${ICE_SPVAL} ) then
      echo "#---" >! ${ICE_CASEDIR}/test_output
      echo "COPY ${ICE_TESTNAME} build" >> ${ICE_CASEDIR}/test_output
      echo "PEND ${ICE_TESTNAME} run" >> ${ICE_CASEDIR}/test_output
    endif

    exit 0

  endif
endif

#====================================

source ./cice.settings
source ${ICE_CASEDIR}/env.${ICE_MACHCOMP} || exit 2

if (${ICE_MACHINE} != ${ICE_MACHINE_ENVNAME}) then
  echo "WARNING, is ICE_MACHINE setting OK, ${ICE_MACHINE}, ${ICE_MACHINE_ENVNAME}"
endif

if (${ICE_COMPILER} != ${ICE_MACHINE_COMPILER}) then
  echo "WARNING, is ICE_COMPILER setting OK, ${ICE_COMPILER}, ${ICE_MACHINE_COMPILER}"
endif

echo " "
echo "${0}:"

set  stamp   = `date '+%y%m%d-%H%M%S'`
set ICE_BLDLOG_FILE = "cice.bldlog.${stamp}"
set quiet = ${ICE_QUIETMODE}

if (${ICE_CLEANBUILD} == 'true') then
  echo "cleaning objdir"
  rm -r -f ${ICE_OBJDIR}
endif
if !(-d ${ICE_OBJDIR}) mkdir -p ${ICE_OBJDIR}
cd ${ICE_OBJDIR}

#setenv ICE_CPPDEFS "-DNXGLOB=${ICE_NXGLOB} -DNYGLOB=${ICE_NYGLOB} -DBLCKX=${ICE_BLCKX} -DBLCKY=${ICE_BLCKY} -DMXBLCKS=${ICE_MXBLCKS} -DNICELYR=${NICELYR} -DNSNWLYR=${NSNWLYR} -DNICECAT=${NICECAT} -DTRAGE=${TRAGE} -DTRFY=${TRFY} -DTRLVL=${TRLVL} -DTRPND=${TRPND} -DTRBRI=${TRBRI} -DNTRAERO=${NTRAERO}  -DTRZS=${TRZS} -DNBGCLYR=${NBGCLYR} -DTRALG=${TRALG} -DTRBGCZ=${TRBGCZ} -DTRDOC=${TRDOC} -DTRDOC=${TRDOC} -DTRDIC=${TRDIC} -DTRDON=${TRDON} -DTRFED=${TRFED} -DTRFEP=${TRFEP} -DTRZAERO=${TRZAERO} -DTRBGCS=${TRBGCS} -DNUMIN=${NUMIN} -DNUMAX=${NUMAX}"
#setenv ICE_CPPDEFS "-DNICELYR=${NICELYR} -DNSNWLYR=${NSNWLYR} -DNICECAT=${NICECAT} -DTRAGE=${TRAGE} -DTRFY=${TRFY} -DTRLVL=${TRLVL} -DTRPND=${TRPND} -DTRBRI=${TRBRI} -DNTRAERO=${NTRAERO}  -DTRZS=${TRZS} -DNBGCLYR=${NBGCLYR} -DTRALG=${TRALG} -DTRBGCZ=${TRBGCZ} -DTRDOC=${TRDOC} -DTRDOC=${TRDOC} -DTRDIC=${TRDIC} -DTRDON=${TRDON} -DTRFED=${TRFED} -DTRFEP=${TRFEP} -DTRZAERO=${TRZAERO} -DTRBGCS=${TRBGCS} -DNUMIN=${NUMIN} -DNUMAX=${NUMAX}"
#setenv ICE_CPPDEFS "-DNUMIN=${NUMIN} -DNUMAX=${NUMAX}"
setenv ICE_CPPDEFS " "

if ($DITTO == 'yes') then
  setenv ICE_CPPDEFS "${ICE_CPPDEFS} -DREPRODUCIBLE"
endif

if (${ICE_IOTYPE} == 'netcdf') then
  set IODIR = io_netcdf
  setenv ICE_CPPDEFS "${ICE_CPPDEFS} -Dncdf"
else if (${ICE_IOTYPE} == 'pio') then
  set IODIR = io_pio
  setenv ICE_CPPDEFS "${ICE_CPPDEFS} -Dncdf"
else
  set IODIR = io_binary
endif

### List of source code directories (in order of importance).
cat >! Filepath << EOF
${ICE_SANDBOX}/cicecore/drivers/${ICE_DRVOPT}
${ICE_SANDBOX}/cicecore/cicedynB/dynamics
${ICE_SANDBOX}/cicecore/cicedynB/general
${ICE_SANDBOX}/cicecore/cicedynB/analysis
${ICE_SANDBOX}/cicecore/cicedynB/infrastructure
${ICE_SANDBOX}/cicecore/cicedynB/infrastructure/io/$IODIR
${ICE_SANDBOX}/cicecore/cicedynB/infrastructure/comm/${ICE_COMMDIR}
${ICE_SANDBOX}/cicecore/shared
${ICE_SANDBOX}/icepack/columnphysics
EOF

echo " "
echo ICE_GRID     = ${ICE_GRID}
echo ICE_NTASK    = ${ICE_NTASKS}
echo ICE_NTHRD    = ${ICE_NTHRDS}
echo "ICE_CPPDEFS = ${ICE_CPPDEFS}"
echo "Filepath = "
cat ${ICE_OBJDIR}/Filepath
echo " "

echo "building makdep"
cc -o makdep ${ICE_CASEDIR}/makdep.c     || exit 2

echo "building cice > ${ICE_OBJDIR}/${ICE_BLDLOG_FILE}"

if !(-d ${ICE_RUNDIR}) mkdir -p ${ICE_RUNDIR}
if !($?ICE_MACHINE_BLDTHRDS) then
  set ICE_MACHINE_BLDTHRDS = 1
endif
if (-e ${ICE_BLDLOG_FILE}) rm ${ICE_BLDLOG_FILE}

if (${ICE_CLEANBUILD} == 'true') then
  echo "gmake clean"
  if (${quiet} == "true") then
    ${ICE_MACHINE_MAKE} VPFILE=Filepath EXEC=${ICE_RUNDIR}/cice \
        CPPDEFS="${ICE_CPPDEFS}" \
        -f  ${ICE_CASEDIR}/Makefile MACFILE=${ICE_CASEDIR}/Macros.${ICE_MACHCOMP} clean >& ${ICE_BLDLOG_FILE}
  else
    ${ICE_MACHINE_MAKE} VPFILE=Filepath EXEC=${ICE_RUNDIR}/cice \
        CPPDEFS="${ICE_CPPDEFS}" \
        -f  ${ICE_CASEDIR}/Makefile MACFILE=${ICE_CASEDIR}/Macros.${ICE_MACHCOMP} clean | tee ${ICE_BLDLOG_FILE}
  endif
endif

echo "gmake cice"
if (${quiet} == "true") then
  echo "  quiet mode on... patience"
  ${ICE_MACHINE_MAKE} -j ${ICE_MACHINE_BLDTHRDS} VPFILE=Filepath EXEC=${ICE_RUNDIR}/cice \
      CPPDEFS="${ICE_CPPDEFS}" \
      -f  ${ICE_CASEDIR}/Makefile MACFILE=${ICE_CASEDIR}/Macros.${ICE_MACHCOMP} >& ${ICE_BLDLOG_FILE} 
  set bldstat = ${status}
else
  ${ICE_MACHINE_MAKE} -j ${ICE_MACHINE_BLDTHRDS} VPFILE=Filepath EXEC=${ICE_RUNDIR}/cice \
      CPPDEFS="${ICE_CPPDEFS}" \
      -f  ${ICE_CASEDIR}/Makefile MACFILE=${ICE_CASEDIR}/Macros.${ICE_MACHCOMP} | tee ${ICE_BLDLOG_FILE} 
  set bldstat = ${status}
endif

if !(-d ${ICE_LOGDIR}) mkdir -p ${ICE_LOGDIR}
cp -p ${ICE_BLDLOG_FILE} ${ICE_LOGDIR}/

if (${bldstat} != 0) then
  echo "${0}: COMPILE FAILED, see"
  echo "  cat ${ICE_OBJDIR}/${ICE_BLDLOG_FILE}"
  if (${quiet} == "true") then
    tail -10 ${ICE_OBJDIR}/${ICE_BLDLOG_FILE}
  endif
  if ( ${ICE_TEST} != ${ICE_SPVAL} ) then
    # This is a test case.  Write output to test_output file
    echo "#---" >! ${ICE_CASEDIR}/test_output
    echo "FAIL ${ICE_TESTNAME} build" >> ${ICE_CASEDIR}/test_output
    echo "FAIL ${ICE_TESTNAME} run" >> ${ICE_CASEDIR}/test_output
  endif
  exit 99
endif

echo "`date` ${0}:${ICE_CASENAME} build completed ${ICE_BLDLOG_FILE}"  >> ${ICE_CASEDIR}/README.case
echo "${0}: COMPILE SUCCESSFUL, ${ICE_LOGDIR}/${ICE_BLDLOG_FILE}"
if ( ${ICE_TEST} != ${ICE_SPVAL} ) then
  echo "#---" >! ${ICE_CASEDIR}/test_output
  echo "PASS ${ICE_TESTNAME} build" >> ${ICE_CASEDIR}/test_output
  echo "PEND ${ICE_TESTNAME} run" >> ${ICE_CASEDIR}/test_output
endif

