Skip to content

Commit 3a12649

Browse files
authored
[C/C++] Install a CMake package configuration file (#1529)
# Description @swift-nav/algint-team Install a CMake package configuration file. This change permits downstream users configuring with CMake to include the SBP C bindings in their project as follows. ```cmake find_package(libsbp CONFIG REQUIRED) target_link_libraries(my_target PRIVATE swiftnav::sbp) ``` Currently, those same consumers need to create a custom `Findlibsbp.cmake` find module script. # API compatibility Does this change introduce a API compatibility risk? No. This change simply adds to the installed files. The previous `sbp-export` target build tree export is preserved. ## API compatibility plan N/A # JIRA Reference N/A However, resolves #1528.
1 parent f14bf2d commit 3a12649

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed

c/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake" "${CMAKE_CURRENT_LIST_DI
55
option(I_KNOW_WHAT_I_AM_DOING_AND_HOW_DANGEROUS_IT_IS__LIBSBP_DISABLE_CRC_VALIDATION "Disable all CRC validation in Libsbp" OFF)
66
set(SWIFT_CXX_STANDARD 17 CACHE STRING "Default C++ version for all swift targets")
77

8+
include(CMakePackageConfigHelpers)
89
include(GNUInstallDirs)
910
include(CCache)
1011
include(SwiftCmakeOptions)

c/src/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,26 @@ install(
7878
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
7979
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
8080
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
81+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
8182
)
8283
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/libsbp/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsbp)
8384

8485
export(EXPORT sbp-export
8586
NAMESPACE swiftnav::
8687
FILE ${PROJECT_BINARY_DIR}/LibSbpImport.cmake)
88+
89+
install(
90+
EXPORT sbp-export
91+
DESTINATION ${CMAKE_INSTALL_DATADIR}/libsbp/cmake
92+
NAMESPACE swiftnav::
93+
)
94+
95+
configure_package_config_file(
96+
${CMAKE_CURRENT_SOURCE_DIR}/libsbpConfig.cmake.in
97+
libsbpConfig.cmake
98+
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}
99+
)
100+
install(
101+
FILES "${CMAKE_CURRENT_BINARY_DIR}/libsbpConfig.cmake"
102+
DESTINATION ${CMAKE_INSTALL_DATADIR}/libsbp/cmake
103+
)

c/src/libsbpConfig.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/sbp-export.cmake")

c/test_package/CMakeLists.txt

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,14 @@ if (NOT EXISTS ${SBP_FILE} OR NOT IS_ABSOLUTE ${SBP_FILE})
77
message(FATAL_ERROR "SBP_FILE variable (\"${SBP_FILE}\") needs to point to an absolute valid SBP file")
88
endif()
99

10-
find_library(SBP_LIBRARY sbp)
11-
if (NOT SBP_LIBRARY)
12-
message(FATAL_ERROR "SBP library was not found")
13-
endif()
14-
15-
find_path(SBP_INCLUDE_DIRS libsbp)
16-
if (NOT SBP_INCLUDE_DIRS)
17-
message(FATAL_ERROR "SBP header folder was not found")
18-
endif()
10+
find_package(libsbp CONFIG REQUIRED)
1911

2012
add_executable(libsbp_c api.c)
2113
target_compile_features(libsbp_c PRIVATE c_std_11)
22-
target_link_libraries(libsbp_c PRIVATE ${SBP_LIBRARY})
23-
target_include_directories(libsbp_c PRIVATE ${SBP_INCLUDE_DIRS})
14+
target_link_libraries(libsbp_c PRIVATE swiftnav::sbp)
2415
target_compile_definitions(libsbp_c PRIVATE SBP_FILE="${SBP_FILE}")
2516

2617
add_executable(libsbp_cxx api.cc)
2718
target_compile_features(libsbp_cxx PRIVATE cxx_std_14)
28-
target_link_libraries(libsbp_cxx PRIVATE ${SBP_LIBRARY})
29-
target_include_directories(libsbp_cxx PRIVATE ${SBP_INCLUDE_DIRS})
19+
target_link_libraries(libsbp_cxx PRIVATE swiftnav::sbp)
3020
target_compile_definitions(libsbp_cxx PRIVATE SBP_FILE="${SBP_FILE}")

0 commit comments

Comments
 (0)