#!/bin/sh

# Check system
GCC_VER=`gcc -dumpversion`
PKG_VER=`cat /var/lib/cpuminer-mtp/PKG_VERSION`
CPU_TYPE=`grep '^model name\s:' /proc/cpuinfo | head -n 1 | cut -d':' -f2 | sed -e 's/^\s*//g' -e 's/\s*$//g' -e 's/[^a-zA-Z0-9]/_/g' -e 's/_\+/_/g'`

# Binary to be used
BINARY="cpuminer-mtp_${PKG_VER}_GCC_${GCC_VER}_${CPU_TYPE}"
BINARY_PATH="/var/lib/cpuminer-mtp/binaries/${BINARY}"

# Standard build flags
CFLAGS="-O3 -march=native -Wall"

# Check if binary exists or has to be built
if [ -x "${BINARY_PATH}" ]; then
  echo "INFO: Using optimized ${BINARY_PATH} binary..."
  exec "${BINARY_PATH}" "${@}"
else
  echo "INFO: No binary exists for ${BINARY} plateform; building one..."
  echo "INFO: It will take around 1 minute to get built..."

  # Time to build a new binary
  TEMP_DIR=`mktemp -d`
  cp -a /var/lib/cpuminer-mtp/src ${TEMP_DIR}/
  OLD_PWD=`pwd`
  cd ${TEMP_DIR}/src/

  # Autogen
  ./autogen.sh >${TEMP_DIR}/autogen.log 2>&1
  if [ ! ${?} -eq 0 ]; then
    echo "ERROR: autogen.sh failed ! Log will be printed below"
    sleep 3
    cat ${TEMP_DIR}/autogen.log
    rm -rf "${TEMP_DIR}"
    exit 1
  fi
  echo "INFO: autogen.sh ran successfully."

  # Configure
  CFLAGS="${CFLAGS}" CXXFLAGS="${CFLAGS} -std=gnu++11" LDFLAGS="-lcrypto" ./configure --with-curl >${TEMP_DIR}/configure.log 2>&1
  if [ ! ${?} -eq 0 ]; then
    echo "ERROR: configure failed ! Log will be printed below"
    sleep 3
    cat ${TEMP_DIR}/configure.log
    rm -rf "${TEMP_DIR}"
    exit 2
  fi
  echo "INFO: configure ran successfully."

  # Build
  make -j`nproc` >${TEMP_DIR}/make.log 2>&1
  if [ ! ${?} -eq 0 ]; then
    echo "ERROR: make failed ! Log will be printed below"
    sleep 3
    cat ${TEMP_DIR}/make.log
    rm -rf "${TEMP_DIR}"
    exit 3
  fi
  if [ ! -f "./cpuminer" ]; then
    echo "ERROR: make ran successfully but no cpuminer binary as been produced"
    exit 4
  fi
  echo "INFO: make ran successfully."

  # Install binary and ran it
  strip -s cpuminer
  install -m 0755 cpuminer "${BINARY_PATH}"

  # Cleanup
  rm -rf "${TEMP_DIR}"
  cd "${OLD_PWD}"
  echo "INFO: Using newly built ${BINARY_PATH} binary..."
  exec "${BINARY_PATH}" "${@}"
  
fi
