# Building libdpm-core.so and the dpm binary ## Prerequisites - GCC/G++ supporting C++20 - CMake 3.22 or later - Make - Doxygen (optional, for the code reference) - `pdflatex` and `makeindex` (optional, for the PDF code reference) The library itself depends only on libc and libstdc++, so it builds and runs on a minimal system. ## Development Builds Configure a build tree and compile it: ``` cmake -B -DCMAKE_BUILD_TYPE=Debug cmake --build ``` Artifacts land in: ``` /bin/dpm the dpm binary /lib/libdpm-core.so the library /modules/info.so the bundled info module ``` The `dpm` binary built here finds the locally built `libdpm-core.so` on its own — an embedded library search path points it at the `lib/` directory next to it in the build tree, so running it directly uses the library you just built with nothing to set up first. This is only the default: `LD_LIBRARY_PATH` takes precedence over the embedded path, so the binary can be pointed at any other libdpm-core, including the system-installed one. ### Automated Testing ``` ctest --test-dir --output-on-failure ``` This runs the API test binary (which exercises the full load-time validation matrix against the fixture modules in `tests/fixtures/`) and the CLI end-to-end tests. ### Manual Execution The build tree plus the test fixtures form a complete self-contained environment; no installation is required. Point the `dpm` binary at local paths with its override flags: ``` /bin/dpm --config-dir ./tests/fixtures/conf --module-path /modules info version ``` The flags `--config-dir`, `--module-path`, `--root`, and `--log-level` each redirect the corresponding system default; `--root` sets the target root that package-operation modules act on. ## Release Builds One build tree carries the whole sequence, so the artifacts that get tested are the artifacts that get installed: ``` cmake -B -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr cmake --build ctest --test-dir --output-on-failure cmake --install ``` This is the packaging flow: configure once, build once, test what was built, install what was tested. ### Automated Testing The test suite builds and runs in any configuration, so a release tree is tested by the same command a development tree is: ``` ctest --test-dir --output-on-failure ``` Running it between the build and the install step is what makes the sequence above a packaging flow rather than four unrelated commands. ### Installation ``` cmake --install ``` Omit `-DCMAKE_INSTALL_PREFIX=/usr` at configure time for a `/usr/local` install. Under the install prefix this installs: ``` bin/dpm the dpm binary lib/libdpm-core.so the library lib/dpm/modules/info.so the bundled info module include/dpm/ the public header ``` The library's own configuration installs to `/etc/dpm/conf.d/core.conf` regardless of prefix.