diff --git a/cmake/modules/FindLibUSB.cmake b/cmake/modules/FindLibUSB.cmake index df3ef65a3b7..c5362c00f58 100644 --- a/cmake/modules/FindLibUSB.cmake +++ b/cmake/modules/FindLibUSB.cmake @@ -43,6 +43,8 @@ The following cache variables may also be set: #]=======================================================================] +include(IsStaticLibrary) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(PC_LibUSB QUIET libusb-1.0) @@ -87,5 +89,15 @@ if(LibUSB_FOUND) INTERFACE_COMPILE_OPTIONS "${PC_LibUSB_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${LibUSB_INCLUDE_DIR}" ) + + is_static_library(LibUSB_IS_STATIC LibUSB::LibUSB) + if(LibUSB_IS_STATIC) + find_package(Libudev) + if(Libudev_FOUND) + set_property(TARGET LibUSB::LibUSB APPEND PROPERTY INTERFACE_LINK_LIBRARIES + Libudev::Libudev + ) + endif() + endif() endif() endif() diff --git a/cmake/modules/FindLibudev.cmake b/cmake/modules/FindLibudev.cmake new file mode 100644 index 00000000000..7e9dc77c9be --- /dev/null +++ b/cmake/modules/FindLibudev.cmake @@ -0,0 +1,61 @@ +# This file is part of Mixxx, Digital DJ'ing software. +# Copyright (C) 2001-2023 Mixxx Development Team +# Distributed under the GNU General Public Licence (GPL) version 2 or any later +# later version. See the LICENSE file for details. + +#[=======================================================================[.rst: +FindLibudev +-------- + +Finds the libudev (userspace device manager) library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported targets, if found: + +``Libudev::Libudev`` + The libudev library + +#]=======================================================================] + +find_package(PkgConfig QUIET) +if(PkgConfig_FOUND) + pkg_check_modules(PC_Libudev QUIET libudev) +endif() + +find_path(Libudev_INCLUDE_DIR + NAMES libudev.h + PATHS ${PC_Libudev_INCLUDE_DIRS} + DOC "The libudev include directory") +mark_as_advanced(Libudev_INCLUDE_DIR) + +find_library(Libudev_LIBRARY + NAMES udev + PATH ${PC_Libudev_LIBRARY_DIRS} + DOC "The libudev library" +) +mark_as_advanced(Libudev_LIBRARY) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Libudev + REQUIRED_VARS Libudev_LIBRARY Libudev_INCLUDE_DIR + VERSION_VAR Libudev_VERSION +) + +if(Libudev_FOUND) + set(Libudev_LIBRARIES "${Libudev_LIBRARY}") + set(Libudev_INCLUDE_DIRS "${Libudev_INCLUDE_DIR}") + set(Libudev_DEFINITIONS ${PC_Libudev_CFLAGS_OTHER}) + + if(NOT TARGET Libudev::Libudev) + add_library(Libudev::Libudev UNKNOWN IMPORTED) + set_target_properties(Libudev::Libudev + PROPERTIES + IMPORTED_LOCATION "${Libudev_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${PC_Libudev_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Libudev_INCLUDE_DIR}" + ) + endif() +endif() diff --git a/cmake/modules/Findhidapi.cmake b/cmake/modules/Findhidapi.cmake index 8da70f855a4..a4ff5bc4bb7 100644 --- a/cmake/modules/Findhidapi.cmake +++ b/cmake/modules/Findhidapi.cmake @@ -43,6 +43,8 @@ The following cache variables may also be set: #]=======================================================================] +include(IsStaticLibrary) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_search_module(PC_hidapi QUIET hidapi-libusb hidapi) @@ -121,6 +123,23 @@ if(hidapi_FOUND) INTERFACE_COMPILE_OPTIONS "${PC_hidapi_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${hidapi_INCLUDE_DIR}" ) + + find_package(Libudev) + if(Libudev_FOUND) + is_static_library(hidapi_IS_STATIC hidapi::hidapi) + if(hidapi_IS_STATIC) + set_property(TARGET hidapi::hidapi APPEND PROPERTY INTERFACE_LINK_LIBRARIES + Libudev::Libudev + ) + endif() + + is_static_library(hidapi-hidraw_IS_STATIC hidapi::hidraw) + if(hidapi-hidraw_IS_STATIC) + set_property(TARGET hidapi::hidraw APPEND PROPERTY INTERFACE_LINK_LIBRARIES + Libudev::Libudev + ) + endif() + endif() endif() endif() endif()