.PHONY: bootstrap setup test lint fmt fmt-check check build build-bin install dev clean docker hooks

YARN := yarn run

bootstrap:
	@script/bootstrap

setup:
	@script/setup

test:
	@script/test

lint:
	@script/lint

fmt:
	@script/fmt

fmt-check:
	@script/fmt-check

check:
	@script/check

build:
	@script/build

# Bundles the built dist/, so the binary reports the version script/build
# stamped.
#
# On Linux, nix's bun loads through a C library in the nix store, and a binary
# bun compiles from itself keeps that loader. nix-collect-garbage can delete
# that C library, and the binary then no longer starts.
# A --target other than the host's makes bun use its downloaded release build,
# which loads through the system's C library. That is tested only on x86-64,
# with the baseline build, so other Linux machines are refused.
build-bin: build
	case "$$(uname -s)-$$(uname -m)" in \
	    Linux-x86_64) target=--target=bun-linux-x64-baseline ;; \
	    Linux-*) echo "make build-bin: on Linux only x86-64 is supported" >&2; exit 1 ;; \
	    *) target= ;; \
	esac; \
	nix-shell -p bun --run "bun build dist/bin/quak.js --compile $$target --outfile bin/quak"

install: build-bin
	mkdir -p ~/bin
	cp bin/quak ~/bin/quak
	chmod +x ~/bin/quak

dev:
	@$(YARN) tsc --watch

clean:
	@rm -rf dist coverage .vitest-cache *.tsbuildinfo

docker:
	@script/docker

hooks:
	@script/install-precommit
