From 1a617220a286c23ecac1ad7bd6aca0d2c68bd1f3 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 19 Sep 2025 08:43:18 +0200 Subject: [PATCH 1/8] CMake: allow system vcglib --- src/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0398e8566..839a515be 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -75,7 +75,12 @@ endif() ### Enter subdirectories # VCGLib -- required -if (VCGDIR) # VCGDIR exists - using custom user vcglib path +find_package(vcglib CONFIG) +if(TARGET vcglib::vcglib) + message(STATUS "- VCGLib - using system provided library") + add_library(vcglib ALIAS vcglib::vcglib) + get_target_property(VCGDIR vcglib::vcglib INTERFACE_INCLUDE_DIRECTORIES) +elseif (VCGDIR) # VCGDIR exists - using custom user vcglib path if(EXISTS ${VCGDIR}) add_subdirectory(${VCGDIR} {CMAKE_CURRENT_BINARY_DIR}/vcglib) message(STATUS "- VCGLib - using custom VCGDIR path library") From 73debae9b9ca14554c25fa58480969bc7c3f61d1 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Tue, 16 Sep 2025 12:44:12 +0200 Subject: [PATCH 2/8] CMake: MESHLAB_ALLOW_SYSTEM_LEVMAR --- src/external/levmar.cmake | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/external/levmar.cmake b/src/external/levmar.cmake index cc639f09e..882b631db 100644 --- a/src/external/levmar.cmake +++ b/src/external/levmar.cmake @@ -3,8 +3,25 @@ # SPDX-License-Identifier: BSL-1.0 option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR "Allow download and use of levmar source" ON) +option(MESHLAB_ALLOW_SYSTEM_LEVMAR "Allow use of system-provided levmar" ON) -if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR) +find_path(levmar_INCLUDE_DIR NAMES levmar.h PATHS ${levmar_PREFIX}) +find_library(levmar_LIBRARY NAMES levmar PATHS ${levmar_PREFIX}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + levmar + DEFAULT_MSG + levmar_LIBRARY + levmar_INCLUDE_DIR +) +mark_as_advanced(levmar_INCLUDE_DIR levmar_LIBRARY) + +if(MESHLAB_ALLOW_SYSTEM_LEVMAR AND levmar_FOUND) + message(STATUS "- levmar - using system-provided library") + add_library(external-levmar INTERFACE) + target_link_libraries(external-levmar INTERFACE ${levmar_LIBRARY}) + target_include_directories(external-levmar INTERFACE ${levmar_INCLUDE_DIR}) +elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR) set(LEVMAR_VERSION "2.6.1") set(LEVMAR_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/levmar-${LEVMAR_VERSION}") From 161d5dabad4cfdc3ec08d9e5dd2ee6c94b057c5c Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Tue, 16 Sep 2025 15:15:11 +0200 Subject: [PATCH 3/8] CMake: MESHLAB_ALLOW_SYSTEM_LIB3MF --- src/external/lib3mf.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/external/lib3mf.cmake b/src/external/lib3mf.cmake index 1cd1b5dfa..f64a63aa5 100644 --- a/src/external/lib3mf.cmake +++ b/src/external/lib3mf.cmake @@ -22,8 +22,15 @@ ############################################################################# option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF "Allow download and use of lib3MF source" ON) +option(MESHLAB_ALLOW_SYSTEM_LIB3MF "Allow use of system-provided lib3MF" ON) -if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF) +find_package(lib3mf) + +if(MESHLAB_ALLOW_SYSTEM_LIB3MF AND TARGET lib3mf::lib3mf) + message(STATUS "- Lib3MF - using system-provided library") + add_library(external-lib3mf INTERFACE) + target_link_libraries(external-lib3mf INTERFACE lib3mf::lib3mf) +elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF) set(LIB3MF_VERSION "2.4.1") set(LIB3MF_DIR ${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/lib3mf-${LIB3MF_VERSION}) From c6662d486c1f8e5c9c89389abd630d8218b0fcb9 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Tue, 16 Sep 2025 15:42:59 +0200 Subject: [PATCH 4/8] CMake: MESHLAB_ALLOW_SYSTEM_LIBIGL --- src/external/libigl.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/external/libigl.cmake b/src/external/libigl.cmake index 3666f375d..8f84fea4f 100644 --- a/src/external/libigl.cmake +++ b/src/external/libigl.cmake @@ -3,10 +3,17 @@ # SPDX-License-Identifier: BSL-1.0 option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL "Allow download and use of LibIGL source" ON) +option(MESHLAB_ALLOW_SYSTEM_LIBIGL "Allow use of system-provided LibIGL" ON) set(LIBIGL_VER 2.4.0) -if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL) +find_path(libigl_INCLUDE_DIR NAMES igl_inline.h PATH_SUFFIXES igl PATHS ${libigl_PREFIX}) + +if(MESHLAB_ALLOW_SYSTEM_LIBIGL AND libigl_INCLUDE_DIR) + message(STATUS "- LibIGL - using system-provided library") + add_library(external-libigl INTERFACE) + target_include_directories(external-libigl INTERFACE ${libigl_INCLUDE_DIR}) +elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL) set(LIBIGL_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/libigl-${LIBIGL_VER}") set(LIBIGL_CHECK "${LIBIGL_DIR}/include/igl/igl_inline.h") From a26427e32af672d2554d662376f3f258c64941ca Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 19 Sep 2025 08:58:16 +0200 Subject: [PATCH 5/8] CMake: MESHLAB_ALLOW_SYSTEM_NEXUS --- src/external/nexus.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/external/nexus.cmake b/src/external/nexus.cmake index 9fc92f714..1139d11e7 100644 --- a/src/external/nexus.cmake +++ b/src/external/nexus.cmake @@ -3,11 +3,18 @@ # SPDX-License-Identifier: BSL-1.0 option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS "Allow download and use of nexus source" ON) +option(MESHLAB_ALLOW_SYSTEM_NEXUS "Allow use of system-provided nexus and corto" ON) set(CORTO_VER 2025.07) set(NEXUS_VER 2025.05) -if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS) +find_package(nexus CONFIG) + +if(MESHLAB_ALLOW_SYSTEM_NEXUS AND TARGET nexus::nexus) + message(STATUS "- nexus - using system-provided library") + add_library(external-nexus INTERFACE) + target_link_libraries(external-nexus INTERFACE nexus::nexus) +elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS) set(NEXUS_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/nexus-${NEXUS_VER}") set(NEXUS_CHECK "${NEXUS_DIR}/CMakeLists.txt") set(CORTO_DIR "${NEXUS_DIR}/src/corto") From 32be737316181bd84d8beac7cb6b74379965d2fe Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 19 Sep 2025 11:26:36 +0200 Subject: [PATCH 6/8] CMake: install exports --- src/CMakeLists.txt | 21 +++++++++++++++++++++ src/Config.cmake.in | 9 +++++++++ src/common/CMakeLists.txt | 18 ++++++++++++++---- src/meshlabplugins/io_base/CMakeLists.txt | 2 +- 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 src/Config.cmake.in diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 839a515be..c490ea960 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,6 +229,27 @@ endforeach() set(COPIED_FILES) if (NOT MESHLAB_BUILD_ONLY_LIBRARIES) + # headers + install(DIRECTORY common DESTINATION include FILES_MATCHING PATTERN "*.h") + # CMake exports + install(EXPORT meshlabTargets + DESTINATION lib/cmake/meshlab + NAMESPACE meshlab:: + FILE meshlabTargets.cmake + ) + include(CMakePackageConfigHelpers) + # generate the config file that includes the exports + configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" + INSTALL_DESTINATION lib/cmake/vcglib + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" + DESTINATION lib/cmake/meshlab + ) + # shaders set(SHADER_BASE_DIR "${MESHLAB_RESOURCES_DIR}/shaders") file( diff --git a/src/Config.cmake.in b/src/Config.cmake.in new file mode 100644 index 000000000..63ba0ce97 --- /dev/null +++ b/src/Config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(GLEW) +find_dependency(OpenGL) +find_dependency(Qt5 COMPONENTS OpenGL Xml Network) +find_dependency(vcglib) + +include ( "${CMAKE_CURRENT_LIST_DIR}/meshlabTargets.cmake" ) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 0e640fdd4..c74bd579b 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -198,7 +198,8 @@ endif() target_include_directories(meshlab-common PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/..) + $ + $) target_link_libraries( meshlab-common @@ -208,10 +209,19 @@ target_link_libraries( Qt5::Widgets Qt5::Xml Qt5::Network - vcglib - external-glew + PRIVATE external-easyexif ) +if(TARGET vcglib::vcglib) + target_link_libraries(meshlab-common PUBLIC vcglib::vcglib) +else() + target_link_libraries(meshlab-common PUBLIC vcglib) +endif() +if(TARGET GLEW::GLEW) + target_link_libraries(meshlab-common PUBLIC GLEW::GLEW) +else() + target_link_libraries(meshlab-common PUBLIC external-glew) +endif() set_property(TARGET meshlab-common PROPERTY FOLDER Core) @@ -234,4 +244,4 @@ endif() set_target_properties(meshlab-common PROPERTIES INSTALL_RPATH "$ORIGIN") -install(TARGETS meshlab-common DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) +install(TARGETS meshlab-common EXPORT meshlabTargets DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) diff --git a/src/meshlabplugins/io_base/CMakeLists.txt b/src/meshlabplugins/io_base/CMakeLists.txt index 7a3137e63..64504d56d 100644 --- a/src/meshlabplugins/io_base/CMakeLists.txt +++ b/src/meshlabplugins/io_base/CMakeLists.txt @@ -27,4 +27,4 @@ set(SOURCES add_meshlab_plugin(io_base ${SOURCES} ${HEADERS}) -target_link_libraries(io_base PRIVATE OpenGL::GLU) +target_link_libraries(io_base PRIVATE OpenGL::GLU external-easyexif) From 071bbd03933e60e41a6a925c222bb706102b2074 Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Tue, 23 Sep 2025 08:53:26 +0200 Subject: [PATCH 7/8] update vcg submodule --- src/vcglib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vcglib b/src/vcglib index c94ef4e12..bafef0186 160000 --- a/src/vcglib +++ b/src/vcglib @@ -1 +1 @@ -Subproject commit c94ef4e12e9ea3ae986d9af91005be8328d13719 +Subproject commit bafef0186425b397f7f68f40c58ff7b871619c3e From 34957ab7cd8d0b6d4488a91674ca14cfe22df21f Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Tue, 23 Sep 2025 09:40:16 +0200 Subject: [PATCH 8/8] CMake: only export if system dependencies --- src/CMakeLists.txt | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c490ea960..ce68452ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -232,23 +232,25 @@ if (NOT MESHLAB_BUILD_ONLY_LIBRARIES) # headers install(DIRECTORY common DESTINATION include FILES_MATCHING PATTERN "*.h") # CMake exports - install(EXPORT meshlabTargets - DESTINATION lib/cmake/meshlab - NAMESPACE meshlab:: - FILE meshlabTargets.cmake - ) - include(CMakePackageConfigHelpers) - # generate the config file that includes the exports - configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" - INSTALL_DESTINATION lib/cmake/vcglib - NO_SET_AND_CHECK_MACRO - NO_CHECK_REQUIRED_COMPONENTS_MACRO - ) - install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" - DESTINATION lib/cmake/meshlab - ) + if(TARGET vcglib::vcglib AND TARGET GLEW::GLEW) + install(EXPORT meshlabTargets + DESTINATION lib/cmake/meshlab + NAMESPACE meshlab:: + FILE meshlabTargets.cmake + ) + include(CMakePackageConfigHelpers) + # generate the config file that includes the exports + configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" + INSTALL_DESTINATION lib/cmake/vcglib + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" + DESTINATION lib/cmake/meshlab + ) + endif() # shaders set(SHADER_BASE_DIR "${MESHLAB_RESOURCES_DIR}/shaders")