# 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=` | 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.