From 9fdd1133895d33a37a41e428b6eb781ac11439de Mon Sep 17 00:00:00 2001 From: Alexy Pellegrini Date: Fri, 30 Jan 2026 15:57:37 +0100 Subject: [PATCH 1/2] COMP: Only search for Python3 Development.Module component --- CMake/vtkMacroKitPythonWrap.cmake | 5 ---- CMake/vtkWrapPython.cmake | 43 +------------------------------ 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/CMake/vtkMacroKitPythonWrap.cmake b/CMake/vtkMacroKitPythonWrap.cmake index 9101d2f..3d03454 100644 --- a/CMake/vtkMacroKitPythonWrap.cmake +++ b/CMake/vtkMacroKitPythonWrap.cmake @@ -159,9 +159,6 @@ macro(vtkMacroKitPythonWrap) endif() if(VTK_WRAP_PYTHON AND BUILD_SHARED_LIBS) - - # Tell vtkWrapPython.cmake to set VTK_Python3_LIBRARIES for us. - set(VTK_WRAP_PYTHON_FIND_LIBS 1) include(vtkWrapPython) set(TMP_WRAP_FILES ${MY_KIT_SRCS} ${MY_KIT_WRAP_HEADERS}) @@ -283,7 +280,6 @@ macro(vtkMacroKitPythonWrap) ${MY_KIT_NAME}PythonD ${MY_KIT_NAME} ${VTK_PYTHON_CORE} - ${VTK_Python3_LIBRARIES} ${VTK_KIT_PYTHON_LIBRARIES} ${MY_KIT_PYTHON_LIBRARIES} ) @@ -344,7 +340,6 @@ macro(vtkMacroKitPythonWrap) target_link_libraries(${MY_KIT_NAME}Python PRIVATE ${MY_KIT_NAME} - ${VTK_Python3_LIBRARIES} VTK::WrappingPythonCore VTK::Python ) diff --git a/CMake/vtkWrapPython.cmake b/CMake/vtkWrapPython.cmake index 50143e1..5eeb218 100644 --- a/CMake/vtkWrapPython.cmake +++ b/CMake/vtkWrapPython.cmake @@ -183,48 +183,7 @@ $<$>: endmacro() if(VTK_WRAP_PYTHON_FIND_LIBS) - get_filename_component(_CURRENT_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) - if (VTK_UNDEFINED_SYMBOLS_ALLOWED) - set(_QUIET_LIBRARY "QUIET") - else() - set(_QUIET_LIBRARY "REQUIRED") - endif() - find_package(Python3 COMPONENTS Development ${_QUIET_LIBRARY}) - - # Use separate debug/optimized libraries if they are different. - if(PYTHON_DEBUG_LIBRARY) - if("${PYTHON_DEBUG_LIBRARY}" STREQUAL "${PYTHON_LIBRARY}") - set(VTK_Python3_LIBRARIES ${PYTHON_LIBRARY}) - else() - set(VTK_Python3_LIBRARIES - optimized ${PYTHON_LIBRARY} - debug ${PYTHON_DEBUG_LIBRARY}) - endif() - set(VTK_WINDOWS_PYTHON_DEBUGGABLE 0) - if(WIN32) - if(PYTHON_DEBUG_LIBRARY MATCHES "_d") - set(VTK_WINDOWS_PYTHON_DEBUGGABLE 1) - endif() - endif() - else() - set(VTK_Python3_LIBRARIES ${PYTHON_LIBRARY}) - endif() - - # Some python installations on UNIX need to link to extra libraries - # such as zlib (-lz). It is hard to automatically detect the needed - # libraries so instead just give the user an easy way to specify - # the libraries. This should be needed only rarely. It should - # also be moved to the CMake FindPython.cmake module at some point. - if(UNIX) - if(NOT DEFINED PYTHON_EXTRA_LIBS) - set(PYTHON_EXTRA_LIBS "" CACHE STRING - "Extra libraries to link when linking to python (such as \"z\" for zlib). Separate multiple libraries with semicolons.") - mark_as_advanced(PYTHON_EXTRA_LIBS) - endif() - endif() - - # Include any extra libraries for python. - set(VTK_Python3_LIBRARIES ${VTK_Python3_LIBRARIES} ${PYTHON_EXTRA_LIBS}) + find_package(Python3 COMPONENTS Development.Module REQUIRED) endif() # Determine the location of the supplied header in the include_dirs supplied. From 20244980f6ee8c1cba2bc67943e773af10d8af7d Mon Sep 17 00:00:00 2001 From: Alexy Pellegrini Date: Mon, 2 Feb 2026 14:30:21 +0100 Subject: [PATCH 2/2] COMP: Enable vtkAddon to generate a relocatable install tree vtkAddon install tree used to contain absolute paths, miss headers and do not have all needed usage requirements. This refactor most of the install code, it still requires vtkAddon_INSTALL_NO_DEVELOPMENT=OFF to have the dev files to be installed: cmake export files and headers. --- CMakeLists.txt | 118 +++++++++++++++++++-------------- vtkAddonInstallConfig.cmake.in | 14 ++-- 2 files changed, 79 insertions(+), 53 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92349a4..b1b900f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,20 @@ include(vtkAddonFunctionAddExecutable) # # VTK # -find_package(VTK REQUIRED) +set(vtkAddon_VTK_COMPONENTS + CommonComputationalGeometry + FiltersModeling + FiltersHybrid + FiltersSources + ImagingGeneral + RenderingOpenGL2 + RenderingVolumeOpenGL2 + eigen +) +if(vtkAddon_WRAP_PYTHON) + list(APPEND vtkAddon_VTK_COMPONENTS Python) +endif() +find_package(VTK REQUIRED COMPONENTS ${vtkAddon_VTK_COMPONENTS}) if(${VTK_VERSION} VERSION_LESS "8.90") include(${VTK_USE_FILE}) endif() @@ -59,35 +72,14 @@ configure_file( ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file} ) -# -------------------------------------------------------------------------- -# Install headers -# -------------------------------------------------------------------------- - -if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) - set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON) -endif() - -if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) - - if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR) - set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME}) - endif() - - file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h") - install( - FILES ${headers} ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file} - DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) - - file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.txx") - install( - FILES ${headers} ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file} - DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) -endif() - # -------------------------------------------------------------------------- # Sources # -------------------------------------------------------------------------- set(vtkAddon_SRCS + vtkAddon.h + ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file} + vtkAddonExport.h + vtkAddonTestingMacros.h vtkAddonMathUtilities.cxx vtkAddonMathUtilities.h vtkAddonSetGet.h @@ -157,14 +149,6 @@ set_source_files_properties( vtkLoggingMacros.h WRAP_EXCLUDE ) -# -------------------------------------------------------------------------- -# Include dirs -# -------------------------------------------------------------------------- -set(include_dirs - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - ) -include_directories(BEFORE ${include_dirs}) # -------------------------------------------------------------------------- # Build library @@ -175,6 +159,11 @@ set(srcs ${vtkAddon_SRCS}) add_library(${lib_name} ${srcs}) target_link_libraries(${lib_name} ${vtkAddon_LIBS}) +target_include_directories(${lib_name} BEFORE PUBLIC + $ + $ + $ +) # -------------------------------------------------------------------------- # Folder @@ -207,6 +196,7 @@ if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR) endif() install(TARGETS ${lib_name} + EXPORT vtkAddonTargets RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries LIBRARY DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries ARCHIVE DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT Development @@ -272,28 +262,57 @@ set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BIN configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/vtkAddonConfig.cmake - ) - -# Configuret vtkAddonConfig.cmake for an install tree -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonInstallConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake + @ONLY ) # -------------------------------------------------------------------------- -# Install configuration files +# Install development files # -------------------------------------------------------------------------- -# Set vtkAddon_INSTALL_CMAKE_DIR +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) + set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON) +endif() + +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR) + set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR "include/${PROJECT_NAME}") +endif() + if(NOT DEFINED ${PROJECT_NAME}_INSTALL_CMAKE_DIR) - set(${PROJECT_NAME}_INSTALL_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CMake) + # uses one of find_package universal prefix by default + set(${PROJECT_NAME}_INSTALL_CMAKE_DIR "${PROJECT_NAME}/lib/cmake/${PROJECT_NAME}") endif() -# Install vtkAddonConfig.cmake -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake - DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} - ) +if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) + # Install vtkAddon headers, uses a pattern because they are not explicitly listed + set(vtkAddon_HEADERS ${vtkAddon_SRCS}) + list(FILTER vtkAddon_HEADERS INCLUDE REGEX ".*\\.(h|txx)$") + install( + FILES ${vtkAddon_HEADERS} + DESTINATION "${${PROJECT_NAME}_INSTALL_INCLUDE_DIR}" + COMPONENT Development + ) + + # Configure vtkAddonInstallConfig.cmake for the install tree + include(CMakePackageConfigHelpers) + configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonInstallConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake + INSTALL_DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}" + ) + + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake + DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}" + COMPONENT Development + ) + + install( + EXPORT vtkAddonTargets + FILE ${PROJECT_NAME}Targets.cmake + DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}" + COMPONENT Development + ) +endif() # Install vtkAddon CMake files install( @@ -305,5 +324,6 @@ install( ${CMAKE_SOURCE_DIR}/CMake/vtkWrapperInit.data.in ${CMAKE_SOURCE_DIR}/CMake/vtkWrapPython.cmake ${CMAKE_SOURCE_DIR}/CMake/WindowsApplicationUseUtf8.manifest - DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development + DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}" + COMPONENT Development ) diff --git a/vtkAddonInstallConfig.cmake.in b/vtkAddonInstallConfig.cmake.in index 9a74e03..cde22ae 100644 --- a/vtkAddonInstallConfig.cmake.in +++ b/vtkAddonInstallConfig.cmake.in @@ -1,6 +1,12 @@ -set(vtkAddon_CMAKE_DIR "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_CMAKE_DIR@") -set(vtkAddon_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_INCLUDE_DIR@") -set(vtkAddon_LIB_DIR "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_LIB_DIR@") -set(VTK_DIR "@VTK_DIR@") +# PACKAGE_PREFIX_DIR will be defined by generated code below +@PACKAGE_INIT@ +include("${CMAKE_CURRENT_LIST_DIR}/vtkAddonTargets.cmake") + +include(CMakeFindDependencyMacro) +find_dependency(VTK COMPONENTS @vtkAddon_VTK_COMPONENTS@) set(vtkAddon_USE_UTF8 "@vtkAddon_USE_UTF8@") + +set(vtkAddon_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}") +set(vtkAddon_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@vtkAddon_INSTALL_INCLUDE_DIR@") +set(vtkAddon_LIB_DIR "${PACKAGE_PREFIX_DIR}/@vtkAddon_INSTALL_LIB_DIR@")