Skip to content

Commit 120460b

Browse files
globberwopspmai
authored andcommitted
#550 Rewrite the whole installation logic
* Fix the cache variables * Copy the headers to the appropriate location in the PROJECT_BINARY_DIR * Rewrite the package config file template * Create proper config, version, and target files using CMakePackageConfigHelpers * Export and install namespaced targets Signed-off-by: Martin Stump <11492152+globberwops@users.noreply.github.com>
1 parent c9b3dd4 commit 120460b

File tree

2 files changed

+46
-30
lines changed

2 files changed

+46
-30
lines changed

CMakeLists.txt

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
3838
endif()
3939

4040
# Offer the user the choice of overriding the installation directories
41-
option(OSI_INSTALL_LIB_DIR "Installation directory for libraries" lib)
42-
option(OSI_INSTALL_INCLUDE_DIR "Installation directory for header files" include)
41+
set(OSI_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
42+
set(OSI_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
4343

4444
if(WIN32 AND NOT CYGWIN)
4545
set(DEF_INSTALL_CMAKE_DIR CMake/${PROJECT_NAME}-${VERSION_MAJOR})
4646
else()
4747
set(DEF_INSTALL_CMAKE_DIR lib/cmake/${PROJECT_NAME}-${VERSION_MAJOR})
4848
endif()
49-
option(OSI_INSTALL_CMAKE_DIR "Installation directory for CMake files" ${DEF_INSTALL_CMAKE_DIR})
49+
set(OSI_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
5050

5151
set(OSI_INSTALL_LIB_DIR ${OSI_INSTALL_LIB_DIR}/osi${VERSION_MAJOR})
5252
set(OSI_INSTALL_INCLUDE_DIR ${OSI_INSTALL_INCLUDE_DIR}/osi${VERSION_MAJOR})
@@ -195,35 +195,52 @@ install(TARGETS ${PROJECT_NAME}
195195
EXPORT ${PROJECT_NAME}_targets
196196
DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)
197197

198-
# Create the open_simulation_interface.cmake and open_simulation_interface-version files
198+
# Copy proto headers to where they are expected by the package config file
199+
add_custom_command(
200+
TARGET ${PROJECT_NAME} POST_BUILD
201+
COMMAND ${CMAKE_COMMAND} -E make_directory
202+
${CMAKE_CURRENT_BINARY_DIR}/${OSI_INSTALL_INCLUDE_DIR}
203+
COMMAND ${CMAKE_COMMAND} -E copy
204+
${PROTO_HEADERS}
205+
${CMAKE_CURRENT_BINARY_DIR}/${OSI_INSTALL_INCLUDE_DIR})
206+
207+
# Create the package config files
208+
include(CMakePackageConfigHelpers)
209+
write_basic_package_version_file(
210+
"${CMAKE_CURRENT_BINARY_DIR}/open_simulation_interface-config-version.cmake"
211+
VERSION ${OPEN_SIMULATION_INTERFACE_VERSION}
212+
COMPATIBILITY SameMajorVersion
213+
)
214+
215+
export(EXPORT ${PROJECT_NAME}_targets
216+
FILE "${CMAKE_CURRENT_BINARY_DIR}/open_simulation_interface-targets.cmake"
217+
NAMESPACE ${PROJECT_NAME}::
218+
)
199219

200-
# ... for the build tree
201-
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
202-
configure_file(open_simulation_interface-config.cmake.in
203-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" @ONLY)
204-
# ... for the install tree
205-
set(CONF_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${OSI_INSTALL_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR})
206-
configure_file(open_simulation_interface-config.cmake.in
207-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/open_simulation_interface-config.cmake" @ONLY)
208-
# ... for both
209-
configure_file(open_simulation_interface-config-version.cmake.in
210-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" @ONLY)
220+
configure_package_config_file(open_simulation_interface-config.cmake.in
221+
"${CMAKE_CURRENT_BINARY_DIR}/open_simulation_interface-config.cmake"
222+
INSTALL_DESTINATION ${OSI_INSTALL_CMAKE_DIR}
223+
PATH_VARS OSI_INSTALL_INCLUDE_DIR
224+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
225+
)
211226

212227
# Install the *cmake files
213228
install(FILES
214-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/open_simulation_interface-config.cmake"
215-
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
216-
DESTINATION "${OSI_INSTALL_CMAKE_DIR}"
217-
COMPONENT dev)
229+
"${CMAKE_CURRENT_BINARY_DIR}/open_simulation_interface-config.cmake"
230+
"${CMAKE_CURRENT_BINARY_DIR}/open_simulation_interface-config-version.cmake"
231+
DESTINATION "${OSI_INSTALL_CMAKE_DIR}"
232+
COMPONENT dev)
218233

219234
# Header files
220235
install(FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
221236
DESTINATION "${OSI_INSTALL_INCLUDE_DIR}")
222237

223238
# Install the export set for use with the install-tree
224239
install(EXPORT ${PROJECT_NAME}_targets
225-
DESTINATION "${OSI_INSTALL_CMAKE_DIR}"
226-
COMPONENT dev)
240+
FILE open_simulation_interface-targets.cmake
241+
NAMESPACE ${PROJECT_NAME}::
242+
DESTINATION "${OSI_INSTALL_CMAKE_DIR}"
243+
COMPONENT dev)
227244

228245
# add a target to generate API documentation with Doxygen
229246
# Dependencies: Doxygen and proto2cpp.py
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
# Compute paths
2-
get_filename_component(OPEN_SIMULATION_INTERFACE_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
3-
set(OPEN_SIMULATION_INTERFACE_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
1+
@PACKAGE_INIT@
42

5-
# Our library dependencies (contains definitions for IMPORTED targets)
6-
if(NOT TARGET OPEN_SIMULATION_INTERFACE AND NOT OPEN_SIMULATION_INTERFACE_BINARY_DIR)
7-
include("${OPEN_SIMULATION_INTERFACE_CMAKE_DIR}/open_simulation_interface_targets.cmake")
8-
endif()
3+
include(CMakeFindDependencyMacro)
4+
find_dependency(Protobuf)
95

10-
# These are IMPORTED targets created by open_simulation_interface_targets.cmake
11-
set(OPEN_SIMULATION_INTERFACE_LIBRARIES open_simulation_interface)
6+
if(NOT TARGET @PROJECT_NAME@ AND NOT @PROJECT_NAME@_BINARY_DIR)
7+
set_and_check(OPEN_SIMULATION_INTERFACE_INCLUDE_DIRS "@PACKAGE_OSI_INSTALL_INCLUDE_DIR@")
8+
set(OPEN_SIMULATION_INTERFACE_LIBRARIES "@PROJECT_NAME@")
9+
include("${CMAKE_CURRENT_LIST_DIR}/open_simulation_interface_targets.cmake")
10+
endif()

0 commit comments

Comments
 (0)