#!/bin/sh set -u # shellcheck disable=SC2155 readonly LILY_SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)" readonly LILY_SRC_DIR="${LILY_SRC_DIR:-$LILY_SCRIPT_DIR/src}" readonly LILY_TEST_DIR="${LILY_TEST_DIR:-$LILY_SCRIPT_DIR/test}" readonly LILY_BUILD_DIR="${LILY_BUILD_DIR:-$LILY_SCRIPT_DIR/out}" readonly HBLANG_GIT="https://git.ablecorp.us/mlokis/hblang" readonly HBLANG_COMMIT="fcbcaac67dd47887fef81bc62d4b66a6cf071f8c" readonly HBLANG_BRANCH="main" readonly HBLANG_CFLAGS="--path-projection lily $LILY_SRC_DIR/lib.hb ${HBLANG_CFLAGS:-}" die() { error "$2" && exit "$1"; } error() { printf "\033[31mERROR\033[0m: %s\n" "$1" 1>&2; } log() { printf "\033[32mINFO\033[0m: %s\n" "$1"; } warn() { printf "\033[33mWARN\033[0m: %s\n" "$1"; } fetch_step() { command -v zig >/dev/null 2>&1 || die 101 "'zig' binary not found in PATH" command -v git >/dev/null 2>&1 || die 101 "'git' binary not found in PATH" if [ -d "$LILY_BUILD_DIR/hblang" ]; then cd "$LILY_BUILD_DIR/hblang" || die 1 "cd to $LILY_BUILD_DIR/hblang failed" CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD >/dev/null 2>&1) [ "$CURR_BRANCH" = "$HBLANG_BRANCH" ] || git checkout "$HBLANG_BRANCH" >/dev/null 2>&1 CURR_COMMIT=$(git rev-parse HEAD >/dev/null 2>&1) [ "$CURR_COMMIT" = "$HBLANG_COMMIT" ] || git checkout "$HBLANG_COMMIT" >/dev/null 2>&1 else mkdir -p "$LILY_BUILD_DIR/hblang" git clone "$HBLANG_GIT" "$LILY_BUILD_DIR/hblang" --branch "$HBLANG_BRANCH" cd "$LILY_BUILD_DIR/hblang" || die 1 "cd to $LILY_BUILD_DIR/hblang failed" git checkout "$HBLANG_COMMIT" >/dev/null 2>&1 fi zig build install PATH="$LILY_BUILD_DIR/hblang/zig-out/bin:$PATH" cd "$LILY_SCRIPT_DIR" || die 1 "cd to $LILY_SCRIPT_DIR failed" } main() { mkdir -p "$LILY_BUILD_DIR" || die 1 "can't create build dir" fetch_step inp="${1:-main.hb}" [ -z "$inp" ] || [ ! -e "$inp" ] && die 1 "source file '$inp' does not exist" # shellcheck disable=SC2086 { hblang $HBLANG_CFLAGS $inp # todo: dont do this second compile if first fails hblang $HBLANG_CFLAGS $inp --fmt >/dev/null 2>&1 } } main "$@"