#!/bin/sh

if  [ x$1 = x ] || [ x$2 = x ] || [ x$3 = x ]; then
        echo "usage: exttest1 <C compiler> <Fortran complier> <GAMS solver>";
	echo 
	echo "Possible OS/Compiler Combinations"
	echo "AIX:    C: xlc"
	echo "        Fortran: xlf"
	echo "HP-UX:  C: c89, gcc"
	echo "        Fortran: f77"
	echo "Linux:  C: gcc"
	echo "        Fortran: g77"
	echo "OSF1:   C: cc"
	echo "        Fortran: f77"
	echo "SunOS:  C: cc, gcc"
	echo "        Fortran: f77"
        echo "Available GAMS solvers:"
        echo "        miles pathc"
        exit;
fi
OS=`uname`
CC=$1
F77=$2
if [ $OS = "HP-UX" ]; then
  if [ $CC = "gcc" ]; then
    echo "Running: $CC -fpic -c exmcp2c.c"
    $CC -fpic -c exmcp2c.c
    echo "Running: $CC -fpic -c exmcp2c_cb.c"
    $CC -fpic -c exmcp2c_cb.c
  elif [ $CC = "c89" ]; then
    echo "Running: $CC +Z -c exmcp2c.c"
    $CC +Z -c exmcp2c.c
    echo "Running: $CC +Z -c exmcp2c_cb.c"
    $CC +Z -c exmcp2c_cb.c
  else
    echo "Sorry can't test HP-UX with C compiler $CC..."
    exit;
  fi
  echo "Copy *for to *f..."
  cp exmcp2f.for exmcp2f.f
  cp exmcp2f_cb.for exmcp2f_cb.f
  cp unxmsg_f.for unxmsg_f.f
  sed s/__intone__/byte/ geheader.in > geheader.inc
  if [ $F77 = "f77" ]; then
    echo "Running: $F77 +Z -c exmcp2f.f"
    $F77 +Z -c exmcp2f.f
    echo "Running: $F77 +Z -c exmcp2f_cb.f"
    $F77 +Z -c exmcp2f_cb.f
    echo "Running: $F77 +Z -c unxmsg_f.f"
    $F77 +Z -c unxmsg_f.f
  else
    echo "Sorry can't test HP-UX with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  ld -b -o exmcp2c.so exmcp2c.o -lc -lm
  ld -b -o exmcp2c_cb.so exmcp2c_cb.o -lc -lm
  ld -b -o exmcp2f.so exmcp2f.o 
  ld -b -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -lc -lm
elif [ $OS = "OSF1" ]; then
  if [ $CC = "cc" ]; then
    echo "Running: $CC -c exmcp2c.c"
    $CC -std1 -c exmcp2c.c
    echo "Running: $CC -c exmcp2c_cb.c"
    $CC -std1 -c exmcp2c_cb.c
  else
    echo "Sorry can't test OSF1 with C compiler $CC..."
    exit;
  fi
  echo "Copy *for to *f..."
  sed /\!DEC/d exmcp2f.for > exmcp2f.f
  sed /\!DEC/d exmcp2f_cb.for > exmcp2f_cb.f
  cp unxmsg_f.for unxmsg_f.f
  sed s/__intone__/byte/ geheader.in > geheader.inc
  if [ $F77 = "f77" ]; then
    echo "Running: $F77 -c exmcp2f.f"
    $F77 -c exmcp2f.f
    echo "Running: $F77 -c exmcp2f_cb.f"
    $F77 -c exmcp2f_cb.f
    echo "Running: $F77 -c unxmsg_f.f"
    $F77 -c unxmsg_f.f
  else
    echo "Sorry can't test OSF1 with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  ld  -o exmcp2c.so exmcp2c.o -lc -lm -shared
  ld  -o exmcp2c_cb.so exmcp2c_cb.o -lc -lm -shared
  ld  -o exmcp2f.so exmcp2f.o -lc -lm -lfor -shared
  ld  -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -lc -lm -lfor -shared
elif [ $OS = "IRIX64" ]; then
  if [ $CC = "cc" ]; then
    echo "Running: $CC -c exmcp2c.c"
    $CC -c -n32 -mips4 exmcp2c.c
    echo "Running: $CC -c exmcp2c_cb.c"
    $CC -c -n32 -mips4 exmcp2c_cb.c
  else
    echo "Sorry can't test IRIX64 with C compiler $CC..."
    exit;
  fi
  echo "Copy *for to *f..."
  cp exmcp2f.for exmcp2f.f
  cp exmcp2f_cb.for exmcp2f_cb.f
  cp unxmsg_f.for unxmsg_f.f
  sed s/__intone__/byte/ geheader.in > geheader.inc
  if [ $F77 = "f77" ]; then
    echo "Running: $F77 -c exmcp2f.f"
    $F77 -c exmcp2f.f
    echo "Running: $F77 -c exmcp2f_cb.f"
    $F77 -c exmcp2f_cb.f
    echo "Running: $F77 -c unxmsg_f.f"
    $F77 -c unxmsg_f.f
  else
    echo "Sorry can't test IRIX64 with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  ld  -o exmcp2c.so exmcp2c.o -shared
  ld  -o exmcp2c_cb.so exmcp2c_cb.o -shared
  ld  -o exmcp2f.so exmcp2f.o -shared
  ld  -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -shared
elif [ $OS = "AIX" ]; then
  if [ $CC = "xlc" ]; then
    echo "Running: $CC -c exmcp2c.c"
    $CC -c exmcp2c.c
    echo "Running: $CC -c exmcp2c_cb.c"
    $CC -c exmcp2c_cb.c
  else
    echo "Sorry can't test AIX with C compiler $CC..."
    exit;
  fi
  echo "Copy *for to *f..."
  cp exmcp2f.for exmcp2f.f
  cp exmcp2f_cb.for exmcp2f_cb.f
  cp unxmsg_f.for unxmsg_f.f
  sed s/__intone__/byte/ geheader.in > geheader.inc
  if [ $F77 = "xlf" ]; then
    echo "Running: $F77 -c exmcp2f.f"
    $F77 -c exmcp2f.f
    echo "Running: $F77 -c exmcp2f_cb.f"
    $F77 -c exmcp2f_cb.f
    echo "Running: $F77 -c unxmsg_f.f"
    $F77 -c unxmsg_f.f
  else
    echo "Sorry can't test AIX with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  echo "gefunc" > gefunc.exp
  ld  -o exmcp2c.so exmcp2c.o -bE:gefunc.exp -G -lc -lm
  ld  -o exmcp2c_cb.so exmcp2c_cb.o -bE:gefunc.exp -G -lc -lm 
  ld  -o exmcp2f.so exmcp2f.o -bE:gefunc.exp -G -lc -lm 
  ld  -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -bE:gefunc.exp -G -lc -lm 
elif [ $OS = "SunOS" ]; then
  if [ $CC = "gcc" ]; then
    echo "Running: $CC -fpic -c exmcp2c.c"
    $CC -fpic -c exmcp2c.c
    echo "Running: $CC -fpic -c exmcp2c_cb.c"
    $CC -fpic -c exmcp2c_cb.c
  elif [ $CC = "cc" ]; then
    echo "Running: $CC -c exmcp2c.c"
    $CC -c exmcp2c.c
    echo "Running: $CC -c exmcp2c_cb.c"
    $CC -c exmcp2c_cb.c
  else
    echo "Sorry can't test SunOS with C compiler $CC..."
    exit;
  fi
  echo "Copy *for to *f..."
  cp exmcp2f.for exmcp2f.f
  cp exmcp2f_cb.for exmcp2f_cb.f
  cp unxmsg_f.for unxmsg_f.f
  sed s/__intone__/byte/ geheader.in > geheader.inc
  if [ $F77 = "f77" ]; then
    echo "Running: $F77 -c exmcp2f.f"
    $F77 -c exmcp2f.f
    echo "Running: $F77 -c exmcp2f_cb.f"
    $F77 -c exmcp2f_cb.f
    echo "Running: $F77 -c unxmsg_f.f"
    $F77 -c unxmsg_f.f
  else
    echo "Sorry can't test SunOS with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  ld  -o exmcp2c.so exmcp2c.o -G
  ld  -o exmcp2c_cb.so exmcp2c_cb.o -G
  ld  -o exmcp2f.so exmcp2f.o -G
  ld  -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -G
elif [ $OS = "Linux" ]; then
  if [ $CC = "gcc" ]; then
    echo "Running: $CC -fpic -c exmcp2c.c"
    $CC -fpic -c exmcp2c.c
    echo "Running: $CC -fpic -c exmcp2c_cb.c"
    $CC -fpic -c exmcp2c_cb.c
  else
    echo "Sorry can't test Linux with C compiler $CC..."
    exit;
  fi
  sed s/__intone__/Integer*1/ geheader.in > geheader.inc
  if [ $F77 = "g77" ]; then
    echo "Running: $F77 -fpic -c exmcp2f.for"
    $F77 -fpic -c exmcp2f.for
    echo "Running: $F77 -fpic -c exmcp2f_cb.for"
    $F77 -fpic -c exmcp2f_cb.for
    echo "Running: $F77 -fpic -c unxmsg_f.for"
    $F77 -fpic -c unxmsg_f.for
  else
    echo "Sorry can't test Linux with Fortran compiler $F77..."
    exit;
  fi
  echo "Linking..."
  ld -o exmcp2c.so exmcp2c.o -shared
  ld -o exmcp2c_cb.so exmcp2c_cb.o -shared
  ld -o exmcp2f.so exmcp2f.o -L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -lg2c -shared
  ld -o exmcp2f_cb.so exmcp2f_cb.o unxmsg_f.o -L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -lg2c -shared
else
 echo "Unknown operating system $OS. Exiting..."
 exit
fi
if [ -s exmcp2c.so ] && [ -s exmcp2c_cb.so ] && [ -s exmcp2f.so ] && [ -s exmcp2f_cb.so ] ; then
  echo "Checking GAMS system..."
  VER=`gamscmex.out audit | cut -c43-45`
  if [ $VER -le 113 ]; then
    echo "GAMS version not suitable for external functions"
    exit
  fi
  GAMSCMD="gams exmcp2 lo=2 mcp=$3"
  echo "Running GAMS: $GAMSCMD"
  eval $GAMSCMD
  grep "@@@@" exmcp2.lst | grep "\-\-\-\-" | cut -d# -f2 > exttestmcp2.out
  if [ -s exttestmcp2.out ]; then
    cat exttestmcp2.out
  else
    echo "Test not passed. Inspect exmcp2.lst for details."
  fi
fi
