Task: Implement Hotfix: a Boost library landed without its vcpkg port
Table of Contents
This page documents a task in the Hotfix: a Boost library landed without its vcpkg port story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
Declare the port the decimal type needs, prove the translation unit and its consumer build against a vcpkg tree that did not have it, and leave a check that names the port the next time a Boost library arrives without one.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Hotfix: a Boost library landed without its vcpkg port |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-09-28 |
3. Acceptance
- A clean configure installs
boost-multiprecision, and the decimal translation unit compiles against it. - The decimal suite and the bond leg amount suite pass.
check_boost_dependencies.pypasses on the tree, and fails when the port is removed from the manifest, naming the include and the line to add.- The check runs before the Continuous Linux build.
4. Plan
- Add the port to
vcpkg.jsonand reconfigure, so vcpkg itself proves the header is installed rather than assumed. - Build the decimal unit and a consumer, and run their suites.
- Write the check against the vendored ports' own manifests, and prove it both ways: passing on the tree, failing with the port removed.
- Wire it into the Linux workflow before the build, then raise the pull request.
5. Measurements
Every number this task claims about a tree, with the command that produced it and the commit it was measured at.
| What | Value | Command | Commit |
|---|---|---|---|
| Boost header directories used by the tree | 18 | python3 build/scripts/check_boost_dependencies.py |
this branch |
| Ports vcpkg installs for the declared set | 116 | same | this branch |
| Missing ports, before the fix | 1: boost-multiprecision |
same, with the port removed from the manifest | this branch |
| Missing ports, after the fix | 0 | same | this branch |
| Port installed by a clean configure | boost-multiprecision:x64-linux@1.91.0 |
cmake --preset linux-clang-debug-make |
this branch |
| Decimal suite | 71 assertions, 17 cases, all pass | ores.utility.tests "[decimal]" |
this branch |
| Bond leg amount suite | 28 assertions, 3 cases, all pass | ores.trading.core.tests "[bond_leg_amount]" |
this branch |
6. Notes
- The header was genuinely absent from this worktree's vcpkg tree as well, which is why the failure is not a CI cache artefact: the tree had never installed the port, and the include compiled nowhere. That is also why the check could be proved cheaply, by removing the line and re-running it.
- The check accepts a library that arrives transitively.
boost-mathis installed becauseboost-multiprecisiondepends on it and is not declared; a check that demanded one line per include would fail the tree for being right. - The manifest turned out not to be the only file the build needed. The
root
find_package(Boost ... COMPONENTS ...)declares every Boost library the project builds against, header-only ones included, and the follow-up task Declare the Boost component in CMake, not only the vcpkg port addsmultiprecisionthere. That is the declaration that fails at configure time when the port is missing, which this task's own run confirmed only after the fact. No link line changes: the header-only libraries already in the list are not linked either. - A pull-request-time version of the check would need the workflow to fetch the vcpkg submodule, which no pull-request workflow does today. The story records that option rather than taking it, because it changes the cost of every pull request.
7. PRs
| PR | Title |
|---|---|
8. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
9. Result
vcpkg.json declares boost-multiprecision, and a clean configure of this
worktree's preset installed boost-multiprecision:x64-linux@1.91.0 (with
boost-math, which it depends on). The decimal translation unit compiles,
the decimal suite passes 71 assertions in 17 cases, and the bond leg amount
suite, which consumes the type the commit converted, passes 28 assertions
in 3 cases.
build/scripts/check_boost_dependencies.py compares the
boost/<library>/ directories the tree includes with the closure of the
declared ports, read from the ports' own manifests. On this tree it reports
18 directories used and 116 ports installed, with nothing missing; with the
new line removed from the manifest it fails and names the include and the
line to add. Continuous Linux runs it before the build.