|  | # Try to find the MPFR C++ (MPREAL) library | 
|  | # See http://www.holoborodko.com/pavel/mpreal/ | 
|  | # | 
|  | # This module supports requiring a minimum version, e.g. you can do | 
|  | #   find_package(MPREAL 1.8.6) | 
|  | # to require version 1.8.6 or newer of MPREAL C++. | 
|  | # | 
|  | # Once done this will define | 
|  | # | 
|  | #  MPREAL_FOUND - system has MPREAL lib with correct version | 
|  | #  MPREAL_INCLUDES - MPREAL required include directories | 
|  | #  MPREAL_LIBRARIES - MPREAL required libraries | 
|  | #  MPREAL_VERSION - MPREAL version | 
|  |  | 
|  | # Copyright (c) 2020 The Eigen Authors. | 
|  | # Redistribution and use is allowed according to the terms of the BSD license. | 
|  |  | 
|  | include(CMakeFindDependencyMacro) | 
|  | find_dependency(MPFR) | 
|  | find_dependency(GMP) | 
|  |  | 
|  | # Set MPREAL_INCLUDES | 
|  | find_path(MPREAL_INCLUDES | 
|  | NAMES | 
|  | mpreal.h | 
|  | PATHS | 
|  | $ENV{GMPDIR} | 
|  | ${INCLUDE_INSTALL_DIR} | 
|  | ) | 
|  |  | 
|  | # Set MPREAL_FIND_VERSION to 1.0.0 if no minimum version is specified | 
|  |  | 
|  | if(NOT MPREAL_FIND_VERSION) | 
|  | if(NOT MPREAL_FIND_VERSION_MAJOR) | 
|  | set(MPREAL_FIND_VERSION_MAJOR 1) | 
|  | endif() | 
|  | if(NOT MPREAL_FIND_VERSION_MINOR) | 
|  | set(MPREAL_FIND_VERSION_MINOR 0) | 
|  | endif() | 
|  | if(NOT MPREAL_FIND_VERSION_PATCH) | 
|  | set(MPREAL_FIND_VERSION_PATCH 0) | 
|  | endif() | 
|  |  | 
|  | set(MPREAL_FIND_VERSION "${MPREAL_FIND_VERSION_MAJOR}.${MPREAL_FIND_VERSION_MINOR}.${MPREAL_FIND_VERSION_PATCH}") | 
|  | endif() | 
|  |  | 
|  | # Check bugs | 
|  | # - https://github.com/advanpix/mpreal/issues/7 | 
|  | # - https://github.com/advanpix/mpreal/issues/9 | 
|  | set(MPREAL_TEST_PROGRAM " | 
|  | #include <mpreal.h> | 
|  | #include <algorithm> | 
|  | int main(int argc, char** argv) { | 
|  | const mpfr::mpreal one  =    1.0; | 
|  | const mpfr::mpreal zero =    0.0; | 
|  | using namespace std; | 
|  | const mpfr::mpreal smaller = min(one, zero); | 
|  | return 0; | 
|  | }") | 
|  |  | 
|  | if(MPREAL_INCLUDES) | 
|  |  | 
|  | # Set MPREAL_VERSION | 
|  |  | 
|  | file(READ "${MPREAL_INCLUDES}/mpreal.h" _mpreal_version_header) | 
|  |  | 
|  | string(REGEX MATCH "define[ \t]+MPREAL_VERSION_MAJOR[ \t]+([0-9]+)" _mpreal_major_version_match "${_mpreal_version_header}") | 
|  | set(MPREAL_MAJOR_VERSION "${CMAKE_MATCH_1}") | 
|  | string(REGEX MATCH "define[ \t]+MPREAL_VERSION_MINOR[ \t]+([0-9]+)" _mpreal_minor_version_match "${_mpreal_version_header}") | 
|  | set(MPREAL_MINOR_VERSION "${CMAKE_MATCH_1}") | 
|  | string(REGEX MATCH "define[ \t]+MPREAL_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _mpreal_patchlevel_version_match "${_mpreal_version_header}") | 
|  | set(MPREAL_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") | 
|  |  | 
|  | set(MPREAL_VERSION ${MPREAL_MAJOR_VERSION}.${MPREAL_MINOR_VERSION}.${MPREAL_PATCHLEVEL_VERSION}) | 
|  |  | 
|  | # Check whether found version exceeds minimum version | 
|  |  | 
|  | if(${MPREAL_VERSION} VERSION_LESS ${MPREAL_FIND_VERSION}) | 
|  | set(MPREAL_VERSION_OK FALSE) | 
|  | message(STATUS "MPREAL version ${MPREAL_VERSION} found in ${MPREAL_INCLUDES}, " | 
|  | "but at least version ${MPREAL_FIND_VERSION} is required") | 
|  | else() | 
|  | set(MPREAL_VERSION_OK TRUE) | 
|  |  | 
|  | list(APPEND MPREAL_INCLUDES "${MPFR_INCLUDES}" "${GMP_INCLUDES}") | 
|  | list(REMOVE_DUPLICATES MPREAL_INCLUDES) | 
|  |  | 
|  | list(APPEND MPREAL_LIBRARIES "${MPFR_LIBRARIES}" "${GMP_LIBRARIES}") | 
|  | list(REMOVE_DUPLICATES MPREAL_LIBRARIES) | 
|  |  | 
|  | # Make sure it compiles with the current compiler. | 
|  | unset(MPREAL_WORKS CACHE) | 
|  | include(CheckCXXSourceCompiles) | 
|  | set(CMAKE_REQUIRED_INCLUDES "${MPREAL_INCLUDES}") | 
|  | set(CMAKE_REQUIRED_LIBRARIES "${MPREAL_LIBRARIES}") | 
|  | check_cxx_source_compiles("${MPREAL_TEST_PROGRAM}" MPREAL_WORKS) | 
|  | endif() | 
|  | endif() | 
|  |  | 
|  | include(FindPackageHandleStandardArgs) | 
|  | find_package_handle_standard_args(MPREAL DEFAULT_MSG | 
|  | MPREAL_INCLUDES MPREAL_VERSION_OK MPREAL_WORKS) | 
|  | mark_as_advanced(MPREAL_INCLUDES) |