fetch depends
This commit is contained in:
@@ -35,11 +35,73 @@ if(PkgConfig_FOUND)
|
|||||||
pkg_check_modules(SECP256K1 QUIET IMPORTED_TARGET libsecp256k1)
|
pkg_check_modules(SECP256K1 QUIET IMPORTED_TARGET libsecp256k1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Try pkg-config / system first, then fall back to find_*(). If still not found
|
||||||
|
# attempt to fetch and build a bundled copy of libsecp256k1 using FetchContent.
|
||||||
if(NOT SECP256K1_FOUND)
|
if(NOT SECP256K1_FOUND)
|
||||||
find_path(SECP256K1_INCLUDE_DIR NAMES secp256k1.h)
|
find_path(SECP256K1_INCLUDE_DIR NAMES secp256k1.h)
|
||||||
find_library(SECP256K1_LIBRARY NAMES secp256k1)
|
find_library(SECP256K1_LIBRARY NAMES secp256k1)
|
||||||
if(NOT SECP256K1_INCLUDE_DIR OR NOT SECP256K1_LIBRARY)
|
if(SECP256K1_INCLUDE_DIR AND SECP256K1_LIBRARY)
|
||||||
message(FATAL_ERROR "secp256k1 not found. Install with: brew install secp256k1")
|
set(SECP256K1_FOUND TRUE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT SECP256K1_FOUND)
|
||||||
|
message(STATUS "secp256k1 not found on system; fetching and building a vendored copy")
|
||||||
|
include(FetchContent)
|
||||||
|
FetchContent_Declare(
|
||||||
|
secp256k1
|
||||||
|
GIT_REPOSITORY https://github.com/bitcoin-core/secp256k1.git
|
||||||
|
GIT_TAG master
|
||||||
|
GIT_SHALLOW TRUE
|
||||||
|
)
|
||||||
|
FetchContent_GetProperties(secp256k1)
|
||||||
|
if(NOT secp256k1_POPULATED)
|
||||||
|
FetchContent_Populate(secp256k1)
|
||||||
|
# Prefer a CMake build if present
|
||||||
|
if(EXISTS "${secp256k1_SOURCE_DIR}/CMakeLists.txt")
|
||||||
|
add_subdirectory(${secp256k1_SOURCE_DIR} ${secp256k1_BINARY_DIR})
|
||||||
|
if(TARGET secp256k1)
|
||||||
|
set(SECP256K1_FOUND TRUE)
|
||||||
|
set(SECP256K1_TARGET secp256k1)
|
||||||
|
elseif(TARGET libsecp256k1)
|
||||||
|
set(SECP256K1_FOUND TRUE)
|
||||||
|
set(SECP256K1_TARGET libsecp256k1)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# Fall back to the autotools build path. Install into a private prefix
|
||||||
|
set(SECP256K1_INSTALL_DIR "${CMAKE_BINARY_DIR}/_deps/secp256k1/install")
|
||||||
|
file(MAKE_DIRECTORY ${SECP256K1_INSTALL_DIR})
|
||||||
|
execute_process(COMMAND ./autogen.sh
|
||||||
|
WORKING_DIRECTORY ${secp256k1_SOURCE_DIR}
|
||||||
|
RESULT_VARIABLE _secp_autogen_result
|
||||||
|
OUTPUT_QUIET ERROR_QUIET)
|
||||||
|
if(NOT _secp_autogen_result EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to run autogen.sh for secp256k1")
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND ./configure --enable-module-ecdh --enable-experimental --prefix=${SECP256K1_INSTALL_DIR}
|
||||||
|
WORKING_DIRECTORY ${secp256k1_SOURCE_DIR}
|
||||||
|
RESULT_VARIABLE _secp_configure_result
|
||||||
|
OUTPUT_QUIET ERROR_QUIET)
|
||||||
|
if(NOT _secp_configure_result EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to configure secp256k1")
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND make
|
||||||
|
WORKING_DIRECTORY ${secp256k1_SOURCE_DIR}
|
||||||
|
RESULT_VARIABLE _secp_make_result
|
||||||
|
OUTPUT_QUIET ERROR_QUIET)
|
||||||
|
if(NOT _secp_make_result EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to build secp256k1")
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND make install
|
||||||
|
WORKING_DIRECTORY ${secp256k1_SOURCE_DIR}
|
||||||
|
RESULT_VARIABLE _secp_make_install_result
|
||||||
|
OUTPUT_QUIET ERROR_QUIET)
|
||||||
|
set(SECP256K1_INCLUDE_DIR ${SECP256K1_INSTALL_DIR}/include)
|
||||||
|
set(SECP256K1_LIBRARY ${SECP256K1_INSTALL_DIR}/lib/libsecp256k1.a)
|
||||||
|
if(EXISTS ${SECP256K1_LIBRARY})
|
||||||
|
set(SECP256K1_FOUND TRUE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user