#!/bin/sh
# Anticonf (tm) script by Jeroen Ooms (2020) adapted for nanonext (2022)

# set -x

# Library settings
PKG_TEST_HEADER="<nng/nng.h>"
PKG_LIBS="-lnng"
if [ "$NANONEXT_TLS" ]; then
  echo "trying with TLS support"
  PKG_LIBS="$PKG_LIBS -lmbedtls -lmbedx509 -lmbedcrypto"
fi
if [ "$NANONEXT_ARM" ]; then
  PKG_LIBS="$PKG_LIBS -latomic"
fi
PKG_CFLAGS=""
LIB_VER="1.5.2"
SYS_LIB=0

# Check for custom locations
if [ "$INCLUDE_DIR" ] || [ "$LIB_DIR" ]; then
  echo "found INCLUDE_DIR and/or LIB_DIR..."
  PKG_CFLAGS="-I$INCLUDE_DIR $PKG_CFLAGS"
  PKG_LIBS="-L$LIB_DIR $PKG_LIBS"

elif [ -d "$HOME/vcpkg/installed/x64-linux/include/nng" ]; then
  echo "found libnng vcpkg installation..."
  PKG_CFLAGS="-I$HOME/vcpkg/installed/x64-linux/include $PKG_CFLAGS"
  PKG_LIBS="-L$HOME/vcpkg/installed/x64-linux/lib $PKG_LIBS"
  if [ -d "$HOME/vcpkg/installed/x64-linux/include/mbedtls" ]; then
    echo "found mbedtls vcpkg installation... using TLS support"
    PKG_LIBS="$PKG_LIBS -lmbedtls -lmbedx509 -lmbedcrypto"
  fi
  SYS_LIB=1

elif [ -d "/usr/local/include/nng" ]; then
  echo "found system libnng installation..."
  PKG_CFLAGS="-I/usr/local/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/local/lib $PKG_LIBS"
  if [ -d "/usr/local/include/mbedtls" ]; then
    echo "found system mbedtls installation... using TLS support"
    PKG_LIBS="$PKG_LIBS -lmbedtls -lmbedx509 -lmbedcrypto"
  fi
  SYS_LIB=1

elif [ -d "/usr/include/nng" ]; then
  echo "found system libnng installation..."
  PKG_CFLAGS="-I/usr/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/lib $PKG_LIBS"
  if [ -d "/usr/include/mbedtls" ]; then
    echo "found system mbedtls installation... using TLS support"
    PKG_LIBS="$PKG_LIBS -lmbedtls -lmbedx509 -lmbedcrypto"
  fi
  SYS_LIB=1

elif [ -d "/usr/local/opt/nng" ]; then
  echo "found libnng Homebrew installation..."
  PKG_CFLAGS="-I/usr/local/opt/nng/include $PKG_CFLAGS"
  PKG_LIBS="-L/usr/local/opt/nng/lib $PKG_LIBS"
  if [ -d "/usr/local/opt/mbedtls" ]; then
    echo "found mbedtls Homebrew installation... using TLS support"
    PKG_LIBS="$PKG_LIBS -lmbedtls -lmbedx509 -lmbedcrypto"
  fi
  SYS_LIB=1

else
  echo "prior system libnng installation not found"
  echo "preparing to download and build library from source..."
  curl -L https://github.com/nanomsg/nng/archive/refs/tags/v$LIB_VER.tar.gz -o nng.tar.gz
  gzip -dc nng.tar.gz | tar -xf -
  rm -f nng.tar.gz
  cd nng-$LIB_VER
  mkdir build
  cd build
  which cmake
  if [ $? -ne 0 ]; then
    export PATH=$PATH:/Applications/CMake.app/Contents/bin
  fi
  cmake -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -fPIC" -DNNG_ELIDE_DEPRECATED=1 -DNNG_TESTS=0 -DNNG_TOOLS=0 ..
  make
  cd ../..
  mkdir lib
  mv -f nng-$LIB_VER/build/libnng.a lib
  mv -f nng-$LIB_VER/include ./
  rm -rf nng-$LIB_VER
  PKG_CFLAGS="-I`pwd`/include $PKG_CFLAGS"
  PKG_LIBS="-L`pwd`/lib $PKG_LIBS"

fi

# For debugging
# echo "Using PKG_CFLAGS=$PKG_CFLAGS"
# echo "Using PKG_LIBS=$PKG_LIBS"

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

# Test for libnng
echo "#include $PKG_TEST_HEADER" | ${CC} ${PKG_CFLAGS} ${CFLAGS} -E -xc - >/dev/null 2>&1

if [ $? -ne 0 ]; then
  if [ "$SYS_LIB" -ne 1 ]; then
    echo "------------------------------[ NANONEXT ]------------------------------"
    echo "Configuration failed because 'libnng' was not found."
    echo "Automatic download and/or build also failed. Try installing:"
    echo " * deb: libnng-dev (Debian, Ubuntu, etc.)"
    echo " * rpm: nng-devel (Fedora, CentOS etc.)"
    echo " * arch: https://aur.archlinux.org/nng.git (Arch from AUR)"
    echo " * brew: nng (MacOS)"
    echo "Alternatively:"
    echo " * vcpkg: nng (Linux/MacOS, follow getting started instructions at"
    echo "               https://vcpkg.io/ starting from your HOME directory)"
    echo "If 'libnng' is already installed but in a non-standard location, you"
    echo "may set INCLUDE_DIR and LIB_DIR manually via:"
    echo "R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'"
    echo "-------------------------------------------------------------------------"
    exit 1
  else
    echo "Attempt to use system libnng failed"
    echo "Preparing to download and build library from source..."
    curl -L https://github.com/nanomsg/nng/archive/refs/tags/v$LIB_VER.tar.gz -o nng.tar.gz
    gzip -dc nng.tar.gz | tar -xf -
    rm -f nng.tar.gz
    cd nng-$LIB_VER
    mkdir build
    cd build
    which cmake
    if [ $? -ne 0 ]; then
      export PATH=$PATH:/Applications/CMake.app/Contents/bin
    fi
    cmake -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -fPIC" -DNNG_ELIDE_DEPRECATED=1 -DNNG_TESTS=0 -DNNG_TOOLS=0 ..
    make
    cd ../..
    mkdir lib
    mv -f nng-$LIB_VER/build/libnng.a lib
    mv -f nng-$LIB_VER/include ./
    rm -rf nng-$LIB_VER
    PKG_CFLAGS="-I`pwd`/include $PKG_CFLAGS"
    PKG_LIBS="-L`pwd`/lib $PKG_LIBS"
    # Test for libnng
    echo "#include $PKG_TEST_HEADER" | ${CC} ${PKG_CFLAGS} ${CFLAGS} -E -xc - >/dev/null 2>&1
    if [ $? -ne 0 ]; then
      echo "------------------------------[ NANONEXT ]------------------------------"
      echo "Configuration failed because 'libnng' was not found."
      echo "Automatic download and/or build also failed. Try installing:"
      echo " * deb: libnng-dev (Debian, Ubuntu, etc.)"
      echo " * rpm: nng-devel (Fedora, CentOS etc.)"
      echo " * arch: https://aur.archlinux.org/nng.git (Arch from AUR)"
      echo " * brew: nng (MacOS)"
      echo "Alternatively:"
      echo " * vcpkg: nng (Linux/MacOS, follow getting started instructions at"
      echo "               https://vcpkg.io/ starting from your HOME directory)"
      echo "If 'libnng' is already installed but in a non-standard location, you"
      echo "may set INCLUDE_DIR and LIB_DIR manually via:"
      echo "R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'"
      echo "-------------------------------------------------------------------------"
      exit 1
    fi
  fi
fi

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

# Success
exit 0

