|
1 | | -# Try to find the MPFR library |
2 | | -# See http://www.mpfr.org/ |
3 | | -# |
4 | | -# This module supports requiring a minimum version, e.g. you can do |
5 | | -# find_package(MPFR 2.3.0) |
6 | | -# to require version 2.3.0 to newer of MPFR. |
7 | | -# |
8 | | -# Once done this will define |
9 | | -# |
10 | | -# MPFR_FOUND - system has MPFR lib with correct version |
11 | | -# MPFR_INCLUDES - the MPFR include directory |
12 | | -# MPFR_LIBRARIES - the MPFR library |
13 | | -# MPFR_VERSION - MPFR version |
| 1 | +# ${MPFR_INCLUDE_DIRS} contains the paths to mpfr.h if MPFR is found. |
| 2 | +# ${MPFR_LIBRARIES} contains libmpfr if MPFR is found. |
14 | 3 |
|
15 | | -# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org> |
16 | | -# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr> |
17 | | -# Copyright (c) 2010 Jitse Niesen, <jitse@maths.leeds.ac.uk> |
18 | | -# Copyright (c) 2015 Jack Poulson, <jack.poulson@gmail.com> |
19 | | -# Redistribution and use is allowed according to the terms of the BSD license. |
| 4 | +# Check whether environment variable MPFR_DIR was set. |
| 5 | +if(NOT MPFR_DIR) |
| 6 | + set(ENV_MPFR_DIR $ENV{MPFR_DIR}) |
| 7 | + if(ENV_MPFR_DIR) |
| 8 | + set(MPFR_DIR $ENV{MPFR_DIR} CACHE PATH "Path to mpfr directory") |
| 9 | + endif() |
| 10 | +endif() |
20 | 11 |
|
21 | | -find_path(MPFR_INCLUDES NAMES mpfr.h PATHS $ENV{GMPDIR} $ENV{MPFRDIR} |
22 | | - ${INCLUDE_INSTALL_DIR}) |
| 12 | +find_path(MPFR_INCLUDE_DIRS |
| 13 | + NAMES mpfr.h |
| 14 | + HINTS ${MPFR_DIR} |
| 15 | + PATH_SUFFIXES include) |
23 | 16 |
|
24 | | -# Set MPFR_FIND_VERSION to 1.0.0 if no minimum version is specified |
25 | | -if(NOT MPFR_FIND_VERSION) |
26 | | - if(NOT MPFR_FIND_VERSION_MAJOR) |
27 | | - set(MPFR_FIND_VERSION_MAJOR 1) |
28 | | - endif() |
29 | | - if(NOT MPFR_FIND_VERSION_MINOR) |
30 | | - set(MPFR_FIND_VERSION_MINOR 0) |
31 | | - endif() |
32 | | - if(NOT MPFR_FIND_VERSION_PATCH) |
33 | | - set(MPFR_FIND_VERSION_PATCH 0) |
34 | | - endif() |
35 | | - set(MPFR_FIND_VERSION |
36 | | - "${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}") |
| 17 | +if(STATIC_MPFR) |
| 18 | + find_library(MPFR_LIBRARY |
| 19 | + NAMES libmpfr.a mpfr |
| 20 | + HINTS ${MPFR_DIR} |
| 21 | + PATH_SUFFIXES lib) |
| 22 | +else() |
| 23 | + find_library(MPFR_LIBRARY |
| 24 | + NAMES libmpfr.so mpfr |
| 25 | + HINTS ${MPFR_DIR} |
| 26 | + PATH_SUFFIXES lib) |
37 | 27 | endif() |
38 | 28 |
|
39 | | -if(MPFR_INCLUDES) |
40 | | - # Query MPFR_VERSION |
41 | | - file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header) |
| 29 | +SET(MPFR_LIBRARIES ${MPFR_LIBRARY}) |
42 | 30 |
|
43 | | - string(REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" |
44 | | - _mpfr_major_version_match "${_mpfr_version_header}") |
45 | | - set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") |
46 | | - string(REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" |
47 | | - _mpfr_minor_version_match "${_mpfr_version_header}") |
48 | | - set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") |
49 | | - string(REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" |
50 | | - _mpfr_patchlevel_version_match "${_mpfr_version_header}") |
51 | | - set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") |
| 31 | +# look for mpir library and include files when mpfr could not be found |
| 32 | +if(NOT MPFR_LIBRARIES) |
| 33 | + find_path(MPFR_INCLUDE_DIRS |
| 34 | + NAMES mpir.h |
| 35 | + HINTS ${MPFR_DIR} |
| 36 | + PATH_SUFFIXES include) |
52 | 37 |
|
53 | | - set(MPFR_VERSION |
54 | | - ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION}) |
| 38 | + find_library(MPFR_LIBRARY |
| 39 | + NAMES mpir |
| 40 | + HINTS ${MPFR_DIR} |
| 41 | + PATH_SUFFIXES lib) |
55 | 42 |
|
56 | | - # Check whether found version exceeds minimum required |
57 | | - if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) |
58 | | - set(MPFR_VERSION_OK FALSE) |
59 | | - message(STATUS "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, " |
60 | | - "but at least version ${MPFR_FIND_VERSION} is required") |
61 | | - else() |
62 | | - set(MPFR_VERSION_OK TRUE) |
63 | | - endif() |
| 43 | + SET(MPFR_LIBRARIES ${MPFR_LIBRARY}) |
64 | 44 | endif() |
65 | 45 |
|
66 | | -find_library(MPFR_LIBRARIES mpfr |
67 | | - PATHS $ENV{GMPDIR} $ENV{MPFRDIR} ${LIB_INSTALL_DIR}) |
| 46 | +file(GLOB MPFR_HEADERS "${MPFR_INCLUDE_DIRS}/mpfr.h") |
| 47 | +foreach (mpfr_header_filename ${MPFR_HEADERS}) |
| 48 | + file(READ "${mpfr_header_filename}" _mpfr_version_header) |
| 49 | + string(REGEX MATCH |
| 50 | + "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" _mpfr_major_version_match |
| 51 | + "${_mpfr_version_header}") |
| 52 | + if (_mpfr_major_version_match) |
| 53 | + set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") |
| 54 | + string(REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" |
| 55 | + _mpfr_minor_version_match "${_mpfr_version_header}") |
| 56 | + set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") |
| 57 | + string(REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" |
| 58 | + _mpfr_patchlevel_version_match "${_mpfr_version_header}") |
| 59 | + set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") |
| 60 | + set(MPFR_VERSION |
| 61 | + ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION}) |
| 62 | + endif () |
| 63 | +endforeach () |
68 | 64 |
|
69 | 65 | include(FindPackageHandleStandardArgs) |
70 | | -find_package_handle_standard_args(MPFR DEFAULT_MSG |
71 | | - MPFR_INCLUDES MPFR_LIBRARIES MPFR_VERSION_OK) |
72 | | -mark_as_advanced(MPFR_INCLUDES MPFR_LIBRARIES) |
| 66 | +find_package_handle_standard_args(MPFR DEFAULT_MSG MPFR_INCLUDE_DIRS MPFR_LIBRARIES) |
0 commit comments