From 10469239e9c620c3626b75a09e500a5909004e44 Mon Sep 17 00:00:00 2001 From: Ihor Dutchak Date: Mon, 27 Jul 2020 15:10:17 +0300 Subject: [PATCH] handle static lib build exports --- libusb/CMakeLists.txt | 5 +++-- linux/CMakeLists.txt | 5 +++-- mac/CMakeLists.txt | 2 +- src/CMakeLists.txt | 15 +++++++++++++++ src/cmake/hidapi-config.cmake.in | 24 ++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/libusb/CMakeLists.txt b/libusb/CMakeLists.txt index 6cbcebb..c2deb70 100644 --- a/libusb/CMakeLists.txt +++ b/libusb/CMakeLists.txt @@ -6,10 +6,11 @@ add_library(hidapi_libusb ) target_link_libraries(hidapi_libusb PUBLIC hidapi_include) -include(FindPkgConfig) -include(FindThreads) +find_package(Threads REQUIRED) +include(FindPkgConfig) pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0>=1.0.9) + target_link_libraries(hidapi_libusb PRIVATE PkgConfig::libusb Threads::Threads) set(HIDAPI_LIBNAME "hidapi") diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index a2a251a..e547576 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -6,10 +6,11 @@ add_library(hidapi_hidraw ) target_link_libraries(hidapi_hidraw PUBLIC hidapi_include) -include(FindPkgConfig) -include(FindThreads) +find_package(Threads REQUIRED) +include(FindPkgConfig) pkg_check_modules(libudev REQUIRED IMPORTED_TARGET libudev) + target_link_libraries(hidapi_hidraw PRIVATE PkgConfig::libudev Threads::Threads) set_target_properties(hidapi_hidraw diff --git a/mac/CMakeLists.txt b/mac/CMakeLists.txt index d032653..9dc0f6c 100644 --- a/mac/CMakeLists.txt +++ b/mac/CMakeLists.txt @@ -5,7 +5,7 @@ add_library(hidapi_darwin hid.c ) -include(FindThreads) +find_package(Threads REQUIRED) target_link_libraries(hidapi_darwin PUBLIC hidapi_include diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 44bf64b..1566ed5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,6 +66,10 @@ endif() set(EXPORT_ALIAS) set(EXPORT_COMPONENTS) +set(HIDAPI_NEED_EXPORT_THREADS FALSE) +set(HIDAPI_NEED_EXPORT_LIBUSB FALSE) +set(HIDAPI_NEED_EXPORT_LIBUDEV FALSE) + if(WIN32) add_subdirectory("${PROJECT_ROOT}/windows" windows) set(EXPORT_ALIAS winapi) @@ -74,6 +78,9 @@ elseif(APPLE) add_subdirectory("${PROJECT_ROOT}/mac" mac) set(EXPORT_ALIAS darwin) list(APPEND EXPORT_COMPONENTS darwin) + if(NOT BUILD_SHARED_LIBS) + set(HIDAPI_NEED_EXPORT_THREADS TRUE) + endif() else() if(NOT DEFINED HIDAPI_WITH_LIBUSB) set(HIDAPI_WITH_LIBUSB ON) @@ -85,6 +92,10 @@ else() if(NOT HIDAPI_WITH_LIBUSB) set(EXPORT_ALIAS hidraw) endif() + if(NOT BUILD_SHARED_LIBS) + set(HIDAPI_NEED_EXPORT_THREADS TRUE) + set(HIDAPI_NEED_EXPORT_LIBUDEV TRUE) + endif() endif() set(HIDAPI_LIBNAME_VERBOSE ON) else() @@ -95,6 +106,10 @@ else() add_subdirectory("${PROJECT_ROOT}/libusb" libusb) list(APPEND EXPORT_COMPONENTS libusb) set(EXPORT_ALIAS libusb) + if(NOT BUILD_SHARED_LIBS) + set(HIDAPI_NEED_EXPORT_THREADS TRUE) + set(HIDAPI_NEED_EXPORT_LIBUSB TRUE) + endif() elseif(NOT TARGET hidapi_hidraw) message(FATAL_ERROR "Select at least one option to build: HIDAPI_WITH_LIBUSB or HIDAPI_WITH_HIDRAW") endif() diff --git a/src/cmake/hidapi-config.cmake.in b/src/cmake/hidapi-config.cmake.in index fab14cc..91ba3ba 100644 --- a/src/cmake/hidapi-config.cmake.in +++ b/src/cmake/hidapi-config.cmake.in @@ -8,6 +8,30 @@ set(hidapi_VERSION_STR "@hidapi_VERSION@@VERSION_SUFFIX@") set(hidapi_FOUND FALSE) +set(HIDAPI_NEED_EXPORT_THREADS @HIDAPI_NEED_EXPORT_THREADS@) +set(HIDAPI_NEED_EXPORT_LIBUSB @HIDAPI_NEED_EXPORT_LIBUSB@) +set(HIDAPI_NEED_EXPORT_LIBUDEV @HIDAPI_NEED_EXPORT_LIBUDEV@) + +if(HIDAPI_NEED_EXPORT_THREADS) + if(CMAKE_VERSION VERSION_LESS 3.4.3) + message(FATAL_ERROR "This file relies on consumers using CMake 3.4.3 or greater.") + endif() + find_package(Threads REQUIRED) +endif() + +if(HIDAPI_NEED_EXPORT_LIBUSB OR HIDAPI_NEED_EXPORT_LIBUDEV) + if(CMAKE_VERSION VERSION_LESS 3.6.3) + message(FATAL_ERROR "This file relies on consumers using CMake 3.6.3 or greater.") + endif() + include(FindPkgConfig) + if(HIDAPI_NEED_EXPORT_LIBUSB) + pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0>=1.0.9) + endif() + if(HIDAPI_NEED_EXPORT_LIBUDEV) + pkg_check_modules(libudev REQUIRED IMPORTED_TARGET libudev) + endif() +endif() + include("${CMAKE_CURRENT_LIST_DIR}/hidapi.cmake") set(hidapi_FOUND TRUE)