summaryrefslogtreecommitdiff
path: root/net-p2p/bitcoin-qt
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-01-05 06:08:15 +0000
committerV3n3RiX <venerix@koprulu.sector>2023-01-05 06:08:15 +0000
commit083bdfbef9bc532b72cf116591025916eebaf676 (patch)
tree04da8a6f58a6ef6f05ebafc0a86b3a27c00ba283 /net-p2p/bitcoin-qt
parente84469d1a99031578172f7c064945ba5114c5263 (diff)
gentoo auto-resync : 05:01:2023 - 06:08:15
Diffstat (limited to 'net-p2p/bitcoin-qt')
-rw-r--r--net-p2p/bitcoin-qt/Manifest3
-rw-r--r--net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild159
-rw-r--r--net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch281
3 files changed, 443 insertions, 0 deletions
diff --git a/net-p2p/bitcoin-qt/Manifest b/net-p2p/bitcoin-qt/Manifest
index cf18777a07d6..4ae745fa700e 100644
--- a/net-p2p/bitcoin-qt/Manifest
+++ b/net-p2p/bitcoin-qt/Manifest
@@ -1,10 +1,13 @@
+AUX 24.0.1-syslibs.patch 9037 BLAKE2B fa634a8f18d1f1c32d1c3cb18bdfcafc89838a7f5b3a075a40ad3354d1253f1d637351d2661475eb86110db470a7b29c9cfb6266a7f61623c0865939c9e74453 SHA512 fcf8114174e69c5385058b190fa2c0b0ef105869d5d6a40a3cc6bb8e8ef1518cb8bc1fb7cc3a7ec28f361d91f66e4253420c2b50a0004a2dc0978910254cae3d
AUX bitcoin-qt-0.20.1-boost-1.77-compat.patch 2255 BLAKE2B 9a65c1640fd4090840070865265b7529324e850a7f34cc13c6e6a940f0a706cf5b3849497044233f3cf5b3fde177afb4d160ded2ed3a8adfc0ae8d488724539f SHA512 f1326a67749949efee07e01175b227ff16fda8f88e0a956598013399ad3b0ae652bb3206a0ce08edfbf4a712d523f2018de684d4c747c9d234d1fab6088e42ad
AUX bitcoin-qt.protocol 150 BLAKE2B b18645f52a6884fc0e475a85809d5b79e207adc346307623c5f1edececcb4564ac17bdb9a0deeb5c12c41409a34f83c1f22ab89f32852c58d948affa1de57edb SHA512 6b71d9d3fc9e05e6c6595aaaa307be9b5007c25f4b11162c5d873e200576d35156c2c660f229799400a3fba6dc8a9663ff8824371d83242d52ee6472687118ab
AUX org.bitcoin.bitcoin-qt.desktop 468 BLAKE2B e00d41612be14770d1f34b83f98a104aed197eb62707382a0189c5b9559f572336e8d236dcd290e1a4a43df041bfdef23209e1533401659228af8b004c9b3d76 SHA512 0cecb04d7813bcc0e5c9f1a5dfc32859708d3524548f6dcee33ba9fd600a7000f64b3d5f2dbdc1dcfce0a68fd82ea932b338da77ad495ebc03b097f462a75d88
DIST bitcoin-0.21.0.knots20210130.patches.tar.xz 505040 BLAKE2B c8999de4158b8781bba6ad014ae14859f1e0bab3080c59a18910cf7447eb56da4b17a0e1843fdd3669d22636df9e4ddcc4526e4293bfd86dc884983a29a5f76c SHA512 7ee27da3d26be0e93ecddff7bb21ef1746bcdb07f9a2b0ea48065367b4c44391e974e04a21e511c05fca8f55971ab8e3c3ac01a3775cc52a537d9e10966d9871
DIST bitcoin-22.0.knots20211108.patches.tar.xz 1318256 BLAKE2B d6e56bc0ca1d706e99e7f42d8f335f016335b6bf3637c733d993696872f0a4c655cc58fc0394dfdf9916e13f0d7fbdcebf25fbdc9a165227e3c59133033644c0 SHA512 daab5860b7c7e137b6bf350cdc153e6e19172e49935640d1f6fe1f1be1e4df805b1db7fd30b0f95a560106956adab70cc6282fe933ae9de153cb971dd280f83d
+DIST bitcoin-24.0.1.tar.gz 11412628 BLAKE2B 2a8c83aecd12d8d40305d78ede1f389884ee62cfe4af39a9b416b8887a595f3393d599ebe9ddeb576bba5896923feb7ee45ba32d7d4cb0ce9e6d0ef39ecf83c7 SHA512 de1ddb543429f70b0b55a46500e0bc4807cca1b1655a28f8ab186d6f6e620f8cf82420bbdf412976ffed9bc6d742926b19933429c734edaf7430a4f8c37e1685
DIST bitcoin-v0.21.0.tar.gz 7533957 BLAKE2B 01247cbb9fca2381a8c08ab1c88c479c640963caef22e4207aab46b05813dbf2a5286ac9e98132fb34db0e9ac6c18c79e45a89de166f5c6d480d8ac6e14ecca2 SHA512 c58187996932b0151432a65885b7e8a7b216fb1ab0576fb7d4b5e9620d957594b05e181153e2e0e50bcd5ce764861ec11019ffbb1095d3e704f441e61ac6a04f
DIST bitcoin-v22.0.tar.gz 7977783 BLAKE2B ba212037bc8efcfbbbf6340c48ed886c4a5aa93e4a34097eafea39734a6f4e25fa6b174f894655f63c504380d8761657771795bfcc641018bf1f1661deef9321 SHA512 1b4b17360e97f390ae678adb7a239c359d3a1288799710683e26f09fc53341b6fca3211465fa3e4fdee37324d85ec1a31ffd1a3714e969df13441f755fa4b7ad
EBUILD bitcoin-qt-0.21.0.ebuild 4935 BLAKE2B 5483b44409cac50b71ee0298be28538e25ebc3e40ac50730a1d31575f9f82c165edca17ae0b43da6c9023c3e0f0088b18df0fa7f0d9a83ccacb6380b04620bab SHA512 c04215777cd7ac8a27c965151bad35ce89b4d7f1d4eb5b9c2a120ca053af6be640516c810d3f42c9c1fa1c6b6c0cb7a5d030ba5bba00757dcbcf6a47c230b61b
EBUILD bitcoin-qt-22.0.ebuild 6217 BLAKE2B 38dd68fb740efd51c131edbdc1b1bd59aa91c4a3fca89bd1510b7ee59953a021f9504c94967c75ea09db128c7d0d07bfcba5534e623b813f2e516ab9ac4c8d4b SHA512 14a190c28acc6fa618a341220a51d86f0f8c648a6f9f05f88e8593471678285016ba3444e93c261d5e3736df434977577e23bcf869aab406e26c3e01d4ae04bd
+EBUILD bitcoin-qt-24.0.1.ebuild 3881 BLAKE2B bd0a8155afb55c5c3f6b355460da406a1e92fe19ee908742ee7d49e7db9ae2c6e13bb6d7355c2a8718fca3f419f3a86c9d5df36ec45e523189a4d9c878e0c77b SHA512 9f82b1c9078bf94d3a8f05941968a1d07dfa8444c6f972b5561bc105dd29d3a2db383cfcb1a9fcbd822db816f748848f6b8c472bbf371cfde0fd24f8cab907eb
MISC metadata.xml 1434 BLAKE2B e6e1f0ffac2e6be3bc19fe8bb8e9b18b5b50da6255d70d92fdc28a6e040b54ed4d5b94643835043eb64eae0273111f73c30e93a6d9b7203368aeedb880961c8a SHA512 5e7f2f044b27e4ac21d1e18d177bb1bd493feaad5598ad44abed8a0053403565100877498da29aa4f35e59d570d2a499daea58285dd59f3e62eafba7ee3460e7
diff --git a/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild b/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild
new file mode 100644
index 000000000000..76fdba8ff317
--- /dev/null
+++ b/net-p2p/bitcoin-qt/bitcoin-qt-24.0.1.ebuild
@@ -0,0 +1,159 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DB_VER="4.8"
+inherit autotools bash-completion-r1 db-use desktop xdg
+
+DESCRIPTION="An end-user Qt GUI for the Bitcoin crypto-currency"
+HOMEPAGE="https://bitcoincore.org/"
+SRC_URI="
+ https://bitcoincore.org/bin/bitcoin-core-${PV}/${P/-qt}.tar.gz
+"
+S="${WORKDIR}"/${P/-qt}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="+asm +berkdb dbus +external-signer kde nat-pmp +qrcode sqlite systemtap test upnp +wallet zeromq"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ sqlite? ( wallet )
+ berkdb? ( wallet )
+ wallet? ( || ( berkdb sqlite ) )
+"
+# 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.
+RDEPEND="
+ dev-libs/boost:=
+ >=dev-libs/libsecp256k1-0.2.0:=[recovery,schnorr]
+ dev-qt/qtcore:5
+ dev-qt/qtgui:5
+ dev-qt/qtnetwork:5
+ dev-qt/qtwidgets:5
+ virtual/bitcoin-leveldb
+ dbus? ( dev-qt/qtdbus:5 )
+ dev-libs/libevent:=
+ nat-pmp? ( net-libs/libnatpmp )
+ qrcode? (
+ media-gfx/qrencode:=
+ )
+ sqlite? ( >=dev-db/sqlite-3.7.17:= )
+ upnp? ( >=net-libs/miniupnpc-1.9.20150916:= )
+ berkdb? ( sys-libs/db:$(db_ver_to_slot "${DB_VER}")=[cxx] )
+ zeromq? ( net-libs/zeromq:= )
+"
+DEPEND="
+ ${RDEPEND}
+ systemtap? ( dev-util/systemtap )
+"
+BDEPEND="dev-qt/linguist-tools:5"
+
+DOCS=(
+ doc/bips.md
+ doc/bitcoin-conf.md
+ doc/descriptors.md
+ doc/files.md
+ doc/JSON-RPC-interface.md
+ doc/psbt.md
+ doc/reduce-memory.md
+ doc/reduce-traffic.md
+ doc/release-notes.md
+ doc/REST-interface.md
+ doc/tor.md
+)
+
+PATCHES=(
+ "${FILESDIR}"/24.0.1-syslibs.patch
+)
+
+pkg_pretend() {
+ elog "You are building ${PN} from Bitcoin Core."
+ elog "For more information, see:"
+ elog "https://bitcoincore.org/en/releases/${PV}/"
+}
+
+src_prepare() {
+ sed -i 's/^\(complete -F _bitcoind \)bitcoind \(bitcoin-qt\)$/\1\2/' contrib/bitcoind.bash-completion || die
+
+ # Save the generic icon for later
+ cp src/qt/res/src/bitcoin.svg bitcoin128.svg || die
+
+ default
+
+ eautoreconf
+
+ rm -r src/leveldb src/secp256k1 || die
+}
+
+src_configure() {
+ local myeconfargs=(
+ $(use_enable asm)
+ $(use_with dbus qtdbus)
+ $(use_enable systemtap ebpf)
+ $(use_enable external-signer)
+ $(use_with nat-pmp natpmp)
+ $(use_with nat-pmp natpmp-default)
+ $(use_with qrcode qrencode)
+ $(use_with upnp miniupnpc)
+ $(use_enable upnp upnp-default)
+ $(use_enable test tests)
+ $(use_enable wallet)
+ $(use_enable zeromq zmq)
+ --with-gui=qt5
+ --disable-util-cli
+ --disable-util-tx
+ --disable-util-util
+ --disable-util-wallet
+ --disable-bench
+ --without-libs
+ --without-daemon
+ --disable-fuzz
+ --disable-fuzz-binary
+ --disable-ccache
+ --disable-static
+ $(use_with berkdb bdb)
+ $(use_with sqlite)
+ --with-system-leveldb
+ --with-system-libsecp256k1
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+
+ if use test; then
+ rm -f "${ED}/usr/bin/test_bitcoin" || die
+ rm -f "${ED}/usr/bin/test_bitcoin-qt" || die
+ fi
+
+ insinto /usr/share/icons/hicolor/scalable/apps/
+ doins bitcoin128.svg
+
+ cp "${FILESDIR}/org.bitcoin.bitcoin-qt.desktop" "${T}" || die
+ sed -i 's/Knots/Core/;s/^\(Icon=\).*$/\1bitcoin128/' "${T}/org.bitcoin.bitcoin-qt.desktop" || die
+ domenu "${T}/org.bitcoin.bitcoin-qt.desktop"
+
+ use zeromq && dodoc doc/zmq.md
+
+ newbashcomp contrib/bitcoind.bash-completion ${PN}
+
+ if use kde; then
+ insinto /usr/share/kservices5
+ doins "${FILESDIR}/bitcoin-qt.protocol"
+ dosym "../../kservices5/bitcoin-qt.protocol" "/usr/share/kde4/services/bitcoin-qt.protocol"
+ fi
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ elog "To have ${PN} automatically use Tor when it's running, be sure your"
+ elog "'torrc' config file has 'ControlPort' and 'CookieAuthentication' setup"
+ elog "correctly, and add your user to the 'tor' user group."
+}
diff --git a/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch b/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch
new file mode 100644
index 000000000000..00404a2ff021
--- /dev/null
+++ b/net-p2p/bitcoin-qt/files/24.0.1-syslibs.patch
@@ -0,0 +1,281 @@
+Originally based on 22.0-fix_build_without_leveldb.patch.
+
+- Allow system libsecp256k1
+- Allow system leveldb
+- Abort if runtime leveldb != compiled-against leveldb
+- Handle berkdb support being disabled better
+--- a/configure.ac
++++ b/configure.ac
+@@ -1362,6 +1362,23 @@ if test "$enable_fuzz_binary" = "yes"; then
+ CHECK_RUNTIME_LIB
+ fi
+
++dnl Check for libsecp256k1, only if explicitly requested
++AC_ARG_WITH([system-libsecp256k1],
++ [AS_HELP_STRING([--with-system-libsecp256k1],
++ [Build with system libsecp256k1 (default is no; DANGEROUS; NOT SUPPORTED)])],
++ [system_libsecp256k1=$withval],
++ [system_libsecp256k1=no]
++)
++if test x$system_libsecp256k1 != xno; then
++ PKG_CHECK_MODULES([libsecp256k1],[libsecp256k1],,[true])
++else
++ libsecp256k1_CFLAGS='-I$(srcdir)/secp256k1/include'
++ libsecp256k1_LIBS='secp256k1/libsecp256k1.la'
++fi
++AM_CONDITIONAL([EMBEDDED_LIBSECP256K1],[test x$system_libsecp256k1 = xno])
++AC_SUBST(libsecp256k1_CFLAGS)
++AC_SUBST(libsecp256k1_LIBS)
++
+ if test "$enable_wallet" != "no"; then
+ dnl Check for libdb_cxx only if wallet enabled
+ if test "$use_bdb" != "no"; then
+@@ -1413,11 +1430,76 @@ if test "$use_usdt" != "no"; then
+ fi
+ AM_CONDITIONAL([ENABLE_USDT_TRACEPOINTS], [test "$use_usdt" = "yes"])
+
++build_leveldb=yes
+ if test "$build_bitcoin_cli$build_bitcoin_tx$build_bitcoin_util$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests" = "nonononononono"; then
+ use_upnp=no
+ use_natpmp=no
+ use_zmq=no
++ build_leveldb=no
++fi
++
++if test x$build_leveldb = xno; then
++ system_leveldb=no
++fi
++dnl Check for leveldb, only if explicitly requested
++if test x$system_leveldb != xno; then
++ build_leveldb=no
++ LEVELDB_CPPFLAGS=
++ AC_CHECK_LIB([leveldb],[main],[
++ LIBLEVELDB=-lleveldb
++ ],[
++ AC_MSG_ERROR([leveldb library not found; using --with-system-leveldb is not supported anyway])
++ ])
++ AC_CHECK_HEADER([leveldb/filter_policy.h],[],[
++ AC_MSG_ERROR([LevelDB headers not found; using --with-system-leveldb is not supported anyway])
++ ])
++ AC_CHECK_HEADER([leveldb/helpers/memenv.h],[
++ AC_MSG_CHECKING([for memenv.h path])
++ BITCOIN_SUBDIR_TO_INCLUDE([LEVELDB_CPPFLAGS],[leveldb/helpers/],[memenv])
++ ],[
++ AC_CHECK_HEADER([memenv.h],[],[
++ AC_MSG_ERROR([LevelDB headers not found; using --with-system-leveldb is not supported anyway])
++ ])
++ ])
++
++ AC_MSG_CHECKING([library containing leveldb::NewMemEnv])
++ TEMP_LIBS="$LIBS"
++ TEMP_CPPFLAGS="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS $LEVELDB_CPPFLAGS"
++ for searchlib in "" "-lmemenv" ERR; do
++ if test "x$searchlib" = "xERR"; then
++ AC_MSG_RESULT([no])
++ AC_MSG_ERROR([LevelDB's memenv helper not found; using --with-system-leveldb is not supported anyway])
++ fi
++ searchlib="$searchlib $LIBLEVELDB"
++ LIBS="$searchlib $TEMP_LIBS"
++ AC_LINK_IFELSE([AC_LANG_SOURCE([
++ #include <leveldb/env.h>
++ #include <leveldb/helpers/memenv.h>
++
++ int main() {
++ leveldb::Env *myenv = leveldb::NewMemEnv(leveldb::Env::Default());
++ delete myenv;
++ }
++ ])],[
++ AC_MSG_RESULT([$searchlib])
++ LIBMEMENV="$searchlib"
++ break
++ ])
++ done
++ LIBS="$TEMP_LIBS"
++ CPPFLAGS="$TEMP_CPPFLAGS"
+ fi
++AM_CONDITIONAL([EMBEDDED_LEVELDB],[test x$build_leveldb = xyes])
++AC_SUBST(LEVELDB_CPPFLAGS)
++AC_SUBST(LIBLEVELDB)
++AC_SUBST(LIBMEMENV)
++AC_ARG_WITH([system-leveldb],
++ [AS_HELP_STRING([--with-system-leveldb],
++ [Build with system LevelDB (default is no; DANGEROUS; NOT SUPPORTED)])],
++ [system_leveldb=$withval],
++ [system_leveldb=no]
++)
+
+ dnl Check for libminiupnpc (optional)
+ if test "$use_upnp" != "no"; then
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -23,7 +23,7 @@ noinst_PROGRAMS =
+ TESTS =
+ BENCHMARKS =
+
+-BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(LEVELDB_CPPFLAGS)
++BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) $(libsecp256k1_CFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
+
+ LIBBITCOIN_NODE=libbitcoin_node.a
+ LIBBITCOIN_COMMON=libbitcoin_common.a
+@@ -32,7 +32,11 @@ LIBBITCOIN_CLI=libbitcoin_cli.a
+ LIBBITCOIN_UTIL=libbitcoin_util.a
+ LIBBITCOIN_CRYPTO_BASE=crypto/libbitcoin_crypto_base.la
+ LIBBITCOINQT=qt/libbitcoinqt.a
++if EMBEDDED_LIBSECP256K1
+ LIBSECP256K1=secp256k1/libsecp256k1.la
++else
++LIBSECP256K1=$(libsecp256k1_LIBS)
++endif
+
+ if ENABLE_ZMQ
+ LIBBITCOIN_ZMQ=libbitcoin_zmq.a
+@@ -67,8 +71,10 @@ LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI)
+ endif
+ noinst_LTLIBRARIES += $(LIBBITCOIN_CRYPTO)
+
++if EMBEDDED_LIBSECP256K1
+ $(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*)
+ $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
++endif
+
+ # Make is not made aware of per-object dependencies to avoid limiting building parallelization
+ # But to build the less dependent modules first, we manually select their order here:
+@@ -1080,7 +1086,9 @@ endif
+ include Makefile.minisketch.include
+
+ include Makefile.crc32c.include
++if EMBEDDED_LEVELDB
+ include Makefile.leveldb.include
++endif
+
+ include Makefile.test_util.include
+ include Makefile.test_fuzz.include
+--- a/src/Makefile.test.include
++++ b/src/Makefile.test.include
+@@ -377,8 +377,9 @@ if ENABLE_BENCH
+ $(BENCH_BINARY) --sanity-check > /dev/null
+ endif
+ endif
++if EMBEDDED_LIBSECP256K1
+ $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
+-
++endif
+ if ENABLE_TESTS
+ UNIVALUE_TESTS = univalue/test/object univalue/test/unitester
+ noinst_PROGRAMS += $(UNIVALUE_TESTS)
+--- a/src/dbwrapper.cpp
++++ b/src/dbwrapper.cpp
+@@ -7,26 +7,45 @@
+ #include <fs.h>
+ #include <logging.h>
+ #include <random.h>
++#include <node/interface_ui.h>
+ #include <tinyformat.h>
+ #include <util/strencodings.h>
+ #include <util/system.h>
++#include <util/translation.h>
+
+ #include <algorithm>
+ #include <cassert>
+ #include <cstdarg>
+ #include <cstdint>
+ #include <cstdio>
++#include <leveldb/c.h>
+ #include <leveldb/cache.h>
+ #include <leveldb/db.h>
+ #include <leveldb/env.h>
+ #include <leveldb/filter_policy.h>
+-#include <leveldb/helpers/memenv/memenv.h>
++#include <leveldb/helpers/memenv.h>
+ #include <leveldb/iterator.h>
+ #include <leveldb/options.h>
+ #include <leveldb/status.h>
+ #include <memory>
+ #include <optional>
+
++bool dbwrapper_SanityCheck()
++{
++ unsigned long header_version = (leveldb::kMajorVersion << 16) | leveldb::kMinorVersion;
++ unsigned long library_version = (leveldb_major_version() << 16) | leveldb_minor_version();
++
++ if (header_version != library_version) {
++ InitError(Untranslated(strprintf("Compiled with LevelDB %d.%d, but linked with LevelDB %d.%d (incompatible).",
++ leveldb::kMajorVersion, leveldb::kMinorVersion,
++ leveldb_major_version(), leveldb_minor_version()
++ )));
++ return false;
++ }
++
++ return true;
++}
++
+ class CBitcoinLevelDBLogger : public leveldb::Logger {
+ public:
+ // This code is adapted from posix_logger.h, which is why it is using vsprintf.
+--- a/src/dbwrapper.h
++++ b/src/dbwrapper.h
+@@ -31,6 +31,8 @@ class Env;
+ static const size_t DBWRAPPER_PREALLOC_KEY_SIZE = 64;
+ static const size_t DBWRAPPER_PREALLOC_VALUE_SIZE = 1024;
+
++bool dbwrapper_SanityCheck();
++
+ class dbwrapper_error : public std::runtime_error
+ {
+ public:
+--- a/src/kernel/checks.cpp
++++ b/src/kernel/checks.cpp
+@@ -3,9 +3,10 @@
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+ #include <kernel/checks.h>
+-
++#include <dbwrapper.h>
+ #include <key.h>
+ #include <random.h>
++#include <node/interface_ui.h>
+ #include <util/time.h>
+ #include <util/translation.h>
+
+@@ -15,6 +16,10 @@ namespace kernel {
+
+ std::optional<bilingual_str> SanityChecks(const Context&)
+ {
++ if (!dbwrapper_SanityCheck()) {
++ return Untranslated("Database sanity check failure. Aborting.");
++ }
++
+ if (!ECC_InitSanityCheck()) {
+ return Untranslated("Elliptic curve cryptography sanity check failure. Aborting.");
+ }
+--- a/src/qt/createwalletdialog.cpp
++++ b/src/qt/createwalletdialog.cpp
+@@ -12,6 +12,7 @@
+
+ #include <qt/guiutil.h>
+
++#include <QMessageBox>
+ #include <QPushButton>
+
+ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
+@@ -94,9 +95,16 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
+ ui->external_signer_checkbox->setChecked(false);
+ #endif
+
+-#ifndef USE_BDB
+- ui->descriptor_checkbox->setEnabled(false);
+- ui->descriptor_checkbox->setChecked(true);
++#ifdef USE_BDB
++ connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
++#else
++ connect(ui->buttonBox, &QDialogButtonBox::accepted, [this]() {
++ if (!this->isDescriptorWalletChecked()) {
++ QMessageBox::critical(this, tr("Cannot create wallet"), tr("This build was compiled without BDB support, so only experimental descriptor wallets are supported."));
++ return;
++ }
++ this->accept();
++ });
+ #endif
+
+ #ifndef ENABLE_EXTERNAL_SIGNER