64 lines
2.2 KiB
Bash
Executable file
64 lines
2.2 KiB
Bash
Executable file
#!/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 "$@"
|