diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 16:11:25 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-17 16:11:25 +0200 |
| commit | 7055723f8b79240ab2df1353eaaf3761f65414a9 (patch) | |
| tree | 0308d9a2649e44838b6beba85c9fb01c822c4751 /CLAUDE.md | |
| parent | f03567a04b68ab19b5f16f0b6d56d9c08b14c818 (diff) | |
| download | colitur-7055723f8b79240ab2df1353eaaf3761f65414a9.tar.gz colitur-7055723f8b79240ab2df1353eaaf3761f65414a9.zip | |
feat(cli): a Makefile, a man page, and --help
Three things the project had no answer for: how to install it without
knowing dune, where to read about it, and what it does when asked.
Makefile, same shape as lectio's -- PREFIX ?= $(HOME)/.local, BINDIR,
MANDIR, and the '## '-comment help target -- so the two siblings are
driven the same way. Every recipe wraps dune in `opam exec --`, which is
the actual point of having one here: `make build` works from a plain
shell with no `eval $(opam env)` first. install goes through `dune
install` rather than a hand-rolled copy, because the binary finds its
calendar data relative to its own path; the man page is installed
separately to share/man/man1, matching lectio. install and uninstall
were both run against a scratch prefix and checked: uninstall leaves
zero files behind.
PREFIX defaults to ~/.local because that is where lectio installs and
where it actually lives on this machine, so colitur lands on an existing
PATH with no shell change. An earlier install this session went to
~/opt/colitur, which was me over-applying a rule meant for third-party
tools to one of the author's own projects; it has been removed rather
than left as a second, staler binary competing on PATH.
man/colitur.1 documents the four commands, both output formats and why
they differ, COLITUR_DATA_DIR and its refusal to fall back, the data
resolution order, exit statuses, and -- deliberately -- the limitations:
EF only, Epistle and Gospel only with the chants unbuilt and rejected
rather than guessed, and the BVM Saturday Mass-selection gap. A man page
that only lists what works is half a man page. Renders clean under
`groff -ww -z`, no warnings.
--help prints to stdout and exits 0; a usage error prints one line to
stderr and exits 2. That is the Unix convention rather than a
preference: asking for help succeeded and should be pipeable, being
invoked wrongly did not and must not pollute stdout. Both directions are
asserted in cli.t, along with a loop confirming every command the help
text advertises is one the dispatch actually accepts -- the check that
catches help drifting away from the code.
Diffstat (limited to 'CLAUDE.md')
| -rw-r--r-- | CLAUDE.md | 32 |
1 files changed, 28 insertions, 4 deletions
@@ -291,7 +291,11 @@ M20 added by the `ef-major-litanies` task, M18 394 not 395 accordingly). Fixtures live in `test/fixtures/` with asserted SHA-256s. **CLI**: `colitur easter <year>`, `temporal <year>`, `day <year>`, -`readings <year>`. +`readings <year>`, `-h`/`--help`. Man page in `man/colitur.1`. + +`--help` prints to **stdout** and exits **0**; a usage error prints one line +to **stderr** and exits **2**. The distinction is asserted in `test/cli.t`, +both directions, because it is the sort of thing that silently rots. `readings` is a **separate command, not extra columns on `day`**, for a mechanical reason worth not rediscovering: a citation contains spaces and @@ -319,11 +323,31 @@ converters instead — that is reserved for `Slug`/`Lang`, whose `private string smart constructors deriving would bypass. ### Build & test + +There is a `Makefile` now (same shape as lectio's: `PREFIX ?= $(HOME)/.local`, +`## `-comment help target). Every recipe wraps dune in `opam exec --`, so make +works from a plain shell with no `eval $(opam env)` first. + +```sh +make help # list targets +make build +make test # fast suite, ~5 s (properties sample 200 years) +make check # full gate, ~2 min: every year 1583-9999, not a sample +make install # binary + calendar data + man page into ~/.local +make uninstall +``` + +`install` goes through `dune install`, not a hand-rolled copy, because the +binary finds its data relative to its own path (`<prefix>/share/colitur/ef`); +the man page is installed separately, to `$(PREFIX)/share/man/man1`, matching +lectio. The installed copy is a SNAPSHOT, not a link — `make reinstall` after +pulling. + +Raw dune still works if preferred: ```sh eval $(opam env) # activate the project-local switch (run from this dir) -dune build -dune test # fast suite, ~3 s -COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force # + every year 1583-9999, ~50 s +dune build && dune test +COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force dune exec colitur -- day 2026 | head ``` |
