@@ -111,6 +111,47 @@ if(WITH_SYSTEM_LEVELDB)
111111 find_package (LevelDB MODULE REQUIRED )
112112endif () # WITH_SYSTEM_LEVELDB
113113
114+ option (WITH_SYSTEM_LIBSECP256K1 "Build with system libsecp256k1 instead of embedded copy." OFF )
115+ mark_as_advanced (WITH_SYSTEM_LIBSECP256K1 )
116+ if (WITH_SYSTEM_LIBSECP256K1)
117+ find_package (PkgConfig REQUIRED )
118+ pkg_check_modules (libsecp256k1 REQUIRED IMPORTED_TARGET libsecp256k1 )
119+ add_library (secp256k1 ALIAS PkgConfig::libsecp256k1 )
120+
121+ if (NOT (libsecp256k1_HAS_SECP256K1_ELLSWIFT_CREATE AND libsecp256k1_HAS_SECP256K1_XONLY_PUBKEY_PARSE AND libsecp256k1_HAS_SECP256K1_ECDSA_RECOVER AND libsecp256k1_HAS_SECP256K1_SCHNORRSIG_VERIFY))
122+ include (CheckSymbolExists )
123+ include (CMakePushCheckState )
124+ cmake_push_check_state (RESET )
125+ string (APPEND CMAKE_REQUIRED_FLAGS " ${libsecp256k1_CFLAGS_OTHER} " )
126+ list (APPEND CMAKE_REQUIRED_INCLUDES ${libsecp256k1_INCLUDE_DIRS} )
127+ list (APPEND CMAKE_REQUIRED_LINK_OPTIONS ${libsecp256k1_LDFLAGS} )
128+ list (APPEND CMAKE_REQUIRED_LIBRARIES ${libsecp256k1_LIBRARIES} )
129+ unset (missing_modules)
130+ macro (check_secp256k1_module module symbol )
131+ string (TOUPPER "${symbol} " VAR)
132+ set (VAR "libsecp256k1_HAS_${VAR} " )
133+ unset (${VAR} )
134+ check_symbol_exists ("${symbol} " "secp256k1_${module} .h" ${VAR} )
135+ if (NOT ${VAR} )
136+ list (APPEND missing_modules "${module} " )
137+ endif ()
138+ endmacro ()
139+ message (CHECK_START "Checking for required libsecp256k1 modules" )
140+ list (APPEND CMAKE_MESSAGE_INDENT " " )
141+ check_secp256k1_module (ellswift secp256k1_ellswift_create )
142+ check_secp256k1_module (extrakeys secp256k1_xonly_pubkey_parse )
143+ check_secp256k1_module (recovery secp256k1_ecdsa_recover )
144+ check_secp256k1_module (schnorrsig secp256k1_schnorrsig_verify )
145+ list (POP_BACK CMAKE_MESSAGE_INDENT)
146+ if (missing_modules)
147+ list (JOIN missing_modules ", " missing_modules)
148+ message (FATAL_ERROR "System-installed libsecp256k1 lacks these required modules: ${missing_modules} ." )
149+ endif ()
150+ message (CHECK_PASS "all were found" )
151+ cmake_pop_check_state ()
152+ endif ()
153+ endif () # WITH_SYSTEM_LIBSECP256K1
154+
114155option (ENABLE_WALLET "Enable wallet." ON )
115156option (WITH_SQLITE "Enable SQLite wallet support." ${ENABLE_WALLET} )
116157if (WITH_SQLITE)
0 commit comments