commit:     a620392f7409cfe134407933df7b98f6e48b5e29
Author:     Matt Whitlock <gentoo <AT> mattwhitlock <DOT> name>
AuthorDate: Fri Oct 10 20:25:28 2025 +0000
Commit:     Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Thu Oct 30 19:29:13 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a620392f

net-p2p/bitcoin-core: bump to 29.2

Note: An automated detection is added in pkg_setup() to alert users if
they have any auto-loaded wallets still in the soon-to-be obsolete
format. Even if they miss seeing the warning, the worst that will happen
upon upgrading to 30.0 is that their system service or manually executed
BitcoinD will fail to start, and they will need to edit their
settings.json to remove the offending wallets and then call the
migratewallet RPC to migrate their old wallets to the new format.
Bitcoin Core 30.0 introduces a minimal Berkeley DB reader (with no
dependency on any Berkeley DB library) so that the wallet migration
command remains usable.

Note: This release drops the automated data directory migration that has
been offered since 380aad5fc649a00ae46644c130fb9a3b8970ee09 (Oct 2023).
Users who still have /var/lib/bitcoin/.bitcoin as a symlink to
/var/lib/bitcoind will lose that symlink upon upgrading to this release.

See: https://github.com/bitcoin/bitcoin/releases/tag/v29.2
Signed-off-by: Matt Whitlock <gentoo <AT> mattwhitlock.name>
Part-of: https://github.com/gentoo/gentoo/pull/44122
Closes: https://github.com/gentoo/gentoo/pull/44122
Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>

 net-p2p/bitcoin-core/Manifest                 |   1 +
 net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild | 340 ++++++++++++++++++++++++++
 2 files changed, 341 insertions(+)

diff --git a/net-p2p/bitcoin-core/Manifest b/net-p2p/bitcoin-core/Manifest
index f7d8221c0125..d0fcbaa8e338 100644
--- a/net-p2p/bitcoin-core/Manifest
+++ b/net-p2p/bitcoin-core/Manifest
@@ -1,4 +1,5 @@
 DIST bitcoin-core-29.0.tar.gz 12931219 BLAKE2B 
ee4a9b67ceb3e7a1851f844a090a099267798f83fbeb4fb76e0dd30ec24ce3fb967ab032179492cb8c02f0e470b3c2546ad589f940487bb0a0cc4d469bf3e1f9
 SHA512 
1373348fff7ac978fd28a8e29eda9ba9af745f947153a2c6c099b1e997d0d55611627f4c5299e350be3a9b555406da6bf056d2c5f6c123077e2872f5db7b3459
 DIST bitcoin-core-29.0-qt6.patch 16737 BLAKE2B 
bf863852ad8d313ad26612f149612944949b93f3b6f4f1891587226bbf11fcfc5c29b63a59965bfd56f7edec27c82cef2209e40201963d4227e46fa87664f694
 SHA512 
af19a7ddee9f0cce85684149a130715df8511b9e4f38e5e3a79cf14586f1f73bde671a5ed1d44da870b3f2352d3c8e561b1ffa01e224e253019c71dfc4544476
 DIST bitcoin-core-29.1.tar.gz 12876068 BLAKE2B 
ed8afd0d4a9ef82ac3fb4ec440fbe166db027b1cc961b0cb4cbaf3497883902bc3e6af23296cbc04bf6404f51a1e725bdf536a0dc7976d1082ccd03b4a500879
 SHA512 
0110ea33787fc2fad152578dddd7c55e4219d9753d22b7fbb050755bdaa0f9dccd88c254f072ce855869ed9cddfb99015818ce1f44bbd1e25b2129a036d8fdf5
+DIST bitcoin-core-29.2.tar.gz 12874820 BLAKE2B 
43c57637f9ae842935cc27c8d16cfbdc7a2abe7ed55f58666f3bd3a2aa2826532a2207a35a27ed846b86ea2b304e22a99446d6d7138d202029ce9bde82353577
 SHA512 
1c3eb5988e1f6b0292f103de3e7911dc9430429687158988c510e647520d094e55b7cc63fd9044db9225111811368c1998b8320066bcec4f154e771e2beee7eb
 DIST bitcoin-core-30.0.tar.gz 12676071 BLAKE2B 
4204613d7b24193520bd5c539b45d368a5348a7aace365b8909ba439dbe0393d2e58b498431d492901abf09963408d3661998f1cbdf987e6074be117a3ad44f4
 SHA512 
290bdbffc945f34cb5571c19bcb41265cb3f209fd86018694a2426555456812c56bba5a4271e6928ccc4468a1f0175a6769d4745ecb213e521d3201cd557a21f

diff --git a/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild 
b/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild
new file mode 100644
index 000000000000..40e419072042
--- /dev/null
+++ b/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild
@@ -0,0 +1,340 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit bash-completion-r1 check-reqs cmake db-use desktop edo multiprocessing 
python-any-r1 systemd toolchain-funcs xdg-utils
+
+DESCRIPTION="Reference implementation of the Bitcoin cryptocurrency"
+HOMEPAGE="https://bitcoincore.org/";
+SRC_URI="
+       https://github.com/bitcoin/bitcoin/archive/v${PV/_rc/rc}.tar.gz -> 
${P}.tar.gz
+       
https://github.com/bitcoin/bitcoin/commit/6d4214925fadc36d26aa58903db5788c742e68c6.patch?full_index=1
 -> ${PN}-29.0-qt6.patch
+"
+S="${WORKDIR}/${PN/-core}-${PV/_rc/rc}"
+
+LICENSE="MIT"
+SLOT="0"
+if [[ "${PV}" != *_rc* ]] ; then
+       KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+fi
+IUSE="asm +berkdb +cli +daemon dbus examples +external-signer gui qrcode 
+sqlite +system-libsecp256k1 systemtap test test-full zeromq"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+       dbus? ( gui )
+       qrcode? ( gui )
+       test-full? ( test )
+"
+# dev-libs/univalue is now bundled, as upstream dropped support for system copy
+# and their version in the Bitcoin repo has deviated a fair bit from upstream.
+# Upstream also seems very inactive.
+COMMON_DEPEND="
+       >=dev-libs/boost-1.81.0:=
+       >=dev-libs/libevent-2.1.12:=
+       berkdb? ( >=sys-libs/db-4.8.30:$(db_ver_to_slot 4.8)=[cxx] )
+       daemon? (
+               acct-group/bitcoin
+               acct-user/bitcoin
+       )
+       gui? (
+               >=dev-qt/qtbase-6.2:6[dbus?,gui,network,widgets]
+       )
+       qrcode? ( >=media-gfx/qrencode-4.1.1:= )
+       sqlite? ( >=dev-db/sqlite-3.38.5:= )
+       system-libsecp256k1? ( 
>=dev-libs/libsecp256k1-0.6.0:=[asm=,ellswift,extrakeys,recovery,schnorr] )
+       zeromq? ( >=net-libs/zeromq-4.3.4:= )
+"
+RDEPEND="
+       ${COMMON_DEPEND}
+       !dev-util/bitcoin-tx
+       cli? ( !net-p2p/bitcoin-cli )
+       daemon? ( !net-p2p/bitcoind )
+       gui? ( !net-p2p/bitcoin-qt )
+"
+DEPEND="
+       ${COMMON_DEPEND}
+       systemtap? ( >=dev-debug/systemtap-4.8 )
+"
+BDEPEND="
+       >=dev-build/cmake-3.25
+       virtual/pkgconfig
+       daemon? (
+               acct-group/bitcoin
+               acct-user/bitcoin
+       )
+       gui? ( >=dev-qt/qttools-6.2:6[linguist] )
+       test? (
+               ${PYTHON_DEPS}
+       )
+"
+IDEPEND="
+       gui? ( dev-util/desktop-file-utils )
+"
+
+DOCS=(
+       doc/bips.md
+       doc/bitcoin-conf.md
+       doc/descriptors.md
+       doc/files.md
+       doc/i2p.md
+       doc/JSON-RPC-interface.md
+       doc/multisig-tutorial.md
+       doc/p2p-bad-ports.md
+       doc/psbt.md
+       doc/reduce-memory.md
+       doc/reduce-traffic.md
+       doc/release-notes.md
+       doc/REST-interface.md
+       doc/tor.md
+)
+
+PATCHES=(
+       "${DISTDIR}/${PN}-29.0-qt6.patch"
+       "${FILESDIR}/29.0-cmake-syslibs.patch"
+       "${FILESDIR}/26.0-init.patch"
+)
+
+efmt() {
+       : ${1:?} ; local l ; while read -r l ; do "${!#}" "${l}" ; done < <(fmt 
"${@:1:$#-1}")
+}
+
+pkg_pretend() {
+       if ! use daemon && ! use gui && ! has_version 
"${CATEGORY}/${PN}[-daemon,-gui(-),-qt5(-)]" ; then
+               efmt ewarn <<-EOF
+                       You are enabling neither USE="daemon" nor USE="gui". 
This is a valid
+                       configuration, but you will be unable to run a Bitcoin 
node using this
+                       installation.
+               EOF
+       fi
+       if use daemon && ! use cli && ! has_version 
"${CATEGORY}/${PN}[daemon,-bitcoin-cli(-),-cli(-)]" ; then
+               efmt ewarn <<-EOF
+                       You are enabling USE="daemon" but not USE="cli". This 
is a valid
+                       configuration, but you will be unable to interact with 
your bitcoind node
+                       via the command line using this installation.
+               EOF
+       fi
+       if ! use berkdb && ! use sqlite &&
+               { { use daemon && ! has_version 
"${CATEGORY}/${PN}[daemon,-berkdb,-sqlite]" ; } ||
+                 { use gui && ! has_version 
"${CATEGORY}/${PN}[gui,-berkdb,-sqlite]" ; } ; }
+       then
+               efmt ewarn <<-EOF
+                       You are enabling neither USE="berkdb" nor USE="sqlite". 
This is a valid
+                       configuration, but your Bitcoin node will be unable to 
open any wallets.
+               EOF
+       fi
+
+       # test/functional/feature_pruning.py requires 4 GB disk space
+       # test/functional/wallet_pruning.py requires 1.3 GB disk space
+       use test && CHECKREQS_DISK_BUILD="6G" check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+       if use test ; then
+               CHECKREQS_DISK_BUILD="6G" check-reqs_pkg_setup
+               python-any-r1_pkg_setup
+       fi
+
+       # check for auto-loaded wallets in the obsolete (soon to be 
unsupported) format
+       if use daemon && use berkdb && [[ -r 
"${EROOT}/var/lib/bitcoind/settings.json" ]] ; then
+               local wallet bdb_wallets=()
+               while read -rd '' wallet ; do
+                       # printf interprets any C-style escape sequences in 
${wallet}
+                       wallet="${EROOT}$(printf 
"/var/lib/bitcoind/wallets/${wallet:+${wallet//\%/%%}/}wallet.dat")"
+                       [[ -r "${wallet}" && "$(file -b -- "${wallet}")" == 
*'Berkeley DB'* ]] && bdb_wallets+=( "${wallet}" )
+               done < <(
+                       # parsing settings.json using jq would be far cleaner, 
but jq might not be installed
+                       sed -Enze 
'H;${x;s/^.*"wallet"\s*:\s*\[\s*("([^"\\]|\\.)*"(\s*,\s*"([^"\\]|\\.)*")*)\s*\].*$/\1/;T'
 \
+                                       -e 
's/"(([^"\\]|\\.)*)"\s*(,\s*)?/\1\x0/gp}' -- 
"${EROOT}/var/lib/bitcoind/settings.json"
+               )
+               if (( ${#bdb_wallets[@]} )) ; then
+                       efmt -su ewarn <<-EOF
+                               The following auto-loaded wallets are in the 
legacy (Berkeley DB) format, \
+                               which will no longer be supported by the next 
major version of Bitcoin Core:
+                               $(printf ' - %s\n' "${bdb_wallets[@]}")
+                       EOF
+                       use cli && efmt ewarn <<-EOF
+                               You may want to convert them to descriptor 
wallets by executing
+                               \`bitcoin-cli migratewallet "<wallet_name>" 
["<passphrase>"]\`
+                               after starting bitcoind.
+                       EOF
+               fi
+       fi
+}
+
+src_prepare() {
+       # https://bugs.gentoo.org/958361
+       # 
https://github.com/google/crc32c/commit/2bbb3be42e20a0e6c0f7b39dc07dc863d9ffbc07
+       sed -e '/^cmake_minimum_required(VERSION 3\.1)$/s/)$/6)/' -i 
src/crc32c/CMakeLists.txt || die
+
+       eapply_user
+       ! use system-libsecp256k1 || rm -r src/secp256k1 || die
+       cmake_src_prepare
+
+       # we set BUILD_UTIL=OFF, so we can't test bitcoin-util
+       sed -ne '/^  {/{h;:0;n;H;/^  }/!b0;g;\|"exec": *"\./bitcoin-util"|d};p' 
\
+               -i test/util/data/bitcoin-util-test.json || die
+
+       sed -e 's/^\(complete -F _bitcoind\b\).*$/\1'"$(usev daemon ' 
bitcoind')$(usev gui ' bitcoin-qt')/" \
+               -i contrib/completions/bash/bitcoind.bash || die
+}
+
+src_configure() {
+       local wallet ; if use berkdb || use sqlite ; then wallet=ON ; else 
wallet=OFF ; fi
+       local mycmakeargs=(
+#              -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON     # 
https://github.com/bitcoin/bitcoin/pull/32220
+               -DBUILD_SHARED_LIBS=ON
+               -DENABLE_WALLET=${wallet}
+               -DWITH_SQLITE=$(usex sqlite)
+               -DWITH_BDB=$(usex berkdb)
+               -DWITH_USDT=$(usex systemtap)
+               -DBUILD_TESTS=$(usex test)
+               -DBUILD_BENCH=OFF
+               -DBUILD_{FOR_FUZZING,FUZZ_BINARY}=OFF
+               -DWITH_QRENCODE=$(usex qrcode)
+               -DWITH_CCACHE=OFF
+               -DWITH_ZMQ=$(usex zeromq)
+               -DENABLE_EXTERNAL_SIGNER=$(usex external-signer)
+               -DBUILD_CLI=$(usex cli)
+               -DBUILD_TX=ON
+               -DBUILD_WALLET_TOOL=${wallet}
+               -DBUILD_UTIL=OFF
+               -DBUILD_DAEMON=$(usex daemon)
+               -DBUILD_GUI=$(usex gui)
+               -DWITH_DBUS=$(usex dbus)
+               -DWITH_SYSTEM_LIBSECP256K1=$(usex system-libsecp256k1 ON \
+                       "OFF -DSECP256K1_ASM=$(usex asm AUTO OFF)")
+       )
+       cmake_src_configure
+}
+
+src_compile() {
+       cmake_src_compile
+
+       if use daemon && ! tc-is-cross-compiler ; then
+               TOPDIR="${S}" BUILDDIR="${BUILD_DIR}" bash 
contrib/devtools/gen-bitcoin-conf.sh || die
+       fi
+       sed -e 's/ To use, copy this file$//p;Tp;:0;n;/save the 
file\.$/!b0;d;:p;p' \
+               -ni share/examples/bitcoin.conf || die
+}
+
+src_test() {
+       cmake_src_test
+
+       if use daemon ; then
+               cd -- "${BUILD_DIR}" || die
+               edo "${PYTHON}" test/functional/test_runner.py \
+                       --ansi $(usev test-full --extended) 
--jobs="$(get_makeopts_jobs)" --timeout-factor="${TIMEOUT_FACTOR:-15}"
+       fi
+}
+
+src_install() {
+       dodoc -r doc/release-notes
+
+       use external-signer && DOCS+=( doc/external-signer.md )
+       use berkdb || use sqlite && DOCS+=( doc/managing-wallets.md )
+       use systemtap && DOCS+=( doc/tracing.md )
+       use zeromq && DOCS+=( doc/zmq.md )
+
+       if use daemon ; then
+               # https://bugs.gentoo.org/757102
+               DOCS+=( share/rpcauth/rpcauth.py )
+               docompress -x "/usr/share/doc/${PF}/rpcauth.py"
+       fi
+
+       einstalldocs
+       cmake_src_install
+
+       find "${ED}" -type f -name '*.la' -delete || die
+       ! use test || rm -f -- "${ED}"/usr/bin/test_bitcoin{,-qt} || die
+
+       newbashcomp contrib/completions/bash/bitcoin-tx.bash bitcoin-tx
+       use cli && newbashcomp contrib/completions/bash/bitcoin-cli.bash 
bitcoin-cli
+       if use daemon ; then
+               newbashcomp contrib/completions/bash/bitcoind.bash bitcoind
+               use gui && bashcomp_alias bitcoind bitcoin-qt
+       elif use gui ; then
+               newbashcomp contrib/completions/bash/bitcoind.bash bitcoin-qt
+       fi
+
+       if use daemon ; then
+               insinto /etc/bitcoin
+               doins share/examples/bitcoin.conf
+               fowners bitcoin:bitcoin /etc/bitcoin/bitcoin.conf
+               fperms 0660 /etc/bitcoin/bitcoin.conf
+
+               newconfd contrib/init/bitcoind.openrcconf bitcoind
+               newinitd "${FILESDIR}/bitcoind.openrc" bitcoind
+               systemd_newunit contrib/init/bitcoind.service bitcoind.service
+
+               keepdir /var/lib/bitcoind
+               fperms 0750 /var/lib/bitcoind
+               fowners bitcoin:bitcoin /var/lib/bitcoind
+               dosym -r {/etc/bitcoin,/var/lib/bitcoind}/bitcoin.conf
+
+               insinto /etc/logrotate.d
+               newins "${FILESDIR}/bitcoind.logrotate-r1" bitcoind
+       fi
+
+       if use gui ; then
+               insinto /usr/share/icons/hicolor/scalable/apps
+               newins src/qt/res/src/bitcoin.svg bitcoin128.svg
+
+               domenu "${FILESDIR}/org.bitcoin.bitcoin-qt.desktop"
+       fi
+
+       if use examples ; then
+               docinto examples
+               dodoc -r contrib/{linearize,qos}
+               use zeromq && dodoc -r contrib/zmq
+       fi
+}
+
+pkg_postinst() {
+       # we don't use xdg.eclass because it adds unconditional IDEPENDs
+       if use gui ; then
+               xdg_desktop_database_update
+               xdg_icon_cache_update
+       fi
+
+       if use daemon && [[ -z "${REPLACING_VERSIONS}" ]] ; then
+               efmt -su elog <<-EOF
+                       To have ${PN} automatically use Tor when it's running, 
be sure your \
+                       'torrc' config file has 'ControlPort' and 
'CookieAuthentication' set up \
+                       correctly, and:
+                       - Using an init script: add the 'bitcoin' user to the 
'tor' user group.
+                       - Running bitcoind directly: add that user to the 'tor' 
user group.
+                       EOF
+       fi
+
+       if use cli && use daemon ; then
+               efmt -su elog <<-EOF
+                       To use bitcoin-cli with the /etc/init.d/bitcoind 
service:
+                        - Add your user(s) to the 'bitcoin' group.
+                        - Symlink ~/.bitcoin to /var/lib/bitcoind.
+               EOF
+       fi
+
+       if use berkdb ; then
+               # https://github.com/bitcoin/bitcoin/pull/28597
+               # https://bitcoincore.org/en/releases/26.0/#wallet
+               efmt ewarn <<-EOF
+                       Creation of legacy (Berkeley DB) wallets is refused 
starting with Bitcoin
+                       Core 26.0, pending the deprecation and eventual removal 
of support for
+                       legacy wallets altogether in future releases. At 
present you can still
+                       force support for the creation of legacy wallets by 
adding the following
+                       line to your bitcoin.conf:
+
+                       deprecatedrpc=create_bdb
+               EOF
+       fi
+}
+
+pkg_postrm() {
+       if use gui ; then
+               xdg_desktop_database_update
+               xdg_icon_cache_update
+       fi
+}

Reply via email to