#!/usr/bin/env bash
set -euo pipefail

if [[ $# -ne 4 ]]; then
  echo "Usage: $0 <python_executable> <transfer_engine_source_dir> <build_dir> <package_dir>" >&2
  exit 2
fi

PYTHON_EXECUTABLE="$1"
TRANSFER_ENGINE_SOURCE_DIR="$2"
BUILD_DIR="$3"
PACKAGE_DIR="$4"

detect_parallel_jobs() {
  if [[ -n "${CMAKE_BUILD_PARALLEL_LEVEL:-}" ]]; then
    printf '%s\n' "${CMAKE_BUILD_PARALLEL_LEVEL}"
    return
  fi

  if [[ -n "${BUILD_THREAD_NUM:-}" ]]; then
    printf '%s\n' "${BUILD_THREAD_NUM}"
    return
  fi

  if command -v nproc >/dev/null 2>&1; then
    nproc
    return
  fi

  if command -v getconf >/dev/null 2>&1; then
    getconf _NPROCESSORS_ONLN
    return
  fi

  if command -v sysctl >/dev/null 2>&1; then
    sysctl -n hw.logicalcpu
    return
  fi

  printf '4\n'
}

PARALLEL_JOBS="$(detect_parallel_jobs)"
GENERATOR_ARGS=()
if command -v ninja >/dev/null 2>&1; then
  GENERATOR_ARGS=(-G Ninja)
fi

mkdir -p "${BUILD_DIR}" "${PACKAGE_DIR}" "${PACKAGE_DIR}/lib"

cmake -S "${TRANSFER_ENGINE_SOURCE_DIR}" -B "${BUILD_DIR}" \
  "${GENERATOR_ARGS[@]}" \
  -DCMAKE_BUILD_TYPE=Release \
  -DTRANSFER_ENGINE_BUILD_PYTHON=ON \
  -DTRANSFER_ENGINE_BUILD_TESTS=OFF \
  -DTRANSFER_ENGINE_ENABLE_P2P_THIRD_PARTY=ON \
  -DTRANSFER_ENGINE_BUILD_BUNDLED_P2P_SO=ON \
  -DTRANSFER_ENGINE_PYTHON_OUTPUT_DIR="${PACKAGE_DIR}" \
  -DPython3_EXECUTABLE="${PYTHON_EXECUTABLE}"

cmake --build "${BUILD_DIR}" --target _transfer_engine --parallel "${PARALLEL_JOBS}"

if compgen -G "${BUILD_DIR}/lib/libp2p_transfer.so*" >/dev/null; then
  cp -a "${BUILD_DIR}"/lib/libp2p_transfer.so* "${PACKAGE_DIR}/lib/"
fi