Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  FindMPREAL.cmake   Sprache: unbekannt

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

[ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge