| # 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) |