diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 3fcf60bf4d4..2b93d7d1206 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -479,130 +479,9 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() endif() -set(LIBRARIES_TO_CHECK - Boost GMP MPFR VTK Qt6 - Eigen3 OpenGR libpointmatcher LEDA MPFI - TBB OpenCV METIS ZLIB GLPK SCIP -) -function(check_library cgal_3rdparty_lib) - set(QT_NO_CREATE_VERSIONLESS_TARGETS ON) - set(CMAKE_FIND_PACKAGE_QUIET TRUE) - 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}) - 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() - endif() - endif() - endforeach() - if(GMP_VERSION) - set(version_var ${GMP_VERSION}) - 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() +include(display-third-party-libs-versions) - 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}) - endif() - - if(version_var) - message(STATUS "Third-party library ${cgal_3rdparty_lib} ${version_var}") - else() - message(STATUS "Third-party library ${cgal_3rdparty_lib} found") - endif() - else() - message(STATUS "Third-party library ${cgal_3rdparty_lib} not found") - endif() -endfunction() - -foreach(cgal_3rdparty_lib IN LISTS LIBRARIES_TO_CHECK) - check_library(${cgal_3rdparty_lib}) -endforeach() message("== Generate version files (DONE) ==\n") #-------------------------------------------------------------------------------------------------- # diff --git a/Installation/cmake/modules/display-third-party-libs-versions.cmake b/Installation/cmake/modules/display-third-party-libs-versions.cmake new file mode 100644 index 00000000000..8e52b3792c6 --- /dev/null +++ b/Installation/cmake/modules/display-third-party-libs-versions.cmake @@ -0,0 +1,124 @@ +set(LIBRARIES_TO_CHECK + Boost GMP MPFR VTK Qt6 + Eigen3 OpenGR libpointmatcher LEDA MPFI + TBB OpenCV METIS ZLIB GLPK SCIP +) + +function(check_library cgal_3rdparty_lib) + set(QT_NO_CREATE_VERSIONLESS_TARGETS ON) + set(CMAKE_FIND_PACKAGE_QUIET TRUE) + 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}) + 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() + endif() + endif() + endforeach() + if(GMP_VERSION) + set(version_var ${GMP_VERSION}) + 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}) + endif() + + if(version_var) + message(STATUS "Third-party library ${cgal_3rdparty_lib} ${version_var}") + else() + message(STATUS "Third-party library ${cgal_3rdparty_lib} found") + endif() + else() + message(STATUS "Third-party library ${cgal_3rdparty_lib} not found") + endif() +endfunction() + +foreach(cgal_3rdparty_lib IN LISTS LIBRARIES_TO_CHECK) + check_library(${cgal_3rdparty_lib}) +endforeach()