cmake: Install internal binaries to /libexec/ #31679

pull ryanofsky wants to merge 5 commits into bitcoin:master from ryanofsky:pr/libexec changing 13 files +94 −36
  1. ryanofsky commented at 5:01 pm on January 17, 2025: contributor

    This change moves binaries that are not typically invoked directly by users from the bin/ directory to the libexec/ directory in CMake installs and binary releases. The goal of the PR is to introduce a distinction between internal and external binaries so starting with #31802, we can use IPC to implement features in new binaries without adding those binaries to the CLI. The change also helps reduce clutter in bin/, making it easier for users to identify useful tools to run. Summary of changes:

    • For source builds (i.e. developer builds) — There are no changes.
    • For source installs (i.e. cmake --install result) — test_bitcoin, test_bitcoin-qt, and bench_bitcoin are installed in ${CMAKE_PREFIX_PATH}/libexec instead of ${CMAKE_PREFIX_PATH}/bin, so they are no longer on the system PATH. However, they can still be invoked from the libexec/ directory, or from the CLI as bitcoin test, bitcoin test-gui, and bitcoin bench, respectively.
    • For binary releases — Since test_bitcoin is the only test binary enabled in releases, the only change is moving test_bitcoin from bin/ to libexec/.

    The table below shows the install location of each binary after this change, and the availability of each binary.

    Binary Location Availability Change
    bitcoin bin/ 📦 Binary release (since #31375) Unchanged
    bitcoin-cli bin/ 📦 Binary release Unchanged
    bitcoind bin/ 📦 Binary release Unchanged
    bitcoin-qt bin/ 📦 Binary release Unchanged
    bitcoin-tx bin/ 📦 Binary release Unchanged
    bitcoin-util bin/ 📦 Binary release Unchanged
    bitcoin-wallet bin/ 📦 Binary release Unchanged
    bench_bitcoin libexec/ 🛠 Source build only Moved from bin/
    bitcoin-chainstate libexec/ 🛠 Source build only Newly installed (was built)
    bitcoin-gui libexec/ 🛠 Source build only (until #31802) Moved from bin/
    bitcoin-node libexec/ 🛠 Source build only (until #31802) Moved from bin/
    test_bitcoin libexec/ 📦 Binary release Moved from bin/
    test_bitcoin-qt libexec/ 🛠 Source build only Moved from bin/

    This PR is part of the process separation project.

  2. DrahtBot commented at 5:01 pm on January 17, 2025: contributor

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

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/31679.

    Reviews

    See the guideline for information on the review process.

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #33142 (test: Run bench sanity checks in parallel with functional tests by maflcko)
    • #33136 (ci: Remove redundant RUN_UNIT_TESTS_SEQUENTIAL by maflcko)
    • #33000 (ci: Run unit tests parallel with functional tests by maflcko)
    • #31453 (util: detect and warn when using exFAT on MacOS by willcl-ark)
    • #30437 (ipc: add bitcoin-mine test program by ryanofsky)

    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.

  3. DrahtBot added the label Build system on Jan 17, 2025
  4. DrahtBot added the label CI failed on Jan 17, 2025
  5. DrahtBot commented at 7:52 am on January 18, 2025: contributor
    CI failed with [17:52:38.033] /ci_container_base/ci/test/03_test_script.sh: line 154: /ci_container_base/ci/scratch/out/bin/test_bitcoin: No such file or directory
  6. luke-jr commented at 3:25 pm on January 23, 2025: member
    libexec is usually used for binaries run by programs rather than people. I don’t think most of the ones you’re moving fit that, and should remain in bin.
  7. Sjors commented at 7:46 am on January 24, 2025: member

    Run by people is a higher bar than “not typically useful”, but could make sense.

    If there are no binaries for which it currently makes sense to put them in libexec, since they’re all called by people, then it seems this PR has be based on #31375.

  8. ryanofsky commented at 5:57 pm on January 28, 2025: contributor

    The idea that an executable placed in libexec/ should be called by other executables is a good rule of thumb but not a requirement of some kind. (And if it were a requirement, it would be satisfied by #31375.)

    The technical difference between binaries installed to bin/ and binaries installed to libexec/ is that binaries in bin/ get exposed on the PATH while binaries in libexec/ don’t.

    There is nothing wrong with binaries in libexec/ being documented and called used by users and packagers and other tools and scripts. Not every executable that a user could conceivably call needs to be present in PATH.

    Packages like postfix have manpages for internal executables installed in libexec/ (anvil, bounce, smtpd, etc). Git subcommands can be called manually from libexec and have manpages of their own, too. I would say postfix and git are pretty much archetypes of packages designed around unix principles and there is nothing novel about installing low-level executables in libexec/.

    With this PR, two sets of binaries are installed to libexec/ if they have been enabled in cmake:

    1. multiprocess binaries bitcoin-node and bitcoin-gui
    2. testing binaries bench_bitcoin test_bitcoin test_bitcoin-qt.

    I can’t think of a reason why multiprocess binaries should be installed on PATH, but if someone wants to make that case I’m ready to hear it. As an alternative to this PR, they could be installed in bin/ with different names like bitoin-node-multiprocess or to a completely new folder.

    For the test and bench binaries I just think it’s confusing and not useful to install these on the PATH. I think this is true today and will be especially true after #31375.

  9. ryanofsky force-pushed on Jan 30, 2025
  10. ryanofsky commented at 3:05 am on January 30, 2025: contributor
    Updated 2a952710661a1990ed1c24b0ebd16de8ac0df87c -> 47a872236e070814ad74922d3f8a653e1c6af968 (pr/libexec.1 -> pr/libexec.2, compare) to fix CI error
  11. DrahtBot removed the label CI failed on Jan 30, 2025
  12. DrahtBot added the label Needs rebase on Feb 12, 2025
  13. ryanofsky force-pushed on Feb 13, 2025
  14. ryanofsky commented at 6:48 pm on February 13, 2025: contributor
    Rebased 47a872236e070814ad74922d3f8a653e1c6af968 -> d2ceb2e0735a2c8343f8316b55fac55323aba62c (pr/libexec.2 -> pr/libexec.3, compare) due to conflict with #31834
  15. DrahtBot removed the label Needs rebase on Feb 13, 2025
  16. DrahtBot added the label Needs rebase on Feb 14, 2025
  17. ryanofsky force-pushed on Feb 14, 2025
  18. ryanofsky commented at 3:19 pm on February 14, 2025: contributor
    Rebased d2ceb2e0735a2c8343f8316b55fac55323aba62c -> 45bfd97ec7c9991f41673d79b01277bfd940e64e (pr/libexec.3 -> pr/libexec.4, compare) due to conflict with #31844
  19. DrahtBot removed the label Needs rebase on Feb 14, 2025
  20. TheCharlatan commented at 7:14 pm on April 8, 2025: contributor
    Concept ACK
  21. jonatack commented at 4:37 am on April 9, 2025: member

    Concept ACK

    Would need a release note?

  22. ryanofsky commented at 1:34 pm on April 14, 2025: contributor

    Would need a release note?

    Thanks! Added release note and files.md documention in new commits.


    Added 2 commits 45bfd97ec7c9991f41673d79b01277bfd940e64e -> bda7626e987ce3d7287f72e6989dedde2c4ab666 (pr/libexec.4 -> pr/libexec.5, compare) with release notes and documentation

  23. TheCharlatan commented at 9:16 pm on April 15, 2025: contributor

    I think some installation packagers run test_bitcoin as part of their installation recipes, or at least I found one such example: https://github.com/epiccurious/bitcoin-core-node-builder/pull/164/files. @hebasto also polled usage of test_bitcoin on social media: https://x.com/hhebasto/status/1729879307768738070. Clearly there aren’t many people doing this, but are we ok with breaking the workflows of the few people that are? You mention that:

    For the test and bench binaries I just think it’s confusing and not useful to install these on the PATH. I think this is true today and will be especially true after #31375.

    What is confusing about keeping them where they are for now? Maybe there is some utility in testing your platform before actually running bitcoin on it.

  24. DrahtBot added the label Needs rebase on May 7, 2025
  25. cmake: Move internal binaries from bin/ to libexec/
    This change moves binaries that are not typically invoked directly by users
    from the `bin/` directory to the `libexec/` directory in CMake installs and
    binary releases. The goal is to simplify the contents of `bin/` for end users
    while still making all binaries available when needed. After this change, the
    binaries remaining in `bin/` are:
    
    - bitcoin
    - bitcoin-cli
    - bitcoind
    - bitcoin-qt
    - bitcoin-tx
    - bitcoin-util
    - bitcoin-wallet
    
    And the binaries that are moved to `libexec/` are:
    
    - bench_bitcoin
    - bitcoin-chainstate(*)
    - bitcoin-gui(***)
    - bitcoin-node(***)
    - test_bitcoin(**)
    - test_bitcoin-qt
    
    (*) bitcoin-chainstate was previously missing an install rule and was actually
    not installed even when it was enabled.
    
    (**) test_bitcoin is the only libexec/ binary that is currently included in
    bitcoin binary releases. The others are only installed when building from
    source with relevant cmake options enabled.
    
    (***) bitcoin-node and bitcoin-gui are not currently built by default or
    included in binary releases but both of these changes are planned and
    implemented in #31802
    cd97905ebc
  26. doc: Add release notes describing libexec/ binaries 94ffd01a02
  27. doc: Add description of installed files to files.md c810b168b8
  28. ryanofsky force-pushed on May 29, 2025
  29. ryanofsky commented at 9:45 pm on May 29, 2025: contributor
    Rebased bda7626e987ce3d7287f72e6989dedde2c4ab666 -> d253fa9ebe4305118417a02aa72cc06810662ac6 (pr/libexec.5 -> pr/libexec.6, compare) due to conflict with #28710
  30. DrahtBot removed the label Needs rebase on May 29, 2025
  31. Sjors commented at 5:49 am on May 30, 2025: member

    Just #28710, no conflict with #31375?

    Concept ACK

  32. ismaelsadeeq commented at 11:17 am on May 30, 2025: member
    Concept ACK
  33. Sjors commented at 4:04 pm on May 30, 2025: member

    tACK d253fa9ebe4305118417a02aa72cc06810662ac6

    I tested on top of af227a0e7d9754623d36925c56599f9b921f5cb3 from #31802 on macOS 15.5 and 13.7.6, as well as Windows 11 (not impacted).

    The bitcoin test command is perhaps a bit too well hidden. Maybe it’s better to drop the help command and put a bit more emphasis on the --all option:

    0Commands:
    1  gui [ARGS]     Start GUI, equivalent to running 'bitcoin-qt [ARGS]' or 'bitcoin-gui [ARGS]'
    2  ...
    3  tx ...
    4
    5Use 'bitcoin --help --all' for additional commands, e.g. for running tests.
    

    That last “e.g.” might address @TheCharlatan’s concern:

    Maybe there is some utility in testing your platform before actually running bitcoin on it.

  34. DrahtBot requested review from TheCharlatan on May 30, 2025
  35. DrahtBot requested review from jonatack on May 30, 2025
  36. DrahtBot requested review from ismaelsadeeq on May 30, 2025
  37. in doc/release-notes-31679.md:8 in d253fa9ebe outdated
    0@@ -0,0 +1,11 @@
    1+Install changes
    2+---------------
    3+
    4+The `test_bitcoin`, `test_bitcoin-qt`, `bench_bitcoin`, `bitcoin-chainstate`,
    5+`bitcoin-node`, and `bitcoin-wallet` binaries are now installed in
    6+`$PREFIX/libexec` rather than `$PREFIX/bin`. If you are using a binary release
    7+or building from source with default build options, most of these programs are
    8+not built by default anyway so these changes may not be noticable.
    


    maflcko commented at 7:25 am on June 2, 2025:
    noticable -> noticeable [correct spelling]
    

    ryanofsky commented at 2:29 pm on July 2, 2025:

    re: #31679 (review)

    Thanks, fixed

  38. in doc/files.md:161 in d253fa9ebe outdated
    157+| share/rpcauth/                      | Documentation and scripts for RPC authentication setup |
    158+
    159+### Notes
    160+
    161+- *Italicized* files are installed in source builds but not included in binary releases.
    162+- README and bitcoin.conf files included in binary releases but not installed in source builds.
    


    hodlinator commented at 2:44 pm on June 3, 2025:

    nit:

    0- README and bitcoin.conf files are included in binary releases but not installed in source builds.
    

    ryanofsky commented at 2:29 pm on July 2, 2025:

    re: #31679 (review)

    Thanks, fixed


    l0rinc commented at 11:07 am on July 4, 2025:

    nit: there’s a similar one in the PR description:

    The table below shows the install location and availability of each binary after this change


    ryanofsky commented at 1:05 pm on July 7, 2025:

    re: #31679 (review)

    The table below shows the install location and availability of each binary after this change

    Makes sense, fixed this too

  39. in src/CMakeLists.txt:472 in d253fa9ebe outdated
    468@@ -469,6 +469,7 @@ if(BUILD_UTIL_CHAINSTATE)
    469       core_interface
    470       bitcoinkernel
    471   )
    472+  install_binary_component(bitcoin-chainstate INTERNAL)
    


    hodlinator commented at 7:52 pm on June 4, 2025:
    Do we want to introduce installation of this binary? Should be called out in PR description and/or commit message if kept.

    Sjors commented at 8:30 am on June 5, 2025:
    I think it’s fine, but indeed should be in the description.

    TheCharlatan commented at 8:45 am on June 5, 2025:
    If so, it should also get a note that its command line interface is not expected to be stable.

    fanquake commented at 9:56 am on July 2, 2025:

    I think it’s fine,

    Not sure I agree that we should start installing this. It’s an experimental, demo binary, not built by default, that nobody is using; other than a handful of developers working on the kernel (also experimental). There’s every likelyhood it could just be removed tommorow.


    ryanofsky commented at 2:28 pm on July 2, 2025:

    re: #31679 (review)

    Rewrote the PR description to hopefully make this clearer, but this change is just adding a missing install rule. If you don’t go out of your way to enable the BUILD_UTIL_CHAINSTATE option, the binary won’t be installed, but if you do enable it, it will be installed. This is consistent with how we treat other build options like BUILD_GUI_TESTS with test_bitcoin-qt and BUILD_BENCH with bench_bitcoin.

  40. hodlinator commented at 7:59 pm on June 4, 2025: contributor

    Concept ACK d253fa9ebe4305118417a02aa72cc06810662ac6

    Concept

    Would be nice (but not critical) to get this done in the same release where we introduce the now merged wrapper, bitcoin(.exe).

    Tested

     0 cmake --install build --prefix $PWD/install |sort
     1-- Install configuration: "RelWithDebInfo"
     2-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin
     3-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin-cli
     4-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoind
     5-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin-qt
     6-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin-tx
     7-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin-util
     8-- Installing: /home/hodlinator/bc/b2/install/bin/bitcoin-wallet
     9-- Installing: /home/hodlinator/bc/b2/install/lib64/libbitcoinkernel.so
    10-- Installing: /home/hodlinator/bc/b2/install/lib64/pkgconfig/libbitcoinkernel.pc
    11-- Installing: /home/hodlinator/bc/b2/install/libexec/bench_bitcoin
    12-- Installing: /home/hodlinator/bc/b2/install/libexec/bitcoin-chainstate
    13-- Installing: /home/hodlinator/bc/b2/install/libexec/bitcoin-gui
    14-- Installing: /home/hodlinator/bc/b2/install/libexec/bitcoin-node
    15-- Installing: /home/hodlinator/bc/b2/install/libexec/test_bitcoin
    16-- Installing: /home/hodlinator/bc/b2/install/libexec/test_bitcoin-qt
    17-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoin-cli.1
    18-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoind.1
    19-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoin-qt.1
    20-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoin-tx.1
    21-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoin-util.1
    22-- Installing: /home/hodlinator/bc/b2/install/share/man/man1/bitcoin-wallet.1
    23-- Set non-toolchain portion of runtime path of "/home/hodlinator/bc/b2/install/libexec/bitcoin-chainstate" to ""
    
    0./install/bin/bitcoin node (bin)
    1./install/bin/bitcoin test (libexec)
    
  41. DrahtBot added the label CI failed on Jun 15, 2025
  42. DrahtBot removed the label CI failed on Jun 16, 2025
  43. ismaelsadeeq commented at 2:40 pm on June 16, 2025: member

    Tested ACK d253fa9ebe4305118417a02aa72cc06810662ac6

    By building with bench in a release build

    0-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin
    1-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-cli
    2-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-tx
    3-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-util
    4-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-wallet
    5-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoind
    6-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/libexec/bench_bitcoin
    7-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/libexec/test_bitcoin
    
  44. DrahtBot requested review from hodlinator on Jun 16, 2025
  45. fanquake commented at 9:58 am on July 2, 2025: member

    Removing these esoteric and not generally useful binaries from bin/ and from the system PATH should make it easier for typical users to find and identify the binaries which are actually useful.

    I don’t really agree that bench_bitcoin and particularly test_bitcoin are “esoteric and not generally useful”, and agree with @TheCharlatan’s comment: Maybe there is some utility in testing your platform before actually running bitcoin on it.. If we do think that test_bitcoin is not useful, then we should probably stop shipping it in the release tarball, otherwise I think it’s odd to ship binaries we consider somwwhat useless, to end-users. At some point I had considered adding bench_bitcoin to the release tarball. We occasionally see performance regressions, and having it on-hand in the tarball could be useful for debugging.

    I don’t think there was ever any followup to this comment: #31679 (comment)?

  46. Sjors commented at 10:39 am on July 2, 2025: member

    Now that the wrapper binary landed in #31375 I think it’s fine to ask users to use bitcoin test instead of test_bitcoin.

    I agree test_bitcoin (and maybe bench_bitcoin) are useful enough to have them in the release.

    But I doubt there are many automated deployments out there that obtain the release binaries and run the tests. That’s the only thing this PR would break. Automated deployments that build from source have to be modified anyway in the next release because of cmake. (oh no, that was v29, time flies)

  47. janb84 commented at 12:07 pm on July 2, 2025: contributor

    Concept ACK d253fa9ebe4305118417a02aa72cc06810662ac6

    This PR changes the target of some executables on install (different folder). This achieves that not all the executables are added to the PATH (which I agree with)

    Result of install ✅

     0cmake --install build --prefix $PWD/install
     1-- Install configuration: "RelWithDebInfo"
     2-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoin-wallet
     3-- Installing: /Users/jan/Projects/bitcoin/install/share/man/man1/bitcoin-wallet.1
     4-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoin
     5-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoind
     6-- Installing: /Users/jan/Projects/bitcoin/install/share/man/man1/bitcoind.1
     7-- Installing: /Users/jan/Projects/bitcoin/install/libexec/bitcoin-node
     8-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoin-cli
     9-- Installing: /Users/jan/Projects/bitcoin/install/share/man/man1/bitcoin-cli.1
    10-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoin-tx
    11-- Installing: /Users/jan/Projects/bitcoin/install/share/man/man1/bitcoin-tx.1
    12-- Installing: /Users/jan/Projects/bitcoin/install/bin/bitcoin-util
    13-- Installing: /Users/jan/Projects/bitcoin/install/share/man/man1/bitcoin-util.1
    14-- Installing: /Users/jan/Projects/bitcoin/install/libexec/test_bitcoin
    

    NIT; would change the wording of this sentence in the PR description, imho it’s overly harsh for no reason:

    “Removing these esoteric and not generally useful binaries from bin/ and from the system PATH should make it easier for typical users to find and identify the binaries which are actually useful.”

  48. ryanofsky force-pushed on Jul 2, 2025
  49. ryanofsky commented at 2:57 pm on July 2, 2025: contributor

    Thanks for the reviews!

    Updated d253fa9ebe4305118417a02aa72cc06810662ac6 -> 705791cd436f237fe9bbac2cf52d63ab4b2a41c7 (pr/libexec.6 -> pr/libexec.7, compare) just fixing typos pointed out in reviews.


    re: TheCharlatan #31679 (comment)

    I agree it is nice to distribute tests and I imagine in future we may want to distribute other diagnostic tools like this as well (especially if we start using the kernel as originally anticipated and writing specialized utilities with it, maybe even in other languages like rust.)

    I just think it is good to make a distinction between common, everyday commands and more specialized ones, and only install the common commands we think will be used on a regular basis in bin/ and in the system PATH, so they are discoverable and not mixed in with a list of more obscure functions. As mentioned previously I think git and postfix are good examples of unix packages that have a lot of internal binaries, and document them well, and allow them to be called freely, but are selective about what gets installed in bin/ on the system PATH.

    As far as breaking workflows, this change does include release notes, and I feel like it should be pretty easy for anyone with a custom verification script to update it to call bitcoin test or use libexec/ instead of bin/. I don’t think it should be a big deal to move a binary that wasn’t previously documented to a new location, especially if it’s part of a larger effort to organize and document all the binaries better and provide a more accessible interface in the form of the bitcoin command.

    I could tweak the PR to leave test_bitcoin in bin/ instead of libexec/ or leave everything except bitcoin-node and bitcoin-gui in bin/. It just seemed nicer draw a distinction between bin/ and libexec/ based on what a good command line interface would look like, not based on idiosyncracies of previous releases.


    re: Sjors #31679 (comment)

    Seems like a good suggestion to improve bitcoin help output. I will try implementing that


    re: fanquake #31679 (comment)

    Yes, sorry, removed that comment about not being generally useful. I think they are useful and think we should add more utilities like this, I think they just don’t really make sense being top level commands on the system PATH instead of internal binaries and bitcoin subcommands.


    re: janb84 #31679#pullrequestreview-2978891971

    Thank you! Followed up on your suggestion and rewrote the PR description.

  50. hodlinator approved
  51. hodlinator commented at 7:08 pm on July 2, 2025: contributor

    ACK 705791cd436f237fe9bbac2cf52d63ab4b2a41c7

    Fixed typos and improved PR description since my first (concept & test) review (https://github.com/bitcoin/bitcoin/pull/31679#pullrequestreview-2892807188).

  52. DrahtBot requested review from janb84 on Jul 2, 2025
  53. DrahtBot requested review from Sjors on Jul 2, 2025
  54. DrahtBot requested review from ismaelsadeeq on Jul 2, 2025
  55. janb84 commented at 7:16 pm on July 2, 2025: contributor

    re ACK 705791cd436f237fe9bbac2cf52d63ab4b2a41c7

    Changes sinds last review:

    • Fixed typos
    • Changed PR description (thanks! )
  56. in doc/release-notes-31679.md:8 in 04e51ba111 outdated
    0@@ -0,0 +1,11 @@
    1+Install changes
    2+---------------
    3+
    4+The `test_bitcoin`, `test_bitcoin-qt`, `bench_bitcoin`, `bitcoin-chainstate`,
    5+`bitcoin-node`, and `bitcoin-wallet` binaries are now installed in
    6+`$PREFIX/libexec` rather than `$PREFIX/bin`. If you are using a binary release
    7+or building from source with default build options, most of these programs are
    8+not built by default anyway so these changes may not be noticeable.
    


    Sjors commented at 6:55 am on July 3, 2025:
    04e51ba1110e13598e0b11a35ce5abf4a1789f53: now that the wrapper binary is available, the release note could enumerate how to call these now: bitcoin test, etc.

    ryanofsky commented at 9:20 pm on July 3, 2025:

    re: #31679 (review)

    04e51ba: now that the wrapper binary is available, the release note could enumerate how to call these now: bitcoin test, etc.

    Good idea. Latest push now integrates the release notes from the other PR and describes the changes as a whole

  57. Sjors approved
  58. Sjors commented at 6:55 am on July 3, 2025: member

    re-ACK 705791cd436f237fe9bbac2cf52d63ab4b2a41c7

    Left a suggestion for the release note.

  59. ismaelsadeeq commented at 3:01 pm on July 3, 2025: member

    reACK 705791cd and tested it again by building with release config.

     0-- Install configuration: "Release"
     1-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-wallet
     2-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/share/man/man1/bitcoin-wallet.1
     3-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin
     4-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoind
     5-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/share/man/man1/bitcoind.1
     6-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-cli
     7-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/share/man/man1/bitcoin-cli.1
     8-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-tx
     9-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/share/man/man1/bitcoin-tx.1
    10-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/bin/bitcoin-util
    11-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/share/man/man1/bitcoin-util.1
    12-- Installing: /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin/install/libexec/test_bitcoin
    

    I agree with the reply in #31679#pullrequestreview-2979400065

    Also nice PR description update that makes it explicit thattest_bitcoin is still available in release build but in libexec directory I also verify it in my build.

  60. bitcoin wrapper: improve help output
    Try to make extra commands more obvious based on a suggestion from Sjors:
    https://github.com/bitcoin/bitcoin/pull/31679#issuecomment-2922787970i
    
    When `bitcoin` is invoked with no arguments, still show short help output, but
    now explicitly state that more commands are available and `bitcoin help` will
    list them.
    
    Also:
    
    - Get rid of -a/--all option. Just show all commands when `bitcoin help` or
      `bitcoin --help` is used. It maybe a helpful to add an option like this if
      more commands are added in the future, but right now there are not very many.
    
    - Just show name of executable, not full path of executable in help output. This
      can be a little easier to read if the path is long.
    f5cf0b1ccc
  61. ryanofsky referenced this in commit 05de8bc173 on Jul 3, 2025
  62. ryanofsky force-pushed on Jul 3, 2025
  63. ryanofsky commented at 9:24 pm on July 3, 2025: contributor

    Thanks for the reviews!

    Updated 705791cd436f237fe9bbac2cf52d63ab4b2a41c7 -> 05de8bc1735accc494291e22da718bebab163547 (pr/libexec.7 -> pr/libexec.8, compare) updating commit message to match release description, and implementing Sjors bitcoin help suggestion #31679 (comment) and release note suggestion #31679 (review) Updated 05de8bc1735accc494291e22da718bebab163547 -> 03f585d58ccf4d5c02d621c5b6046d45807b3201 (pr/libexec.8 -> pr/libexec.9, compare) fixing mistake in release notes

  64. ryanofsky referenced this in commit 03f585d58c on Jul 3, 2025
  65. ryanofsky force-pushed on Jul 3, 2025
  66. in src/bitcoin.cpp:36 in 03f585d58c outdated
    30@@ -31,22 +31,25 @@ static constexpr auto HELP_USAGE = R"(Usage: %s [OPTIONS] COMMAND...
    31   rpc [ARGS]     Call RPC method, equivalent to running 'bitcoin-cli -named [ARGS]'.
    32   wallet [ARGS]  Call wallet command, equivalent to running 'bitcoin-wallet [ARGS]'.
    33   tx [ARGS]      Manipulate hex-encoded transactions, equivalent to running 'bitcoin-tx [ARGS]'.
    34-  help [-a]      Show this help message. Include -a or --all to show additional commands.
    35 )";
    36 
    37-static constexpr auto HELP_EXTRA = R"(
    38+static constexpr auto HELP_EXTRA = R"(  help           Show this help message.
    


    Sjors commented at 6:53 am on July 4, 2025:

    In 03f585d58ccf4d5c02d621c5b6046d45807b3201 bitcoin wrapper: improve help output: users might be confused by the distinction between no command, --help and help.

    That’s because if a user starts with “bitcoin” then “this help message” implies there’s nothing additional to see. Hopefully they’ll still be encouraged to try by the sentence at the end (“Run ‘bitcoin help’ to see additional commands”).

    But maybe a better phrasing here is: “List all available commands.”


    ryanofsky commented at 3:31 pm on July 4, 2025:

    re: #31679 (review)

    That’s because if a user starts with “bitcoin” then “this help message” implies there’s nothing additional to see.

    To be sure, the “show this help message” does not appear when you just run bitcoin with no arguments since I wanted “show this help message” to mean “show this exact help message”. Happy to apply any changes, but I think this should already avoid the concern you described.


    Sjors commented at 7:17 am on July 7, 2025:

    To be sure, the “show this help message” does not appear when you just run bitcoin with no arguments

    That would be great, but it doesn’t for me:

    0% build/bin/bitcoin
    1Usage: bitcoin [OPTIONS] COMMAND...
    2
    3Options:
    4...
    5  -h, --help             Show this help message
    

    It looks like the help variant of “Show this help message” is suppressed, but for --help it’s not.


    ryanofsky commented at 1:04 pm on July 7, 2025:

    re: #31679 (review)

    Oops, you’re right. I forgot the --help help and only updated the help help. Should be fixed now, thanks!

  67. in src/bitcoin.cpp:69 in 03f585d58c outdated
    65@@ -63,11 +66,17 @@ int main(int argc, char* argv[])
    66             return EXIT_SUCCESS;
    67         }
    68 
    69+        std::string exe_name{fs::PathToString(fs::PathFromString(argv[0]).filename())};
    


    Sjors commented at 7:13 am on July 4, 2025:

    In 03f585d58ccf4d5c02d621c5b6046d45807b3201 bitcoin wrapper: improve help output: this is a nice improvement.

    Before:

    0bitcoin --help
    1Usage: bitcoin [OPTIONS] COMMAND..
    2
    3which bitcoin
    4/usr/local/bin/bitcoin
    5
    6/usr/local/bin/bitcoin --help
    7Usage: /usr/local/bin/bitcoin [OPTIONS] COMMAND...
    

    After:

    0/usr/local/bin/bitcoin --help
    1Usage: bitcoin [OPTIONS] COMMAND..
    

    Only tested on macOS


    l0rinc commented at 11:23 am on July 4, 2025:

    Tested on Linux:

    0# cmake -B build -G Ninja && ninja -C build install && install/bin/bitcoin --help | head -1
    1...
    2Usage: bitcoin [OPTIONS] COMMAND...
    
  68. Sjors approved
  69. Sjors commented at 7:14 am on July 4, 2025: member

    re-ACK 03f585d58ccf4d5c02d621c5b6046d45807b3201

    Left a suggestion for slightly improved wording.

  70. DrahtBot requested review from hodlinator on Jul 4, 2025
  71. DrahtBot requested review from janb84 on Jul 4, 2025
  72. in cmake/module/InstallBinaryComponent.cmake:11 in 03f585d58c outdated
     7@@ -8,13 +8,18 @@ include(GNUInstallDirs)
     8 function(install_binary_component component)
     9   cmake_parse_arguments(PARSE_ARGV 1
    10     IC                # prefix
    11-    "HAS_MANPAGE"     # options
    12+    "HAS_MANPAGE;INTERNAL" # options
    


    l0rinc commented at 9:13 am on July 4, 2025:
    nit: we might want to realign the comments after the change

    ryanofsky commented at 1:05 pm on July 7, 2025:

    re: #31679 (review)

    nit: we might want to realign the comments after the change

    Thanks! Updated now

  73. in ci/test/03_test_script.sh:148 in 1e9cf763fb outdated
    144@@ -145,7 +145,7 @@ if [ "$RUN_UNIT_TESTS" = "true" ]; then
    145 fi
    146 
    147 if [ "$RUN_UNIT_TESTS_SEQUENTIAL" = "true" ]; then
    148-  DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_OUTDIR}"/bin/test_bitcoin --catch_system_errors=no -l test_suite
    149+  DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_OUTDIR}"/libexec/test_bitcoin --catch_system_errors=no -l test_suite
    


    l0rinc commented at 10:02 am on July 4, 2025:

    I understand the reason for wanting to clean up the install layout, but was wondering why the build layout doesn’t mirror the production layout, given that reducing clutter in bin might apply to the development environment as well. I think it’s best if devs get used to the final layout and don’t have to think about the exact environment when deciding if https://github.com/bitcoin/bitcoin/blob/fa900bb2dce8ef3ee11d5980f008995d66877155/contrib/devtools/deterministic-unittest-coverage/src/main.rs#L64 is in bin or libexec.

    It seems to me this inconsistency adds complexity and makes it unclear what path external tooling should rely on.

    And it could also simplify CI, since it may not be immediately obvious why https://github.com/bitcoin/bitcoin/blob/e3f416dbf7633b2fb19c933e5508bd231cc7e9cf/ci/test/03_test_script.sh#L148 should be run from libexec, but why it’s okay to still have bin here: https://github.com/bitcoin/bitcoin/blob/ce000c8ee02af77cb404527cb7ed408289865665/.github/workflows/ci.yml#L377


    maflcko commented at 12:23 pm on July 4, 2025:
    not sure what your question/suggestion is, but it should be possible to replace outdir/libexec with "${BASE_BUILD_DIR}"/bin/ here. Either should be fine and equivalent.

    l0rinc commented at 12:44 pm on July 4, 2025:
    Sure, but why do we have to keep both layouts, why isn’t "${BASE_BUILD_DIR}"/libexec/test_bitcoin the equivalent of "${BASE_OUTDIR}"/libexec/test_bitcoin? Edit: And how do we know if the last example can be ./bin/test_bitcoin.exe or also ./libexec/test_bitcoin.exe? Unifying the two layouts would eliminate this confusion.

    ryanofsky commented at 3:19 pm on July 4, 2025:

    re: #31679 (review)

    Thanks! I implemented maflcko’s suggestion:

    0-  DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_OUTDIR}"/libexec/test_bitcoin --catch_system_errors=no -l test_suite
    1+  DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_BUILD_DIR}"/bin/test_bitcoin --catch_system_errors=no -l test_suite
    

    But I am wondering if maybe it is actually good to run test_bitcoin from the install directory instead of the build directory, since maybe this could detect problems if unit test didn’t work when installed? But happy to do anything here.

    On the layout question, I agree it’s nice for the build layout to mirror the install layout (even though this is unusual—usually build layout mirrors the source layout) and I implemented https://github.com/ryanofsky/bitcoin/commit/6e3bfb2b6df4774c1009d9210bc38f6db1a83c6d as a followup to support that.

    I do think this PR should be focused on installation and packaging and not make changes that affect developers because concerns are different in the build and install cases.

    For example, the install bin/ directory usually contains binaries from dozens of packages, while build/bin/ only contains bitcoin binaries. And the install bin/ directory rarely needs to be referenced directly since it is in the PATH, while build/bin/ is something developers will frequently type and using in scripts.

    So I want to address packaging only here and avoid changes that could impact developers. But I am interested in https://github.com/ryanofsky/bitcoin/commit/6e3bfb2b6df4774c1009d9210bc38f6db1a83c6d as a followup and happy to discuss it since I would like to keep build and install layouts consistent if it makes sense, even though they are controlled separately and used differently.

  74. in doc/release-notes-31375-31679.md:18 in 7904d10437 outdated
    13+Install changes
    14+---------------
    15+
    16+The `test_bitcoin` executable is now located in `libexec/` rather than `bin/`.
    17+It can still be executed directly, or accessed through the new `bitcoin` command
    18+line tool as `bitcoin test`.
    


    l0rinc commented at 10:09 am on July 4, 2025:

    ryanofsky commented at 3:21 pm on July 4, 2025:

    re: #31679 (review)

    Good catch! Updated these as well

  75. in doc/files.md:156 in b8be00f416 outdated
    152+| *libexec/bitcoin-gui*               | IPC-enabled alternative to `bitcoin-qt` |
    153+| *libexec/bitcoin-node*              | IPC-enabled alternative to `bitcoind` |
    154+| libexec/test_bitcoin                | Unit test binary |
    155+| *libexec/test_bitcoin-qt*           | GUI-specific unit tests |
    156+| share/man/man1/                     | Man pages for command-line tools like `bitcoin-cli`, `bitcoind`, and others |
    157+| share/rpcauth/                      | Documentation and scripts for RPC authentication setup |
    


    l0rinc commented at 10:11 am on July 4, 2025:

    nit: not everyone views the rendered view, we might want to align the source view as well:

     0| **Path**                                                   | **Description**                                                             |
     1|------------------------------------------------------------|-----------------------------------------------------------------------------|
     2| [README.md](README.md) or [readme.txt](README_windows.txt) | Project information and instructions                                        |
     3| bitcoin.conf                                               | [Generated](../contrib/devtools/gen-bitcoin-conf.sh) configuration file     |
     4| bin/bitcoin                                                | Command-line tool for interacting with Bitcoin. Calls other binaries below. |
     5| bin/bitcoin-cli                                            | Tool for making node and wallet RPC calls.                                  |
     6| bin/bitcoin-qt                                             | Bitcoin node and wallet GUI                                                 |
     7| bin/bitcoin-tx                                             | Tool for creating and modifying transactions                                |
     8| bin/bitcoin-util                                           | Miscellaneous utilities                                                     |
     9| bin/bitcoin-wallet                                         | Bitcoin wallet tool                                                         |
    10| bin/bitcoind                                               | Bitcoin node and wallet daemon                                              |
    11| *lib/libbitcoinkernel.so*                                  | Shared library containing core consensus and validation code                |
    12| *lib/pkgconfig/libbitcoinkernel.pc*                        | Pkg-config metadata for linking to `libbitcoinkernel`                       |
    13| *libexec/bench_bitcoin*                                    | Benchmarking tool for measuring node performance                            |
    14| *libexec/bitcoin-chainstate*                               | Tool to validate and connect blocks                                         |
    15| *libexec/bitcoin-gui*                                      | IPC-enabled alternative to `bitcoin-qt`                                     |
    16| *libexec/bitcoin-node*                                     | IPC-enabled alternative to `bitcoind`                                       |
    17| libexec/test_bitcoin                                       | Unit test binary                                                            |
    18| *libexec/test_bitcoin-qt*                                  | GUI-specific unit tests                                                     |
    19| share/man/man1/                                            | Man pages for command-line tools like `bitcoin-cli`, `bitcoind`, and others |
    20| share/rpcauth/                                             | Documentation and scripts for RPC authentication setup                      |
    

    ryanofsky commented at 3:20 pm on July 4, 2025:

    re: #31679 (review)

    nit: not everyone views the rendered view, we might want to align the source view as well:

    Thanks! Updated


    Sjors commented at 7:45 am on July 8, 2025:
    Looks great with mdcat :-)
  76. in ci/test/03_test_script.sh:1 in 1e9cf763fb outdated


    l0rinc commented at 10:13 am on July 4, 2025:
    Q: slightly unrelated, but if testing should be available for the installed version, how come fuzzing isn’t? Seems it should be mentioned with a 🛠 at least…

    ryanofsky commented at 3:15 pm on July 4, 2025:

    re: #31679 (review)

    Q: slightly unrelated, but if testing should be available for the installed version, how come fuzzing isn’t? Seems it should be mentioned with a 🛠 at least…

    The table doesn’t mention the fuzz binary just because the table is a list of installed files, and the fuzz binary is not installed before or after this change.

    Installing the fuzz binary would seem to make sense for consistency. But one problem with installing it as-is is that unlike test_bitcoin, bench_bitcoin, etc it has a generic name fuzz so I felt it would be better to leave alone here.

  77. l0rinc referenced this in commit 494005ccf2 on Jul 4, 2025
  78. in doc/files.md:134 in 03f585d58c outdated
    130 
    131 <a name="note2">2</a>. `NNNNN` matches `[0-9]{5}` regex.
    132+
    133+## Installed Files
    134+
    135+This table describes the files installed by Bitcoin across different platforms.
    


    l0rinc commented at 11:05 am on July 4, 2025:
    0This table describes the files installed by Bitcoin Core across different platforms.
    

    ryanofsky commented at 3:20 pm on July 4, 2025:

    re: #31679 (review)

    Thanks! Updated

  79. in doc/files.md:19 in 03f585d58c outdated
    15@@ -16,7 +16,7 @@
    16 
    17   - [Berkeley DB database based wallets](#berkeley-db-database-based-wallets)
    18 
    19-- [Notes](#notes)
    20+- [Installed Files](#installed-files)
    


    l0rinc commented at 11:12 am on July 4, 2025:

    nit: if you’re already editing this file consider fixing line 86:

    … double-spends due to the lack of synchronization


    ryanofsky commented at 3:20 pm on July 4, 2025:

    re: #31679 (review)

    nit: if you’re already editing this file consider fixing line 86:

    … double-spends due to the lack of synchronization

    Thanks, added commit to fix

  80. in doc/release-notes-31375-31679.md:22 in 03f585d58c outdated
    17+It can still be executed directly, or accessed through the new `bitcoin` command
    18+line tool as `bitcoin test`.
    19+
    20+Other executables which are only part of source releases and not built by
    21+default: `test_bitcoin-qt`, `bench_bitcoin`, `bitcoin-chainstate`,
    22+`bitcoin-node`, and `bitcoin-wallet`  are also now installed in `libexec/`
    


    l0rinc commented at 11:15 am on July 4, 2025:

    bitcoin-wallet should still be in bin as far as I can tell, not libexec (nit: + double space):

    0`bitcoin-node` are also now installed in `libexec/`
    

    ryanofsky commented at 3:21 pm on July 4, 2025:

    re: #31679 (review)

    bitcoin-wallet should still be in bin as far as I can tell, not libexec (nit: + double space):

    Good catch! I did mean to write bitcoin-gui not bitcoin-wallet

  81. l0rinc approved
  82. l0rinc commented at 11:34 am on July 4, 2025: contributor

    Concept ACK, tested on Mac and Linux, it works as expected.

     0rm -rfd build install && \
     1cmake -B build -G Ninja \
     2  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
     3  -DCMAKE_INSTALL_PREFIX="$PWD/install" \
     4  -DBUILD_TESTS=ON \
     5  -DBUILD_BENCH=ON \
     6  -DBUILD_FUZZ_BINARY=ON \
     7  -DBUILD_UTIL_CHAINSTATE=ON \
     8  -DBUILD_GUI=ON \
     9  -DBUILD_GUI_TESTS=ON && \
    10ninja -C build install && \
    11tree -L 3 install/{bin,libexec}
    

    – Installing: bitcoin/install/bin/bitcoin-wallet – Installing: bitcoin/install/share/man/man1/bitcoin-wallet.1 – Installing: bitcoin/install/bin/bitcoin – Installing: bitcoin/install/bin/bitcoind – Installing: bitcoin/install/share/man/man1/bitcoind.1 – Installing: bitcoin/install/bin/bitcoin-cli – Installing: bitcoin/install/share/man/man1/bitcoin-cli.1 – Installing: bitcoin/install/bin/bitcoin-tx – Installing: bitcoin/install/share/man/man1/bitcoin-tx.1 – Installing: bitcoin/install/bin/bitcoin-util – Installing: bitcoin/install/share/man/man1/bitcoin-util.1 – Installing: bitcoin/install/bin/bitcoin-qt – Installing: bitcoin/install/share/man/man1/bitcoin-qt.1 – Installing: bitcoin/install/libexec/test_bitcoin-qt – Installing: bitcoin/install/lib/pkgconfig/libbitcoinkernel.pc – Installing: bitcoin/install/lib/libbitcoinkernel.dylib – Installing: bitcoin/install/libexec/bitcoin-chainstate – Installing: bitcoin/install/libexec/bench_bitcoin – Installing: bitcoin/install/libexec/test_bitcoin

    install/bin ├── bitcoin ├── bitcoin-cli ├── bitcoin-qt ├── bitcoin-tx ├── bitcoin-util ├── bitcoin-wallet └── bitcoind install/libexec ├── bench_bitcoin ├── bitcoin-chainstate ├── test_bitcoin └── test_bitcoin-qt

    – Installing: bitcoin/install/bin/bitcoin-wallet – Installing: bitcoin/install/share/man/man1/bitcoin-wallet.1 – Installing: bitcoin/install/bin/bitcoin – Installing: bitcoin/install/bin/bitcoind – Installing: bitcoin/install/share/man/man1/bitcoind.1 – Installing: bitcoin/install/bin/bitcoin-cli – Installing: bitcoin/install/share/man/man1/bitcoin-cli.1 – Installing: bitcoin/install/bin/bitcoin-tx – Installing: bitcoin/install/share/man/man1/bitcoin-tx.1 – Installing: bitcoin/install/bin/bitcoin-util – Installing: bitcoin/install/share/man/man1/bitcoin-util.1 – Installing: bitcoin/install/bin/bitcoin-qt – Installing: bitcoin/install/share/man/man1/bitcoin-qt.1 – Installing: bitcoin/install/libexec/test_bitcoin-qt – Installing: bitcoin/install/lib/pkgconfig/libbitcoinkernel.pc – Installing: bitcoin/install/lib/libbitcoinkernel.so – Installing: bitcoin/install/libexec/bitcoin-chainstate – Installing: bitcoin/install/libexec/bench_bitcoin – Installing: bitcoin/install/libexec/test_bitcoin

    install/bin ├── bitcoin ├── bitcoin-cli ├── bitcoind ├── bitcoin-qt ├── bitcoin-tx ├── bitcoin-util └── bitcoin-wallet install/libexec ├── bench_bitcoin ├── bitcoin-chainstate ├── test_bitcoin └── test_bitcoin-qt

    (only the bitcoin order and libbitcoinkernel.dylibvslibbitcoinkernel.so differ)

  83. doc: Fix typo in files.md
    Suggested by l0rinc https://github.com/bitcoin/bitcoin/pull/31679#discussion_r2185083314
    f49840dd90
  84. ryanofsky referenced this in commit fcb3678bcf on Jul 4, 2025
  85. ryanofsky referenced this in commit c83980035a on Jul 4, 2025
  86. ryanofsky referenced this in commit 6e3bfb2b6d on Jul 4, 2025
  87. ryanofsky referenced this in commit acf06a69f8 on Jul 4, 2025
  88. ryanofsky referenced this in commit 6a6b6f9093 on Jul 4, 2025
  89. ryanofsky force-pushed on Jul 4, 2025
  90. ryanofsky commented at 3:44 pm on July 4, 2025: contributor
    Updated 03f585d58ccf4d5c02d621c5b6046d45807b3201 -> 6a6b6f9093c1f82b8ea05ad87f421eabc8849738 (pr/libexec.9 -> pr/libexec.10, compare) with various suggestions updating signing & CI scripts and documentation
  91. l0rinc commented at 7:27 pm on July 4, 2025: contributor

    Tested ACK #31679 (review)

    Two remaining nits:

  92. ryanofsky force-pushed on Jul 7, 2025
  93. ryanofsky commented at 1:12 pm on July 7, 2025: contributor
    Updated 6a6b6f9093c1f82b8ea05ad87f421eabc8849738 -> f49840dd902cd9b14b6aadb431b16a4aeb719c3f (pr/libexec.10 -> pr/libexec.11, compare) addressing remaining comments and making bitcoin help output more consistent
  94. janb84 commented at 6:17 pm on July 7, 2025: contributor

    re ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f

    Changes since last ACK:

    • changes related to various suggestions
    • help output improvements:
     0$  ./build/bin/bitcoin
     1Usage: bitcoin [OPTIONS] COMMAND...
     2
     3Options:
     4  -m, --multiprocess     Run multiprocess binaries bitcoin-node, bitcoin-gui.
     5  -M, --monolithic       Run monolithic binaries bitcoind, bitcoin-qt. (Default behavior)
     6  -v, --version          Show version information
     7  -h, --help             Show full help message
     8
     9Commands:
    10  gui [ARGS]     Start GUI, equivalent to running 'bitcoin-qt [ARGS]' or 'bitcoin-gui [ARGS]'.
    11  node [ARGS]    Start node, equivalent to running 'bitcoind [ARGS]' or 'bitcoin-node [ARGS]'.
    12  rpc [ARGS]     Call RPC method, equivalent to running 'bitcoin-cli -named [ARGS]'.
    13  wallet [ARGS]  Call wallet command, equivalent to running 'bitcoin-wallet [ARGS]'.
    14  tx [ARGS]      Manipulate hex-encoded transactions, equivalent to running 'bitcoin-tx [ARGS]'.
    15  help           Show full help message.
    16
    17Run 'bitcoin help' to see additional commands (e.g. for testing and debugging).
    
     0$  ./build/bin/bitcoin help
     1Usage: bitcoin [OPTIONS] COMMAND...
     2
     3Options:
     4  -m, --multiprocess     Run multiprocess binaries bitcoin-node, bitcoin-gui.
     5  -M, --monolithic       Run monolithic binaries bitcoind, bitcoin-qt. (Default behavior)
     6  -v, --version          Show version information
     7  -h, --help             Show full help message
     8
     9Commands:
    10  gui [ARGS]     Start GUI, equivalent to running 'bitcoin-qt [ARGS]' or 'bitcoin-gui [ARGS]'.
    11  node [ARGS]    Start node, equivalent to running 'bitcoind [ARGS]' or 'bitcoin-node [ARGS]'.
    12  rpc [ARGS]     Call RPC method, equivalent to running 'bitcoin-cli -named [ARGS]'.
    13  wallet [ARGS]  Call wallet command, equivalent to running 'bitcoin-wallet [ARGS]'.
    14  tx [ARGS]      Manipulate hex-encoded transactions, equivalent to running 'bitcoin-tx [ARGS]'.
    15  help           Show full help message.
    16
    17Additional less commonly used commands:
    18  bench [ARGS]      Run bench command, equivalent to running 'bench_bitcoin [ARGS]'.
    19  chainstate [ARGS] Run bitcoin kernel chainstate util, equivalent to running 'bitcoin-chainstate [ARGS]'.
    20  test [ARGS]       Run unit tests, equivalent to running 'test_bitcoin [ARGS]'.
    21  test-gui [ARGS]   Run GUI unit tests, equivalent to running 'test_bitcoin-qt [ARGS]'.
    
  95. DrahtBot requested review from l0rinc on Jul 7, 2025
  96. DrahtBot requested review from Sjors on Jul 7, 2025
  97. l0rinc commented at 7:14 pm on July 7, 2025: contributor
    re-ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f
  98. Sjors commented at 7:43 am on July 8, 2025: member

    re-ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f @achow101 can you make a detached signature for either macOS or Windows for the current commit? It seems like a good precaution to test that given: https://github.com/bitcoin/bitcoin/commit/03f585d58ccf4d5c02d621c5b6046d45807b3201

    My non code-signed guix build: https://github.com/bitcoin-core/guix.sigs/pull/1708

  99. BrandonOdiwuor commented at 4:05 pm on July 10, 2025: contributor

    Tested ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f

    Tested on macOS 15.5 that bitcoin-node and test_bitcoin have been correctly moved from bin/ to libexec/


    Update: Also tested that bench_bitcoin, bitcoin_gui and test_bitcoin-qt are also moved to libexec/

  100. hodlinator approved
  101. hodlinator commented at 12:07 pm on July 11, 2025: contributor

    re-ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f

    Only able to spot improvements since previous ACK (https://github.com/bitcoin/bitcoin/pull/31679#pullrequestreview-2980338061). :) Re-tested cmake --install + running bitcoin wrapper and test_bitcoin.

    Agree with Sjors that codesigning should probably be re-tested since it’s been modified (https://github.com/bitcoin/bitcoin/pull/31679#issuecomment-3047748032).

  102. Sjors commented at 12:13 pm on July 11, 2025: member
    @TheCharlatan better?
  103. TheCharlatan commented at 12:26 pm on July 11, 2025: contributor

    I’m still not fully convinced of the new layout, but also would not unequivocally block this. Maybe some more long term contributors should give their approval here though, since it does change how our binaries are shipped and where we are placing things going forward.

    Re Russ’ previous comment:

    based on what a good command line interface would look like, not based on idiosyncracies of previous releases.

    There is a bunch of nuance here, since this also applies to pretty much all the binaries remaning in /bin besides the wrapper executable. What the comment does seem to imply to me is that going forward all new binaries should be put into /libexec and be used through the wrapper binary to avoid idiosyncrasies.

  104. ryanofsky commented at 1:09 pm on July 11, 2025: contributor

    What the comment does seem to imply to me is that going forward all new binaries should be put into /libexec and be used through the wrapper binary to avoid idiosyncrasies.

    Thanks for the feedback! Just to clarify, I would not say that all new binaries should be put in libexec/. I’d just say that unless there is a good reason for a new binary to be installed in bin/ and present in PATH it should be installed in libexec/ instead. If we developed a new utility that was used by bitcoin core but also generally useful (like an encryption / compression / encoding utility), it could make sense to add that utility to PATH and not require it to be called through the bitcoin wrapper. Or if an external open source tool that enhanced functionality of bitcoin core (like a frontend or extension) and had its own name and CLI was incorporated into this project, it could make sense to keep its identity and interface and not require it to be called through the bitcoin wrapper. Or if we just wrote a new tool and the bitcoin wrapper got in the way or made it awkward to call (see the long list of potential improvements in #31375#issue-2695616922), it could make sense to bypass the wrapper.

    If there are practical downsides to this PR, I’d like to understand them. But I have trouble seeing what the disadvantages might be. The point of this change is move away from the idea that every new binary we introduce needs to be exposed on PATH on the command line for users to directly invoke. I think it makes more sense that some of our binaries should be command line binaries presenting stable, backward-compatible CLIs, and other binaries can be internal binaries that do useful things for us but users are not expected to use directly and we are free to change, rename, merge, or split up in the future. I think it will be harder for us to move from a monolithic to a modular architecture if we don’t have a place to install internal binaries that are not meant to be called directly by users.

  105. TheCharlatan commented at 8:23 pm on July 11, 2025: contributor

    I think it makes more sense that some of our binaries should be command line binaries presenting stable, backward-compatible CLIs, and other binaries can be internal binaries that do useful things for us but users are not expected to use directly and we are free to change, rename, merge, or split up in the future.

    It’s not clear to me how the approach here really helps with that though. Essentially it just adds a tiny extra step for the user to use these binaries. I think the utility of the change is more one of drawing a border for ourselves between stuff that can be expected to be stable and stuff that might change and break existing behaviour in the future. But I don’t think this boundary is clearly communicated to the user by this change.

  106. TheCharlatan commented at 8:39 am on July 12, 2025: contributor

    Guix build (aarch64):

     09080e91998fa6f384c00a2e3aab6316fdd2174a89a303b0a602880daf515defb  guix-build-f49840dd902c/output/aarch64-linux-gnu/SHA256SUMS.part
     1c4061ae7a239ea148d2423f7414d9dd03cefbdfd25c2142476fc400b57ccfef8  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu-debug.tar.gz
     2878588692759d57a0ebb00f3ceded73c53e0c2d9f53dbd0a83549a22d48c007c  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu.tar.gz
     31ce7c5b093514d2d9caf67477dded186bbc1fc740318d7b14c9e7a98d27b5e20  guix-build-f49840dd902c/output/arm-linux-gnueabihf/SHA256SUMS.part
     4d796ebc0b64cb6b16bbb729dc444106464748069124811ac1430e48037045585  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf-debug.tar.gz
     56e911e00bd918e3837bc129ecd8e8a6071d7930cbeb4c4ea3a5d602b156d17a7  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf.tar.gz
     66d40e2758b092acb5ec1745ef2f85c666c61a8f04fb89c996ec1f452db66fc3f  guix-build-f49840dd902c/output/arm64-apple-darwin/SHA256SUMS.part
     77ca976099f3d02d68b3806c3a51203a8968e8f1f3ce3cba43cca2fd7c0f24c29  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-codesigning.tar.gz
     83c9de7f8c734b47809011a4a64668c4c19b7452cf0f963b9861769d9e4729909  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.tar.gz
     9f3c313c5847ddf763cf751b859c40145be5f5c074b46491a4e4665cff577af33  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.zip
    1017ae536221bccec80d53e9c4b5512095be6f97c44957ba836841f450b6c44dbc  guix-build-f49840dd902c/output/dist-archive/bitcoin-f49840dd902c.tar.gz
    118025a760fd94c9a8473aba4b769f28088224b4a7594e543c59ba474e48626df5  guix-build-f49840dd902c/output/powerpc64-linux-gnu/SHA256SUMS.part
    1279b05779161c43c0ef4177e09e6b200510efe02beeb0d4e45ce623ffc12750ec  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu-debug.tar.gz
    1359d5cdd24475611e77d7402e4770ef0c9bfb630827d1adb70a26eb0b42f15503  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu.tar.gz
    14853fd79a50cc44202d17e7cc3d3eff33d06c28aafe2a652060fa6ad25d8d9446  guix-build-f49840dd902c/output/riscv64-linux-gnu/SHA256SUMS.part
    15acb6f097a16f06bdeb0687d859c0db77ceb8c2d39e1981b0777a332034ce5f63  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu-debug.tar.gz
    16815f7870ca273dd5578b592f1815043abcd05f92ff8f3310eeb5abea8bd1dbf4  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu.tar.gz
    1785117256abc78980e928d45453453805807b189e3fb3555d1f834e8d8aa2957a  guix-build-f49840dd902c/output/x86_64-apple-darwin/SHA256SUMS.part
    18de9493f16cceb93bb59b0af259778bef9a1f677651a60736eb1a445c2c10380b  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-codesigning.tar.gz
    196febb9c4420c720361c9e590499564e28550da8f64c61bff3a68f35890195939  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.tar.gz
    20cf948b94e2a6dab9dbbc5f2a2108a0cb7f2639cf3965c7c390cdb3918997b252  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.zip
    2171b8a2b121a3e83854649b0e07df161b3cc49bef95c17fb901c1171a7b42db3d  guix-build-f49840dd902c/output/x86_64-linux-gnu/SHA256SUMS.part
    222469fda346eb8e1979e13e0deb1828861c50b64e747f2f004fe3c533c77ae581  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu-debug.tar.gz
    23e05dad8ad152c86dad619cfde1b62f341b8b855e6eca9784ec363d47e396d7d7  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu.tar.gz
    2407c3a2c8b9b7ef92d798c4c6020aa596faa3ac69f0726f2b39959d1ea411cae1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/SHA256SUMS.part
    2577a2d8e7defce7f071d08a3aaa506c6d0aebf205cee244464552de8ff5c03bac  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-codesigning.tar.gz
    269d2c8b6f9ab8ef31c90311ac058969cf98bcd3e67a414cc4cd4de2881e7bc3df  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-debug.zip
    27a60db9d3311e78c34a578a3fa7864dc34c37b5ca8cdc95371161c39d46f134ee  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-setup-unsigned.exe
    2876055f9d5b3f47d47cb798b8b5622543048d7f55f447ac7a2cb15da071caf2a1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-unsigned.zip
    
  107. ryanofsky commented at 5:01 pm on July 14, 2025: contributor

    re: #31679 (comment)

    I think the utility of the change is more one of drawing a border for ourselves

    It is true that defining the CLI through bin/is only “drawing a border,” not adding an enforcement mechanism that prevents internal binaries from being used directly. This seems appropriate to me, and analogous to python’s convention of using _ prefixes to draw a border between internal and external APIs without stopping them from being called. I think it’s useful to have a separation between the public CLI and internal binaries, especially when IPC allows moving functionality into internal binaries that should not become part of the CLI.

    I also think on a practical level being selective about what gets installed to bin/ can help make useful functionality more discoverable. As long as I’ve been using unix systems, I’ve looking at what files packages install to bin/ to see what commands are available (did this recently with ts from moreutils and par2verify from par2cmdline to see what else was in those packages).

  108. fanquake commented at 10:25 am on July 15, 2025: member
    @theuni @hebasto @purpleKarrot any opinons/discussion you want to add?
  109. ryanofsky commented at 1:31 pm on July 24, 2025: contributor

    This PR has several acks, but it would be helpful if someone familiar with the build system could review the first commit here cd97905ebc564b8b095099a28d1d5437951927c4 and provide feedback. The other commits are all documentation commits, so less critical. @hebasto @fanquake @theuni @maflcko @purpleKarrot might be good candidates according to git log (sorry if I forgot anyone).

    Related PR #31802 switching on the ENABLE_IPC option is a similar state, and could use some build system review. Happy to trade reviews if there are any PR’s I could look at!

  110. purpleKarrot commented at 1:43 pm on July 24, 2025: contributor
    I confirm that the change to the CMake code is OK. I am not very fond of the install_binary_component function, but that is orthogonal to the PR.
  111. achow101 commented at 11:40 pm on July 25, 2025: member

    I’m not really a fan of changing binary locations yet again. If this is merged for v30.0, we’ll have the 3 active major release branches all with different binary locations. I expect this will make my workflow a bit harder and make backports more annoying to test.

    Mainly my complaint is about the locations of bench_bitcoin and test_bitcoin in builds from source since those end up being used quite a lot in my development workflow.

    Edit: This only affects the binary release and not source built locations, so actually, I don’t care either way.

    For the other (new) binaries that would be in libexec, I have no strong opinion, but at least those binaries aren’t in the binary releases, and I doubt people are actively using multiprocess heavily in their development. However, if we could pick one location and stick with it for the rest of time, that’d be great.


    Tangentially, is there a reason we ship test_bitcoin in the binary releases?

  112. Sjors commented at 7:47 am on July 26, 2025: member
    @achow101 there was some discussion about test_bitcoin above: #31679 (comment) #31679 (comment)
  113. ryanofsky commented at 1:45 pm on July 29, 2025: contributor

    This only affects the binary release and not source built locations, so actually, I don’t care either way.

    Thanks, yes. Effects of this PR:

    • For source builds (i.e. developer builds) — No changes.
    • For source installs (i.e. cmake --install output) — test_bitcoin and test_bitcoin-qt and bench_bitcoin are installed in ${CMAKE_PREFIX_PATH}/libexec instead of ${CMAKE_PREFIX_PATH}/bin, so they are no longer on PATH. But they can still be invoked from the libexec/ directory or from the CLI as bitcoin test, bitcoin test-gui, bitcoin bench.
    • For binary releases — Since test_bitcoin is the only test binary enabled in releases, the only change is moving test_bitcoin from bin/ to libexec/.

    The goal of the PR is to introduce a distinction between internal and external binaries so that starting with #31802, we can use IPC to provide features implemented in new binaries and new binaries do not automatically become part of the CLI. The same distinction is also useful for tests. We should be able to change the way tests are built without affecting the CLI.

  114. willcl-ark commented at 9:10 pm on July 31, 2025: member

    Concept ACK.

    I still see a number of references to out-dated locations in our codebase with this PR:

     0$ git grep "bin/\(test_bitcoin\|bench_bitcoin\|bitcoin-chainstate\|bitcoin-gui\|bitcoin-node\|test_bitcoin-qt\)"
     1.github/workflows/ci.yml:          ./bin/test_bitcoin.exe -l test_suite
     2.github/workflows/ci.yml:        run: ./bin/bench_bitcoin.exe -sanity-check
     3ci/test/03_test_script.sh:  DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_BUILD_DIR}"/bin/test_bitcoin --catch_system_errors=no -l test_suite
     4contrib/devtools/deterministic-unittest-coverage/src/main.rs:    let test_exe = build_dir.join("bin/test_bitcoin");
     5contrib/valgrind.supp:# $ valgrind --suppressions=contrib/valgrind.supp build/bin/test_bitcoin
     6contrib/valgrind.supp:#       --show-leak-kinds=all build/bin/test_bitcoin
     7contrib/valgrind.supp:#       --error-limit=no build/bin/test_bitcoin
     8doc/benchmarking.md:    build/bin/bench_bitcoin
     9doc/benchmarking.md:    build/bin/bench_bitcoin -h
    10doc/developer-notes.md:$ valgrind --suppressions=contrib/valgrind.supp build/bin/test_bitcoin
    11doc/developer-notes.md:      --show-leak-kinds=all build/bin/test_bitcoin --log_level=test_suite
    12doc/developer-notes.md:    --object=build/bin/test_bitcoin \
    13src/qt/test/wallettests.cpp://     QT_QPA_PLATFORM=xcb     build/bin/test_bitcoin-qt  # Linux
    14src/qt/test/wallettests.cpp://     QT_QPA_PLATFORM=windows build/bin/test_bitcoin-qt  # Windows
    15src/qt/test/wallettests.cpp://     QT_QPA_PLATFORM=cocoa   build/bin/test_bitcoin-qt  # macOS
    16src/test/README.md:Run `build/bin/test_bitcoin --list_content` for the full list of tests.
    17src/test/README.md:To run the unit tests manually, launch `build/bin/test_bitcoin`. To recompile
    18src/test/README.md:To run the GUI unit tests manually, launch `build/bin/test_bitcoin-qt`
    19src/test/README.md:build/bin/test_bitcoin --help
    20src/test/README.md:build/bin/test_bitcoin --log_level=all --run_test=getarg_tests
    21src/test/README.md:build/bin/test_bitcoin -l all -t getarg_tests
    22src/test/README.md:build/bin/test_bitcoin --run_test=getarg_tests/doubledash
    23src/test/README.md:build/bin/test_bitcoin --log_level=all --run_test=getarg_tests -- -printtoconsole=1
    24src/test/README.md:$ build/bin/test_bitcoin --run_test=getarg_tests/doubledash -- -testdatadir=/somewhere/mydatadir
    25src/test/README.md:gdb build/bin/test_bitcoin
    26src/test/README.md:is happening by running `gdb ./build/bin/test_bitcoin` and then using the `bt` command
    27src/test/README.md:gdb build/bin/test_bitcoin core
    

    Not all of these need fixing, but it would seem nice to get the ones that should be fixed done here, or at least noted for a followup (if you want to try and avoid invalidating 5 ACKs).

    Actually looking closer these are pretty much all build directory links, so are ok.

  115. ryanofsky commented at 1:12 am on August 1, 2025: contributor

    Actually looking closer these are pretty much all build directory links, so are ok.

    Sorry about that, the PR description was confusing and achow thought the same thing you did. I rewrote it now to be clearer. (I think the original PR description was also clear but I had replaced it a few weeks ago with a big table to explain some details of the change, and I think the table made it harder to understand the high-level change.)

  116. ryanofsky renamed this:
    cmake: Move internal binaries from bin/ to libexec/
    cmake: Install internal binaries to <prefix>/libexec/
    on Aug 1, 2025
  117. willcl-ark approved
  118. willcl-ark commented at 1:45 pm on August 4, 2025: member

    utACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f

    Sorry about that, the PR description was confusing …

    No that was my bad, I should have read the PR comments before reviewing (perhaps, although I don’t like to).

    I am in favour of moving binaries to libexec/, including test_bitcoin, as per this change.

    I’ve tried to find other bitcoin packages which may break on this, but can’t find many, and the few I have found are already outdated in other ways, so require a “manual update” already.

    I wondered if this might break any of our shell completions, but none of those are affected by this PR which is great. (I did notice in checking that we don’t have completions for the bitcoin program.)

     0❯ find guix-build-$(git rev-parse --short=12 HEAD)/output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
     19080e91998fa6f384c00a2e3aab6316fdd2174a89a303b0a602880daf515defb  guix-build-f49840dd902c/output/aarch64-linux-gnu/SHA256SUMS.part
     2c4061ae7a239ea148d2423f7414d9dd03cefbdfd25c2142476fc400b57ccfef8  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu-debug.tar.gz
     3878588692759d57a0ebb00f3ceded73c53e0c2d9f53dbd0a83549a22d48c007c  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu.tar.gz
     41ce7c5b093514d2d9caf67477dded186bbc1fc740318d7b14c9e7a98d27b5e20  guix-build-f49840dd902c/output/arm-linux-gnueabihf/SHA256SUMS.part
     5d796ebc0b64cb6b16bbb729dc444106464748069124811ac1430e48037045585  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf-debug.tar.gz
     66e911e00bd918e3837bc129ecd8e8a6071d7930cbeb4c4ea3a5d602b156d17a7  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf.tar.gz
     76d40e2758b092acb5ec1745ef2f85c666c61a8f04fb89c996ec1f452db66fc3f  guix-build-f49840dd902c/output/arm64-apple-darwin/SHA256SUMS.part
     87ca976099f3d02d68b3806c3a51203a8968e8f1f3ce3cba43cca2fd7c0f24c29  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-codesigning.tar.gz
     93c9de7f8c734b47809011a4a64668c4c19b7452cf0f963b9861769d9e4729909  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.tar.gz
    10f3c313c5847ddf763cf751b859c40145be5f5c074b46491a4e4665cff577af33  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.zip
    1117ae536221bccec80d53e9c4b5512095be6f97c44957ba836841f450b6c44dbc  guix-build-f49840dd902c/output/dist-archive/bitcoin-f49840dd902c.tar.gz
    128025a760fd94c9a8473aba4b769f28088224b4a7594e543c59ba474e48626df5  guix-build-f49840dd902c/output/powerpc64-linux-gnu/SHA256SUMS.part
    1379b05779161c43c0ef4177e09e6b200510efe02beeb0d4e45ce623ffc12750ec  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu-debug.tar.gz
    1459d5cdd24475611e77d7402e4770ef0c9bfb630827d1adb70a26eb0b42f15503  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu.tar.gz
    15853fd79a50cc44202d17e7cc3d3eff33d06c28aafe2a652060fa6ad25d8d9446  guix-build-f49840dd902c/output/riscv64-linux-gnu/SHA256SUMS.part
    16acb6f097a16f06bdeb0687d859c0db77ceb8c2d39e1981b0777a332034ce5f63  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu-debug.tar.gz
    17815f7870ca273dd5578b592f1815043abcd05f92ff8f3310eeb5abea8bd1dbf4  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu.tar.gz
    1885117256abc78980e928d45453453805807b189e3fb3555d1f834e8d8aa2957a  guix-build-f49840dd902c/output/x86_64-apple-darwin/SHA256SUMS.part
    19de9493f16cceb93bb59b0af259778bef9a1f677651a60736eb1a445c2c10380b  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-codesigning.tar.gz
    206febb9c4420c720361c9e590499564e28550da8f64c61bff3a68f35890195939  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.tar.gz
    21cf948b94e2a6dab9dbbc5f2a2108a0cb7f2639cf3965c7c390cdb3918997b252  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.zip
    2271b8a2b121a3e83854649b0e07df161b3cc49bef95c17fb901c1171a7b42db3d  guix-build-f49840dd902c/output/x86_64-linux-gnu/SHA256SUMS.part
    232469fda346eb8e1979e13e0deb1828861c50b64e747f2f004fe3c533c77ae581  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu-debug.tar.gz
    24e05dad8ad152c86dad619cfde1b62f341b8b855e6eca9784ec363d47e396d7d7  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu.tar.gz
    2507c3a2c8b9b7ef92d798c4c6020aa596faa3ac69f0726f2b39959d1ea411cae1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/SHA256SUMS.part
    2677a2d8e7defce7f071d08a3aaa506c6d0aebf205cee244464552de8ff5c03bac  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-codesigning.tar.gz
    279d2c8b6f9ab8ef31c90311ac058969cf98bcd3e67a414cc4cd4de2881e7bc3df  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-debug.zip
    28a60db9d3311e78c34a578a3fa7864dc34c37b5ca8cdc95371161c39d46f134ee  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-setup-unsigned.exe
    2976055f9d5b3f47d47cb798b8b5622543048d7f55f447ac7a2cb15da071caf2a1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-unsigned.zip
    
  119. achow101 commented at 8:41 pm on August 6, 2025: member

    ACK f49840dd902cd9b14b6aadb431b16a4aeb719c3f

     0$ find guix-build-f49840dd902c/output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum                                             01:40:49 PM
     19080e91998fa6f384c00a2e3aab6316fdd2174a89a303b0a602880daf515defb  guix-build-f49840dd902c/output/aarch64-linux-gnu/SHA256SUMS.part
     2c4061ae7a239ea148d2423f7414d9dd03cefbdfd25c2142476fc400b57ccfef8  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu-debug.tar.gz
     3878588692759d57a0ebb00f3ceded73c53e0c2d9f53dbd0a83549a22d48c007c  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu.tar.gz
     41ce7c5b093514d2d9caf67477dded186bbc1fc740318d7b14c9e7a98d27b5e20  guix-build-f49840dd902c/output/arm-linux-gnueabihf/SHA256SUMS.part
     5d796ebc0b64cb6b16bbb729dc444106464748069124811ac1430e48037045585  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf-debug.tar.gz
     66e911e00bd918e3837bc129ecd8e8a6071d7930cbeb4c4ea3a5d602b156d17a7  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf.tar.gz
     76d40e2758b092acb5ec1745ef2f85c666c61a8f04fb89c996ec1f452db66fc3f  guix-build-f49840dd902c/output/arm64-apple-darwin/SHA256SUMS.part
     87ca976099f3d02d68b3806c3a51203a8968e8f1f3ce3cba43cca2fd7c0f24c29  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-codesigning.tar.gz
     93c9de7f8c734b47809011a4a64668c4c19b7452cf0f963b9861769d9e4729909  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.tar.gz
    10f3c313c5847ddf763cf751b859c40145be5f5c074b46491a4e4665cff577af33  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.zip
    1117ae536221bccec80d53e9c4b5512095be6f97c44957ba836841f450b6c44dbc  guix-build-f49840dd902c/output/dist-archive/bitcoin-f49840dd902c.tar.gz
    128025a760fd94c9a8473aba4b769f28088224b4a7594e543c59ba474e48626df5  guix-build-f49840dd902c/output/powerpc64-linux-gnu/SHA256SUMS.part
    1379b05779161c43c0ef4177e09e6b200510efe02beeb0d4e45ce623ffc12750ec  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu-debug.tar.gz
    1459d5cdd24475611e77d7402e4770ef0c9bfb630827d1adb70a26eb0b42f15503  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu.tar.gz
    15853fd79a50cc44202d17e7cc3d3eff33d06c28aafe2a652060fa6ad25d8d9446  guix-build-f49840dd902c/output/riscv64-linux-gnu/SHA256SUMS.part
    16acb6f097a16f06bdeb0687d859c0db77ceb8c2d39e1981b0777a332034ce5f63  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu-debug.tar.gz
    17815f7870ca273dd5578b592f1815043abcd05f92ff8f3310eeb5abea8bd1dbf4  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu.tar.gz
    1885117256abc78980e928d45453453805807b189e3fb3555d1f834e8d8aa2957a  guix-build-f49840dd902c/output/x86_64-apple-darwin/SHA256SUMS.part
    19de9493f16cceb93bb59b0af259778bef9a1f677651a60736eb1a445c2c10380b  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-codesigning.tar.gz
    206febb9c4420c720361c9e590499564e28550da8f64c61bff3a68f35890195939  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.tar.gz
    21cf948b94e2a6dab9dbbc5f2a2108a0cb7f2639cf3965c7c390cdb3918997b252  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.zip
    2271b8a2b121a3e83854649b0e07df161b3cc49bef95c17fb901c1171a7b42db3d  guix-build-f49840dd902c/output/x86_64-linux-gnu/SHA256SUMS.part
    232469fda346eb8e1979e13e0deb1828861c50b64e747f2f004fe3c533c77ae581  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu-debug.tar.gz
    24e05dad8ad152c86dad619cfde1b62f341b8b855e6eca9784ec363d47e396d7d7  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu.tar.gz
    2507c3a2c8b9b7ef92d798c4c6020aa596faa3ac69f0726f2b39959d1ea411cae1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/SHA256SUMS.part
    2677a2d8e7defce7f071d08a3aaa506c6d0aebf205cee244464552de8ff5c03bac  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-codesigning.tar.gz
    279d2c8b6f9ab8ef31c90311ac058969cf98bcd3e67a414cc4cd4de2881e7bc3df  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-debug.zip
    28a60db9d3311e78c34a578a3fa7864dc34c37b5ca8cdc95371161c39d46f134ee  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-setup-unsigned.exe
    2976055f9d5b3f47d47cb798b8b5622543048d7f55f447ac7a2cb15da071caf2a1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-unsigned.zip
    
  120. fanquake commented at 12:18 pm on August 7, 2025: member

    Guix Build (x86_64):

     09080e91998fa6f384c00a2e3aab6316fdd2174a89a303b0a602880daf515defb  guix-build-f49840dd902c/output/aarch64-linux-gnu/SHA256SUMS.part
     1c4061ae7a239ea148d2423f7414d9dd03cefbdfd25c2142476fc400b57ccfef8  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu-debug.tar.gz
     2878588692759d57a0ebb00f3ceded73c53e0c2d9f53dbd0a83549a22d48c007c  guix-build-f49840dd902c/output/aarch64-linux-gnu/bitcoin-f49840dd902c-aarch64-linux-gnu.tar.gz
     31ce7c5b093514d2d9caf67477dded186bbc1fc740318d7b14c9e7a98d27b5e20  guix-build-f49840dd902c/output/arm-linux-gnueabihf/SHA256SUMS.part
     4d796ebc0b64cb6b16bbb729dc444106464748069124811ac1430e48037045585  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf-debug.tar.gz
     56e911e00bd918e3837bc129ecd8e8a6071d7930cbeb4c4ea3a5d602b156d17a7  guix-build-f49840dd902c/output/arm-linux-gnueabihf/bitcoin-f49840dd902c-arm-linux-gnueabihf.tar.gz
     66d40e2758b092acb5ec1745ef2f85c666c61a8f04fb89c996ec1f452db66fc3f  guix-build-f49840dd902c/output/arm64-apple-darwin/SHA256SUMS.part
     77ca976099f3d02d68b3806c3a51203a8968e8f1f3ce3cba43cca2fd7c0f24c29  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-codesigning.tar.gz
     83c9de7f8c734b47809011a4a64668c4c19b7452cf0f963b9861769d9e4729909  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.tar.gz
     9f3c313c5847ddf763cf751b859c40145be5f5c074b46491a4e4665cff577af33  guix-build-f49840dd902c/output/arm64-apple-darwin/bitcoin-f49840dd902c-arm64-apple-darwin-unsigned.zip
    1017ae536221bccec80d53e9c4b5512095be6f97c44957ba836841f450b6c44dbc  guix-build-f49840dd902c/output/dist-archive/bitcoin-f49840dd902c.tar.gz
    118025a760fd94c9a8473aba4b769f28088224b4a7594e543c59ba474e48626df5  guix-build-f49840dd902c/output/powerpc64-linux-gnu/SHA256SUMS.part
    1279b05779161c43c0ef4177e09e6b200510efe02beeb0d4e45ce623ffc12750ec  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu-debug.tar.gz
    1359d5cdd24475611e77d7402e4770ef0c9bfb630827d1adb70a26eb0b42f15503  guix-build-f49840dd902c/output/powerpc64-linux-gnu/bitcoin-f49840dd902c-powerpc64-linux-gnu.tar.gz
    14853fd79a50cc44202d17e7cc3d3eff33d06c28aafe2a652060fa6ad25d8d9446  guix-build-f49840dd902c/output/riscv64-linux-gnu/SHA256SUMS.part
    15acb6f097a16f06bdeb0687d859c0db77ceb8c2d39e1981b0777a332034ce5f63  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu-debug.tar.gz
    16815f7870ca273dd5578b592f1815043abcd05f92ff8f3310eeb5abea8bd1dbf4  guix-build-f49840dd902c/output/riscv64-linux-gnu/bitcoin-f49840dd902c-riscv64-linux-gnu.tar.gz
    1785117256abc78980e928d45453453805807b189e3fb3555d1f834e8d8aa2957a  guix-build-f49840dd902c/output/x86_64-apple-darwin/SHA256SUMS.part
    18de9493f16cceb93bb59b0af259778bef9a1f677651a60736eb1a445c2c10380b  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-codesigning.tar.gz
    196febb9c4420c720361c9e590499564e28550da8f64c61bff3a68f35890195939  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.tar.gz
    20cf948b94e2a6dab9dbbc5f2a2108a0cb7f2639cf3965c7c390cdb3918997b252  guix-build-f49840dd902c/output/x86_64-apple-darwin/bitcoin-f49840dd902c-x86_64-apple-darwin-unsigned.zip
    2171b8a2b121a3e83854649b0e07df161b3cc49bef95c17fb901c1171a7b42db3d  guix-build-f49840dd902c/output/x86_64-linux-gnu/SHA256SUMS.part
    222469fda346eb8e1979e13e0deb1828861c50b64e747f2f004fe3c533c77ae581  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu-debug.tar.gz
    23e05dad8ad152c86dad619cfde1b62f341b8b855e6eca9784ec363d47e396d7d7  guix-build-f49840dd902c/output/x86_64-linux-gnu/bitcoin-f49840dd902c-x86_64-linux-gnu.tar.gz
    2407c3a2c8b9b7ef92d798c4c6020aa596faa3ac69f0726f2b39959d1ea411cae1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/SHA256SUMS.part
    2577a2d8e7defce7f071d08a3aaa506c6d0aebf205cee244464552de8ff5c03bac  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-codesigning.tar.gz
    269d2c8b6f9ab8ef31c90311ac058969cf98bcd3e67a414cc4cd4de2881e7bc3df  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-debug.zip
    27a60db9d3311e78c34a578a3fa7864dc34c37b5ca8cdc95371161c39d46f134ee  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-setup-unsigned.exe
    2876055f9d5b3f47d47cb798b8b5622543048d7f55f447ac7a2cb15da071caf2a1  guix-build-f49840dd902c/output/x86_64-w64-mingw32/bitcoin-f49840dd902c-win64-unsigned.zip
    
  121. fanquake merged this on Aug 7, 2025
  122. fanquake closed this on Aug 7, 2025

  123. TheCharlatan commented at 1:58 pm on August 7, 2025: contributor
    Post-merge ACK f49840dd902c

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-08-08 15:13 UTC

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