build: prepare for subtree split #276

pull Sjors wants to merge 2 commits into bitcoin-core:master from Sjors:2026/05/subtree-split changing 49 files +312 −256
  1. Sjors commented at 9:29 AM on May 12, 2026: member

    We can use a subtree split to export only a subset of this repository to downstream projects. The only thing we need to do is publish and maintain a branch, e.g. lib, generated as follows:

    git subtree split --prefix=lib -b lib
    

    I published such a branch here: https://github.com/Sjors/libmultiprocess/commits/lib/

    Commits that don't touch the prefix directory are skipped entirely. Others are stripped of content outside the prefix. This of course breaks PGP signatures, but the lib branch commits are deterministically generated. On the Bitcoin Core side I plan to update the subtree linter to verify this.

    Because we can only export one directory, this PR moves the following library sources to lib/:

    • CMakeLists.txt
    • cmake
    • include
    • pkgconfig
    • src
    • test

    This leaves examples, documentation and CI outside the export. Tests could be moved out as well, but it seems useful to offer downstream projects an easy way to run these tests as part of their own CI.

    A new top-level CMakeLists.txt wrapper preserves 'cmake -S .' for standalone builds; this is also the only way to build the example/ subdirectory. See comments in CMakeLists.txt and lib/CMakeLists.txt for details on how lib/ adapts between the two build modes. This can use some CMake expertise eyes. Most of the existing CMakeList.txt content is simply moved, so it's best reviewed with --color-moved=dimmed-zebra.

    Commit 66d7b4871d47e77e89c80cb691436f4f86974971 can be avoided if we drop examples from cmake/libmultiprocess.cmake in Bitcoin Core in a separate PR first.

    Bitcoin Core side: https://github.com/Sjors/bitcoin/pull/113 (will upstream later)

    Fixes #232

  2. DrahtBot commented at 9:29 AM on May 12, 2026: none

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process. A summary of reviews will appear here.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #277 (Add std::unordered_set support and a helper BuildList to dedup list build handlers by ViniciusCestarii)
    • #274 (Add nonunix platform support by ryanofsky)
    • #272 (ci: add Windows job by Sjors)
    • #269 (proxy: add local connection limit to ListenConnections by enirox001)
    • #238 (cmake, ci: updates for recent nixpkgs by ryanofsky)
    • #231 (Add windows support by ryanofsky)
    • #212 (ci: add newdeps job testing newer versions of cmake and capnproto by ryanofsky)
    • #209 (cmake: Increase cmake policy version by ryanofsky)
    • #204 (cmake: support default build and test workflow by purpleKarrot)
    • #175 (Set cmake_minimum_required(VERSION 3.22) by maflcko)
    • #163 (build: set cmake policy version to 3.31 by purpleKarrot)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible typos and grammar issues:

    • Capn'Proto -> Cap'n Proto [misspelled project name; the intended name is clearly “Cap'n Proto”]

    <sup>2026-05-12 09:59:26</sup>

  3. build: move library sources under lib/ for subtree split
    Move the library sources (CMakeLists.txt, cmake/, include/, pkgconfig/,
    src/, test/) under a single lib/ prefix so that
    
        git subtree split --prefix=lib -b lib
    
    produces a 'lib' branch containing only the files needed for a full
    library build and install. Downstream projects consuming libmultiprocess
    as a git subtree can pull from this branch and avoid churn from changes
    to CI scripts, README, doc/, examples, shell.nix and other files that
    are not part of the library itself.
    
    A new top-level CMakeLists.txt wrapper preserves 'cmake -S .' for
    standalone builds; this is also the only way to build the example/
    subdirectory, which lives outside lib/ since downstream subtree
    consumers do not need it. See comments in CMakeLists.txt and
    lib/CMakeLists.txt for details on how lib/ adapts between the two
    build modes.
    
    The bulk of this commit is a pure file move (renames only). Outside
    the move itself, only minimal touch-ups were necessary in
    lib/CMakeLists.txt and ci/scripts/{ci,bitcoin_core_ci}.sh.
    0eef7f0e11
  4. Sjors force-pushed on May 12, 2026
  5. ci: drop Bitcoin Core example-target reference during subtree replace
    Bitcoin Core's cmake/libmultiprocess.cmake currently references the
    mpcalculator, mpprinter and mpexample targets, which no longer exist
    in the subtree (the example/ directory lives outside the 'lib' branch).
    
    Strip the offending line as part of replace_subtree so the bitcoin-core
    CI job configures cleanly. Remove this workaround once a matching
    Bitcoin Core PR has landed.
    66d7b4871d
  6. Sjors force-pushed on May 12, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/libmultiprocess. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-31 17:30 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me