#!/bin/sh

# Linux by Intent build environment for POSIX sh.
# Source this from a dedicated build shell instead of placing the values
# in a persistent login profile.

unset CC CXX CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
unset LD_LIBRARY_PATH PKG_CONFIG_PATH PKG_CONFIG_LIBDIR DESTDIR

if [ -z "${LBI_ROOT-}" ]; then
  LBI_ROOT="$HOME/linux-by-intent"
fi

if [ -z "${LBI_SOURCES-}" ]; then
  LBI_SOURCES="$LBI_ROOT/sources"
fi

if [ -z "${LBI_TOOLS-}" ]; then
  LBI_TOOLS="$LBI_ROOT/tools"
fi

if [ -z "${LBI_BOOT-}" ]; then
  LBI_BOOT="/boot"
fi

if [ -z "${LBI_ESP_MOUNT-}" ]; then
  LBI_ESP_MOUNT="$LBI_ROOT/boot/efi"
fi

if [ -z "${LBI_ARCH-}" ]; then
  LBI_ARCH="x86_64"
fi

if [ -z "${LBI_TARGET-}" ]; then
  LBI_TARGET="$LBI_ARCH-lbi-linux-musl"
fi

if [ -z "${LWI_MAKE_JOBS-}" ]; then
  LWI_MAKE_JOBS="$(getconf _NPROCESSORS_ONLN 2>/dev/null || printf '1')"
fi

if [ -z "${LBI_LOCAL_MIRROR-}" ]; then
  LBI_LOCAL_MIRROR=""
fi

if [ -z "${LWI_CFLAGS-}" ]; then
  LWI_CFLAGS=""
fi

if [ -z "${LWI_CXXFLAGS-}" ]; then
  LWI_CXXFLAGS="$LWI_CFLAGS"
fi

if [ -z "${LWI_MAKE_FLAGS-}" ]; then
  LWI_MAKE_FLAGS="-j$LWI_MAKE_JOBS"
fi

if [ -z "${LBI_CUSTOM_LDFLAGS-}" ]; then
  LBI_CUSTOM_LDFLAGS=""
fi

if [ -z "${LBI_BOOTLOADER_ID-}" ]; then
  LBI_BOOTLOADER_ID="LinuxByIntent"
fi

umask 022

export LBI_ROOT LBI_SOURCES LBI_TOOLS LBI_BOOT
export LBI_ESP_MOUNT LBI_ARCH LBI_TARGET LWI_MAKE_JOBS LWI_MAKE_FLAGS LBI_LOCAL_MIRROR
export LWI_CFLAGS LWI_CXXFLAGS LBI_CUSTOM_LDFLAGS
export LBI_BOOTLOADER_ID

if [ -d "$LBI_TOOLS/bin" ]; then
  case ":$PATH:" in
    *":$LBI_TOOLS/bin:"*) ;;
    *) PATH="$LBI_TOOLS/bin:$PATH" ;;
  esac
fi

export PATH

# Reusable build-system helpers.
# Any extra flags passed to these functions are forwarded as-is and can
# override defaults by appearing later on the command line.

lbi_configure() {
  ./configure \
    --prefix=/system \
    --bindir=/system/binaries \
    --sbindir=/system/systembinaries \
    --libdir=/system/libraries \
    --libexecdir=/system/systembinaries \
    --includedir=/system/headers \
    --sysconfdir=/system/configuration \
    --localstatedir=/system/variable \
    --mandir=/system/documentation/man-pages \
    --infodir=/system/documentation/info \
    "$@"
}

lbi_meson() {
  lbi_meson_builddir=build

  case "${1-}" in
    '') ;;
    -*) ;;
    *)
      lbi_meson_builddir=$1
      shift
      ;;
  esac

  meson setup "$lbi_meson_builddir" \
    --prefix=/system \
    --bindir=/system/binaries \
    --sbindir=/system/systembinaries \
    --libdir=/system/libraries \
    --libexecdir=/system/systembinaries \
    --includedir=/system/headers \
    --sysconfdir=/system/configuration \
    --localstatedir=/system/variable \
    --mandir=/system/documentation/man-pages \
    --infodir=/system/documentation/info \
    "$@"
}

lbi_cmake() {
  lbi_cmake_builddir=build

  case "${1-}" in
    '') ;;
    -*) ;;
    *)
      lbi_cmake_builddir=$1
      shift
      ;;
  esac

  cmake -S . -B "$lbi_cmake_builddir" \
    -DCMAKE_INSTALL_PREFIX=/system \
    -DCMAKE_INSTALL_BINDIR=/system/binaries \
    -DCMAKE_INSTALL_SBINDIR=/system/systembinaries \
    -DCMAKE_INSTALL_LIBDIR=/system/libraries \
    -DCMAKE_INSTALL_LIBEXECDIR=/system/systembinaries \
    -DCMAKE_INSTALL_INCLUDEDIR=/system/headers \
    -DCMAKE_INSTALL_SYSCONFDIR=/system/configuration \
    -DCMAKE_INSTALL_LOCALSTATEDIR=/system/variable \
    -DCMAKE_INSTALL_MANDIR=/system/documentation/man-pages \
    -DCMAKE_INSTALL_INFODIR=/system/documentation/info \
    "$@"
}
