LECTIO := lectio LECTIO_UI := lectio-ui LECTIO_WEB := lectio-web PREFIX ?= $(HOME)/.local BINDIR := $(PREFIX)/bin MANDIR := $(PREFIX)/share/man/man1 .PHONY: help build build-full install uninstall test vet fmt clean cross check-corpora add-corpus help: ## show this help @grep -hE '^[a-z-]+:.*##' $(MAKEFILE_LIST) | sed -E 's/:.*## /\t/' | sort build: ## build all three binaries (embeds only the Vulgate) go build -o $(LECTIO) ./cmd/lectio go build -o $(LECTIO_UI) ./cmd/lectio-ui go build -o $(LECTIO_WEB) ./cmd/lectio-web build-full: ## build all three with the optional corpora (wuj, drb, grb) embedded go build -tags fullbible -o $(LECTIO) ./cmd/lectio go build -tags fullbible -o $(LECTIO_UI) ./cmd/lectio-ui go build -tags fullbible -o $(LECTIO_WEB) ./cmd/lectio-web install: ## build and install the three binaries and man pages @mkdir -p $(BINDIR) $(MANDIR) go build -o $(BINDIR)/$(LECTIO) ./cmd/lectio go build -o $(BINDIR)/$(LECTIO_UI) ./cmd/lectio-ui go build -o $(BINDIR)/$(LECTIO_WEB) ./cmd/lectio-web install -m 644 man/lectio.1 man/lectio-ui.1 man/lectio-web.1 $(MANDIR) @echo "installed binaries to $(BINDIR) and man pages to $(MANDIR)" uninstall: ## remove installed binaries and man pages rm -f $(BINDIR)/$(LECTIO) $(BINDIR)/$(LECTIO_UI) $(BINDIR)/$(LECTIO_WEB) rm -f $(MANDIR)/lectio.1 $(MANDIR)/lectio-ui.1 $(MANDIR)/lectio-web.1 test: check-corpora ## run tests (with all corpora embedded, so corpus tests can resolve text) go test -tags fullbible ./... vet: ## go vet go vet ./... fmt: ## gofmt the tree gofmt -w . clean: ## remove build artifacts rm -f $(LECTIO) $(LECTIO_UI) $(LECTIO_WEB); rm -rf dist cross: ## cross-compile into dist/ @mkdir -p dist @for t in linux/amd64 linux/arm64 darwin/arm64 darwin/amd64 windows/amd64; do \ os=$${t%/*}; arch=$${t#*/}; ext=; [ $$os = windows ] && ext=.exe; \ echo " $$os/$$arch"; \ GOOS=$$os GOARCH=$$arch go build -o dist/$(LECTIO)-$$os-$$arch$$ext ./cmd/lectio; \ GOOS=$$os GOARCH=$$arch go build -o dist/$(LECTIO_UI)-$$os-$$arch$$ext ./cmd/lectio-ui; \ GOOS=$$os GOARCH=$$arch go build -o dist/$(LECTIO_WEB)-$$os-$$arch$$ext ./cmd/lectio-web; \ done # Validate every embedded corpus (CI gate). grb is EXEMPT: it is a scholarly # Septuagint corpus whose Book column intentionally carries Orthodox-canon # extras (1-4 Esdras/Maccabees, Odes, Psalms of Solomon) and manuscript variants # (…(Theodotion)/(Sinaiticus)/(Vaticanus)) that are not in the 73-key Catholic # canon and would collide with canonical keys if renamed. --corpus-check grb # correctly reports these; they are by design, not defects to fix here. check-corpora: ## validate every bundled corpus, core + optional (skips grb, see comment) @for f in internal/bible/corpora/*.tsv internal/bible/corpora_optional/*.tsv; do \ code=$$(basename $$f .tsv); \ [ "$$code" = grb ] && { echo "skipping grb (broader LXX canon)"; continue; }; \ echo "checking $$code"; \ go run -tags fullbible ./cmd/lectio --corpus-check $$code || exit 1; \ done # Validate then embed a corpus pair: make add-corpus CORPUS=fr-crampon SRC=/path/to/dir add-corpus: ## validate + copy a corpus pair into internal/bible/corpora/, then build @test -n "$(CORPUS)" || { echo "set CORPUS=" >&2; exit 2; } @test -n "$(SRC)" || { echo "set SRC=" >&2; exit 2; } go run ./cmd/lectio --corpus-check "$(SRC)/$(CORPUS).tsv" cp "$(SRC)/$(CORPUS).tsv" "$(SRC)/$(CORPUS).ini" internal/bible/corpora/ $(MAKE) build