# .. cmake_module:: # # Find the GNU MULTI-Precision Bignum (GMP) library # and the corresponding C++ bindings GMPxx # # You may set the following variables to modify the # behaviour of this module: # # :ref:`GMP_ROOT` # Path list to search for GMP and GMPxx # # Sets the following variables: # # :code:`GMP_FOUND` # True if the GMP library, the GMPxx headers and # the GMPxx library were found. # # .. cmake_variable:: GMP_ROOT # # You may set this variable to have :ref:`FindGMP` look # for the gmp and gmpxx packages in the given path before # inspecting system paths. # # search for location of header gmpxx.h", only at positions given by the user find_path(GMPXX_INCLUDE_DIR NAMES "gmpxx.h" PATHS ${GMP_PREFIX} ${GMP_ROOT} PATH_SUFFIXES include NO_DEFAULT_PATH) # try default paths now find_path(GMPXX_INCLUDE_DIR NAMES "gmpxx.h") # check if header is accepted include(CMakePushCheckState) cmake_push_check_state() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${GMPXX_INCLUDE_DIR}) include(CheckIncludeFileCXX) check_include_file_cxx("gmpxx.h" GMP_HEADER_WORKS) # look for library gmp, only at positions given by the user find_library(GMP_LIB NAMES gmp libgmp PATHS ${GMP_PREFIX} ${GMP_ROOT} "/usr/lib/x86_64-linux-gnu" PATH_SUFFIXES lib lib64 NO_DEFAULT_PATH DOC "GNU GMP library") # try default paths now find_library(GMP_LIB NAMES libgmp gmp) # look for library gmpxx, only at positions given by the user find_library(GMPXX_LIB NAMES gmpxx libgmpxx PATHS ${GMP_PREFIX} ${GMP_ROOT} "/usr/lib/x86_64-linux-gnu" PATH_SUFFIXES lib lib64 NO_DEFAULT_PATH DOC "GNU GMPXX library") # try default paths now find_library(GMPXX_LIB NAMES libgmpxx gmpxx) # check if library works if(GMP_LIB AND GMPXX_LIB) include(CheckSymbolExists) check_library_exists(${GMP_LIB} __gmpz_abs "" GMPXX_LIB_WORKS) endif(GMP_LIB AND GMPXX_LIB) cmake_pop_check_state() # behave like a CMake module is supposed to behave include(FindPackageHandleStandardArgs) find_package_handle_standard_args( "GMP" DEFAULT_MSG GMPXX_INCLUDE_DIR GMP_LIB GMPXX_LIB GMP_HEADER_WORKS GMPXX_LIB_WORKS ) mark_as_advanced(GMP_LIB GMPXX_LIB GMPXX_INCLUDE_DIR) # if GMPxx headers, GMP library, and GMPxx library are found, store results if(GMP_FOUND) set(GMP_INCLUDE_DIRS ${GMPXX_INCLUDE_DIR}) set(GMP_LIBRARIES ${GMP_LIB} ${GMPXX_LIB}) set(GMP_COMPILE_FLAGS "-DENABLE_GMP=1") # log result file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log "Determining location of GMP, GMPxx succeeded:\n" "Include directory: ${GMP_INCLUDE_DIRS}\n" "Library directory: ${GMP_LIBRARIES}\n\n") else() # log errornous result file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "Determining location of GMP, GMPxx failed:\n" "Include directory: ${GMPXX_INCLUDE_DIR}\n" "gmp library directory: ${GMP_LIB}\n" "gmpxx library directory: ${GMPXX_LIB}\n\n") endif() # set HAVE_GMP for config.h set(HAVE_GMP ${GMP_FOUND})