Skip to content

Commit 2be2e30

Browse files
authored
TestSuite: List of third-party libraries (#8254)
## Summary of Changes This PR adds a table in the Summary page which lists third-party libraries for all platforms. This table can be sorted by clicking on the top cells. In this table you can also click on a third-party library to display a modal which lists all the versions and platforms of this library (This modal is also sortable). A change also in the creation of this Summary page, the Javascript part is now in a separate .js file. The generation of JSON has also been revised. For a preview of what this task will look like, [click here.](https://cgal.geometryfactory.com/~nsaillant/tpltestsuite/TESTRESULTS/summary-6.0-Ic-326.html) This PR needs this one [ CGAL/cgal-testsuite-docker#159](CGAL/cgal-testsuite-dockerfiles#159) ```[tasklist] ### Libraries and Their Status: - [x] **Eigen3** - [x] **Qt6** - [x] **TBB** - [x] **OpenMesh** - [x] **Boost** - [x] **GMP** - [x] **SuiteSparse** - [x] **MPFI** - [x] **METIS** - [x] **VTK** - [x] **SCIP** - [ ] **OSQP** - [x] **LASLIB** - [x] **GLPK** - [x] **ITT** - [x] **Ceres** - [x] **MPFR** - [x] **libpointmatcher** - [x] **ITK** - [x] **OpenGR** - [x] **OpenCV** - [x] **ZLIB** ``` ## Release Management * Issue(s) solved (if any): #8250
2 parents 418b00e + 885c906 commit 2be2e30

File tree

8 files changed

+769
-337
lines changed

8 files changed

+769
-337
lines changed

Installation/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,11 @@ if(CMAKE_COMPILER_IS_GNUCXX)
480480

481481
endif()
482482

483-
message("== Generate version files (DONE) ==\n")
483+
if(CGAL_TEST_SUITE)
484+
include(display-third-party-libs-versions)
485+
endif()
484486

487+
message("== Generate version files (DONE) ==\n")
485488
#--------------------------------------------------------------------------------------------------
486489
#
487490
# -= External libraries =-
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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

Comments
 (0)