Changeset View
Changeset View
Standalone View
Standalone View
cmake/modules/FindGMP.cmake
# Try to find the GMP libraries | # Copyright (c) 2017-2020 The Bitcoin developers | ||||
# Distributed under the MIT software license, see the accompanying | |||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
#.rst | |||||
# FindGMP | |||||
# ------------- | |||||
# | |||||
# Find the GNU Multiple Precision Arithmetic library. The following components | |||||
# are available:: | |||||
# gmp | |||||
# | |||||
# This will define the following variables:: | |||||
# | |||||
# GMP_FOUND - system has GMP lib | # GMP_FOUND - system has GMP lib | ||||
# GMP_INCLUDE_DIR - the GMP include directory | # GMP_INCLUDE_DIRS - the GMP include directories | ||||
# GMP_LIBRARY - Library needed to use GMP | # GMP_LIBRARIES - Library needed to use GMP | ||||
# GMPXX_LIBRARY - Library needed to use GMP C++ API | # GMP_VERSION - The library version MAJOR.MINOR.PATCH | ||||
# GMP_VERSION_MAJOR - The library MAJOR version number | |||||
if(GMP_INCLUDE_DIR AND GMP_LIBRARY) | # GMP_VERSION_MINOR - The library MINOR version number | ||||
# Already in cache, be silent | # GMP_VERSION_PATCH - The library PATCH version number | ||||
set(GMP_FIND_QUIETLY TRUE) | # | ||||
# And the following imported target:: | |||||
# | |||||
# GMP::gmp | |||||
include(BrewHelper) | |||||
find_brew_prefix(BREW_HINT gmp) | |||||
find_path(GMP_INCLUDE_DIR | |||||
NAMES gmp.h | |||||
HINTS ${BREW_HINT} | |||||
) | |||||
set(GMP_INCLUDE_DIRS "${GMP_INCLUDE_DIR}") | |||||
mark_as_advanced(GMP_INCLUDE_DIR) | |||||
if(NOT DEFINED GMP_VERSION) | |||||
# Extract version information from the gmp.h header. | |||||
if(GMP_INCLUDE_DIR) | |||||
# Read the version from file gmp.h into a variable. | |||||
file(READ "${GMP_INCLUDE_DIR}/gmp.h" _GMP_HEADER) | |||||
# Parse the version into variables. | |||||
string(REGEX REPLACE | |||||
".*__GNU_MP_VERSION[ \t]+([0-9]+).*" "\\1" | |||||
GMP_VERSION_MAJOR | |||||
"${_GMP_HEADER}" | |||||
) | |||||
string(REGEX REPLACE | |||||
".*__GNU_MP_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" | |||||
GMP_VERSION_MINOR | |||||
"${_GMP_HEADER}" | |||||
) | |||||
string(REGEX REPLACE | |||||
".*__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+).*" "\\1" | |||||
GMP_VERSION_PATCH | |||||
"${_GMP_HEADER}" | |||||
) | |||||
else() | |||||
# Set some garbage values to the versions since we didn't find a file to | |||||
# read. | |||||
set(GMP_VERSION_MAJOR "0") | |||||
set(GMP_VERSION_MINOR "0") | |||||
set(GMP_VERSION_PATCH "0") | |||||
endif() | endif() | ||||
find_path(GMP_INCLUDE_DIR NAMES gmp.h) | # Cache the result. | ||||
find_library(GMP_LIBRARY NAMES gmp libgmp) | set(GMP_VERSION_MAJOR ${GMP_VERSION_MAJOR} | ||||
find_library(GMPXX_LIBRARY NAMES gmpxx libgmpxx) | CACHE INTERNAL "GMP major version number" | ||||
) | |||||
set(GMP_VERSION_MINOR ${GMP_VERSION_MINOR} | |||||
CACHE INTERNAL "GMP minor version number" | |||||
) | |||||
set(GMP_VERSION_PATCH ${GMP_VERSION_PATCH} | |||||
CACHE INTERNAL "GMP patch version number" | |||||
) | |||||
# The actual returned/output version variable (the others can be used if | |||||
# needed). | |||||
set(GMP_VERSION | |||||
"${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_PATCH}" | |||||
CACHE INTERNAL "GMP full version" | |||||
) | |||||
endif() | |||||
message(STATUS "GMP libs: " ${GMP_LIBRARY} " " ${GMPXX_LIBRARY}) | include(ExternalLibraryHelper) | ||||
find_component(GMP gmp | |||||
NAMES gmp | |||||
HINTS ${BREW_HINT} | |||||
INCLUDE_DIRS ${GMP_INCLUDE_DIRS} | |||||
) | |||||
include(FindPackageHandleStandardArgs) | include(FindPackageHandleStandardArgs) | ||||
find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARY) | find_package_handle_standard_args(GMP | ||||
REQUIRED_VARS GMP_INCLUDE_DIR | |||||
mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARY GMPXX_LIBRARY) | VERSION_VAR GMP_VERSION | ||||
HANDLE_COMPONENTS | |||||
set(GMP_LIBRARIES ${GMP_LIBRARY} ${GMPXX_LIBRARY}) | ) | ||||
set(GMP_INCLUDE_DIRS ${GMP_INCLUDE_DIR}) |