|
| 1 | +set(LIBRARIES_TO_CHECK |
| 2 | + Eigen3 Qt6 TBB OpenMesh Boost |
| 3 | + GMP Threads SuiteSparse MPFI METIS |
| 4 | + VTK SCIP OSQP LASLIB GLPK |
| 5 | + ITT Ceres MPFR libpointmatcher ITK |
| 6 | + OpenGR OpenCV ZLIB |
| 7 | +) |
| 8 | + |
| 9 | +function(get_library_version header_path major_macro minor_macro patchlevel_macro version_var) |
| 10 | + if(EXISTS ${header_path}) |
| 11 | + file(READ ${header_path} HEADER_CONTENT) |
| 12 | + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${major_macro}[ \t]+([0-9]+)") |
| 13 | + set(VERSION_MAJOR ${CMAKE_MATCH_1}) |
| 14 | + endif() |
| 15 | + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${minor_macro}[ \t]+([0-9]+)") |
| 16 | + set(VERSION_MINOR ${CMAKE_MATCH_1}) |
| 17 | + endif() |
| 18 | + if("${HEADER_CONTENT}" MATCHES "#define[ \t]+${patchlevel_macro}[ \t]+([0-9]+)") |
| 19 | + set(VERSION_PATCHLEVEL ${CMAKE_MATCH_1}) |
| 20 | + else() |
| 21 | + set(VERSION_PATCHLEVEL "") |
| 22 | + endif() |
| 23 | + if(VERSION_PATCHLEVEL) |
| 24 | + set(${version_var} "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}" PARENT_SCOPE) |
| 25 | + elseif(VERSION_MAJOR GREATER_EQUAL 0 OR VERSION_MINOR GREATER_EQUAL 0) |
| 26 | + set(${version_var} "${VERSION_MAJOR}.${VERSION_MINOR}" PARENT_SCOPE) |
| 27 | + endif() |
| 28 | + endif() |
| 29 | +endfunction() |
| 30 | + |
| 31 | +function(check_library cgal_3rdparty_lib) |
| 32 | + set(QT_NO_CREATE_VERSIONLESS_TARGETS ON) |
| 33 | + set(CMAKE_FIND_PACKAGE_QUIET TRUE) |
| 34 | + string(TOUPPER ${cgal_3rdparty_lib} cgal_3rdparty_lib_upper) |
| 35 | + find_package(${cgal_3rdparty_lib} QUIET) |
| 36 | + set(CMAKE_FIND_PACKAGE_QUIET FALSE) |
| 37 | + if(${cgal_3rdparty_lib}_FOUND) |
| 38 | + set(version_var "") |
| 39 | + if(DEFINED ${cgal_3rdparty_lib}_VERSION) |
| 40 | + set(version_var ${${cgal_3rdparty_lib}_VERSION}) |
| 41 | + elseif(DEFINED ${cgal_3rdparty_lib}_VERSION_STRING) |
| 42 | + set(version_var ${${cgal_3rdparty_lib}_VERSION_STRING}) |
| 43 | + elseif(DEFINED ${cgal_3rdparty_lib_upper}_VERSION) |
| 44 | + set(version_var ${${cgal_3rdparty_lib_upper}_VERSION}) |
| 45 | + elseif(DEFINED ${cgal_3rdparty_lib_upper}_VERSION_STRING) |
| 46 | + set(version_var ${${cgal_3rdparty_lib_upper}_VERSION_STRING}) |
| 47 | + elseif(${cgal_3rdparty_lib} STREQUAL "GMP") |
| 48 | + set(version_var "") |
| 49 | + get_library_version("${GMP_INCLUDE_DIR}/gmp.h" "__GNU_MP_VERSION" "__GNU_MP_VERSION_MINOR" "__GNU_MP_VERSION_PATCHLEVEL" version_var) |
| 50 | + if(NOT version_var) |
| 51 | + file(READ "${GMP_INCLUDE_DIR}/gmp.h" GMP_HEADER_CONTENT) |
| 52 | + string(REGEX MATCHALL "#include[ \t]+\"([^\"]+)\"" INCLUDED_HEADERS "${GMP_HEADER_CONTENT}") |
| 53 | + foreach(INCLUDED_HEADER ${INCLUDED_HEADERS}) |
| 54 | + string(REGEX REPLACE "#include[ \t]+\"([^\"]+)\"" "\\1" GMP_ARCH_HEADER "${INCLUDED_HEADER}") |
| 55 | + set(GMP_ARCH_HEADER_PATH "${GMP_INCLUDE_DIR}/${GMP_ARCH_HEADER}") |
| 56 | + if(EXISTS ${GMP_ARCH_HEADER_PATH}) |
| 57 | + get_library_version("${GMP_ARCH_HEADER_PATH}" "__GNU_MP_VERSION" "__GNU_MP_VERSION_MINOR" "__GNU_MP_VERSION_PATCHLEVEL" version_var) |
| 58 | + if(version_var) |
| 59 | + break() |
| 60 | + endif() |
| 61 | + endif() |
| 62 | + endforeach() |
| 63 | + endif() |
| 64 | + elseif(${cgal_3rdparty_lib} STREQUAL "GLPK") |
| 65 | + get_library_version("${GLPK_INCLUDE_DIR}/glpk.h" "GLP_MAJOR_VERSION" "GLP_MINOR_VERSION" "" version_var) |
| 66 | + elseif(${cgal_3rdparty_lib} STREQUAL "MPFR") |
| 67 | + get_library_version("${MPFR_INCLUDE_DIR}/mpfr.h" "MPFR_VERSION_MAJOR" "MPFR_VERSION_MINOR" "MPFR_VERSION_PATCHLEVEL" version_var) |
| 68 | + elseif(${cgal_3rdparty_lib} STREQUAL "METIS") |
| 69 | + get_library_version("${METIS_INCLUDE_DIR}/metis.h" "METIS_VER_MAJOR" "METIS_VER_MINOR" "METIS_VER_SUBMINOR" version_var) |
| 70 | + elseif(${cgal_3rdparty_lib} STREQUAL "SuiteSparse") |
| 71 | + get_library_version("${SuiteSparse_Config_INCLUDE_DIR}/SuiteSparse_config.h" "SUITESPARSE_MAIN_VERSION" "SUITESPARSE_SUB_VERSION" "SUITESPARSE_SUBSUB_VERSION" version_var) |
| 72 | + elseif(${cgal_3rdparty_lib} STREQUAL "LASLIB") |
| 73 | + get_library_version("${LASLIB_INCLUDE_DIR}/lasdefinitions.hpp" "LAS_TOOLS_VERSION" "" "" version_var) |
| 74 | + elseif(${cgal_3rdparty_lib} STREQUAL "ITT") |
| 75 | + get_library_version("${ITT_INCLUDE_DIR}/ittnotify.h" "ITT_MAJOR" "ITT_MINOR" "" version_var) |
| 76 | + elseif(${cgal_3rdparty_lib} STREQUAL "OpenMesh") |
| 77 | + if (TARGET OpenMeshCore) |
| 78 | + get_target_property(OpenMesh_INCLUDE_DIRS OpenMeshCore INTERFACE_INCLUDE_DIRECTORIES) |
| 79 | + set(CONFIG_FILE_PATH "${OpenMesh_INCLUDE_DIRS}/OpenMesh/Core/System/config.h") |
| 80 | + if(EXISTS ${CONFIG_FILE_PATH}) |
| 81 | + file(READ ${CONFIG_FILE_PATH} CONFIG_CONTENT) |
| 82 | + if("${CONFIG_CONTENT}" MATCHES "#define[ \t]+OM_VERSION[ \t]+(0x[0-9A-F]+)") |
| 83 | + set(VERSION_HEX ${CMAKE_MATCH_1}) |
| 84 | + math(EXPR VERSION_MAJOR "(${VERSION_HEX} & 0xF0000) >> 16") |
| 85 | + math(EXPR VERSION_MINOR "(${VERSION_HEX} & 0x0FF00) >> 8") |
| 86 | + math(EXPR VERSION_PATCH "(${VERSION_HEX} & 0x000FF)") |
| 87 | + set(version_var "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") |
| 88 | + endif() |
| 89 | + endif() |
| 90 | + endif() |
| 91 | + endif() |
| 92 | + if(version_var) |
| 93 | + message(STATUS "Third-party library ${cgal_3rdparty_lib} ${version_var}") |
| 94 | + else() |
| 95 | + message(STATUS "Third-party library ${cgal_3rdparty_lib} found") |
| 96 | + endif() |
| 97 | + else() |
| 98 | + message(STATUS "Third-party library ${cgal_3rdparty_lib} not found") |
| 99 | + endif() |
| 100 | +endfunction() |
| 101 | + |
| 102 | +foreach(cgal_3rdparty_lib IN LISTS LIBRARIES_TO_CHECK) |
| 103 | + check_library(${cgal_3rdparty_lib}) |
| 104 | +endforeach() |
0 commit comments