Building
Prerequisites
The project uses Nix for reproducible development environments:
# Enter the development shell (installs all dependencies)
nix develop
Or install manually:
GCC 14+ (C++26 support)
Meson + Ninja
Valgrind (for memory checking)
gcovr / lcov (for coverage)
Doxygen (for API documentation)
Python 3 with Sphinx, Breathe, Exhale (for documentation)
cppcheck, cpplint, clang-format (for linting)
Build Targets
The project provides a Makefile with convenience targets:
make build-debug # Debug build with ASan, UBSan, and coverage
make build-release # Optimized release build with LTO
make install # Install release build to system
make test # Run tests, valgrind, and coverage analysis
make lint # Auto-format, static analysis, style checks
make docs # Generate HTML and man page documentation
make clean # Remove build directories
Test Suites
Tests are organized into suites:
Default suite: Unit tests that run without .mo files
mo suite: Tests requiring compiled .mo files (needs
msgfmt)valgrind suite: Memory checking under Valgrind
# Run all non-MO tests
meson test -C builddir --no-suite mo --no-suite valgrind
# Run valgrind checks
meson test -C builddir --suite valgrind
# Run MO-dependent tests (requires working msgfmt)
meson test -C builddir --suite mo
Coverage
Build with coverage instrumentation and generate reports:
make test
# Reports are generated automatically:
# - Branch coverage (gcovr --branches)
# - Condition/MC/DC coverage (gcovr --decisions)
# - Line coverage
# - HTML report at builddir-debug/coverage.html