Skip to content

Commit 0c424f7

Browse files
a-michelisYouw
andauthored
Add usb-1.0 targets export package (#34)
Add generation of `libusb-config-version.cmake` and `usb-1.0-targets.cmake`. A first step before `libusb-config.cmake` is done and can be used as proper CMake package. --------- Co-authored-by: Ihor Dutchak <[email protected]>
1 parent 84400ed commit 0c424f7

File tree

1 file changed

+50
-5
lines changed

1 file changed

+50
-5
lines changed

CMakeLists.txt

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ else()
9393
set(LIBUSB_BUILD_SHARED_LIBS_DEFAULT OFF)
9494
endif()
9595

96+
include(CMakeDependentOption)
97+
9698
option(LIBUSB_BUILD_SHARED_LIBS "Build Shared Libraries for libusb" ${LIBUSB_BUILD_SHARED_LIBS_DEFAULT})
9799
option(LIBUSB_BUILD_TESTING "Build Tests" OFF)
98100
if(LIBUSB_BUILD_TESTING)
@@ -102,6 +104,8 @@ endif()
102104
option(LIBUSB_BUILD_EXAMPLES "Build Example Applications" OFF)
103105

104106
option(LIBUSB_INSTALL_TARGETS "Install libusb targets" ON)
107+
cmake_dependent_option(LIBUSB_EXPORT_INSTALL_TARGETS "Generate export files for installed targets" ON LIBUSB_INSTALL_TARGETS OFF)
108+
105109
option(LIBUSB_TARGETS_INCLUDE_USING_SYSTEM "Make targets include paths System" ON)
106110

107111
option(LIBUSB_ENABLE_LOGGING "Enable Logging" ON)
@@ -114,9 +118,20 @@ if(WIN32)
114118
option(LIBUSB_ENABLE_WINDOWS_HOTPLUG "Enable Windows hotplug support" OFF)
115119
endif()
116120

121+
#
122+
123+
if(LIBUSB_INSTALL_TARGETS)
124+
# to make sure all variables, like CMAKE_INSTALL_LIBDIR, are initialized
125+
include(GNUInstallDirs)
126+
endif()
127+
117128
set(LIBUSB_GEN_INCLUDES "${CMAKE_CURRENT_BINARY_DIR}/gen_include")
118129
generate_config_file()
119130

131+
#
132+
#
133+
#
134+
120135
if(LIBUSB_BUILD_SHARED_LIBS)
121136
add_library(usb-1.0 SHARED)
122137
else()
@@ -147,12 +162,18 @@ target_include_directories(usb-1.0
147162
"${LIBUSB_ROOT}/os"
148163
)
149164

150-
if (LIBUSB_TARGETS_INCLUDE_USING_SYSTEM)
151-
target_include_directories(usb-1.0 SYSTEM PUBLIC "${LIBUSB_ROOT}")
165+
if(LIBUSB_TARGETS_INCLUDE_USING_SYSTEM)
166+
set(LIBUSB_SYSTEM_FLAGS SYSTEM)
152167
else()
153-
target_include_directories(usb-1.0 PUBLIC "${LIBUSB_ROOT}")
168+
set(LIBUSB_SYSTEM_FLAGS)
154169
endif()
155170

171+
target_include_directories(usb-1.0
172+
${LIBUSB_SYSTEM_FLAGS} PUBLIC
173+
$<BUILD_INTERFACE:${LIBUSB_ROOT}>
174+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libusb-1.0>
175+
)
176+
156177
if(WIN32)
157178
target_sources(usb-1.0 PRIVATE
158179
"${LIBUSB_ROOT}/libusb-1.0.def"
@@ -248,6 +269,30 @@ if(LIBUSB_BUILD_EXAMPLES)
248269
endif()
249270

250271
if(LIBUSB_INSTALL_TARGETS)
251-
install(TARGETS usb-1.0)
252-
install(FILES "${LIBUSB_ROOT}/libusb.h" DESTINATION "include/libusb-1.0")
272+
install(FILES "${LIBUSB_ROOT}/libusb.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/libusb-1.0")
273+
274+
install(TARGETS usb-1.0
275+
EXPORT usb-1.0-targets
276+
)
277+
278+
if(LIBUSB_EXPORT_INSTALL_TARGETS)
279+
install(EXPORT usb-1.0-targets
280+
FILE usb-1.0-targets.cmake
281+
NAMESPACE libusb::
282+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libusb"
283+
)
284+
285+
include(CMakePackageConfigHelpers)
286+
287+
write_basic_package_version_file(
288+
"${CMAKE_CURRENT_BINARY_DIR}/libusb-config-version.cmake"
289+
VERSION ${LIBUSB_VERSION}
290+
COMPATIBILITY SameMajorVersion
291+
)
292+
293+
install(FILES
294+
"${CMAKE_CURRENT_BINARY_DIR}/libusb-config-version.cmake"
295+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libusb"
296+
)
297+
endif()
253298
endif()

0 commit comments

Comments
 (0)