diff --git a/CHANGELOG.md b/CHANGELOG.md index ec270168..590032ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ HEAD * Fixed "maybe-uninitialized" warning (issue #1217) * Fixed "statement is unreachable" warning on IAR (issue #1233) * Fixed "pointless integer comparison" warning on IAR (issue #1233) +* Added CMake "install" target (issue #1209) v6.15.0 (2020-03-22) ------- diff --git a/CMakeLists.txt b/CMakeLists.txt index 796d63c7..e05897a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,8 @@ cmake_minimum_required(VERSION 3.0) project(ArduinoJson) +set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true) + enable_testing() add_definitions(-DARDUINOJSON_DEBUG=1) @@ -37,6 +39,6 @@ if(${COVERAGE}) set(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage") endif() -include_directories(${CMAKE_CURRENT_LIST_DIR}/src) +add_subdirectory(src) add_subdirectory(extras/tests) add_subdirectory(extras/fuzzing) diff --git a/extras/ArduinoJsonConfig.cmake.in b/extras/ArduinoJsonConfig.cmake.in new file mode 100644 index 00000000..9c15f36a --- /dev/null +++ b/extras/ArduinoJsonConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/extras/fuzzing/CMakeLists.txt b/extras/fuzzing/CMakeLists.txt index cded31b9..f890786a 100644 --- a/extras/fuzzing/CMakeLists.txt +++ b/extras/fuzzing/CMakeLists.txt @@ -10,8 +10,14 @@ add_executable(msgpack_fuzzer msgpack_fuzzer.cpp fuzzer_main.cpp ) +target_link_libraries(msgpack_fuzzer + ArduinoJson +) add_executable(json_fuzzer json_fuzzer.cpp fuzzer_main.cpp ) +target_link_libraries(json_fuzzer + ArduinoJson +) diff --git a/extras/tests/ElementProxy/CMakeLists.txt b/extras/tests/ElementProxy/CMakeLists.txt index cc8e59f9..4443dc3f 100644 --- a/extras/tests/ElementProxy/CMakeLists.txt +++ b/extras/tests/ElementProxy/CMakeLists.txt @@ -11,5 +11,9 @@ add_executable(ElementProxyTests size.cpp ) -target_link_libraries(ElementProxyTests catch) +target_link_libraries(ElementProxyTests + ArduinoJson + catch +) + add_test(ElementProxy ElementProxyTests) diff --git a/extras/tests/IntegrationTests/CMakeLists.txt b/extras/tests/IntegrationTests/CMakeLists.txt index 10ba62cd..36e9fa16 100644 --- a/extras/tests/IntegrationTests/CMakeLists.txt +++ b/extras/tests/IntegrationTests/CMakeLists.txt @@ -16,5 +16,9 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") ) endif() -target_link_libraries(IntegrationTests catch) +target_link_libraries(IntegrationTests + ArduinoJson + catch +) + add_test(IntegrationTests IntegrationTests) diff --git a/extras/tests/JsonArray/CMakeLists.txt b/extras/tests/JsonArray/CMakeLists.txt index bc08c2fb..c1b08bc3 100644 --- a/extras/tests/JsonArray/CMakeLists.txt +++ b/extras/tests/JsonArray/CMakeLists.txt @@ -19,5 +19,9 @@ add_executable(JsonArrayTests undefined.cpp ) -target_link_libraries(JsonArrayTests catch) +target_link_libraries(JsonArrayTests + ArduinoJson + catch +) + add_test(JsonArray JsonArrayTests) diff --git a/extras/tests/JsonDeserializer/CMakeLists.txt b/extras/tests/JsonDeserializer/CMakeLists.txt index d3424a5d..b90524f5 100644 --- a/extras/tests/JsonDeserializer/CMakeLists.txt +++ b/extras/tests/JsonDeserializer/CMakeLists.txt @@ -18,7 +18,11 @@ add_executable(JsonDeserializerTests string.cpp ) -target_link_libraries(JsonDeserializerTests catch) +target_link_libraries(JsonDeserializerTests + ArduinoJson + catch +) + set_target_properties(JsonDeserializerTests PROPERTIES UNITY_BUILD OFF) add_test(JsonDeserializer JsonDeserializerTests) diff --git a/extras/tests/JsonDocument/CMakeLists.txt b/extras/tests/JsonDocument/CMakeLists.txt index 0746253d..2a90645c 100644 --- a/extras/tests/JsonDocument/CMakeLists.txt +++ b/extras/tests/JsonDocument/CMakeLists.txt @@ -18,5 +18,9 @@ add_executable(JsonDocumentTests subscript.cpp ) -target_link_libraries(JsonDocumentTests catch) +target_link_libraries(JsonDocumentTests + ArduinoJson + catch +) + add_test(JsonDocument JsonDocumentTests) diff --git a/extras/tests/JsonObject/CMakeLists.txt b/extras/tests/JsonObject/CMakeLists.txt index 56ad2bb1..89d79039 100644 --- a/extras/tests/JsonObject/CMakeLists.txt +++ b/extras/tests/JsonObject/CMakeLists.txt @@ -19,5 +19,9 @@ add_executable(JsonObjectTests subscript.cpp ) -target_link_libraries(JsonObjectTests catch) +target_link_libraries(JsonObjectTests + ArduinoJson + catch +) + add_test(JsonObject JsonObjectTests) diff --git a/extras/tests/JsonSerializer/CMakeLists.txt b/extras/tests/JsonSerializer/CMakeLists.txt index b86b7453..f2128055 100644 --- a/extras/tests/JsonSerializer/CMakeLists.txt +++ b/extras/tests/JsonSerializer/CMakeLists.txt @@ -14,5 +14,9 @@ add_executable(JsonSerializerTests std_string.cpp ) -target_link_libraries(JsonSerializerTests catch) +target_link_libraries(JsonSerializerTests + ArduinoJson + catch +) + add_test(JsonSerializer JsonSerializerTests) diff --git a/extras/tests/JsonVariant/CMakeLists.txt b/extras/tests/JsonVariant/CMakeLists.txt index c8c9f469..fc77d350 100644 --- a/extras/tests/JsonVariant/CMakeLists.txt +++ b/extras/tests/JsonVariant/CMakeLists.txt @@ -24,5 +24,9 @@ add_executable(JsonVariantTests undefined.cpp ) -target_link_libraries(JsonVariantTests catch) +target_link_libraries(JsonVariantTests + ArduinoJson + catch +) + add_test(JsonVariant JsonVariantTests) diff --git a/extras/tests/MemberProxy/CMakeLists.txt b/extras/tests/MemberProxy/CMakeLists.txt index 78e27208..5fb3826f 100644 --- a/extras/tests/MemberProxy/CMakeLists.txt +++ b/extras/tests/MemberProxy/CMakeLists.txt @@ -13,5 +13,9 @@ add_executable(MemberProxyTests subscript.cpp ) -target_link_libraries(MemberProxyTests catch) +target_link_libraries(MemberProxyTests + ArduinoJson + catch +) + add_test(MemberProxy MemberProxyTests) diff --git a/extras/tests/MemoryPool/CMakeLists.txt b/extras/tests/MemoryPool/CMakeLists.txt index bf2ea956..794b4818 100644 --- a/extras/tests/MemoryPool/CMakeLists.txt +++ b/extras/tests/MemoryPool/CMakeLists.txt @@ -10,5 +10,9 @@ add_executable(MemoryPoolTests StringBuilder.cpp ) -target_link_libraries(MemoryPoolTests catch) +target_link_libraries(MemoryPoolTests + ArduinoJson + catch +) + add_test(MemoryPool MemoryPoolTests) diff --git a/extras/tests/Misc/CMakeLists.txt b/extras/tests/Misc/CMakeLists.txt index cba9a586..221476c9 100644 --- a/extras/tests/Misc/CMakeLists.txt +++ b/extras/tests/Misc/CMakeLists.txt @@ -15,7 +15,11 @@ add_executable(MiscTests version.cpp ) -target_link_libraries(MiscTests catch) +target_link_libraries(MiscTests + ArduinoJson + catch +) + set_target_properties(MiscTests PROPERTIES UNITY_BUILD OFF) add_test(Misc MiscTests) diff --git a/extras/tests/MixedConfiguration/CMakeLists.txt b/extras/tests/MixedConfiguration/CMakeLists.txt index c3a4a3c5..ddb8f565 100644 --- a/extras/tests/MixedConfiguration/CMakeLists.txt +++ b/extras/tests/MixedConfiguration/CMakeLists.txt @@ -22,7 +22,11 @@ add_executable(MixedConfigurationTests enable_comments_0.cpp ) -target_link_libraries(MixedConfigurationTests catch) +target_link_libraries(MixedConfigurationTests + ArduinoJson + catch +) + set_target_properties(MixedConfigurationTests PROPERTIES UNITY_BUILD OFF) add_test(MixedConfiguration MixedConfigurationTests) diff --git a/extras/tests/MsgPackDeserializer/CMakeLists.txt b/extras/tests/MsgPackDeserializer/CMakeLists.txt index 3c8d3f36..756629c3 100644 --- a/extras/tests/MsgPackDeserializer/CMakeLists.txt +++ b/extras/tests/MsgPackDeserializer/CMakeLists.txt @@ -14,5 +14,9 @@ add_executable(MsgPackDeserializerTests notSupported.cpp ) -target_link_libraries(MsgPackDeserializerTests catch) +target_link_libraries(MsgPackDeserializerTests + ArduinoJson + catch +) + add_test(MsgPackDeserializer MsgPackDeserializerTests) diff --git a/extras/tests/MsgPackSerializer/CMakeLists.txt b/extras/tests/MsgPackSerializer/CMakeLists.txt index 12f269b9..d8de4175 100644 --- a/extras/tests/MsgPackSerializer/CMakeLists.txt +++ b/extras/tests/MsgPackSerializer/CMakeLists.txt @@ -11,5 +11,9 @@ add_executable(MsgPackSerializerTests serializeVariant.cpp ) -target_link_libraries(MsgPackSerializerTests catch) +target_link_libraries(MsgPackSerializerTests + ArduinoJson + catch +) + add_test(MsgPackSerializer MsgPackSerializerTests) diff --git a/extras/tests/Numbers/CMakeLists.txt b/extras/tests/Numbers/CMakeLists.txt index f81e1f2b..1ae6713b 100644 --- a/extras/tests/Numbers/CMakeLists.txt +++ b/extras/tests/Numbers/CMakeLists.txt @@ -8,6 +8,10 @@ add_executable(NumbersTests parseNumber.cpp ) -target_link_libraries(NumbersTests catch) +target_link_libraries(NumbersTests + ArduinoJson + catch +) + add_test(Numbers NumbersTests) diff --git a/extras/tests/TextFormatter/CMakeLists.txt b/extras/tests/TextFormatter/CMakeLists.txt index a22fe7f3..e96efcfa 100644 --- a/extras/tests/TextFormatter/CMakeLists.txt +++ b/extras/tests/TextFormatter/CMakeLists.txt @@ -7,7 +7,11 @@ add_executable(TextFormatterTests writeString.cpp ) -target_link_libraries(TextFormatterTests catch) +target_link_libraries(TextFormatterTests + ArduinoJson + catch +) + set_target_properties(TextFormatterTests PROPERTIES UNITY_BUILD OFF) add_test(TextFormatter TextFormatterTests) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..6bac23ed --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,79 @@ +# ArduinoJson - arduinojson.org +# Copyright Benoit Blanchon 2014-2020 +# MIT License + +# I have no idea what this is about, I simply followed the instructions from: +# https://dominikberner.ch/cmake-interface-lib/ + +add_library(ArduinoJson INTERFACE) + +include(GNUInstallDirs) + +# Adding the install interface generator expression makes sure that the include +# files are installed to the proper location (provided by GNUInstallDirs) +target_include_directories(ArduinoJson + INTERFACE + $ + $ +) + +# locations are provided by GNUInstallDirs +install( + TARGETS + ArduinoJson + EXPORT + ArduinoJson_Targets + ARCHIVE DESTINATION + ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION + ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION + ${CMAKE_INSTALL_BINDIR} +) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/ArduinoJsonConfigVersion.cmake" + VERSION + 6.15.0 + COMPATIBILITY + SameMajorVersion +) + +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/extras/ArduinoJsonConfig.cmake.in" + "${PROJECT_BINARY_DIR}/ArduinoJsonConfig.cmake" + INSTALL_DESTINATION + ${CMAKE_INSTALL_DATAROOTDIR}/ArduinoJson/cmake) + +install( + EXPORT + ArduinoJson_Targets + FILE + ArduinoJsonTargets.cmake + DESTINATION + ${CMAKE_INSTALL_DATAROOTDIR}/ArduinoJson/cmake +) + +install( + FILES + "${PROJECT_BINARY_DIR}/ArduinoJsonConfig.cmake" + "${PROJECT_BINARY_DIR}/ArduinoJsonConfigVersion.cmake" + DESTINATION + "${CMAKE_INSTALL_DATAROOTDIR}/ArduinoJson/cmake" +) + +install( + FILES + ArduinoJson.h + ArduinoJson.hpp + DESTINATION + include +) + +install( + DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}/ArduinoJson" + DESTINATION + include +)