diff --git a/Installation/cmake/modules/display-third-party-libs-versions.cmake b/Installation/cmake/modules/display-third-party-libs-versions.cmake index 8e52b3792c67..682c3cf64c4f 100644 --- a/Installation/cmake/modules/display-third-party-libs-versions.cmake +++ b/Installation/cmake/modules/display-third-party-libs-versions.cmake @@ -4,109 +4,67 @@ set(LIBRARIES_TO_CHECK TBB OpenCV METIS ZLIB GLPK SCIP ) +function(get_library_version header_path major_macro minor_macro patchlevel_macro version_var) + if(EXISTS ${header_path}) + file(READ ${header_path} HEADER_CONTENT) + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${major_macro}[ \t]+([0-9]+)") + set(VERSION_MAJOR ${CMAKE_MATCH_1}) + endif() + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${minor_macro}[ \t]+([0-9]+)") + set(VERSION_MINOR ${CMAKE_MATCH_1}) + endif() + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${patchlevel_macro}[ \t]+([0-9]+)") + set(VERSION_PATCHLEVEL ${CMAKE_MATCH_1}) + else() + set(VERSION_PATCHLEVEL "") + endif() + if(VERSION_PATCHLEVEL) + set(${version_var} "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}" PARENT_SCOPE) + elseif(VERSION_MAJOR AND VERSION_MINOR) + set(${version_var} "${VERSION_MAJOR}.${VERSION_MINOR}" PARENT_SCOPE) + endif() + endif() +endfunction() + function(check_library cgal_3rdparty_lib) set(QT_NO_CREATE_VERSIONLESS_TARGETS ON) set(CMAKE_FIND_PACKAGE_QUIET TRUE) + string(TOUPPER ${cgal_3rdparty_lib} cgal_3rdparty_lib_upper) find_package(${cgal_3rdparty_lib} QUIET) set(CMAKE_FIND_PACKAGE_QUIET FALSE) if(${cgal_3rdparty_lib}_FOUND) set(version_var "") - if(${cgal_3rdparty_lib} STREQUAL "Eigen3") - set(version_var ${EIGEN3_VERSION}) + if(DEFINED ${cgal_3rdparty_lib}_VERSION) + set(version_var ${${cgal_3rdparty_lib}_VERSION}) + elseif(DEFINED ${cgal_3rdparty_lib}_VERSION_STRING) + set(version_var ${${cgal_3rdparty_lib}_VERSION_STRING}) + elseif(DEFINED ${cgal_3rdparty_lib_upper}_VERSION) + set(version_var ${${cgal_3rdparty_lib_upper}_VERSION}) + elseif(DEFINED ${cgal_3rdparty_lib_upper}_VERSION_STRING) + set(version_var ${${cgal_3rdparty_lib_upper}_VERSION_STRING}) elseif(${cgal_3rdparty_lib} STREQUAL "GMP") - set(GMP_HEADER_PATH "${GMP_INCLUDE_DIR}/gmp.h") - file(READ "${GMP_HEADER_PATH}" GMP_HEADER_CONTENT) - string(REGEX MATCHALL "#include[ \t]+\"([^\"]+)\"" INCLUDED_HEADERS "${GMP_HEADER_CONTENT}") - set(GMP_VERSION_MAJOR "") - set(GMP_VERSION_MINOR "") - set(GMP_VERSION_PATCH "") - foreach(INCLUDED_HEADER ${INCLUDED_HEADERS}) - string(REGEX REPLACE "#include[ \t]+\"([^\"]+)\"" "\\1" GMP_ARCH_HEADER "${INCLUDED_HEADER}") - set(GMP_ARCH_HEADER_PATH "${GMP_INCLUDE_DIR}/${GMP_ARCH_HEADER}") - if(EXISTS "${GMP_ARCH_HEADER_PATH}") - file(READ "${GMP_ARCH_HEADER_PATH}" GMP_ARCH_HEADER_CONTENT) - string(REGEX MATCH "#define[ \t]+__GNU_MP_VERSION[ \t]+[0-9]+" GMP_VERSION_MAJOR_LINE "${GMP_ARCH_HEADER_CONTENT}") - string(REGEX MATCH "#define[ \t]+__GNU_MP_VERSION_MINOR[ \t]+[0-9]+" GMP_VERSION_MINOR_LINE "${GMP_ARCH_HEADER_CONTENT}") - string(REGEX MATCH "#define[ \t]+__GNU_MP_VERSION_PATCHLEVEL[ \t]+[0-9]+" GMP_VERSION_PATCH_LINE "${GMP_ARCH_HEADER_CONTENT}") - if(GMP_VERSION_MAJOR_LINE) - string(REGEX REPLACE ".*[ \t]+([0-9]+).*" "\\1" GMP_VERSION_MAJOR "${GMP_VERSION_MAJOR_LINE}") - endif() - if(GMP_VERSION_MINOR_LINE) - string(REGEX REPLACE ".*[ \t]+([0-9]+).*" "\\1" GMP_VERSION_MINOR "${GMP_VERSION_MINOR_LINE}") - endif() - if(GMP_VERSION_PATCH_LINE) - string(REGEX REPLACE ".*[ \t]+([0-9]+).*" "\\1" GMP_VERSION_PATCH "${GMP_VERSION_PATCH_LINE}") - endif() - if(GMP_VERSION_MAJOR AND GMP_VERSION_MINOR AND GMP_VERSION_PATCH) - set(GMP_VERSION "${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_PATCH}") - break() + set(version_var "") + get_library_version("${GMP_INCLUDE_DIR}/gmp.h" "__GNU_MP_VERSION" "__GNU_MP_VERSION_MINOR" "__GNU_MP_VERSION_PATCHLEVEL" version_var) + if(NOT version_var) + file(READ "${GMP_INCLUDE_DIR}/gmp.h" GMP_HEADER_CONTENT) + string(REGEX MATCHALL "#include[ \t]+\"([^\"]+)\"" INCLUDED_HEADERS "${GMP_HEADER_CONTENT}") + foreach(INCLUDED_HEADER ${INCLUDED_HEADERS}) + string(REGEX REPLACE "#include[ \t]+\"([^\"]+)\"" "\\1" GMP_ARCH_HEADER "${INCLUDED_HEADER}") + set(GMP_ARCH_HEADER_PATH "${GMP_INCLUDE_DIR}/${GMP_ARCH_HEADER}") + if(EXISTS ${GMP_ARCH_HEADER_PATH}) + get_library_version("${GMP_ARCH_HEADER_PATH}" "__GNU_MP_VERSION" "__GNU_MP_VERSION_MINOR" "__GNU_MP_VERSION_PATCHLEVEL" version_var) + if(version_var) + break() + endif() endif() - endif() - endforeach() - if(GMP_VERSION) - set(version_var ${GMP_VERSION}) + endforeach() endif() elseif(${cgal_3rdparty_lib} STREQUAL "GLPK") - set(GLPK_HEADER_PATH "${GLPK_INCLUDE_DIR}/glpk.h") - if(EXISTS "${GLPK_HEADER_PATH}") - file(READ "${GLPK_HEADER_PATH}" GLPK_HEADER_CONTENT) - string(REGEX MATCH "#define[ \t]+GLP_MAJOR_VERSION[ \t]+[0-9]+" GLPK_VERSION_MAJOR_LINE "${GLPK_HEADER_CONTENT}") - string(REGEX MATCH "#define[ \t]+GLP_MINOR_VERSION[ \t]+[0-9]+" GLPK_VERSION_MINOR_LINE "${GLPK_HEADER_CONTENT}") - set(GLPK_VERSION_MAJOR "") - set(GLPK_VERSION_MINOR "") - if(GLPK_VERSION_MAJOR_LINE) - string(REGEX REPLACE ".*[ \t]+([0-9]+).*" "\\1" GLPK_VERSION_MAJOR "${GLPK_VERSION_MAJOR_LINE}") - endif() - if(GLPK_VERSION_MINOR_LINE) - string(REGEX REPLACE ".*[ \t]+([0-9]+).*" "\\1" GLPK_VERSION_MINOR "${GLPK_VERSION_MINOR_LINE}") - endif() - if(NOT GLPK_VERSION_MAJOR STREQUAL "" AND NOT GLPK_VERSION_MINOR STREQUAL "") - set(GLPK_VERSION "${GLPK_VERSION_MAJOR}.${GLPK_VERSION_MINOR}") - set(version_var ${GLPK_VERSION}) - endif() - endif() - elseif(${cgal_3rdparty_lib} STREQUAL "MPFR" OR ${cgal_3rdparty_lib} STREQUAL "METIS") - set(header_name "") - set(version_macros "") - if(${cgal_3rdparty_lib} STREQUAL "MPFR") - set(header_name "mpfr.h") - set(version_macros "MPFR_VERSION_MAJOR;MPFR_VERSION_MINOR;MPFR_VERSION_PATCHLEVEL") - elseif(${cgal_3rdparty_lib} STREQUAL "METIS") - set(header_name "metis.h") - set(version_macros "METIS_VER_MAJOR;METIS_VER_MINOR;METIS_VER_SUBMINOR") - endif() - - find_path(INCLUDE_DIR - NAMES ${header_name} - PATHS ${${cgal_3rdparty_lib}_INCLUDE_DIRS} - PATH_SUFFIXES ${cgal_3rdparty_lib} - ) - - if(INCLUDE_DIR) - set(HEADER_PATH "${INCLUDE_DIR}/${header_name}") - - if(EXISTS ${HEADER_PATH}) - file(READ ${HEADER_PATH} HEADER_CONTENT) - - list(GET version_macros 0 major_macro) - list(GET version_macros 1 minor_macro) - list(GET version_macros 2 patchlevel_macro) - - string(REGEX MATCH "#define[ \t]+${major_macro}[ \t]+([0-9]+)" _major_match ${HEADER_CONTENT}) - string(REGEX MATCH "#define[ \t]+${minor_macro}[ \t]+([0-9]+)" _minor_match ${HEADER_CONTENT}) - string(REGEX MATCH "#define[ \t]+${patchlevel_macro}[ \t]+([0-9]+)" _patchlevel_match ${HEADER_CONTENT}) - - string(REGEX REPLACE ".*#define[ \t]+${major_macro}[ \t]+([0-9]+).*" "\\1" VERSION_MAJOR ${_major_match}) - string(REGEX REPLACE ".*#define[ \t]+${minor_macro}[ \t]+([0-9]+).*" "\\1" VERSION_MINOR ${_minor_match}) - string(REGEX REPLACE ".*#define[ \t]+${patchlevel_macro}[ \t]+([0-9]+).*" "\\1" VERSION_PATCHLEVEL ${_patchlevel_match}) - - set(version_var "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}") - endif() - endif() - elseif(DEFINED ${cgal_3rdparty_lib}_VERSION) - set(version_var ${${cgal_3rdparty_lib}_VERSION}) - elseif(DEFINED ${cgal_3rdparty_lib}_VERSION_STRING) - set(version_var ${${cgal_3rdparty_lib}_VERSION_STRING}) + get_library_version("${GLPK_INCLUDE_DIR}/glpk.h" "GLP_MAJOR_VERSION" "GLP_MINOR_VERSION" "" version_var) + elseif(${cgal_3rdparty_lib} STREQUAL "MPFR") + get_library_version("${MPFR_INCLUDE_DIR}/mpfr.h" "MPFR_VERSION_MAJOR" "MPFR_VERSION_MINOR" "MPFR_VERSION_PATCHLEVEL" version_var) + elseif(${cgal_3rdparty_lib} STREQUAL "METIS") + get_library_version("${METIS_INCLUDE_DIR}/metis.h" "METIS_VER_MAJOR" "METIS_VER_MINOR" "METIS_VER_SUBMINOR" version_var) endif() if(version_var)