Initial commit: DPM core library, CLI, bundled info module, and tests
This commit is contained in:
92
docs/BUILD.md
Normal file
92
docs/BUILD.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# Building DPM Core
|
||||
|
||||
## 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, libstdc++, and libdl, so it builds and runs on a minimal system.
|
||||
|
||||
## Building for development
|
||||
|
||||
```
|
||||
cmake -B <build-dir> -DCMAKE_BUILD_TYPE=Debug
|
||||
cmake --build <build-dir>
|
||||
```
|
||||
|
||||
Artifacts land in:
|
||||
|
||||
```
|
||||
<build-dir>/bin/dpm the CLI
|
||||
<build-dir>/lib/libdpm-core.so the core library
|
||||
<build-dir>/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 core 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 core, including the system-installed one.
|
||||
|
||||
### Running the tests
|
||||
|
||||
```
|
||||
ctest --test-dir <build-dir> --output-on-failure
|
||||
```
|
||||
|
||||
This runs the core 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.
|
||||
|
||||
### Running the CLI from the build tree
|
||||
|
||||
The build tree plus the test fixtures form a complete self-contained environment; no installation is required. Point the CLI at local paths with its override flags:
|
||||
|
||||
```
|
||||
<build-dir>/bin/dpm --config-dir ./tests/fixtures/conf --module-path <build-dir>/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.
|
||||
|
||||
## Generating the code reference
|
||||
|
||||
When Doxygen is present, the build offers a docs target that generates the API and source reference from the documentation comments carried in the headers and sources. Two output formats are available as configure-time options:
|
||||
|
||||
- **-DDPM_DOCS_PDF** (default ON) — PDF reference, via Doxygen's native LaTeX output; requires pdflatex and makeindex
|
||||
- **-DDPM_DOCS_HTML** (default OFF) — HTML reference
|
||||
|
||||
Generate and compile the PDF reference:
|
||||
|
||||
```
|
||||
cmake --build <build-dir> --target docs-pdf
|
||||
```
|
||||
|
||||
The PDF lands at <build-dir>/docs/latex/refman.pdf.
|
||||
|
||||
With DPM_DOCS_HTML enabled at configure time, the docs target additionally produces the HTML reference in <build-dir>/docs/html:
|
||||
|
||||
```
|
||||
cmake -B <build-dir> -DDPM_DOCS_HTML=ON
|
||||
cmake --build <build-dir> --target docs
|
||||
```
|
||||
|
||||
## Building, testing, and installing a release
|
||||
|
||||
One build tree carries the whole sequence — the test suite builds and runs in any configuration, so the artifacts that get tested are the artifacts that get installed:
|
||||
|
||||
```
|
||||
cmake -B <build-dir> -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
|
||||
cmake --build <build-dir>
|
||||
ctest --test-dir <build-dir> --output-on-failure
|
||||
cmake --install <build-dir>
|
||||
```
|
||||
|
||||
This is the packaging flow: configure once, build once, test what was built, install what was tested. Omit -DCMAKE_INSTALL_PREFIX=/usr for a /usr/local install. Under the install prefix this installs:
|
||||
|
||||
```
|
||||
bin/dpm the CLI
|
||||
lib/libdpm-core.so the core library
|
||||
lib/dpm/modules/info.so the bundled info module
|
||||
include/dpm/ the public header
|
||||
```
|
||||
|
||||
Core configuration installs to /etc/dpm/conf.d/core.conf regardless of prefix.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user