Skip to content

Commit 36bedfa

Browse files
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.
1 parent 9fdd113 commit 36bedfa

File tree

2 files changed

+78
-53
lines changed

2 files changed

+78
-53
lines changed

CMakeLists.txt

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,20 @@ include(vtkAddonFunctionAddExecutable)
2121
#
2222
# VTK
2323
#
24-
find_package(VTK REQUIRED)
24+
set(vtkAddon_VTK_COMPONENTS
25+
CommonComputationalGeometry
26+
FiltersModeling
27+
FiltersHybrid
28+
FiltersSources
29+
ImagingGeneral
30+
RenderingOpenGL2
31+
RenderingVolumeOpenGL2
32+
eigen
33+
)
34+
if(vtkAddon_WRAP_PYTHON)
35+
list(APPEND vtkAddon_VTK_COMPONENTS Python)
36+
endif()
37+
find_package(VTK REQUIRED COMPONENTS ${vtkAddon_VTK_COMPONENTS})
2538
if(${VTK_VERSION} VERSION_LESS "8.90")
2639
include(${VTK_USE_FILE})
2740
endif()
@@ -59,35 +72,14 @@ configure_file(
5972
${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file}
6073
)
6174

62-
# --------------------------------------------------------------------------
63-
# Install headers
64-
# --------------------------------------------------------------------------
65-
66-
if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT)
67-
set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON)
68-
endif()
69-
70-
if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT)
71-
72-
if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR)
73-
set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME})
74-
endif()
75-
76-
file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
77-
install(
78-
FILES ${headers} ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file}
79-
DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development)
80-
81-
file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.txx")
82-
install(
83-
FILES ${headers} ${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file}
84-
DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development)
85-
endif()
86-
8775
# --------------------------------------------------------------------------
8876
# Sources
8977
# --------------------------------------------------------------------------
9078
set(vtkAddon_SRCS
79+
vtkAddon.h
80+
${CMAKE_CURRENT_BINARY_DIR}/${configure_header_file}
81+
vtkAddonExport.h
82+
vtkAddonTestingMacros.h
9183
vtkAddonMathUtilities.cxx
9284
vtkAddonMathUtilities.h
9385
vtkAddonSetGet.h
@@ -157,14 +149,6 @@ set_source_files_properties(
157149
vtkLoggingMacros.h
158150
WRAP_EXCLUDE
159151
)
160-
# --------------------------------------------------------------------------
161-
# Include dirs
162-
# --------------------------------------------------------------------------
163-
set(include_dirs
164-
${CMAKE_CURRENT_SOURCE_DIR}
165-
${CMAKE_CURRENT_BINARY_DIR}
166-
)
167-
include_directories(BEFORE ${include_dirs})
168152

169153
# --------------------------------------------------------------------------
170154
# Build library
@@ -175,6 +159,11 @@ set(srcs ${vtkAddon_SRCS})
175159
add_library(${lib_name} ${srcs})
176160

177161
target_link_libraries(${lib_name} ${vtkAddon_LIBS})
162+
target_include_directories(${lib_name} BEFORE PUBLIC
163+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
164+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
165+
$<INSTALL_INTERFACE:include>
166+
)
178167

179168
# --------------------------------------------------------------------------
180169
# Folder
@@ -207,6 +196,7 @@ if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR)
207196
endif()
208197

209198
install(TARGETS ${lib_name}
199+
EXPORT vtkAddonTargets
210200
RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries
211201
LIBRARY DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries
212202
ARCHIVE DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT Development
@@ -272,28 +262,56 @@ set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BIN
272262
configure_file(
273263
${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonConfig.cmake.in
274264
${CMAKE_CURRENT_BINARY_DIR}/vtkAddonConfig.cmake
275-
)
276-
277-
# Configuret vtkAddonConfig.cmake for an install tree
278-
configure_file(
279-
${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonInstallConfig.cmake.in
280-
${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake
265+
@ONLY
281266
)
282267

283268
# --------------------------------------------------------------------------
284-
# Install configuration files
269+
# Install development files
285270
# --------------------------------------------------------------------------
286271

287-
# Set vtkAddon_INSTALL_CMAKE_DIR
272+
if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT)
273+
set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON)
274+
endif()
275+
276+
if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR)
277+
set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME})
278+
endif()
279+
288280
if(NOT DEFINED ${PROJECT_NAME}_INSTALL_CMAKE_DIR)
289-
set(${PROJECT_NAME}_INSTALL_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
281+
set(${PROJECT_NAME}_INSTALL_CMAKE_DIR lib/cmake/${PROJECT_NAME})
290282
endif()
291283

292-
# Install vtkAddonConfig.cmake
293-
install(
294-
FILES ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake
295-
DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR}
296-
)
284+
if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT)
285+
# Install vtkAddon headers, uses a pattern because they are not explicitly listed
286+
set(vtkAddon_HEADERS ${vtkAddon_SRCS})
287+
list(FILTER vtkAddon_HEADERS INCLUDE REGEX ".*\\.(h|txx)$")
288+
install(
289+
FILES ${vtkAddon_HEADERS}
290+
DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR}
291+
COMPONENT Development
292+
)
293+
294+
# Configure vtkAddonConfig.cmake for an install tree
295+
include(CMakePackageConfigHelpers)
296+
configure_package_config_file(
297+
${CMAKE_CURRENT_SOURCE_DIR}/vtkAddonInstallConfig.cmake.in
298+
${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake
299+
INSTALL_DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}"
300+
)
301+
302+
install(
303+
FILES ${CMAKE_CURRENT_BINARY_DIR}/install/vtkAddonConfig.cmake
304+
DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}"
305+
COMPONENT Development
306+
)
307+
308+
install(
309+
EXPORT vtkAddonTargets
310+
FILE ${PROJECT_NAME}Targets.cmake
311+
DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}"
312+
COMPONENT Development
313+
)
314+
endif()
297315

298316
# Install vtkAddon CMake files
299317
install(
@@ -305,5 +323,6 @@ install(
305323
${CMAKE_SOURCE_DIR}/CMake/vtkWrapperInit.data.in
306324
${CMAKE_SOURCE_DIR}/CMake/vtkWrapPython.cmake
307325
${CMAKE_SOURCE_DIR}/CMake/WindowsApplicationUseUtf8.manifest
308-
DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development
326+
DESTINATION "${${PROJECT_NAME}_INSTALL_CMAKE_DIR}"
327+
COMPONENT Development
309328
)

vtkAddonInstallConfig.cmake.in

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
set(vtkAddon_CMAKE_DIR "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_CMAKE_DIR@")
2-
set(vtkAddon_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_INCLUDE_DIR@")
3-
set(vtkAddon_LIB_DIR "@CMAKE_INSTALL_PREFIX@/@vtkAddon_INSTALL_LIB_DIR@")
4-
set(VTK_DIR "@VTK_DIR@")
1+
# PACKAGE_PREFIX_DIR will be defined by generated code below
2+
@PACKAGE_INIT@
53

4+
include("${CMAKE_CURRENT_LIST_DIR}/vtkAddonTargets.cmake")
5+
6+
include(CMakeFindDependencyMacro)
7+
find_dependency(VTK COMPONENTS @vtkAddon_VTK_COMPONENTS@)
68
set(vtkAddon_USE_UTF8 "@vtkAddon_USE_UTF8@")
9+
10+
set(vtkAddon_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}")
11+
set(vtkAddon_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@vtkAddon_INSTALL_INCLUDE_DIR@")
12+
set(vtkAddon_LIB_DIR "${PACKAGE_PREFIX_DIR}/@vtkAddon_INSTALL_LIB_DIR@")

0 commit comments

Comments
 (0)