Replace the single file-structure.md with a stratified layout designed
for AI/agent skill consumption: tables and concrete identifiers over
prose, files loaded on demand, content separated by churn rate.
Layers:
- architecture/ stable structural reference (overview, source-map,
test-map, data-flow)
- patterns/ memory, commands, autocomplete, events, xmpp,
encryption, ui, plugins
- testing/ unit-tests, stubs, functional-tests, bench
- build/ local, docker, ci
- playbooks/ add-command, add-test, add-autocomplete,
add-event-handler, add-encryption
- gotchas.md append-only dated entries (seven seed entries)
- wip/ branch-specific notes; deleted on merge to master
Stable layers describe cproof on master only. In-flight feature
branches (currently feat/ai) get a single file under wip/.
INDEX.md is the entry map with churn labels; SKILL.md is the
always-loaded skill hint pointing to it.
69 lines
2.1 KiB
Markdown
69 lines
2.1 KiB
Markdown
# Local build
|
|
|
|
Reference for `autogen.sh` / `configure` / `make` flags. **Do not run these
|
|
on the host as a default workflow** — see `build/docker.md`. This file
|
|
documents what the canonical Docker build does internally.
|
|
|
|
## Toolchain
|
|
|
|
- autotools: `autoconf`, `automake`, `libtool`, `autoconf-archive`.
|
|
- C compiler: `gcc` (CI) or `clang`.
|
|
- GLib 2, ncursesw, OpenSSL, libstrophe, libreadline.
|
|
- Optional: libcmocka (tests), libsignal-protocol-c (OMEMO), libotr5 (OTR),
|
|
gpgme (PGP), libcurl (HTTP), libmicrohttpd (HTTP server features),
|
|
libnotify, libgcrypt, Python (plugins).
|
|
|
|
The full Debian package list is in `Dockerfile.debian` — treat that as the
|
|
authoritative dependency list.
|
|
|
|
## Sequence
|
|
|
|
```sh
|
|
./autogen.sh # generate configure from configure.ac
|
|
./configure [opts]
|
|
make -jN
|
|
```
|
|
|
|
`autogen.sh` runs `aclocal`, `autoheader`, `automake`, `autoconf`, `libtoolize`.
|
|
|
|
## Useful `./configure` flags
|
|
|
|
| Flag | Effect |
|
|
|---|---|
|
|
| `--enable-debug` | Debug build (the `configure-debug` script wraps this). |
|
|
| `--disable-omemo` / `--disable-otr` / `--disable-pgp` | Drop encryption stack. |
|
|
| `--disable-python-plugins` | C-only plugins. |
|
|
| `--disable-notifications` | No libnotify. |
|
|
| `--prefix=<path>` | Install prefix. |
|
|
|
|
`./configure --help` prints the full set; flag names track upstream Profanity
|
|
closely.
|
|
|
|
## `configure-debug`
|
|
|
|
Convenience script at repo root. Roughly:
|
|
|
|
```sh
|
|
./autogen.sh
|
|
./configure --enable-debug --prefix=$(pwd)/install
|
|
```
|
|
|
|
Tweak in-script if you want different debug knobs.
|
|
|
|
## `make` targets
|
|
|
|
| Target | What |
|
|
|---|---|
|
|
| `make` | Builds the `profanity` binary (and `cproof` symlink, if rename has progressed to it). |
|
|
| `make check` | Builds and runs the unit-test suite. |
|
|
| `make clean` | Wipes object files. |
|
|
| `make distclean` | Wipes generated configure artefacts too. |
|
|
|
|
## Why this is host-unfriendly
|
|
|
|
- Library version drift between the host (a workstation) and the canonical
|
|
Debian build means the host build can succeed while CI fails (or vice
|
|
versa) — bugs that don't reproduce in either env are very expensive.
|
|
- `Dockerfile.debian` pins the OS and package set used by CI. Mirror it
|
|
locally instead of fighting the host.
|