#!/usr/bin/env zsh

# Linux by Intent build environment for zsh.
# Source this from a dedicated build shell instead of placing the values
# in ~/.zshrc.

emulate -L zsh

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

export LBI_ROOT="${LBI_ROOT:-$HOME/linux-by-intent}"
export LBI_SOURCES="${LBI_SOURCES:-$LBI_ROOT/sources}"
export LBI_TOOLS="${LBI_TOOLS:-$LBI_ROOT/tools}"
export LBI_BOOT="${LBI_BOOT:-/boot}"
export LBI_ESP_MOUNT="${LBI_ESP_MOUNT:-$LBI_ROOT/boot/efi}"
export LBI_ARCH="${LBI_ARCH:-x86_64}"
export LBI_TARGET="${LBI_TARGET:-$LBI_ARCH-lbi-linux-musl}"
export LWI_MAKE_JOBS="${LWI_MAKE_JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || printf '1')}"
export LBI_LOCAL_MIRROR="${LBI_LOCAL_MIRROR:-}"
export LWI_CFLAGS="${LWI_CFLAGS:-}"
export LWI_CXXFLAGS="${LWI_CXXFLAGS:-$LWI_CFLAGS}"
export LWI_MAKE_FLAGS="${LWI_MAKE_FLAGS:--j$LWI_MAKE_JOBS}"
export LBI_CUSTOM_LDFLAGS="${LBI_CUSTOM_LDFLAGS:-}"
export LBI_BOOTLOADER_ID="${LBI_BOOTLOADER_ID:-LinuxByIntent}"

if [[ -d "$LBI_TOOLS/bin" ]]; then
	if [[ ":$PATH:" != *":$LBI_TOOLS/bin:"* ]]; then
		export PATH="$LBI_TOOLS/bin:$PATH"
	fi
fi

# 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() {
	local 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() {
	local 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 \
		"$@"
}

umask 022
