#!/bin/csh -f

# this script does the makes necessary to create the BiMMeR routines
# and library.

# by default don't cleanobjs before make
set extra=
# by default don't cleanobjs
set remove=
# by default make all possible libraries and executables in utility, 
# mm and mm_test
set makearg_utility=all
set makearg_mm=all
set makearg_mmt=all

foreach i ($argv)
  switch ($i)

  case new:
    set extra=new;
    echo "CREATING bimmer from scratch....."
    echo ""
    breaksw

  case cleanobjs:
    set remove=cleanobjs;
    echo "REMOVING bimmer objects - nothing built....."
    echo ""
    breaksw

  case pc:
    set makearg_mm=pc;
    set makearg_mmt=skip;
    set makearg_utility=opt;
    breaksw

  case mc:
    set makearg_mm=mc;
    set makearg_mmt=skip;
    set makearg_utility=opt;
    breaksw

  case all:
    set makearg_mm="mc pc";
    set makearg_mmt=skip;
    set makearg_utility=opt;
    breaksw

  case pctest:
    set makearg_mm=pctest;
    set makearg_mmt=pctest;
    set makearg_utility=test;
    breaksw

  case mctest:
    set makearg_mm=mctest;
    set makearg_mmt=mctest;
    set makearg_utility=test;
    breaksw

  case alltest:
    set makearg_mm="pctest mctest";
    set makearg_mmt="pctest mctest";
    set makearg_utility=test;
    breaksw

  case pctestlib:
    set makearg_mm=pctest;
    set makearg_mmt=skip;
    set makearg_utility=test;
    breaksw

  case mctestlib:
    set makearg_mm=mctest;
    set makearg_mmt=skip;
    set makearg_utility=test;
    breaksw

  case alltestlib:
    set makearg_mm="pctest mctest";
    set makearg_mmt=skip
    set makearg_utility=test;
    breaksw

  case complete:
    set makearg_mm=all;
    set makearg_mmt=all;
    set makearg_utility=all;
    breaksw

  default:
    echo Usage \(create_bimmer\): unknown argument = $i
    echo "  pc: create optimized library using PRISM collective ops"
    echo "  mc: create optimized library using MPI collective ops"
    echo "  all: do both pc and mc"
    echo "  pctest: create test library and test code using PRISM collective ops"
    echo "  mctest: create test library and test code using MPI collective ops"
    echo "  alltest: do both pctest and mctest"
    echo "  pctestlib: create test library using PRISM collective ops"
    echo "  mctestlib: create test library using MPI collective ops"
    echo "  alltestlib: do both pctestlib and mctestlib"
    echo "  complete: do pc, mc, pctest, mctest"
    echo "    The optimized library removes optional prints (via CPP),"
    echo "    checks that are expensive and timing code.  It is compiled"
    echo "    with optimization."
    echo "    The test library has all the optional prints, checks and"
    echo "    timers.  It is compiled for debugging."
    echo "    The BiMMeR test code needs the test library.  People who want"
    echo "    to link to our library will probably want to use the optimized"
    echo "    library."
    echo ""
    echo "  new: create all objects from scratch"
    echo ""
    echo "  cleanobjs: removes objects - nothing built"
    echo ""
    echo "  default: do alltest"
    exit(22);
    breaksw

  endsw
end

if (! $?PRISM_T1) then
  set PRISM_T1=code
endif

if (! $?PRISM_T2) then
  set PRISM_T2=make
endif

cd $PRISM_T1

cd utility
echo ""
echo "doing utility make...."
if ($extra == new || $remove == cleanobjs) then
  $PRISM_T2 -f Make_bimmer cleanobjs
endif
if ($remove != cleanobjs) then
  $PRISM_T2 -f Make_bimmer $makearg_utility
  if ( $status != 0 ) then
    echo "***create_bimmer: make for utility failed"
    exit(11)
  endif
endif
cd ..

cd mm
echo ""
echo "doing mm make...."
if ($extra == new || $remove == cleanobjs) then
  $PRISM_T2 cleanobjs
endif
if ($remove != cleanobjs) then
  $PRISM_T2 $makearg_mm
  if ( $status != 0 ) then
    echo "***create_bimmer: make for mm failed"
    exit(12)
  endif
endif
cd ..

if ("$makearg_mmt" != skip) then
  cd mm_test
  echo ""
  echo "doing mm_test make...."
  if ($extra == new || $remove == cleanobjs) then
    $PRISM_T2 cleanobjs
  endif
  if ($remove != cleanobjs) then
    $PRISM_T2 $makearg_mmt
    set result=$status
    if ( $result != 0 ) then
      echo "***create_bimmer: make for mm_test failed"
      exit(13)
    endif
  endif
  cd ..
endif
