#!/bin/sh
#
# script for compiling and installing YAP under msys. Uses a mingw64
# compiler, msys shell and nsis to do the installing
# Please read the script before trying to execute it.
# Legal arguments for the script are
#  'threads' - enable threads
#  'no_threads',
#  '32', '64'  - compile for 32 or 64 bit architecture.
# By default threads are turned off and we use 64 bits.
#
# please check if you have gcc 64 bits in your path and a clone
# of msys shell like smartgit:
#
# http://sourceforge.net/projects/mingwbuilds/
#   PS: don't install in the default location.
#   mingw should avoid space in its directory,
#   it freaks winres out.
# http://nsis.sourceforge.net/Main_Page
#
#
TOP=$HOME
TOP="/z"
VERSION=6.3.4
# by default, compile without threads
THREADS=no
# use 64 bits
ABI=64
#SRC=/l/work/noth/git
#SRC_WIN=L:\\work\\noth\\git
SRC="$HOME"/git/yap-6.3
TARGET=/c/Yap64
NSIS="/c/Program Files (x86)/NSIS/makensis"
# by default, ""
PREFIX_CMD=wine

I=$#
while test $I -gt 0
do
  if test $1 = threads
  then
     THREADS=yes
  elif test $1 = no_threads
  then
     THREADS=no
  elif test $1 = 32
  then
     ABI=32
  elif test $1 = 64
  then
     ABI=64
  else
     echo "received \"$1\", should be one of threads, no_threads, 32, 64"
  fi
  I=$(( $I - 1 ))
done

# srcdir comes from here, please avoid relative paths
CONFIGURE=$SRC/configure

# debugging setup
do_compile=true
do_install=true

# HOME WIN64 configuration

# DOCS_DIR=/l/work/noth/yapdocs
DOCS_DIR=$HOME/Yap/bins/threads
if test "$THREADS" = yes; then
  FULL_VERSION="$VERSION"-threads
else
  FULL_VERSION="$VERSION"
fi

if test $ABI = 64; then
#GCC_PATH=/l/Work/noth/mingw-w64/x86_64-4.9.0-posix-seh-rt_v3-rev1/mingw64
GCC_PATH=$HOME/mxe/usr/bin
PATH=$PATH:$GCC_PATH
HOST="--host=x86_64-w64-mingw32"
# ok.

CUDD=no # BDD compiler package. Get version that compiles on Windows from Vitor!
GECODE=no  #does not link with mingw64, VC++ trouble
GMP=yes    # Compile it for infinite precision numbers and rationals
JAVA=no    # for JPL only
PYTHON=no  # does not work in Windows anyway (currently)
REAL=no    # interface to R

  # it seems python2.7 does not support mingw64
  PYTHON_PATH="/c/Python33-64"
  export PATH="$GCC_PATH"/bin:"$PATH"
  GECODE_PATH="/c/Program Files/Gecode"
#  GMP=/l/Work/noth/msys/1.0/local
  GMP=yes
  CUDD_PATH=/c/cygwin/Yap/cudd-2.5.0-mingw64
  JAVA_PATH="/c/Program Files/Java/jdk1.7.0_51"
  R_PATH="/c/Program Files/R/R-3.1.0"
  if test $THREADS = yes
  then
    cp "$GCC_PATH/x86_64-w64-mingw32/lib/libwinpthread-1.dll" .  # interface from posix threads to windows native threads
    cp libwinpthread-1.dll pthreadGC2.dll
  fi
fi

# HOME WIN32 configuration
if test $ABI = 32; then
GCC_PATH="/c/TDM-GCC-64"

CUDD=yes
GECODE=no # install only allows one of 32 or 64 bits
GMP=yes
JAVA=yes
PYTHON=no
REAL=yes

  PYTHON_PATH="/c/Python27"
  export PATH="$GCC_PATH"/bin:$PATH
  GECODE_PATH="/c/Program Files/Gecode"
  GMP=/c/cygwin/Yap/win32
  CUDD_PATH=/c/cygwin/Yap/cudd-2.5.0-mingw32
  JAVA_PATH="/c/Program Files (x86)/Java/jdk1.7.0_51"
  R_PATH="/c/Program Files/R/R-3.0.2"
  HOST="--enable-abi=32"

  cp $GCC_PATH/bin/libwinpthread-1.dll .
  cp libwinpthread-1.dll pthreadGC2.dll
fi


if test $CUDD = yes
then
  CUDD="$CUDD_PATH"
  BDDLIB="--enable-bddlib"
else
  BDDLIB=""
fi
if test $GECODE = yes
then
  export PATH="$PATH":"$GECODE_PATH"/bin
fi
if test $JAVA = yes
then
  export PATH="$PATH":"$JAVA_PATH"/bin
fi
if test $PYTHON = yes
then
  export PATH="$PATH":"$PYTHON_PATH"
fi
if test $REAL = yes
then
  if test $ABI = 32; then
    R_ABI=i386
  else
    R_ABI=x64
  fi
  export PATH="$PATH":"$R_PATH"/bin/"$R_ABI"
fi

export INSTALL_SH=$SRC/yap-6.3/install.sh
# avoid using relative paths
if test "$do_compile" = true; then
"$CONFIGURE" $HOST \
    --prefix=$TARGET \
	--with-R="$REAL" \
	--with-java="$JAVA" \
	--with-gmp="$GMP" \
	--with-python="$PYTHON" \
	--with-cudd="$CUDD" "$BDDLIB" \
	--enable-gecode="$GECODE" \
	--enable-threads="$THREADS"  --enable-pthread-locking \
	 --enable-debug-yap --enable-low-level-tracer
make -j 4 install
fi
if test "$do_install" = true; then
if test $ABI = 64; then
  cp $DOCS_DIR/*html $TARGET/share/doc/Yap
  cp $DOCS_DIR/*pdf $TARGET/share/doc/Yap
  "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog64 -DROOTDIR=$TARGET -DABI="$ABI" -DVERSION="$FULL_VERSION" -DOPTIONS="$SRC_WIN\\yap-6.3\\misc\\options.ini" -DOUT_DIR=".." -D"WIN64=1" -NOCD $SRC/yap-6.3/misc/Yap.nsi
else
  cp $DOCS_DIR/*html $TARGET/share/doc/Yap
  cp $DOCS_DIR/*pdf $TARGET/share/doc/Yap
  "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog -DROOTDIR=$TARGET -DABI="$ABI" -DVERSION="$FULL_VERSION" -DOPTIONS="$SRC_WIN\\yap-6.3\\misc\\options.ini" -DOUT_DIR=".." -NOCD $SRC/yap-6.3/misc/Yap.nsi
fi
fi