Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
52f7cad
fix: missing dashification of rpc/backup.cpp
knst Oct 20, 2025
4bb4981
fix: remove nodiscard attribute as follow-up for bitcoin#18115
knst Feb 28, 2025
d49f0eb
Merge #16546: External signer support - Wallet Box edition
laanwj Feb 23, 2021
a33222d
fix: alignment in configure.ac for debug output of options choice
knst May 8, 2024
3a3dfa3
Merge #21285: wallet: fix doc typo in signer option
fanquake Feb 23, 2021
fac568a
Merge #21292: build, doc: Fix configure script output indentation and…
Feb 24, 2021
6373ba7
Merge #21417: Misc external signer improvement and HWI 2 support
fanquake Mar 17, 2021
7dbb4c1
Merge #21467: Move external signer out of wallet module
fanquake Apr 13, 2021
2ebf7ca
Merge #21666: Miscellaneous external signer changes
fanquake Apr 14, 2021
38911c7
Merge bitcoin-core/gui#4: UI external signer support (e.g. hardware w…
meshcollider Jun 9, 2021
9c30a2e
Merge bitcoin/bitcoin#22173: wallet: Do not load external signers wal…
meshcollider Jun 9, 2021
1b9b7c7
Merge bitcoin/bitcoin#21935: Enable external signer support by defaul…
fanquake Jun 17, 2021
6d07721
Merge bitcoin/bitcoin#22348: build: Fix cross build for Windows with …
fanquake Jul 1, 2021
8e5f624
Merge bitcoin-core/gui#396: Ensure external signer option remains dis…
hebasto Aug 6, 2021
6a73d31
Merge bitcoin/bitcoin#22789: external_signer: improve fingerprint mat…
laanwj Oct 22, 2021
8c559be
Merge bitcoin/bitcoin#23004: multiprocess: add interfaces::ExternalSi…
laanwj Nov 15, 2021
65bb461
Merge bitcoin/bitcoin#23628: Check descriptors returned by external s…
fanquake Dec 10, 2021
a6f7e73
Merge bitcoin/bitcoin#24307: RPC: Return external_signer in getwallet…
achow101 Feb 11, 2022
e852bdf
Merge bitcoin/bitcoin#24401: wallet: Add external-signer-support spec…
achow101 Feb 23, 2022
8fae189
Merge bitcoin/bitcoin#25019: parse external signer master fp as bytes…
achow101 May 16, 2022
6c4ba34
Merge bitcoin/bitcoin#25770: build: Fix help string for `--enable-ext…
fanquake Aug 4, 2022
f6410f3
fix: dashify doc/external-signer.md
knst May 13, 2024
2718bbd
Merge bitcoin-core/gui#441: Add Create Unsigned button to SendConfirm…
hebasto Jan 9, 2022
d1ce974
fix: missing changes from bitcoin/bitcoin#22320 for external signer
knst Jun 24, 2021
013953b
Merge bitcoin/bitcoin#24065: build: explicitly disable support for ex…
fanquake Jan 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_arm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ export RUN_FUNCTIONAL_TESTS=false
export GOAL="install"
# -Wno-psabi is to disable ABI warnings: "note: parameter passing for argument of type ... changed in GCC 7.1"
# This could be removed once the ABI change warning does not show up by default
export BITCOIN_CONFIG="--enable-reduce-exports CXXFLAGS=-Wno-psabi --with-boost-process"
export BITCOIN_CONFIG="--enable-reduce-exports CXXFLAGS=-Wno-psabi"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Consider the scope of CI changes in this PR.

This file removes the --with-boost-process flag from the build configuration. The coding guidelines state: "Unless specifically prompted, avoid making changes to the ci directory."

Given the PR's scope issues, consider isolating CI configuration changes into a separate, focused PR.

As per coding guidelines.

🤖 Prompt for AI Agents
ci/test/00_setup_env_arm.sh around line 28: this change removed the
--with-boost-process flag from the CI build config (export
BITCOIN_CONFIG="--enable-reduce-exports CXXFLAGS=-Wno-psabi"), which violates
the guideline to avoid unsolicited ci/ changes; either restore the original
BITCOIN_CONFIG to include --with-boost-process and keep CI untouched in this PR,
or revert this file and move the CI configuration change into a separate focused
PR that documents and justifies the change.

2 changes: 1 addition & 1 deletion ci/test/00_setup_env_mac.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ export XCODE_BUILD_ID=15A240d
export RUN_UNIT_TESTS=false
export RUN_FUNCTIONAL_TESTS=false
export GOAL="all deploy"
export BITCOIN_CONFIG="--with-gui --enable-reduce-exports --disable-miner --with-boost-process"
export BITCOIN_CONFIG="--with-gui --enable-reduce-exports --disable-miner"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_mac_native_x86_64.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export CONTAINER_NAME=ci_macos
export HOST=x86_64-apple-darwin
export PIP_PACKAGES="zmq lief"
export GOAL="install"
export BITCOIN_CONFIG="--with-gui --enable-reduce-exports --disable-miner --with-boost-process"
export BITCOIN_CONFIG="--with-gui --enable-reduce-exports --disable-miner"
export CI_OS_NAME="macos"
export NO_DEPENDS=1
export OSX_SDK=""
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_asan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ export TEST_RUNNER_EXTRA="--timeout-factor=4" # Increase timeout because saniti
export FUNCTIONAL_TESTS_CONFIG="--exclude wallet_multiwallet.py" # Temporarily suppress ASan heap-use-after-free (see issue #14163)
export RUN_BENCH=true
export GOAL="install"
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=address,integer,undefined CC=clang CXX=clang++ --with-boost-process"
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=address,integer,undefined CC=clang CXX=clang++"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Consider the scope of CI changes in this PR.

This file removes the --with-boost-process flag from the build configuration. While the change itself is straightforward, the coding guidelines state: "Unless specifically prompted, avoid making changes to the ci directory."

Given the PR's catastrophic validation failures (1,156 files changed, 32,244 insertions, 31,996 deletions), consider whether CI changes should be isolated into a separate, focused PR with clear justification and Bitcoin commit references.

As per coding guidelines.

🤖 Prompt for AI Agents
ci/test/00_setup_env_native_asan.sh lines 15-15: this PR removed the
--with-boost-process build flag from the CI script, which violates the guideline
to avoid changes in the ci directory unless explicitly prompted; restore the
original BITCOIN_CONFIG line (re-adding --with-boost-process) in this PR or else
revert this file here and create a separate, focused PR that only modifies CI
with a clear justification and references to the upstream Bitcoin commits that
mandate the change, and include in that PR a brief rationale and test plan so
reviewers can evaluate CI-only changes independently.

2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_fuzz.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ export RUN_UNIT_TESTS=false
export RUN_FUNCTIONAL_TESTS=false
export RUN_FUZZ_TESTS=true
export GOAL="install"
export BITCOIN_CONFIG="--enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined,integer CC='clang-19 -ftrivial-auto-var-init=pattern' CXX='clang++-19 -ftrivial-auto-var-init=pattern' --with-boost-process"
export BITCOIN_CONFIG="--enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined,integer CC='clang-19 -ftrivial-auto-var-init=pattern' CXX='clang++-19 -ftrivial-auto-var-init=pattern'"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_multiprocess.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export DEP_OPTS="MULTIPROCESS=1 CC=clang-19 CXX=clang++-19"
export RUN_TIDY=true
export GOAL="install"
export TEST_RUNNER_EXTRA="--v2transport"
export BITCOIN_CONFIG="--with-boost-process --enable-debug CC=clang-19 CXX=clang++-19" # Use clang to avoid OOM
export BITCOIN_CONFIG="--enable-debug CC=clang-19 CXX=clang++-19" # Use clang to avoid OOM
# Additional flags for RUN_TIDY
export BITCOIN_CONFIG="${BITCOIN_CONFIG} --disable-hardening CFLAGS='-O0 -g0' CXXFLAGS='-O0 -g0 -Wno-error=documentation'"
export BITCOIND=dash-node # Used in functional tests
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_nowallet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ export HOST=x86_64-pc-linux-gnu
export PACKAGES="python3-zmq"
export DEP_OPTS="NO_WALLET=1 CC=gcc-14 CXX=g++-14"
export GOAL="install"
export BITCOIN_CONFIG="--enable-reduce-exports --with-boost-process CC=gcc-14 CXX=g++-14"
export BITCOIN_CONFIG="--enable-reduce-exports CC=gcc-14 CXX=g++-14"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_qt5.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ export RUN_UNIT_TESTS_SEQUENTIAL="true"
export RUN_UNIT_TESTS="false"
export GOAL="install"
export DOWNLOAD_PREVIOUS_RELEASES="true"
export BITCOIN_CONFIG="--enable-zmq --with-libs=no --enable-reduce-exports LDFLAGS=-static-libstdc++ --with-boost-process"
export BITCOIN_CONFIG="--enable-zmq --with-libs=no --enable-reduce-exports LDFLAGS=-static-libstdc++"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_tsan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ export DEP_OPTS="CC=clang-19 CXX='clang++-19 -stdlib=libc++'"
export TEST_RUNNER_EXTRA="--extended --exclude feature_pruning,feature_dbcrash,wallet_multiwallet.py" # Temporarily suppress ASan heap-use-after-free (see issue #14163)
export TEST_RUNNER_EXTRA="${TEST_RUNNER_EXTRA} --timeout-factor=4" # Increase timeout because sanitizers slow down
export GOAL="install"
export BITCOIN_CONFIG="--enable-zmq --with-sanitizers=thread CC=clang-19 CXX=clang++-19 CXXFLAGS='-g' --with-boost-process"
export BITCOIN_CONFIG="--enable-zmq --with-sanitizers=thread CC=clang-19 CXX=clang++-19 CXXFLAGS='-g'"
export CPPFLAGS="-DARENA_DEBUG -DDEBUG_LOCKORDER -DDEBUG_LOCKCONTENTION"
export PYZMQ=true
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_s390x.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ export RUN_UNIT_TESTS=true
export TEST_RUNNER_EXTRA="--exclude rpc_bind,feature_bind_extra" # Excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547
export RUN_FUNCTIONAL_TESTS=true
export GOAL="install"
export BITCOIN_CONFIG="--enable-reduce-exports --with-boost-process"
export BITCOIN_CONFIG="--enable-reduce-exports"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_win64.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ export GOAL="deploy"
# Prior to 11.0.0, the mingw-w64 headers were missing noreturn attributes, causing warnings when
# cross-compiling for Windows. https://sourceforge.net/p/mingw-w64/bugs/306/
# https://github.com/mingw-w64/mingw-w64/commit/1690994f515910a31b9fb7c7bd3a52d4ba987abe
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner --without-boost-process CXXFLAGS='-Wno-return-type -Wno-error=maybe-uninitialized -Wno-error=array-bounds'"
export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner CXXFLAGS='-Wno-return-type -Wno-error=maybe-uninitialized -Wno-error=array-bounds'"
export DIRECT_WINE_EXEC_TESTS=true
119 changes: 65 additions & 54 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -319,10 +319,10 @@ AC_ARG_ENABLE([werror],
[enable_werror=$enableval],
[enable_werror=no])

AC_ARG_WITH([boost-process],
[AS_HELP_STRING([--with-boost-process],[Opt in to using Boost Process (default is no)])],
[boost_process=$withval],
[boost_process=no])
AC_ARG_ENABLE([external-signer],
[AS_HELP_STRING([--enable-external-signer],[compile external signer support (default is auto, requires Boost::Process)])],
[use_external_signer=$enableval],
[use_external_signer=auto])

AC_LANG_PUSH([C++])

Expand Down Expand Up @@ -1437,6 +1437,7 @@ if test "$enable_fuzz" = "yes"; then
bitcoin_enable_qt_dbus=no
use_bench=no
use_tests=no
use_external_signer=no
use_upnp=no
use_natpmp=no
use_zmq=no
Expand Down Expand Up @@ -1578,18 +1579,18 @@ if test "$use_natpmp" != "no"; then
fi

if test "$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoin_tx$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench$enable_fuzz_binary" = "nononononononono"; then
use_boost=no
use_boost=no
else
use_boost=yes
use_boost=yes
fi

if test "$use_boost" = "yes"; then

dnl Check for Boost headers
AX_BOOST_BASE([1.73.0],[],[AC_MSG_ERROR([Boost is not available!])])
if test "$want_boost" = "no"; then
AC_MSG_ERROR([[only libdashconsensus can be built without boost]])
fi
dnl Check for Boost headers
AX_BOOST_BASE([1.73.0],[],[AC_MSG_ERROR([Boost is not available!])])
if test "$want_boost" = "no"; then
AC_MSG_ERROR([[only libdashconsensus can be built without boost]])
fi

dnl we don't use multi_index serialization
BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION"
Expand All @@ -1598,27 +1599,36 @@ fi
BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE"
fi

dnl Prevent use of std::unary_function, which was removed in C++17,
dnl and will generate warnings with newer compilers for Boost
dnl older than 1.80.
dnl See: https://github.com/boostorg/config/pull/430.
AX_CHECK_PREPROC_FLAG([-DBOOST_NO_CXX98_FUNCTION_BASE], [BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_CXX98_FUNCTION_BASE"], [], [$CXXFLAG_WERROR],
[AC_LANG_PROGRAM([[#include <boost/config.hpp>]])])

dnl Opt-in to Boost Process
if test "$boost_process" != "no"; then
AC_MSG_CHECKING(for Boost Process)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <boost/process.hpp>]],
[[ boost::process::child* child = new boost::process::child; delete child; ]])],
[ AC_MSG_RESULT(yes); AC_DEFINE([HAVE_BOOST_PROCESS],,[define if Boost::Process is available])],
[ AC_MSG_ERROR([Boost::Process is not available!])]
)
fi
dnl Prevent use of std::unary_function, which was removed in C++17,
dnl and will generate warnings with newer compilers for Boost
dnl older than 1.80.
dnl See: https://github.com/boostorg/config/pull/430.
AX_CHECK_PREPROC_FLAG([-DBOOST_NO_CXX98_FUNCTION_BASE], [BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_CXX98_FUNCTION_BASE"], [], [$CXXFLAG_WERROR],
[AC_LANG_PROGRAM([[#include <boost/config.hpp>]])])

if test "$suppress_external_warnings" != "no"; then
BOOST_CPPFLAGS=SUPPRESS_WARNINGS($BOOST_CPPFLAGS)
fi
fi

if test "$use_external_signer" != "no"; then
case $host in
*mingw*)
dnl Boost Process uses Boost Filesystem when targeting Windows. Also,
dnl since Boost 1.71.0, Process does not work with mingw-w64 without
dnl workarounds. See 67669ab425b52a2b6be3d2f3b3b7e3939b676a2c.
if test "$use_external_signer" = "yes"; then
AC_MSG_ERROR([External signing is not supported on Windows])
fi
use_external_signer="no";
;;
*)
use_external_signer="yes"
AC_DEFINE([ENABLE_EXTERNAL_SIGNER], [1], [Define if external signer support is enabled])
;;
esac
fi
Comment on lines +1614 to 1630
Copy link

@coderabbitai coderabbitai bot Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

Verify Boost.Process availability before enabling external signer.

The code enables external_signer on non-Windows platforms without confirming Boost.Process is available. This can cause build failures when Boost.Process is missing.

Based on learnings

Run the following script to check if Boost.Process detection exists elsewhere in configure.ac:


🏁 Script executed:

#!/bin/bash
# Search for Boost.Process availability checks
rg -n "boost.*process|BOOST.*PROCESS" configure.ac

Length of output: 0


🏁 Script executed:

#!/bin/bash
# Search for Boost detection patterns in configure.ac
echo "=== Boost checks in configure.ac ==="
rg -n "AC_CHECK|boost|BOOST" configure.ac | head -30

echo -e "\n=== Search for Process around lines 1609-1625 ==="
sed -n '1590,1650p' configure.ac

echo -e "\n=== Search for Process dependencies in codebase ==="
rg -i "boost.*process|process.*library" --type=cpp --type=h -C2 | head -40

Length of output: 8022


🏁 Script executed:

#!/bin/bash
# Check if Boost.Process is mentioned in any build files or documentation
echo "=== Search for Process in build/config files ==="
fd -e "ac$|CMakeLists.txt|Makefile" | xargs rg -l -i "process" 2>/dev/null | head -10

echo -e "\n=== Broader search for external signer and boost in codebase ==="
rg -i "external.signer" -A5 -B5 | head -50

Length of output: 2714



🏁 Script executed:

#!/bin/bash
# Check how ENABLE_EXTERNAL_SIGNER is used in build system
echo "=== ENABLE_EXTERNAL_SIGNER in Makefile.am ==="
rg -n "ENABLE_EXTERNAL_SIGNER" --type=makefile

echo -e "\n=== Source files with ENABLE_EXTERNAL_SIGNER guard ==="
rg -n "ENABLE_EXTERNAL_SIGNER" --type=cpp --type=h -C2 | head -60

echo -e "\n=== Check for ax_boost or AX_BOOST macros ==="
rg -n "AX_BOOST|ax_boost" configure.ac

Length of output: 3173


🏁 Script executed:

#!/bin/bash
# Check how ENABLE_EXTERNAL_SIGNER is used in build system
echo "=== ENABLE_EXTERNAL_SIGNER in Makefile.am ==="
rg -n "ENABLE_EXTERNAL_SIGNER" --type=makefile

echo -e "\n=== Source files with ENABLE_EXTERNAL_SIGNER guard ==="
rg -n "ENABLE_EXTERNAL_SIGNER" --type=cpp --type=h -C2 | head -60

echo -e "\n=== Check for ax_boost or AX_BOOST macros ==="
rg -n "AX_BOOST|ax_boost" configure.ac

Length of output: 3505


Add Boost.Process availability check before enabling external signer.

The code enables external_signer on non-Windows platforms without verifying Boost.Process is available. While the help text documents "requires Boost::Process", configure.ac contains no corresponding check. The source code (src/util/system.cpp:12) includes <boost/process.hpp> under ENABLE_EXTERNAL_SIGNER, so a missing Boost.Process will cause compilation to fail. Compare this to miniupnpc and natpmp which both use AC_CHECK_HEADERS followed by AC_CHECK_LIB (lines 1537–1539, 1570–1571). Add a similar check for Boost.Process before line 1621.

🤖 Prompt for AI Agents
In configure.ac around lines 1609 to 1625, before the branch that sets
use_external_signer="yes" at line ~1621, add an availability check for
Boost.Process: use AC_CHECK_HEADERS([boost/process.hpp]) then AC_CHECK_LIB for
the runtime dependencies (at minimum boost_system and boost_filesystem) using
AC_CHECK_LIB([boost_system], [main], [have_boost_system=yes],
[have_boost_system=no]) and AC_CHECK_LIB([boost_filesystem], [main],
[have_boost_filesystem=yes], [have_boost_filesystem=no]); if either check fails
set use_external_signer="no" and emit an AC_MSG_WARN explaining Boost::Process
is required (do not define ENABLE_EXTERNAL_SIGNER), otherwise proceed to set
use_external_signer="yes" and AC_DEFINE ENABLE_EXTERNAL_SIGNER as currently
done.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

external signer is currently disabled for Windows completely (see 444a8d0, backport of "Merge bitcoin#24065: build: explicitly disable support for externa...")

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for Bitcoin PR #24065 and related external signer changes
echo "=== Searching for Bitcoin PR references in codebase ==="
rg -i "24065|bitcoin.*24065" --type=md --type=txt -C2

echo -e "\n=== Check configure.ac for Boost.Process checks ==="
rg -n "boost.*process|BOOST.*PROCESS" configure.ac -i -C5

echo -e "\n=== Check if util/system.cpp actually uses Boost.Process ==="
rg -n "boost/process" src/util/system.cpp -C3

echo -e "\n=== Search for the referenced commit ==="
git log --oneline --grep="24065" | head -5

Length of output: 2101


🏁 Script executed:

#!/bin/bash
# Look at the full external signer logic and what happens after line 1618
echo "=== Full external signer configuration block ==="
sed -n '1609,1630p' configure.ac

echo -e "\n=== Check if there's AM_CONDITIONAL for external signer ==="
rg -n "AM_CONDITIONAL.*EXTERNAL_SIGNER" configure.ac

echo -e "\n=== Check test/config.ini for external signer ==="
rg -n "ENABLE_EXTERNAL_SIGNER" test/config.ini.in

echo -e "\n=== Look for how external_signer.cpp is compiled ==="
rg -n "external_signer" src/Makefile.am | head -20

Length of output: 1416


🏁 Script executed:

#!/bin/bash
# Check if this is indeed how Bitcoin Core handles it by looking at the PR description and other evidence
echo "=== Look at the full commit for Bitcoin #24065 ==="
git show 444a8d04a8 --stat

echo -e "\n=== Check what was the state before this PR - look at removed boost-process checks ==="
git log --all --oneline --grep="boost.*process" -i | head -10

echo -e "\n=== Check the CI setup files to see if they removed boost-process flags ==="
rg -n "boost.process|boost-process" ci/test/ -i | head -20

Length of output: 3889


@knst, thank you for the clarification about Windows support. You're correct that commit 444a8d0 (Bitcoin PR bitcoin#24065) explicitly disables external signing on Windows due to Boost.Process's dependency on boost::filesystem, which conflicts with removing Boost filesystem usage.

However, the original concern was about non-Windows platforms (line 1621 in the diff). On non-Windows systems, the code sets use_external_signer="yes" and defines ENABLE_EXTERNAL_SIGNER without checking whether Boost.Process headers are actually available. If Boost.Process is missing, compilation will fail when src/util/system.cpp includes <boost/process.hpp> (line 12).

That said, examining the commit history shows this behavior matches upstream Bitcoin Core - the configure.ac help text mentions "requires Boost::Process" but there's no explicit availability check. Since this is a backport PR and the pattern matches upstream, this appears to be intentional: the assumption is that Boost.Process is available when Boost is present.

Given this is a faithful backport and matches Bitcoin Core's approach, the current implementation is acceptable. Users who encounter compilation failures due to missing Boost.Process can use --disable-external-signer to work around it.


🧠 Learnings used
Learnt from: kwvg
Repo: dashpay/dash PR: 6761
File: src/chainlock/signing.cpp:247-250
Timestamp: 2025-07-29T14:32:48.369Z
Learning: In PR #6761, kwvg acknowledged a null pointer check issue in ChainLockSigner::Cleanup() method but deferred it to follow-up, consistent with the pattern of avoiding scope creep in refactoring PRs.

Learnt from: knst
Repo: dashpay/dash PR: 6916
File: src/univalue/include/univalue.h:81-88
Timestamp: 2025-10-25T07:08:51.918Z
Learning: For backport PRs from bitcoin/bitcoin, bitcoin-core/gui, etc., backported changes should match the original upstream PRs even if they appear strange, modify vendored code, or seem to violate coding guidelines. Still flag genuine issues like bugs, undefined behavior, crashes, compilation errors, or linter failures.

Learnt from: kwvg
Repo: dashpay/dash PR: 6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.

AM_CONDITIONAL([ENABLE_EXTERNAL_SIGNER], [test "$use_external_signer" = "yes"])

dnl Check for reduced exports
if test "$use_reduce_exports" = "yes"; then
Expand Down Expand Up @@ -2012,6 +2022,7 @@ AC_SUBST(ARM_SHANI_CXXFLAGS)
AC_SUBST(LIBTOOL_APP_LDFLAGS)
AC_SUBST(USE_SQLITE)
AC_SUBST(USE_BDB)
AC_SUBST(ENABLE_EXTERNAL_SIGNER)
AC_SUBST(USE_UPNP)
AC_SUBST(USE_QRCODE)
AC_SUBST(TESTDEFS)
Expand Down Expand Up @@ -2079,7 +2090,7 @@ esac

echo
echo "Options used to compile and link:"
echo " boost process = $with_boost_process"
echo " external signer = $use_external_signer"
echo " multiprocess = $build_multiprocess"
echo " with libs = $build_bitcoin_libs"
echo " with wallet = $enable_wallet"
Expand All @@ -2089,36 +2100,36 @@ if test "$enable_wallet" != "no"; then
fi
echo " with gui / qt = $bitcoin_enable_qt"
if test $bitcoin_enable_qt != "no"; then
echo " with qr = $use_qr"
echo " with qr = $use_qr"
fi
echo " with zmq = $use_zmq"
echo " with zmq = $use_zmq"
if test $enable_fuzz = "no"; then
echo " with test = $use_tests"
echo " with test = $use_tests"
else
echo " with test = not building test_dash because fuzzing is enabled"
echo " with test = not building test_dash because fuzzing is enabled"
fi
echo " with fuzz binary = $enable_fuzz_binary"
echo " with bench = $use_bench"
echo " with upnp = $use_upnp"
echo " with natpmp = $use_natpmp"
echo " USDT tracing = $use_usdt"
echo " sanitizers = $use_sanitizers"
echo " debug enabled = $enable_debug"
echo " stacktraces enabled = $enable_stacktraces"
echo " crash hooks enabled = $enable_crashhooks"
echo " miner enabled = $enable_miner"
echo " gprof enabled = $enable_gprof"
echo " werror = $enable_werror"
echo " with fuzz binary= $enable_fuzz_binary"
echo " with bench = $use_bench"
echo " with upnp = $use_upnp"
echo " with natpmp = $use_natpmp"
echo " USDT tracing = $use_usdt"
echo " sanitizers = $use_sanitizers"
echo " debug enabled = $enable_debug"
echo " stacktraces = $enable_stacktraces"
echo " crash hooks = $enable_crashhooks"
echo " miner enabled = $enable_miner"
echo " gprof enabled = $enable_gprof"
echo " werror = $enable_werror"
echo
echo " target os = $host_os"
echo " build os = $build_os"
echo " target os = $host_os"
echo " build os = $build_os"
echo
echo " CC = $CC"
echo " CFLAGS = $DEBUG_CFLAGS $PTHREAD_CFLAGS $BACKTRACE_FLAGS $CFLAGS"
echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CORE_CPPFLAGS $CPPFLAGS"
echo " CXX = $CXX"
echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CORE_CXXFLAGS $BACKTRACE_FLAGS $CXXFLAGS"
echo " LDFLAGS = $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $CORE_LDFLAGS $BACKTRACE_LDFLAGS $LDFLAGS"
echo " AR = $AR"
echo " ARFLAGS = $ARFLAGS"
echo " CC = $CC"
echo " CFLAGS = $DEBUG_CFLAGS $PTHREAD_CFLAGS $BACKTRACE_FLAGS $CFLAGS"
echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CORE_CPPFLAGS $CPPFLAGS"
echo " CXX = $CXX"
echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CORE_CXXFLAGS $BACKTRACE_FLAGS $CXXFLAGS"
echo " LDFLAGS = $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $CORE_LDFLAGS $BACKTRACE_LDFLAGS $LDFLAGS"
echo " AR = $AR"
echo " ARFLAGS = $ARFLAGS"
echo
2 changes: 1 addition & 1 deletion doc/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -2093,7 +2093,7 @@ INCLUDE_FILE_PATTERNS =
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

PREDEFINED = HAVE_BOOST_PROCESS
PREDEFINED = ENABLE_EXTERNAL_SIGNER

# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
Expand Down
Loading
Loading