#!/bin/sh

# Upstream SHA of emcrisostomo/fswatch
LIB_VER="5c443d2"

# Initialise
PKG_CFLAGS=""
PKG_LIBS="-lpthread"

# Find compiler and export flags
CC=`"${R_HOME}/bin/R" CMD config CC`
CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS`
CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS`
LDFLAGS=`"${R_HOME}/bin/R" CMD config LDFLAGS`
export CC CFLAGS CPPFLAGS LDFLAGS

if [ -z "$MACOSX_DEPLOYMENT_TARGET" ]; then
export MACOSX_DEPLOYMENT_TARGET=`echo $CC | sed -En 's/.*-version-min=([0-9][0-9.]*).*/\1/p'`
fi

# Detect -latomic linker flag for ARM architectures (Raspberry Pi etc.)
echo "#include <stdint.h>
uint64_t v;
int main() {
    return (int)__atomic_load_n(&v, __ATOMIC_ACQUIRE);
}" | ${CC} -xc - -o /dev/null > /dev/null 2>&1
if [ $? -ne 0 ]
then
  echo "Adding -latomic linker flag ..."
  PKG_LIBS="$PKG_LIBS -latomic"
fi

# Force build bundled libs
if [ -z "$WATCHER_LIBS" ]; then

# Find MbedTLS and compile if necessary
if [ "$INCLUDE_DIR" ] || [ "$LIB_DIR" ]
then
  PKG_CFLAGS="-I$INCLUDE_DIR $PKG_CFLAGS"
  PKG_LIBS="-L$LIB_DIR -lfswatch $PKG_LIBS"
  echo "Found INCLUDE_DIR $INCLUDE_DIR"
  echo "Found LIB_DIR $LIB_DIR"
elif [ -d "/usr/local/include/libfswatch" ]
then
  PKG_CFLAGS="-I/usr/local/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/local/lib -lfswatch $PKG_LIBS"
  echo "Found 'libfswatch' $PKG_CFLAGS"
elif [ -d "/usr/include/libfswatch" ]
then
  PKG_CFLAGS="-I/usr/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/lib -lfswatch $PKG_LIBS"
  echo "Found 'libfswatch' $PKG_CFLAGS"
elif [ -d "/usr/local/opt/libfswatch" ]
then
  PKG_CFLAGS="-I/usr/local/opt/fswatch/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/local/opt/fswatch/lib -lfswatch $PKG_LIBS"
  echo "Found 'libfswatch' $PKG_CFLAGS"
else
  echo "Existing 'libfswatch' not found"
fi

else
  echo "WATCHER_LIBS is set... skipping detection"
fi

if [ -z "$PKG_CFLAGS" ]; then
  echo "Compiling 'libfswatch' from source..."
  echo "Detecting 'cmake'..."
  which cmake
  if [ $? -ne 0 ]
  then
    export PATH=$PATH:/Applications/CMake.app/Contents/bin
    which cmake
    if [ $? -ne 0 ]
    then
      echo "Required 'cmake' not found"
      exit 1
    fi
  fi
  gzip -dc src/fswatch-$LIB_VER.tar.gz | tar -xf -
  cd fswatch-$LIB_VER
  cmake -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_INSTALL_LIBDIR=lib \
  -DBUILD_LIBS_ONLY=1 -DUSE_NLS=0 -DCMAKE_POSITION_INDEPENDENT_CODE=1 \
  -DCMAKE_COLOR_MAKEFILE=0 -DCMAKE_INSTALL_MESSAGE=NEVER \
  -DCMAKE_BUILD_TYPE=Release .
  cmake --build . --target install
  cd ..
  rm -rf fswatch-$LIB_VER

  if [ -d "install/lib" ]
  then
  PKG_CFLAGS="-I../install/include $PKG_CFLAGS"
  PKG_LIBS="../install/lib/libfswatch.b $PKG_LIBS"
  fi
fi

# Write to Makevars
sed -e "s|@cflags@|$PKG_CFLAGS|" -e "s|@libs@|$PKG_LIBS|" src/Makevars.in > src/Makevars

# Success
exit 0
