From af21c2e26f190b6bc6f490bf78d13d05b78dc729 Mon Sep 17 00:00:00 2001 From: Carlos Gomes Martinho Date: Fri, 8 May 2020 02:35:53 +0200 Subject: [PATCH 1/4] build: install cmakes find package files --- CMakeLists.txt | 45 ++++++++++++++++++++++++++++++++----------- cmake/Config.cmake.in | 4 ++++ 2 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 cmake/Config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 9122f1c..2f35431 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5.0) -project(cpp-jwt) +project(cpp-jwt VERSION 1.2.0) option(CPP_JWT_BUILD_EXAMPLES "build examples" ON) option(CPP_JWT_BUILD_TESTS "build tests" ON) @@ -38,9 +38,8 @@ add_library(${PROJECT_NAME} INTERFACE) target_include_directories( ${PROJECT_NAME} INTERFACE $ - $ - ${OpenSSL_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} INTERFACE ${OpenSSL_LIBRARIES}) + $) +target_link_libraries(${PROJECT_NAME} INTERFACE OpenSSL::SSL) if(NOT CPP_JWT_USE_VENDORED_NLOHMANN_JSON) target_link_libraries(${PROJECT_NAME} INTERFACE nlohmann_json::nlohmann_json) else() @@ -76,21 +75,45 @@ endif() # ############################################################################## include(GNUInstallDirs) +include(CMakePackageConfigHelpers) +set(CPP_JWT_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + install( TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}_Targets + EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install( + EXPORT ${PROJECT_NAME}Targets + DESTINATION ${CPP_JWT_CONFIG_INSTALL_DIR} + NAMESPACE ${PROJECT_NAME}:: + COMPONENT dev) +configure_package_config_file(cmake/Config.cmake.in ${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${CPP_JWT_CONFIG_INSTALL_DIR}) +write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake + COMPATIBILITY SameMajorVersion) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CPP_JWT_CONFIG_INSTALL_DIR} + COMPONENT dev) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/detail - DESTINATION include/jwt) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/impl - DESTINATION include/jwt) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/json - DESTINATION include/jwt) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/detail + DESTINATION include/jwt + COMPONENT dev) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/impl + DESTINATION include/jwt + COMPONENT dev) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/json + DESTINATION include/jwt + COMPONENT dev) install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/jwt/ DESTINATION include/jwt + COMPONENT dev FILES_MATCHING PATTERN "*.hpp") diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in new file mode 100644 index 0000000..ff0fa67 --- /dev/null +++ b/cmake/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") \ No newline at end of file From 52bd9d5bb81725e28ab455bc3a1229f17129a245 Mon Sep 17 00:00:00 2001 From: Carlos Gomes Martinho Date: Fri, 8 May 2020 02:45:52 +0200 Subject: [PATCH 2/4] docs: add cmake usage instructions --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cdff6e..30b9d58 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ The library has 2 sets of APIs for encoding and decoding: Tested with clang-5.0 and g++-6.4. With issue#12, VS2017 is also supported. -## Installation +## Building the library ### using conan @@ -232,6 +232,23 @@ cmake .. cmake --build . -j ``` +## Consuming the library + +this library is uses cmake as a build system. +```cmake +# you can use cmake's `find_package` after installation or `add_subdirectory` when vendoring this repository + +find_package(cpp-jwt REQUIRED) +# or +add_subdirectory(third_party/cpp-jwt) + +add_executable(main main.cpp) +target_link_libraries(main cpp-jwt::cpp-jwt) +``` + +you can also use this library as a conan package, its available in the [conan center](https://conan.io/center/cpp-jwt/1.2/?user=_&channel=_): +just add `cpp-jwt[>=1.2]` to your conanfile.txt + ## Parameters There are two sets of parameters which can be used for creating `jwt_object` and for decoding. All the parameters are basically a function which returns an instance of a type which are modelled after ParameterConcept (see jwt::detail::meta::is_parameter_concept). From fd403e3df6aa8cb7777131b78fe9e2b6fb4c5c89 Mon Sep 17 00:00:00 2001 From: Carlos Gomes Martinho Date: Fri, 8 May 2020 02:48:06 +0200 Subject: [PATCH 3/4] ci: also run on pull requests --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 87ea7b0..b08c792 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,6 @@ name: CMake -on: [push] +on: [push, pull_request] env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) From d40fc510e99bee84c064752b3142c752f6234f7c Mon Sep 17 00:00:00 2001 From: Carlos Gomes Martinho Date: Fri, 8 May 2020 04:16:56 +0200 Subject: [PATCH 4/4] fiX: add missing dependencies --- cmake/Config.cmake.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in index ff0fa67..8138918 100644 --- a/cmake/Config.cmake.in +++ b/cmake/Config.cmake.in @@ -1,4 +1,10 @@ @PACKAGE_INIT@ +if(NOT @CPP_JWT_USE_VENDORED_NLOHMANN_JSON@) + find_package(nlohmann_json REQUIRED) +endif() + +find_package(OpenSSL REQUIRED) + include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") check_required_components("@PROJECT_NAME@") \ No newline at end of file