diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 99 | ||||
-rw-r--r-- | libnitrokey.pc.in | 10 |
3 files changed, 56 insertions, 55 deletions
diff --git a/.travis.yml b/.travis.yml index 3b95345..bf195df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: false os: osx env: global: - - CF=-DCOMPILE_OFFLINE_TESTS=1 + - CF="-DCOMPILE_OFFLINE_TESTS=1 -DERROR_ON_WARNING=ON" matrix: include: diff --git a/CMakeLists.txt b/CMakeLists.txt index 8259f67..78d0116 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,45 +1,34 @@ # https://cmake.org/pipermail/cmake/2011-May/044166.html - IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) - SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) - ENDIF() +IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) +ENDIF() cmake_minimum_required(VERSION 3.1) IF (UNIX) - OPTION(USE_CLANG "Use CLang" FALSE) - IF(USE_CLANG) - set(CMAKE_CXX_COMPILER "/usr/bin/clang++" CACHE string "clang++ compiler" FORCE) - ELSE() - set(CMAKE_CXX_COMPILER) - ENDIF() OPTION(ADD_ASAN "Use ASAN to show memory issues" FALSE) OPTION(ADD_TSAN "Use TSAN to show thread issues" FALSE) IF(ADD_ASAN) SET(EXTRA_LIBS ${EXTRA_LIBS} asan ) - ADD_DEFINITIONS(-fsanitize=address -fno-omit-frame-pointer) + ADD_COMPILE_OPTIONS(-fsanitize=address -fno-omit-frame-pointer) ENDIF() IF(ADD_TSAN) SET(EXTRA_LIBS ${EXTRA_LIBS} tsan ) SET(USE_CLANG TRUE) - ADD_DEFINITIONS(-fsanitize=thread -fno-omit-frame-pointer -fPIC -g) #use with clang + ADD_COMPILE_OPTIONS(-fsanitize=thread -fno-omit-frame-pointer -fPIC -g) #use with clang ENDIF() IF(ADD_TSAN AND ADD_ASAN) message(FATAL_ERROR "TSAN and ASAN cannot be used at the same time") ENDIF() ENDIF() -project(libnitrokey) -SET(PROJECT_VERSION "3.1") +project(libnitrokey LANGUAGES C CXX VERSION 3.1.0) set(CMAKE_CXX_STANDARD 14) - -set(LIBNK_VERSION_MAJOR 3) # reminder: incompatible API changes -set(LIBNK_VERSION_MINOR 1) # add functionality in a backwards-compatible manner -set(LIBNK_VERSION_PATCH 0) # make backwards-compatible bug fixes -set(LIBNK_VERSION ${LIBNK_VERSION_MAJOR}.${LIBNK_VERSION_MINOR}.${LIBNK_VERSION_PATCH} ) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) include(GNUInstallDirs) -OPTION(LIBNITROKEY_STATIC "Build libnitrokey statically" FALSE) IF (NOT CMAKE_BUILD_TYPE) @@ -80,34 +69,32 @@ set(SOURCE_FILES NK_C_API.cc DeviceCommunicationExceptions.cpp) +set(BUILD_SHARED_LIBS ON CACHE BOOL "Build all libraries as shared") +add_library(nitrokey ${SOURCE_FILES}) + IF(APPLE) - include_directories(hidapi/hidapi) - add_library(hidapi-libusb STATIC hidapi/mac/hid.c ) - target_link_libraries(hidapi-libusb "-framework CoreFoundation" "-framework IOKit") + include_directories(hidapi/hidapi) + add_library(hidapi-libusb STATIC hidapi/mac/hid.c ) + target_link_libraries(hidapi-libusb "-framework CoreFoundation" "-framework IOKit") + target_link_libraries(nitrokey hidapi-libusb) ELSEIF(UNIX) -# add_library(hidapi-libusb STATIC hidapi/libusb/hid.c ) +# add_library(hidapi-libusb STATIC hidapi/libusb/hid.c ) + find_package(PkgConfig) + pkg_search_module(HIDAPI_LIBUSB REQUIRED hidapi-libusb) + target_compile_options(nitrokey PRIVATE ${HIDAPI_LIBUSB_CFLAGS}) + target_link_libraries(nitrokey ${HIDAPI_LIBUSB_LDFLAGS}) ELSEIF(WIN32) - include_directories(hidapi/hidapi) - add_library(hidapi-libusb STATIC hidapi/windows/hid.c ) - target_link_libraries(hidapi-libusb setupapi) + include_directories(hidapi/hidapi) + add_library(hidapi-libusb STATIC hidapi/windows/hid.c ) + target_link_libraries(hidapi-libusb setupapi) + target_link_libraries(nitrokey hidapi-libusb) ENDIF() +set_target_properties(nitrokey PROPERTIES + VERSION ${libnitrokey_VERSION} + SOVERSION ${libnitrokey_VERSION_MAJOR}) -IF (NOT LIBNITROKEY_STATIC) - add_library(nitrokey SHARED ${SOURCE_FILES}) - SET(LIBNAME nitrokey) -ELSE() - add_library(nitrokey-static STATIC ${SOURCE_FILES}) - SET(LIBNAME nitrokey-static) -ENDIF() - - -target_link_libraries(${LIBNAME} hidapi-libusb) - -set_target_properties(${LIBNAME} PROPERTIES VERSION ${LIBNK_VERSION} - SOVERSION ${LIBNK_VERSION_MAJOR} ) - -OPTION(ERROR_ON_WARNING "Stop compilation on warning found (not supported for MSVC)" ON) +OPTION(ERROR_ON_WARNING "Stop compilation on warning found (not supported for MSVC)" OFF) if (NOT MSVC) set(COMPILE_FLAGS "-Wall -Wno-unused-function -Wcast-qual -Woverloaded-virtual") IF(NOT APPLE) @@ -115,35 +102,39 @@ if (NOT MSVC) set(COMPILE_FLAGS "${COMPILE_FLAGS} -Werror") endif() ENDIF() - SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} ) + SET_TARGET_PROPERTIES(nitrokey PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} ) endif() OPTION(NO_LOG "Compile without logging functionality and its strings (decreases size)" OFF) IF (NO_LOG) - SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES COMPILE_DEFINITIONS "NO_LOG") + SET_TARGET_PROPERTIES(nitrokey PROPERTIES COMPILE_DEFINITIONS "NO_LOG") ENDIF() OPTION(LOG_VOLATILE_DATA "Log volatile data (debug)" OFF) IF (LOG_VOLATILE_DATA) - SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES COMPILE_DEFINITIONS "LOG_VOLATILE_DATA") + SET_TARGET_PROPERTIES(nitrokey PROPERTIES COMPILE_DEFINITIONS "LOG_VOLATILE_DATA") ENDIF() file(GLOB LIB_INCLUDES "include/*.h") -install (FILES ${LIB_INCLUDES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libnitrokey) -install (TARGETS ${LIBNAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install (FILES ${LIB_INCLUDES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) +install (TARGETS nitrokey DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +# configure and install pkg-config file +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libnitrokey.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libnitrokey-1.pc @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libnitrokey-1.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) OPTION(COMPILE_TESTS "Compile tests" FALSE) OPTION(COMPILE_OFFLINE_TESTS "Compile offline tests" FALSE) IF(COMPILE_OFFLINE_TESTS OR COMPILE_TESTS) include_directories(unittest/Catch/include) - add_library(catch SHARED unittest/catch_main.cpp ) + add_library(catch STATIC unittest/catch_main.cpp ) ENDIF() IF(COMPILE_OFFLINE_TESTS) add_executable (test_offline unittest/test_offline.cc) - target_link_libraries (test_offline ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test_offline ${EXTRA_LIBS} nitrokey catch) #run with 'make test' or 'ctest' include (CTest) add_test (runs test_offline) @@ -153,22 +144,22 @@ IF (COMPILE_TESTS) #needs connected PRO device for success #warning: it may delete data on the device add_executable (test_C_API unittest/test_C_API.cpp) - target_link_libraries (test_C_API ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test_C_API ${EXTRA_LIBS} nitrokey catch) add_executable (test2 unittest/test2.cc) - target_link_libraries (test2 ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test2 ${EXTRA_LIBS} nitrokey catch) add_executable (test3 unittest/test3.cc) - target_link_libraries (test3 ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test3 ${EXTRA_LIBS} nitrokey catch) add_executable (test_HOTP unittest/test_HOTP.cc) - target_link_libraries (test_HOTP ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test_HOTP ${EXTRA_LIBS} nitrokey catch) add_executable (test1 unittest/test.cc) - target_link_libraries (test1 ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test1 ${EXTRA_LIBS} nitrokey catch) add_executable (test_issues unittest/test_issues.cc) - target_link_libraries (test_issues ${EXTRA_LIBS} ${LIBNAME} catch) + target_link_libraries (test_issues ${EXTRA_LIBS} nitrokey catch) ENDIF() diff --git a/libnitrokey.pc.in b/libnitrokey.pc.in new file mode 100644 index 0000000..17cde1d --- /dev/null +++ b/libnitrokey.pc.in @@ -0,0 +1,10 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: libnitrokey +Description: Library for communicating with Nitrokey in a clean and easy manner +Version: @libnitrokey_VERSION@ +Requires.private: hidapi-libusb + +Libs: -L${libdir} -lnitrokey +Cflags: -I${includedir} |