#!/bin/bash

# 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=""

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;;
  SunOS)
    CPU_INFO=`psrinfo -pv | sed -n '2p'`
    case $CPU_INFO in
      x86)
        sed -i -e "s/PLATFORM=.*/PLATFORM=unix/" ./src/cwb/config.mk;;
      SPARK)
        sed -i -e "s/PLATFORM=.*/PLATFORM=solaris/" ./src/cwb/config.mk;;
    esac;;
  *)
    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
echo "PKG_CPPFLAGS=-I"$BUILD_DIR"/src/cwb/cqp -I"$BUILD_DIR"/src/cwb/cl -I"$BUILD_DIR"/src/cwb/CQi" > ./src/Makevars
echo -e "PKG_LIBS=-L"$CWB_DIR"/cl -L"$CWB_DIR"/cqp -L"$CWB_DIR"/utils "$GLIB_LIBDIRS" -lcwb -lcqp -lcl -lglib-2.0"$INTL"-lpcre"$CARBON"\n" >> ./src/Makevars
echo -e "\$(SHLIB): libcl.a libcqp.a libcwb.a\n" >>./src/Makevars
echo "libcl.a: depend" >> ./src/Makevars
echo -e "\tR_PACKAGE_SOURCE="$CWB_DIR" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \$(MAKE) -C cwb cl\n" >> ./src/Makevars
echo "libcqp.a: depend" >> ./src/Makevars
echo -e "\tR_PACKAGE_SOURCE="$CWB_DIR" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \$(MAKE) -C cwb cqp\n" >> ./src/Makevars
echo "libcwb.a: depend" >> ./src/Makevars
echo -e "\tR_PACKAGE_SOURCE="$CWB_DIR" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \$(MAKE) -C cwb utils\n" >> ./src/Makevars
echo "depend: clean" >> ./src/Makevars
echo -e "\tR_PACKAGE_SOURCE="$CWB_DIR" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \$(MAKE) -C cwb depend\n" >> ./src/Makevars
echo "clean:" >> ./src/Makevars
echo -e "\tR_PACKAGE_SOURCE="$CWB_DIR" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \$(MAKE) -C cwb clean\n" >> ./src/Makevars


# Step 3: Modify data directory in registry file
# 
# The package includes a small binary sample corpus. The path to the binary
# files needs to be set during installation. We call a standardized script
# in the tools directory for that purpose. 

${R_HOME}/bin/Rscript ./tools/setpaths.R --args "$R_PACKAGE_DIR"

