diff options
| -rw-r--r-- | CMakeLists.txt | 9 | ||||
| -rw-r--r-- | NK_C_API.cc | 13 | ||||
| -rw-r--r-- | NK_C_API.h | 23 | ||||
| -rw-r--r-- | libnitrokey/version.h | 33 | ||||
| -rw-r--r-- | unittest/test_offline.cc | 11 | ||||
| -rw-r--r-- | version.cc.in | 37 | 
6 files changed, 124 insertions, 2 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index 3dacb48..06ab448 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,9 @@ set(SOURCE_FILES      NitrokeyManager.cc      NK_C_API.h      NK_C_API.cc -        DeviceCommunicationExceptions.cpp) +    DeviceCommunicationExceptions.cpp +    ${CMAKE_CURRENT_BINARY_DIR}/version.cc +    )  set(BUILD_SHARED_LIBS ON CACHE BOOL "Build all libraries as shared")  add_library(nitrokey ${SOURCE_FILES}) @@ -115,6 +117,11 @@ IF (LOG_VOLATILE_DATA)  ENDIF() +# generate version.h +exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe --always" OUTPUT_VARIABLE PROJECT_VERSION_GIT) +configure_file("version.cc.in" "version.cc" @ONLY) + +  file(GLOB LIB_INCLUDES "libnitrokey/*.h" "NK_C_API.h")  install (FILES ${LIB_INCLUDES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})  install (TARGETS nitrokey DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/NK_C_API.cc b/NK_C_API.cc index f6a6153..00694c7 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -27,6 +27,7 @@  #include "libnitrokey/LibraryException.h"  #include "libnitrokey/cxx_semantics.h"  #include "libnitrokey/stick20_commands.h" +#include "version.h"  #ifdef _MSC_VER  #ifdef _WIN32 @@ -338,6 +339,18 @@ extern "C" {  		m->set_loglevel(level);  	} +	NK_C_API unsigned int NK_get_major_library_version() { +		return get_major_library_version(); +	} + +	NK_C_API unsigned int NK_get_minor_library_version() { +		return get_minor_library_version(); +	} + +	NK_C_API const char* NK_get_library_version() { +		return get_library_version(); +	} +  	NK_C_API int NK_totp_set_time(uint64_t time) {  		auto m = NitrokeyManager::instance();  		return get_without_result([&]() { @@ -132,7 +132,28 @@ extern "C" {  	 * Set debug level of messages written on stderr  	 * @param level (int) 0-lowest verbosity, 5-highest verbosity  	 */ -  NK_C_API void NK_set_debug_level(const int level); +	NK_C_API void NK_set_debug_level(const int level); + +	/** +	 * Get the major library version, e. g. the 3 in v3.2. +	 * @return the major library version +	 */ +	NK_C_API unsigned int NK_get_major_library_version(); + +	/** +	 * Get the minor library version, e. g. the 2 in v3.2. +	 * @return the minor library version +	 */ +	NK_C_API unsigned int NK_get_minor_library_version(); + +	/** +	 * Get the library version as a string.  This is the output of +	 * `git describe --always` at compile time, for example "v3.3" or +	 * "v3.3-19-gaee920b". +	 * The return value is a string literal and must not be freed. +	 * @return the library version as a string +	 */ +	NK_C_API const char* NK_get_library_version();  	/**  	 * Connect to device of given model. Currently library can be connected only to one device at once. diff --git a/libnitrokey/version.h b/libnitrokey/version.h new file mode 100644 index 0000000..6547af0 --- /dev/null +++ b/libnitrokey/version.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018 Nitrokey UG + * + * This file is part of libnitrokey. + * + * libnitrokey is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * libnitrokey is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libnitrokey. If not, see <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0 + */ + +#ifndef LIBNITROKEY_VERSION_H +#define LIBNITROKEY_VERSION_H + +namespace nitrokey { +    unsigned int get_major_library_version(); + +    unsigned int get_minor_library_version(); + +    const char* get_library_version(); +} + +#endif diff --git a/unittest/test_offline.cc b/unittest/test_offline.cc index 468849e..aad875f 100644 --- a/unittest/test_offline.cc +++ b/unittest/test_offline.cc @@ -160,3 +160,14 @@ TEST_CASE("Test device commands ids", "[fast]") {    REQUIRE(STICK20_CMD_CHANGE_UPDATE_PIN == static_cast<uint8_t>(CommandID::CHANGE_UPDATE_PIN));  } + +#include "version.h" +TEST_CASE("Test version getter", "[fast]") { +  REQUIRE(nitrokey::get_major_library_version() >= 3u); +  REQUIRE(nitrokey::get_minor_library_version() >= 3u); +  const char *library_version = nitrokey::get_library_version(); +  REQUIRE(library_version != nullptr); +  std::string s = library_version; +  REQUIRE(s.length() >= 8); +  REQUIRE(s.find("g") != std::string::npos); +} diff --git a/version.cc.in b/version.cc.in new file mode 100644 index 0000000..0eae647 --- /dev/null +++ b/version.cc.in @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018 Nitrokey UG + * + * This file is part of libnitrokey. + * + * libnitrokey is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * libnitrokey is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libnitrokey. If not, see <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0 + */ + +#include "version.h" + +namespace nitrokey { +    unsigned int get_major_library_version() { +        return @PROJECT_VERSION_MAJOR@; +    } + +    unsigned int get_minor_library_version() { +        return @PROJECT_VERSION_MINOR@; +    } + +    const char* get_library_version() { +        return "@PROJECT_VERSION_GIT@"; +    } +} + | 
