diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..88c62aa --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR) +project(hidapi LANGUAGES C) + +if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Debug;Release;MinSizeRel;RelWithDebInfo" FORCE) +endif() +set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") + +if(NOT WIN32 AND NOT APPLE) + if(CMAKE_SYSTEM_NAME MATCHES "Linux") + option(HIDAPI_WITH_HIDRAW "Build HIDRAW-based implementation of HIDAPI" ON) + endif() + option(HIDAPI_WITH_LIBUSB "Build LIBUSB-based implementation of HIDAPI" ON) +endif() + +option(BUILD_SHARED_LIBS "When set: build shared version of the libraries, otherwise - static" ON) + +set(HIDAPI_INSTALL_TARGETS ON) + +add_subdirectory(src) + +set(BUILD_HIDTEST_DEFAULT OFF) +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(BUILD_HIDTEST_DEFAULT ON) +endif() +option(BUILD_HIDTEST "Build small console test application hidtest" ${BUILD_HIDTEST_DEFAULT}) +if(BUILD_HIDTEST) + add_subdirectory(hidtest) +endif() diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..262b51c --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.9.0-rc1 diff --git a/configure.ac b/configure.ac index a8f2a84..adcbac2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,13 +1,6 @@ AC_PREREQ(2.63) -# Version number. This is currently the only place. -m4_define([HIDAPI_MAJOR], 0) -m4_define([HIDAPI_MINOR], 9) -m4_define([HIDAPI_RELEASE], 0) -m4_define([HIDAPI_RC], ) -m4_define([VERSION_STRING], HIDAPI_MAJOR[.]HIDAPI_MINOR[.]HIDAPI_RELEASE[]HIDAPI_RC) - -AC_INIT([hidapi],[VERSION_STRING],[alan@signal11.us]) +AC_INIT([hidapi],[m4_normalize(m4_builtin([include], VERSION))],[https://github.com/libusb/hidapi/issues]) # Library soname version # Follow the following rules (particularly the ones in the second link): @@ -190,7 +183,7 @@ mkdir testgui/TestGUI.app/Contents/MacOS/ if test "x$testgui_enabled" != "xno"; then if test "x$os" = xdarwin; then - # On Mac OS, don't use pkg-config. + # On Mac OS, do not use pkg-config. AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false) if test "x$foxconfig" = "xfalse"; then hidapi_prog_error fox-config "FOX Toolkit" diff --git a/hidtest/CMakeLists.txt b/hidtest/CMakeLists.txt new file mode 100644 index 0000000..e9dcc05 --- /dev/null +++ b/hidtest/CMakeLists.txt @@ -0,0 +1,23 @@ +project(hidtest C) + +set(HIDAPI_HIDTEST_TARGETS) +if(NOT WIN32 AND NOT APPLE AND CMAKE_SYSTEM_NAME MATCHES "Linux") + if(TARGET hidapi_hidraw) + add_executable(hidtest_hidraw test.c) + target_link_libraries(hidtest_hidraw hidapi_hidraw) + list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_hidraw) + endif() + if(TARGET hidapi_libusb) + add_executable(hidtest_libusb test.c) + target_link_libraries(hidtest_libusb hidapi_libusb) + list(APPEND HIDAPI_HIDTEST_TARGETS hidtest_libusb) + endif() +else() + add_executable(hidtest test.c) + target_link_libraries(hidtest hidapi) + list(APPEND HIDAPI_HIDTEST_TARGETS hidtest) +endif() + +install(TARGETS ${HIDAPI_HIDTEST_TARGETS} + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +) diff --git a/libusb/CMakeLists.txt b/libusb/CMakeLists.txt new file mode 100644 index 0000000..5d910de --- /dev/null +++ b/libusb/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR) + +add_library(hidapi_libusb + hid.c +) +target_link_libraries(hidapi_libusb PUBLIC hidapi_include) + +include(FindPkgConfig) +include(FindThreads) + +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") +if(HIDAPI_LIBNAME_VERBOSE) + set(HIDAPI_LIBNAME "${HIDAPI_LIBNAME}-libusb") +endif() + +set_target_properties(hidapi_libusb + PROPERTIES + EXPORT_NAME "libusb" + OUTPUT_NAME "${HIDAPI_LIBNAME}" + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) + +if(HIDAPI_INSTALL_TARGETS) + install(TARGETS hidapi_libusb + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ) +endif() + +add_library(hidapi ALIAS hidapi_libusb) diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..e4e942f --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.6.3 FATAL_ERROR) + +add_library(hidapi_hidraw + hid.c +) +target_link_libraries(hidapi_hidraw PUBLIC hidapi_include) + +include(FindPkgConfig) +include(FindThreads) + +pkg_check_modules(libudev REQUIRED IMPORTED_TARGET libudev) +target_link_libraries(hidapi_hidraw PRIVATE PkgConfig::libudev Threads::Threads) + +set_target_properties(hidapi_hidraw + PROPERTIES + EXPORT_NAME "hidraw" + OUTPUT_NAME "hidapi-hidraw" + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) + +if(HIDAPI_INSTALL_TARGETS) + install(TARGETS hidapi_hidraw + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ) +endif() + +if(NOT HIDAPI_WITH_LIBUSB) + add_library(hidapi ALIAS hidapi_hidraw) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..34682f6 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,56 @@ +get_filename_component(PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) + +# Read version from file +file(READ "${PROJECT_ROOT}/VERSION" VERSION_STR) +string(REGEX MATCH "^([0-9]+\\.[0-9]+\\.[0-9]+)(.*)" VERSION_STR "${VERSION_STR}") + +set(VERSION "${CMAKE_MATCH_1}") +set(VERSION_SUFFIX "${CMAKE_MATCH_2}") +# + +project(hidapi VERSION "${VERSION}" LANGUAGES C) + +# Defaults and required options + +if(NOT DEFINED BUILD_SHARED_LIBS) + set(BUILD_SHARED_LIBS ON) +endif() +if(NOT DEFINED HIDAPI_WITH_HIDRAW) + set(HIDAPI_WITH_HIDRAW ON) +endif() +if(NOT DEFINED HIDAPI_WITH_LIBUSB) + set(HIDAPI_WITH_LIBUSB ON) +endif() +if(NOT DEFINED HIDAPI_INSTALL_TARGETS) + set(HIDAPI_INSTALL_TARGETS OFF) +endif() + +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# The library + +add_library(hidapi_include INTERFACE) +target_include_directories(hidapi_include INTERFACE "${PROJECT_ROOT}/hidapi") + +if(HIDAPI_INSTALL_TARGETS) + include(GNUInstallDirs) + install(FILES "${PROJECT_ROOT}/hidapi/hidapi.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hidapi") +endif() + +if(WIN32) + add_subdirectory("${PROJECT_ROOT}/windows" windows) +elseif(APPLE) + add_subdirectory("${PROJECT_ROOT}/mac" mac) +else() + if(CMAKE_SYSTEM_NAME MATCHES "Linux") + if(HIDAPI_WITH_HIDRAW) + add_subdirectory("${PROJECT_ROOT}/linux" linux) + endif() + set(HIDAPI_LIBNAME_VERBOSE ON) + else() + set(HIDAPI_LIBNAME_VERBOSE OFF) + endif() + if(HIDAPI_WITH_LIBUSB) + add_subdirectory("${PROJECT_ROOT}/libusb" libusb) + endif() +endif()