#!/bin/sh

# Step 1: Configure CWB
# 
# The CWB includes specialized configurations (for macOS, Linux, Solaris).
# We check whether RcppCWB is installed on a system for which a specialized
# configuration is available. If not, the standard unix configuration is
# used. 

INTL=" "
CARBON=""
CC_R=$($R_HOME/bin/R CMD config CC)

case $(uname -s) in
  Darwin)
    if [ -x "$(command -v pkg-config)" ]; then
      pkg-config --exists glib-2.0
      GLIB_EXISTS=$?
      if [ $GLIB_EXISTS = 0 ]; then
        echo "* pkg-config has information on glib-2.0";
      else
        echo "* glib missing, downloading static library from GitHub repo";
        ${R_HOME}/bin/Rscript ./tools/maclibs.R `pwd` # checks whether glib is installed, download if necessary
        export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:`pwd`/macos/libglib-master/pkgconfig
        INTL=" -lintl "
        CARBON=" -framework Carbon"
      fi
    else
      echo "WARNING: pkg-config tool missing, compiling surce code likely to fail"
    fi 
    sed -i -e "s/PLATFORM=.*/PLATFORM=darwin-64/" ./src/cwb/config.mk;;
  Linux)
    ARCH=`lscpu | head -n 1 | grep -oP '\w+$'`
    case "$ARCH" in 
      x86_64)
        sed -i -e "s/PLATFORM=.*/PLATFORM=linux-64/" ./src/cwb/config.mk;;
      i386) 
        sed -i -e "s/PLATFORM=.*/PLATFORM=linux/" ./src/cwb/config.mk;;
      *)
        sed -i -e "s/PLATFORM=.*/PLATFORM=unix/" ./src/cwb/config.mk;;
    esac
    sed -i -e "s#CC\s*=\s*gcc#CC=$CC_R#" ./src/cwb/config/platform/unix;;
  SunOS)
    CPU_INFO=`psrinfo -pv | sed -n '2p'`
    case $CPU_INFO in
      SPARK)
        sed -i -e "s/PLATFORM=.*/PLATFORM=solaris_spark/" ./src/cwb/config.mk;;
      *)
        sed -e "s/PLATFORM=.*/PLATFORM=solaris_x86/" ./src/cwb/config.mk > ./src/cwb/config.mk.mod
        rm ./src/cwb/config.mk
        mv ./src/cwb/config.mk.mod ./src/cwb/config.mk;;
    esac
    SOCKETLIB=' -lsocket -Wl,--allow-multiple-definition';;
  *)
    sed -i -e "s/PLATFORM=.*/PLATFORM=unix/" ./src/cwb/config.mk;;
esac


# Step 2: Generate Makevars file
#
# The Makevars file is generated here, to pass the directory where RcppCWB
# is build (variable PKG_DIR) into the Makevars file.

BUILD_DIR=`pwd`
CWB_DIR=`pwd`/src/cwb
GLIB_LIBDIRS=`pkg-config --libs-only-L glib-2.0`
if [ -e ./src/Makevars ]; then rm ./src/Makevars; fi
printf "PKG_CPPFLAGS=-fcommon -I%s/src/cwb/cqp -I%s/src/cwb/cl -I%s/src/cwb/CQi\n" $BUILD_DIR $BUILD_DIR $BUILD_DIR > ./src/Makevars
printf "PKG_LIBS=-L%s/cl -L%s/cqp -L%s/utils %s -lcwb -lcqp -lcl -lglib-2.0 %s -lpcre%s\n" $CWB_DIR $CWB_DIR $CWB_DIR $GLIB_LIBDIRS $INTL $SOCKETLIB$CARBON>> ./src/Makevars
printf "\${SHLIB}: libcl.a libcqp.a libcwb.a\n" >>./src/Makevars
printf "libcl.a: depend\n" >> ./src/Makevars
printf "\tcd cwb; R_PACKAGE_SOURCE=%s PKG_CONFIG_PATH=%s \${MAKE} cl\n" ${CWB_DIR} ${PKG_CONFIG_PATH} >> ./src/Makevars
printf "libcqp.a: depend\n" >> ./src/Makevars
printf "\tcd cwb; R_PACKAGE_SOURCE=%s PKG_CONFIG_PATH=%s \${MAKE} cqp\n" ${CWB_DIR} ${PKG_CONFIG_PATH} >> ./src/Makevars
printf "libcwb.a: depend\n" >> ./src/Makevars
printf "\tcd cwb; R_PACKAGE_SOURCE=%s PKG_CONFIG_PATH=%s \${MAKE} utils\n" ${CWB_DIR} ${PKG_CONFIG_PATH} >> ./src/Makevars
printf "depend: clean\n" >> ./src/Makevars
printf "\tcd cwb; R_PACKAGE_SOURCE=%s PKG_CONFIG_PATH=%s \${MAKE} depend\n" ${CWB_DIR} ${PKG_CONFIG_PATH} >> ./src/Makevars
printf "clean:\n" >> ./src/Makevars
printf "\tcd cwb; R_PACKAGE_SOURCE=%s PKG_CONFIG_PATH=%s \${MAKE} clean\n" ${CWB_DIR} ${PKG_CONFIG_PATH} >> ./src/Makevars
