#!/bin/sh

# Library versions
LIB_VER="722bf46"
TLS_VER="869298b"

# Initialise
PKG_CFLAGS=""
PKG_LIBS="-lnng -lmbedtls -lmbedx509 -lmbedcrypto"

# Find compiler
CC=`${R_HOME}/bin/R CMD config CC`
CFLAGS=`${R_HOME}/bin/R CMD config CFLAGS`

# 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} -x c - -o /dev/null > /dev/null 2>&1
if [ $? -ne 0 ]
then
  echo "Adding -latomic linker flag"
  PKG_LIBS="$PKG_LIBS -latomic"
fi

# Use system lib or download and compile from source (default)
if [ "$NANONEXT_SYS" ]
then
  echo "NANONEXT_SYS flag set"
  echo "Using 'libnng' and 'libmbedtls' installed in '/usr/local' ..."
  PKG_CFLAGS="-I/usr/local/include $PKG_CFLAGS"
  if [ -d "/usr/local/lib64" ]
  then
    PKG_LIBS="-L/usr/local/lib64 $PKG_LIBS"
  fi
  if [ -d "/usr/local/lib" ]
  then
    PKG_LIBS="-L/usr/local/lib $PKG_LIBS"
  fi
else
  echo "Detecting 'cmake'..."
  which cmake
  if [ $? -ne 0 ]
  then
    export PATH=$PATH:/Applications/CMake.app/Contents/bin
    which cmake
    if [ $? -ne 0 ]
    then
      echo "'cmake' is required but is not found"
      exit 1
    fi
  fi
  echo "Downloading 'libmbedtls' source..."
  curl -sL https://api.github.com/repos/Mbed-TLS/mbedtls/tarball/$TLS_VER -o mbedtls.tar.gz
  gzip -dc mbedtls.tar.gz | tar -xf -
  rm -f mbedtls.tar.gz
  echo "Downloading 'libnng' source..."
  curl -sL https://api.github.com/repos/nanomsg/nng/tarball/$LIB_VER -o nng.tar.gz
  gzip -dc nng.tar.gz | tar -xf -
  rm -f nng.tar.gz
  cd Mbed-TLS-mbedtls-$TLS_VER
  mkdir build
  cd build
  echo "Compiling 'libmbedtls' from source..."
  cmake -DCMAKE_POSITION_INDEPENDENT_CODE=1 -DENABLE_TESTING=0 -DENABLE_PROGRAMS=0 \
    -DCMAKE_INSTALL_PREFIX=../../temp -DCMAKE_INSTALL_MESSAGE=NEVER ..
  cmake --build .
  cmake --install .
  cd ../..
  rm -rf Mbed-TLS-mbedtls-$TLS_VER
  cd nanomsg-nng-$LIB_VER
  mkdir build
  cd build
  echo "Compiling 'libnng' from source..."
  cmake -DCMAKE_POSITION_INDEPENDENT_CODE=1 -DNNG_ENABLE_TLS=1 \
    -DNNG_ELIDE_DEPRECATED=1 -DNNG_TESTS=0 -DNNG_TOOLS=0 \
    -DCMAKE_INSTALL_PREFIX=../../temp -DCMAKE_INSTALL_MESSAGE=NEVER ..
  cmake --build .
  cmake --install .
  cd ../..
  rm -rf nanomsg-nng-$LIB_VER
  PKG_CFLAGS="-I`pwd`/temp/include $PKG_CFLAGS"
  if [ -d "temp/lib64" ]
  then
    PKG_LIBS="-L`pwd`/temp/lib64 $PKG_LIBS"
  fi
  if [ -d "temp/lib" ]
  then
    PKG_LIBS="-L`pwd`/temp/lib $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

