diff options
Diffstat (limited to 'net-p2p/bitcoin-core/files/26.0-syslibs.patch')
-rw-r--r-- | net-p2p/bitcoin-core/files/26.0-syslibs.patch | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/net-p2p/bitcoin-core/files/26.0-syslibs.patch b/net-p2p/bitcoin-core/files/26.0-syslibs.patch deleted file mode 100644 index 614fc5c0ce44..000000000000 --- a/net-p2p/bitcoin-core/files/26.0-syslibs.patch +++ /dev/null @@ -1,296 +0,0 @@ -From 0297368af75f834622bd8d7052168cf25aaad42f Mon Sep 17 00:00:00 2001 -From: Matt Whitlock <bitcoin@mattwhitlock.name> -Date: Sun, 17 Sep 2023 10:29:27 -0400 -Subject: [PATCH] support linking against system-installed leveldb and - libsecp256k1 - -- Abort if runtime leveldb != compiled-against leveldb. - -Originally based on 22.0-fix_build_without_leveldb.patch. ---- - configure.ac | 90 ++++++++++++++++++++++++++++++++++++++- - src/Makefile.am | 13 +++++- - src/Makefile.test.include | 2 + - src/dbwrapper.cpp | 27 +++++++++++- - src/dbwrapper.h | 8 ++++ - src/kernel/checks.cpp | 7 +++ - 6 files changed, 143 insertions(+), 4 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 01636ab872..8ff1b04930 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1364,6 +1364,41 @@ 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[=PKG]]], -+ [build using system-installed libsecp256k1 instead of bundled, passing PKG (default: libsecp256k1) to pkg-config (default is no; DANGEROUS; NOT SUPPORTED)])], -+ [AS_IF([test "x$withval" = xyes], [with_system_libsecp256k1=libsecp256k1])], -+ [with_system_libsecp256k1=no]) -+AM_CONDITIONAL([EMBEDDED_LIBSECP256K1],[test "x$with_system_libsecp256k1" = xno]) -+AM_COND_IF([EMBEDDED_LIBSECP256K1], [ -+ libsecp256k1_CFLAGS='-I$(srcdir)/secp256k1/include' -+ libsecp256k1_LIBS='secp256k1/libsecp256k1.la' -+], [ -+ saved_CPPFLAGS=$CPPFLAGS -+ saved_LIBS=$LIBS -+ PKG_CHECK_MODULES([libsecp256k1], [$with_system_libsecp256k1]) -+ CPPFLAGS="$libsecp256k1_CFLAGS $CPPFLAGS" -+ LIBS="$libsecp256k1_LIBS $LIBS" -+ missing_modules= -+ AC_DEFUN([CHECK_MODULE], [ -+ AC_CHECK_HEADER([secp256k1_$1.h], -+ [AC_CHECK_FUNCS([$2], [], [missing_modules="${missing_modules} $1"])], -+ [missing_modules="${missing_modules} $1"]) -+ ]) -+ CHECK_MODULE([ellswift], [secp256k1_ellswift_encode]) -+ CHECK_MODULE([extrakeys], [secp256k1_xonly_pubkey_parse]) -+ CHECK_MODULE([recovery], [secp256k1_ecdsa_recover]) -+ CHECK_MODULE([schnorrsig], [secp256k1_schnorrsig_verify]) -+ AS_IF([test -n "${missing_modules}"], [ -+ AC_MSG_ERROR([system-installed libsecp256k1 does not support these required modules:${missing_modules}]) -+ ]) -+ CPPFLAGS=$saved_CPPFLAGS -+ LIBS=$saved_LIBS -+]) -+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 -@@ -1423,6 +1458,55 @@ if test "$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests" = "nononono"; th - use_zmq=no - fi - -+dnl Check for leveldb, only if explicitly requested -+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]) -+AC_ARG_VAR([leveldb_CFLAGS],[C compiler flags for system-leveldb]) -+AC_ARG_VAR([leveldb_LIBS],[linker flags for system-leveldb]) -+AS_IF([test x$system_leveldb != xno],[ -+ TEMP_CPPFLAGS="$CPPFLAGS" -+ TEMP_LIBS="$LIBS" -+ CPPFLAGS="$leveldb_CFLAGS" -+ LIBS="$leveldb_LIBS" -+ AC_SEARCH_LIBS([leveldb_open],[leveldb],[leveldb_LIBS="$LIBS"], -+ [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_ERROR([LevelDB headers not found; using --with-system-leveldb is not supported anyway])]) -+ -+ AC_MSG_CHECKING([for library containing leveldb::NewMemEnv]) -+ 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 -+ LIBS="$searchlib $leveldb_LIBS" -+ AC_LINK_IFELSE([AC_LANG_PROGRAM([ -+ #include <leveldb/env.h> -+ #include <leveldb/helpers/memenv.h> -+ ],[ -+ leveldb::Env *myenv = leveldb::NewMemEnv(leveldb::Env::Default()); -+ delete myenv; -+ ]) -+ ],[ -+ AC_MSG_RESULT([$searchlib]) -+ break -+ ]) -+ done -+ leveldb_LIBS="$LIBS" -+ LIBS="$TEMP_LIBS" -+ CPPFLAGS="$TEMP_CPPFLAGS" -+],[ -+ AC_DEFINE([EMBEDDED_LEVELDB],[1],[Define to use the bundled LevelDB sources]) -+]) -+AM_CONDITIONAL([EMBEDDED_LEVELDB],[test x$system_leveldb = xno]) -+AC_SUBST(leveldb_CFLAGS) -+AC_SUBST(leveldb_LIBS) -+ - dnl Check for libminiupnpc (optional) - if test "$use_upnp" != "no"; then - TEMP_CPPFLAGS="$CPPFLAGS" -@@ -1959,8 +2043,10 @@ CPPFLAGS_TEMP="$CPPFLAGS" - unset CPPFLAGS - CPPFLAGS="$CPPFLAGS_TEMP" - --ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --disable-module-ecdh" --AC_CONFIG_SUBDIRS([src/secp256k1]) -+AM_COND_IF([EMBEDDED_LIBSECP256K1],[ -+ ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --disable-module-ecdh" -+ AC_CONFIG_SUBDIRS([src/secp256k1]) -+]) - - AC_OUTPUT - -diff --git a/src/Makefile.am b/src/Makefile.am -index 8905c0ad1c..8869bf4cff 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -24,7 +24,7 @@ check_PROGRAMS = - TESTS = - BENCHMARKS = - --BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) -+BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) $(libsecp256k1_CFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) - - LIBBITCOIN_NODE=libbitcoin_node.a - LIBBITCOIN_COMMON=libbitcoin_common.a -@@ -33,7 +33,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 -@@ -68,8 +72,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: -@@ -1129,8 +1135,13 @@ endif - - include Makefile.minisketch.include - -+if EMBEDDED_LEVELDB - include Makefile.crc32c.include - include Makefile.leveldb.include -+else -+LEVELDB_CPPFLAGS = $(leveldb_CFLAGS) -+LIBLEVELDB = $(leveldb_LIBS) -+endif - - include Makefile.test_util.include - include Makefile.test_fuzz.include -diff --git a/src/Makefile.test.include b/src/Makefile.test.include -index b610dabd07..cf79094fb9 100644 ---- a/src/Makefile.test.include -+++ b/src/Makefile.test.include -@@ -392,7 +392,9 @@ if ENABLE_BENCH - $(BENCH_BINARY) -sanity-check -priority-level=high - 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 -diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp -index 775496e21b..1304b2a2b3 100644 ---- a/src/dbwrapper.cpp -+++ b/src/dbwrapper.cpp -@@ -22,7 +22,11 @@ - #include <leveldb/db.h> - #include <leveldb/env.h> - #include <leveldb/filter_policy.h> --#include <leveldb/helpers/memenv/memenv.h> -+#if EMBEDDED_LEVELDB -+# include <leveldb/helpers/memenv/memenv.h> -+#else -+# include <leveldb/helpers/memenv.h> -+#endif - #include <leveldb/iterator.h> - #include <leveldb/options.h> - #include <leveldb/slice.h> -@@ -51,6 +55,27 @@ static void HandleError(const leveldb::Status& status) - throw dbwrapper_error(errmsg); - } - -+#if !EMBEDDED_LEVELDB -+#include <node/interface_ui.h> -+#include <util/translation.h> -+#include <leveldb/c.h> -+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; -+} -+#endif -+ - class CBitcoinLevelDBLogger : public leveldb::Logger { - public: - // This code is adapted from posix_logger.h, which is why it is using vsprintf. -diff --git a/src/dbwrapper.h b/src/dbwrapper.h -index 63c2f99d2a..406d03f1ea 100644 ---- a/src/dbwrapper.h -+++ b/src/dbwrapper.h -@@ -5,6 +5,10 @@ - #ifndef BITCOIN_DBWRAPPER_H - #define BITCOIN_DBWRAPPER_H - -+#if defined(HAVE_CONFIG_H) -+#include <config/bitcoin-config.h> -+#endif -+ - #include <attributes.h> - #include <serialize.h> - #include <span.h> -@@ -46,6 +50,10 @@ struct DBParams { - DBOptions options{}; - }; - -+#if !EMBEDDED_LEVELDB -+bool dbwrapper_SanityCheck(); -+#endif -+ - class dbwrapper_error : public std::runtime_error - { - public: -diff --git a/src/kernel/checks.cpp b/src/kernel/checks.cpp -index bf8a2ec74c..640deb2415 100644 ---- a/src/kernel/checks.cpp -+++ b/src/kernel/checks.cpp -@@ -4,6 +4,7 @@ - - #include <kernel/checks.h> - -+#include <dbwrapper.h> - #include <key.h> - #include <random.h> - #include <util/time.h> -@@ -15,6 +16,12 @@ namespace kernel { - - util::Result<void> SanityChecks(const Context&) - { -+#if !EMBEDDED_LEVELDB -+ if (!dbwrapper_SanityCheck()) { -+ return util::Error{Untranslated("Database sanity check failure. Aborting.")}; -+ } -+#endif -+ - if (!ECC_InitSanityCheck()) { - return util::Error{Untranslated("Elliptic curve cryptography sanity check failure. Aborting.")}; - } --- -2.43.0 - |