mirror of
https://github.com/RPCS3/hidapi.git
synced 2026-01-31 01:25:21 +01:00
Avoid a message: ``` Compatibility with CMake < 3.5 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. ``` Fixes: #642
108 lines
4.0 KiB
CMake
108 lines
4.0 KiB
CMake
cmake_minimum_required(VERSION 3.6.3...3.25 FATAL_ERROR)
|
|
|
|
list(APPEND HIDAPI_PUBLIC_HEADERS "hidapi_libusb.h")
|
|
|
|
add_library(hidapi_libusb
|
|
${HIDAPI_PUBLIC_HEADERS}
|
|
hid.c
|
|
)
|
|
target_link_libraries(hidapi_libusb PUBLIC hidapi_include)
|
|
|
|
if(TARGET usb-1.0)
|
|
target_link_libraries(hidapi_libusb PRIVATE usb-1.0)
|
|
else()
|
|
include(FindPkgConfig)
|
|
pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0>=1.0.9)
|
|
target_link_libraries(hidapi_libusb PRIVATE PkgConfig::libusb)
|
|
endif()
|
|
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(hidapi_libusb PRIVATE Threads::Threads)
|
|
|
|
if(HIDAPI_NO_ICONV)
|
|
target_compile_definitions(hidapi_libusb PRIVATE NO_ICONV)
|
|
else()
|
|
if(NOT ANDROID)
|
|
include(CheckCSourceCompiles)
|
|
|
|
if(NOT CMAKE_VERSION VERSION_LESS 3.11)
|
|
message(STATUS "Check for Iconv")
|
|
find_package(Iconv)
|
|
if(Iconv_FOUND)
|
|
if(NOT Iconv_IS_BUILT_IN)
|
|
target_link_libraries(hidapi_libusb PRIVATE Iconv::Iconv)
|
|
set(CMAKE_REQUIRED_LIBRARIES "Iconv::Iconv")
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
set(HIDAPI_NEED_EXPORT_ICONV TRUE PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
else()
|
|
message(STATUS "Iconv Explicitly check '-liconv'")
|
|
# Sometime the build environment is not setup
|
|
# in a way CMake can find Iconv on its own by default.
|
|
# But if we simply link against iconv (-liconv), the build may succeed
|
|
# due to other compiler/link flags.
|
|
set(CMAKE_REQUIRED_LIBRARIES "iconv")
|
|
check_c_source_compiles("
|
|
#include <stddef.h>
|
|
#include <iconv.h>
|
|
int main() {
|
|
char *a, *b;
|
|
size_t i, j;
|
|
iconv_t ic;
|
|
ic = iconv_open(\"to\", \"from\");
|
|
iconv(ic, &a, &i, &b, &j);
|
|
iconv_close(ic);
|
|
}
|
|
"
|
|
Iconv_EXPLICITLY_AT_ENV)
|
|
if(Iconv_EXPLICITLY_AT_ENV)
|
|
message(STATUS "Iconv Explicitly check '-liconv' - Available")
|
|
target_link_libraries(hidapi_libusb PRIVATE iconv)
|
|
else()
|
|
message(FATAL_ERROR "Iconv is not found, make sure to provide it in the build environment")
|
|
endif()
|
|
endif()
|
|
else()
|
|
# otherwise there is 2 options:
|
|
# 1) iconv is provided by Standard C library and the build will be just fine
|
|
# 2) The _user_ has to provide additional compilation options for this project/target
|
|
endif()
|
|
|
|
# check for error: "conflicting types for 'iconv'"
|
|
check_c_source_compiles("#include<iconv.h>
|
|
extern size_t iconv (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
|
|
int main() {}"
|
|
HIDAPI_ICONV_CONST)
|
|
if(HIDAPI_ICONV_CONST)
|
|
target_compile_definitions(hidapi_libusb PRIVATE "ICONV_CONST=const")
|
|
endif()
|
|
else()
|
|
# On Android Iconv is disabled on the code level anyway, so no issue;
|
|
endif()
|
|
endif()
|
|
|
|
set_target_properties(hidapi_libusb
|
|
PROPERTIES
|
|
EXPORT_NAME "libusb"
|
|
OUTPUT_NAME "hidapi-libusb"
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION ${PROJECT_VERSION_MAJOR}
|
|
PUBLIC_HEADER "${HIDAPI_PUBLIC_HEADERS}"
|
|
)
|
|
|
|
# compatibility with find_package()
|
|
add_library(hidapi::libusb ALIAS hidapi_libusb)
|
|
# compatibility with raw library link
|
|
add_library(hidapi-libusb ALIAS hidapi_libusb)
|
|
|
|
if(HIDAPI_INSTALL_TARGETS)
|
|
install(TARGETS hidapi_libusb EXPORT hidapi
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hidapi"
|
|
)
|
|
endif()
|
|
|
|
hidapi_configure_pc("${PROJECT_ROOT}/pc/hidapi-libusb.pc.in")
|