# Distro-neutral install (Ubuntu, Fedora, Mint, ...). Arch: use packaging/arch/PKGBUILD.
PREFIX ?= /usr
DESTDIR ?=

build:
	cargo build --release --locked

test:
	cargo test --release --locked

e2e: build
	sudo tests/e2e.sh

install:
	install -Dm755 target/release/a0 $(DESTDIR)$(PREFIX)/bin/a0
	install -Dm644 packaging/systemd/a0.service $(DESTDIR)$(PREFIX)/lib/systemd/system/a0.service
	install -Dm644 packaging/systemd/a0-notify.service $(DESTDIR)$(PREFIX)/lib/systemd/user/a0-notify.service
	test -e $(DESTDIR)/etc/a0/config.toml || install -Dm644 packaging/config.example.toml $(DESTDIR)/etc/a0/config.toml
	@echo "next: add a [[root]] to /etc/a0/config.toml, then: systemctl enable --now a0.service"

uninstall:
	@echo "run 'sudo a0 thaw-all' first if anything is frozen"
	rm -f $(DESTDIR)$(PREFIX)/bin/a0 $(DESTDIR)$(PREFIX)/lib/systemd/system/a0.service $(DESTDIR)$(PREFIX)/lib/systemd/user/a0-notify.service

.PHONY: build test e2e install uninstall

# Fully static binaries for x86_64 and aarch64 (run on every distro), built in an Alpine container.
# aarch64 is cross-compiled with cargo-zigbuild (zig handles the bundled SQLite/zstd C code).
static:
	mkdir -p dist
	podman run --rm -v "$(CURDIR)":/src -v a0-cargo-cache:/usr/local/cargo/registry -v a0-cargo-bin:/opt/cbin -w /src docker.io/library/rust:1-alpine \
	  sh -c 'set -e; apk add --no-cache musl-dev zig >/dev/null; export PATH=/opt/cbin/bin:$$PATH CARGO_TARGET_DIR=/src/target-musl; \
	    cargo build --release --locked && cp target-musl/release/a0 dist/a0-x86_64; \
	    command -v cargo-zigbuild >/dev/null || cargo install --locked --root /opt/cbin cargo-zigbuild; \
	    rustup target add aarch64-unknown-linux-musl; \
	    cargo zigbuild --release --locked --target aarch64-unknown-linux-musl && cp target-musl/aarch64-unknown-linux-musl/release/a0 dist/a0-aarch64'

site: static
	site/build.sh

.PHONY: static site
