From 8840c3dd89af3a4490c5920c137e3faed742e2f0 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Mon, 19 Jul 2021 20:39:03 +0200 Subject: [PATCH] :fire: clean CMake files and Makefile --- CMakeLists.txt | 12 +- Makefile | 403 +------------------------------------------- cmake/ci.cmake | 2 +- test/CMakeLists.txt | 49 +----- 4 files changed, 10 insertions(+), 456 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e495f238d..d79f8f0f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,13 +30,13 @@ if (POLICY CMP0077) cmake_policy(SET CMP0077 NEW) endif () -option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ${MAIN_PROJECT}) -option(JSON_Install "Install CMake targets during install step." ${MAIN_PROJECT}) -option(JSON_MultipleHeaders "Use non-amalgamated version of the library." OFF) +option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ${MAIN_PROJECT}) +option(JSON_CI "Enable CI build targets." OFF) +option(JSON_Diagnostics "Use extended diagnostic messages." OFF) option(JSON_ImplicitConversions "Enable implicit conversions." ON) -option(JSON_Diagnostics "Enable better diagnostic messages." OFF) -option(JSON_CI "Enable CI build targets." OFF) -option(JSON_SystemInclude "Include as system headers (skip for clang-tidy)" OFF) +option(JSON_Install "Install CMake targets during install step." ${MAIN_PROJECT}) +option(JSON_MultipleHeaders "Use non-amalgamated version of the library." OFF) +option(JSON_SystemInclude "Include as system headers (skip for clang-tidy)." OFF) if (JSON_CI) include(cmake/ci.cmake) diff --git a/Makefile b/Makefile index 655bb6c4a..43db74d85 100644 --- a/Makefile +++ b/Makefile @@ -32,36 +32,16 @@ all: @echo "ChangeLog.md - generate ChangeLog file" @echo "check-amalgamation - check whether sources have been amalgamated" @echo "clean - remove built files" - @echo "coverage - create coverage information with lcov" - @echo "cppcheck - analyze code with cppcheck" - @echo "cpplint - analyze code with cpplint" - @echo "clang_tidy - analyze code with Clang-Tidy" - @echo "clang_analyze - analyze code with Clang-Analyzer" @echo "doctest - compile example files and check their output" @echo "fuzz_testing - prepare fuzz testing of the JSON parser" @echo "fuzz_testing_bson - prepare fuzz testing of the BSON parser" @echo "fuzz_testing_cbor - prepare fuzz testing of the CBOR parser" @echo "fuzz_testing_msgpack - prepare fuzz testing of the MessagePack parser" @echo "fuzz_testing_ubjson - prepare fuzz testing of the UBJSON parser" - @echo "pedantic_clang - run Clang with maximal warning flags" - @echo "pedantic_gcc - run GCC with maximal warning flags" @echo "pretty - beautify code with Artistic Style" @echo "run_benchmarks - build and run benchmarks" -########################################################################## -# coverage -########################################################################## - -coverage: - rm -fr cmake-build-coverage - mkdir cmake-build-coverage - cd cmake-build-coverage ; cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DJSON_Coverage=ON -DJSON_MultipleHeaders=ON - cd cmake-build-coverage ; ninja - cd cmake-build-coverage ; ctest -j10 - cd cmake-build-coverage ; ninja lcov_html - open cmake-build-coverage/test/html/index.html - ########################################################################## # documentation tests ########################################################################## @@ -71,304 +51,6 @@ doctest: $(MAKE) check_output -C doc -########################################################################## -# warning detector -########################################################################## - -# calling Clang with all warnings, except: -# -Wno-c++2a-compat: u8 literals will behave differently in C++20... -# -Wno-deprecated-declarations: the library deprecated some functions -# -Wno-documentation-unknown-command: code uses user-defined commands like @complexity -# -Wno-exit-time-destructors: warning in json code triggered by NLOHMANN_JSON_SERIALIZE_ENUM -# -Wno-float-equal: not all comparisons in the tests can be replaced by Approx -# -Wno-missing-prototypes: for NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE -# -Wno-padded: padding is nothing to warn about -# -Wno-range-loop-analysis: items tests "for(const auto i...)" -# -Wno-extra-semi-stmt: spurious warnings for semicolons after JSON_ASSERT() -# -Wno-switch-enum -Wno-covered-switch-default: pedantic/contradicting warnings about switches -# -Wno-weak-vtables: exception class is defined inline, but has virtual method -pedantic_clang: - rm -fr cmake-build-pedantic - CXXFLAGS=" \ - -std=c++11 -Wno-c++98-compat -Wno-c++98-compat-pedantic \ - -Werror \ - -Weverything \ - -Wno-c++2a-compat \ - -Wno-deprecated-declarations \ - -Wno-documentation-unknown-command \ - -Wno-exit-time-destructors \ - -Wno-float-equal \ - -Wno-missing-prototypes \ - -Wno-padded \ - -Wno-range-loop-analysis \ - -Wno-extra-semi-stmt \ - -Wno-switch-enum -Wno-covered-switch-default \ - -Wno-weak-vtables" cmake -S . -B cmake-build-pedantic -GNinja -DCMAKE_BUILD_TYPE=Debug -DJSON_MultipleHeaders=ON -DJSON_BuildTests=On - cmake --build cmake-build-pedantic - -# calling GCC with most warnings -pedantic_gcc: - rm -fr cmake-build-pedantic - CXXFLAGS=" \ - -std=c++11 \ - -pedantic \ - -Werror \ - --all-warnings \ - --extra-warnings \ - -W \ - -Wno-abi-tag \ - -Waddress \ - -Waddress-of-packed-member \ - -Wno-aggregate-return \ - -Waggressive-loop-optimizations \ - -Waligned-new=all \ - -Wall \ - -Walloc-zero \ - -Walloca \ - -Wanalyzer-double-fclose \ - -Wanalyzer-double-free \ - -Wanalyzer-exposure-through-output-file \ - -Wanalyzer-file-leak \ - -Wanalyzer-free-of-non-heap \ - -Wanalyzer-malloc-leak \ - -Wanalyzer-null-argument \ - -Wanalyzer-null-dereference \ - -Wanalyzer-possible-null-argument \ - -Wanalyzer-possible-null-dereference \ - -Wanalyzer-stale-setjmp-buffer \ - -Wanalyzer-tainted-array-index \ - -Wanalyzer-too-complex \ - -Wanalyzer-unsafe-call-within-signal-handler \ - -Wanalyzer-use-after-free \ - -Wanalyzer-use-of-pointer-in-stale-stack-frame \ - -Warith-conversion \ - -Warray-bounds \ - -Warray-bounds=2 \ - -Wattribute-alias=2 \ - -Wattribute-warning \ - -Wattributes \ - -Wbool-compare \ - -Wbool-operation \ - -Wbuiltin-declaration-mismatch \ - -Wbuiltin-macro-redefined \ - -Wc++0x-compat \ - -Wc++11-compat \ - -Wc++14-compat \ - -Wc++17-compat \ - -Wc++1z-compat \ - -Wc++20-compat \ - -Wc++2a-compat \ - -Wcannot-profile \ - -Wcast-align \ - -Wcast-align=strict \ - -Wcast-function-type \ - -Wcast-qual \ - -Wcatch-value=3 \ - -Wchar-subscripts \ - -Wclass-conversion \ - -Wclass-memaccess \ - -Wclobbered \ - -Wcomma-subscript \ - -Wcomment \ - -Wcomments \ - -Wconditionally-supported \ - -Wconversion \ - -Wconversion-null \ - -Wcoverage-mismatch \ - -Wcpp \ - -Wctor-dtor-privacy \ - -Wdangling-else \ - -Wdate-time \ - -Wdelete-incomplete \ - -Wdelete-non-virtual-dtor \ - -Wdeprecated \ - -Wdeprecated-copy \ - -Wdeprecated-copy-dtor \ - -Wdeprecated-declarations \ - -Wdisabled-optimization \ - -Wdiv-by-zero \ - -Wdouble-promotion \ - -Wduplicated-branches \ - -Wduplicated-cond \ - -Weffc++ \ - -Wempty-body \ - -Wendif-labels \ - -Wenum-compare \ - -Wexpansion-to-defined \ - -Wextra \ - -Wextra-semi \ - -Wfloat-conversion \ - -Wfloat-equal \ - -Wformat -Wformat-contains-nul \ - -Wformat -Wformat-extra-args \ - -Wformat -Wformat-nonliteral \ - -Wformat -Wformat-security \ - -Wformat -Wformat-y2k \ - -Wformat -Wformat-zero-length \ - -Wformat-diag \ - -Wformat-overflow=2 \ - -Wformat-signedness \ - -Wformat-truncation=2 \ - -Wformat=2 \ - -Wframe-address \ - -Wfree-nonheap-object \ - -Whsa \ - -Wif-not-aligned \ - -Wignored-attributes \ - -Wignored-qualifiers \ - -Wimplicit-fallthrough=5 \ - -Winaccessible-base \ - -Winherited-variadic-ctor \ - -Winit-list-lifetime \ - -Winit-self \ - -Winline \ - -Wint-in-bool-context \ - -Wint-to-pointer-cast \ - -Winvalid-memory-model \ - -Winvalid-offsetof \ - -Winvalid-pch \ - -Wliteral-suffix \ - -Wlogical-not-parentheses \ - -Wlogical-op \ - -Wno-long-long \ - -Wlto-type-mismatch \ - -Wmain \ - -Wmaybe-uninitialized \ - -Wmemset-elt-size \ - -Wmemset-transposed-args \ - -Wmisleading-indentation \ - -Wmismatched-tags \ - -Wmissing-attributes \ - -Wmissing-braces \ - -Wno-missing-declarations \ - -Wmissing-field-initializers \ - -Wmissing-include-dirs \ - -Wmissing-profile \ - -Wmultichar \ - -Wmultiple-inheritance \ - -Wmultistatement-macros \ - -Wno-namespaces \ - -Wnarrowing \ - -Wno-noexcept \ - -Wnoexcept-type \ - -Wnon-template-friend \ - -Wnon-virtual-dtor \ - -Wnonnull \ - -Wnonnull-compare \ - -Wnonportable-cfstrings \ - -Wnormalized=nfkc \ - -Wnull-dereference \ - -Wodr \ - -Wold-style-cast \ - -Wopenmp-simd \ - -Woverflow \ - -Woverlength-strings \ - -Woverloaded-virtual \ - -Wpacked \ - -Wpacked-bitfield-compat \ - -Wpacked-not-aligned \ - -Wno-padded \ - -Wparentheses \ - -Wpedantic \ - -Wpessimizing-move \ - -Wplacement-new=2 \ - -Wpmf-conversions \ - -Wpointer-arith \ - -Wpointer-compare \ - -Wpragmas \ - -Wprio-ctor-dtor \ - -Wpsabi \ - -Wredundant-decls \ - -Wredundant-move \ - -Wredundant-tags \ - -Wregister \ - -Wreorder \ - -Wrestrict \ - -Wreturn-local-addr \ - -Wreturn-type \ - -Wscalar-storage-order \ - -Wsequence-point \ - -Wshadow=compatible-local \ - -Wshadow=global \ - -Wshadow=local \ - -Wshift-count-negative \ - -Wshift-count-overflow \ - -Wshift-negative-value \ - -Wshift-overflow=2 \ - -Wsign-compare \ - -Wsign-conversion \ - -Wsign-promo \ - -Wsized-deallocation \ - -Wsizeof-array-argument \ - -Wsizeof-pointer-div \ - -Wsizeof-pointer-memaccess \ - -Wstack-protector \ - -Wstrict-aliasing \ - -Wstrict-aliasing=3 \ - -Wstrict-null-sentinel \ - -Wstrict-overflow \ - -Wstrict-overflow=5 \ - -Wstring-compare \ - -Wstringop-overflow \ - -Wstringop-overflow=4 \ - -Wstringop-truncation \ - -Wsubobject-linkage \ - -Wsuggest-attribute=cold \ - -Wsuggest-attribute=const \ - -Wsuggest-attribute=format \ - -Wsuggest-attribute=malloc \ - -Wsuggest-attribute=noreturn \ - -Wsuggest-attribute=pure \ - -Wsuggest-final-methods \ - -Wsuggest-final-types \ - -Wsuggest-override \ - -Wswitch \ - -Wswitch-bool \ - -Wswitch-default \ - -Wno-switch-enum \ - -Wswitch-outside-range \ - -Wswitch-unreachable \ - -Wsync-nand \ - -Wsynth \ - -Wno-system-headers \ - -Wtautological-compare \ - -Wno-templates \ - -Wterminate \ - -Wtrampolines \ - -Wtrigraphs \ - -Wtype-limits \ - -Wundef \ - -Wuninitialized \ - -Wunknown-pragmas \ - -Wunreachable-code \ - -Wunsafe-loop-optimizations \ - -Wunused \ - -Wunused-but-set-parameter \ - -Wunused-but-set-variable \ - -Wunused-const-variable=2 \ - -Wunused-function \ - -Wunused-label \ - -Wno-unused-local-typedefs \ - -Wunused-macros \ - -Wunused-parameter \ - -Wunused-result \ - -Wunused-value \ - -Wunused-variable \ - -Wuseless-cast \ - -Wvarargs \ - -Wvariadic-macros \ - -Wvector-operation-performance \ - -Wvirtual-inheritance \ - -Wvirtual-move-assign \ - -Wvla \ - -Wvolatile \ - -Wvolatile-register-var \ - -Wwrite-strings \ - -Wzero-as-null-pointer-constant \ - -Wzero-length-bounds \ - " cmake -S . -B cmake-build-pedantic -GNinja -DCMAKE_BUILD_TYPE=Debug -DJSON_MultipleHeaders=ON -DJSON_BuildTests=On - cmake --build cmake-build-pedantic - ########################################################################## # benchmarks ########################################################################## @@ -444,33 +126,6 @@ fuzzing-stop: # Static analysis ########################################################################## -# call cppcheck -# Note: this target is called by Travis -cppcheck: - cppcheck --enable=warning --inline-suppr --inconclusive --force --std=c++11 $(AMALGAMATED_FILE) --error-exitcode=1 - -# call Clang Static Analyzer -clang_analyze: - rm -fr cmake-build-clang-analyze - mkdir cmake-build-clang-analyze - cd cmake-build-clang-analyze ; CCC_CXX=$(COMPILER_DIR)/clang++ CXX=$(COMPILER_DIR)/clang++ $(COMPILER_DIR)/scan-build cmake .. -GNinja -DJSON_BuildTests=On - cd cmake-build-clang-analyze ; \ - $(COMPILER_DIR)/scan-build \ - -enable-checker alpha.core.BoolAssignment,alpha.core.CallAndMessageUnInitRefArg,alpha.core.CastSize,alpha.core.CastToStruct,alpha.core.Conversion,alpha.core.DynamicTypeChecker,alpha.core.FixedAddr,alpha.core.PointerArithm,alpha.core.PointerSub,alpha.core.SizeofPtr,alpha.core.StackAddressAsyncEscape,alpha.core.TestAfterDivZero,alpha.deadcode.UnreachableCode,core.builtin.BuiltinFunctions,core.builtin.NoReturnFunctions,core.CallAndMessage,core.DivideZero,core.DynamicTypePropagation,core.NonnilStringConstants,core.NonNullParamChecker,core.NullDereference,core.StackAddressEscape,core.UndefinedBinaryOperatorResult,core.uninitialized.ArraySubscript,core.uninitialized.Assign,core.uninitialized.Branch,core.uninitialized.CapturedBlockVariable,core.uninitialized.UndefReturn,core.VLASize,cplusplus.InnerPointer,cplusplus.Move,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,cplusplus.SelfAssignment,deadcode.DeadStores,nullability.NullableDereferenced,nullability.NullablePassedToNonnull,nullability.NullableReturnedFromNonnull,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull \ - --use-c++=$(COMPILER_DIR)/clang++ -analyze-headers -o report ninja - open cmake-build-clang-analyze/report/*/index.html - -# call cpplint -# Note: some errors expected due to false positives -cpplint: - third_party/cpplint/cpplint.py \ - --filter=-whitespace,-legal,-readability/alt_tokens,-runtime/references,-runtime/explicit \ - --quiet --recursive $(SRCS) - -# call Clang-Tidy -clang_tidy: - $(COMPILER_DIR)/clang-tidy $(SRCS) -- -Iinclude -std=c++11 - # call PVS-Studio Analyzer pvs_studio: rm -fr cmake-build-pvs-studio @@ -480,26 +135,6 @@ pvs_studio: cd cmake-build-pvs-studio ; plog-converter -a'GA:1,2;64:1;CS' -t fullhtml PVS-Studio.log -o pvs open cmake-build-pvs-studio/pvs/index.html -# call Infer static analyzer -infer: - rm -fr cmake-build-infer - mkdir cmake-build-infer - cd cmake-build-infer ; infer compile -- cmake .. -DJSON_MultipleHeaders=ON ; infer run -- make -j 4 - -# call OCLint static analyzer -oclint: - oclint $(SRCS) -report-type html -enable-global-analysis -o oclint_report.html -max-priority-1=10000 -max-priority-2=10000 -max-priority-3=10000 -- -std=c++11 -Iinclude - open oclint_report.html - -# execute the test suite with Clang sanitizers (address and undefined behavior) -clang_sanitize: - rm -fr cmake-build-clang-sanitize - mkdir cmake-build-clang-sanitize - cd cmake-build-clang-sanitize ; CXX=$(COMPILER_DIR)/clang++ cmake .. -DJSON_Sanitizer=On -DJSON_MultipleHeaders=ON -DJSON_BuildTests=On -GNinja - cd cmake-build-clang-sanitize ; ninja - cd cmake-build-clang-sanitize ; ctest -j10 - - ########################################################################## # Code format and source amalgamation ########################################################################## @@ -547,42 +182,6 @@ check-amalgamation: @diff $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) ; false) @mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) -# check if every header in nlohmann includes sufficient headers to be compiled individually -check-single-includes: - @for x in $(SRCS); do \ - echo "Checking self-sufficiency of $$x..." ; \ - echo "#include <$$x>\nint main() {}\n" | $(SED) 's|include/||' > single_include_test.cpp; \ - $(CXX) $(CXXFLAGS) -Iinclude -std=c++11 single_include_test.cpp -o single_include_test; \ - rm -f single_include_test.cpp single_include_test; \ - done - - -########################################################################## -# CMake -########################################################################## - -# grep "^option" CMakeLists.txt test/CMakeLists.txt | $(SED) 's/(/ /' | awk '{print $2}' | xargs - -# check if all flags of our CMake files work -check_cmake_flags_do: - $(CMAKE_BINARY) --version - for flag in JSON_BuildTests JSON_Install JSON_MultipleHeaders JSON_Sanitizer JSON_Valgrind JSON_NoExceptions JSON_Coverage; do \ - rm -fr cmake_build; \ - mkdir cmake_build; \ - echo "\n\n$(CMAKE_BINARY) .. -D$$flag=On\n" ; \ - cd cmake_build ; \ - $(CMAKE_BINARY) -Werror=dev .. -D$$flag=On -DCMAKE_CXX_COMPILE_FEATURES="cxx_std_11;cxx_range_for" -DCMAKE_CXX_FLAGS="-std=gnu++11" ; \ - test -f Makefile || exit 1 ; \ - cd .. ; \ - done; - -# call target `check_cmake_flags_do` twice: once for minimal required CMake version 3.1.0 and once for the installed version -check_cmake_flags: - wget https://github.com/Kitware/CMake/releases/download/v3.1.0/cmake-3.1.0-Darwin64.tar.gz - tar xfz cmake-3.1.0-Darwin64.tar.gz - CMAKE_BINARY=$(abspath cmake-3.1.0-Darwin64/CMake.app/Contents/bin/cmake) $(MAKE) check_cmake_flags_do - CMAKE_BINARY=$(shell which cmake) $(MAKE) check_cmake_flags_do - ########################################################################## # ChangeLog @@ -629,7 +228,7 @@ clean: rm -fr json_unit json_benchmarks fuzz fuzz-testing *.dSYM test/*.dSYM oclint_report.html rm -fr benchmarks/files/numbers/*.json rm -fr cmake-3.1.0-Darwin64.tar.gz cmake-3.1.0-Darwin64 - rm -fr cmake-build-coverage cmake-build-benchmarks cmake-build-pedantic fuzz-testing cmake-build-clang-analyze cmake-build-pvs-studio cmake-build-infer cmake-build-clang-sanitize cmake_build + rm -fr cmake-build-benchmarks cmake-build-pedantic fuzz-testing cmake-build-clang-analyze cmake-build-pvs-studio cmake-build-infer cmake_build $(MAKE) clean -Cdoc ########################################################################## diff --git a/cmake/ci.cmake b/cmake/ci.cmake index 3a1ecea46..8794ed078 100644 --- a/cmake/ci.cmake +++ b/cmake/ci.cmake @@ -755,7 +755,7 @@ else() ) endif() -set(JSON_CMAKE_FLAGS "JSON_BuildTests;JSON_Install;JSON_MultipleHeaders;JSON_ImplicitConversions;JSON_Sanitizer;JSON_Valgrind;JSON_NoExceptions;JSON_Coverage;JSON_Diagnostics;JSON_SystemInclude") +set(JSON_CMAKE_FLAGS "JSON_BuildTests;JSON_Install;JSON_MultipleHeaders;JSON_ImplicitConversions;JSON_Valgrind;JSON_Diagnostics;JSON_SystemInclude") foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS}) string(TOLOWER "ci_cmake_flag_${JSON_CMAKE_FLAG}" JSON_CMAKE_FLAG_TARGET) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d8c586425..cbbdcace3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,8 +1,5 @@ -option(JSON_Sanitizer "Build test suite with Clang sanitizer" OFF) -option(JSON_Valgrind "Execute test suite with Valgrind" OFF) -option(JSON_NoExceptions "Build test suite without exceptions" OFF) -option(JSON_Coverage "Build test suite with coverage information" OFF) -option(JSON_FastTests "Whether to skip expensive tests" OFF) +option(JSON_Valgrind "Execute test suite with Valgrind." OFF) +option(JSON_FastTests "Skip expensive/slow tests." OFF) # download test data include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/download_test_data.cmake) @@ -11,13 +8,6 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/download_test_data.cmake) add_test(NAME "download_test_data" COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target download_test_data) set_tests_properties(download_test_data PROPERTIES FIXTURES_SETUP TEST_DATA) -if(JSON_Sanitizer) - message(STATUS "Building test suite with Clang sanitizer") - if(NOT MSVC) - set(CMAKE_CXX_FLAGS "-g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=integer -fsanitize=nullability -fno-omit-frame-pointer -fno-sanitize-recover=all -fsanitize-recover=unsigned-integer-overflow") - endif() -endif() - if(JSON_Valgrind) find_program(CMAKE_MEMORYCHECK_COMMAND valgrind) message(STATUS "Executing test suite with Valgrind (${CMAKE_MEMORYCHECK_COMMAND})") @@ -25,36 +15,6 @@ if(JSON_Valgrind) separate_arguments(memcheck_command) endif() -if(JSON_NoExceptions) - message(STATUS "Building test suite without exceptions") - if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJSON_NOEXCEPTION") - endif() - set(DOCTEST_TEST_FILTER --no-throw) -endif() - -if(JSON_Coverage) - message(STATUS "Building test suite with coverage information") - - # from https://github.com/RWTH-HPC/CMake-codecov/blob/master/cmake/FindGcov.cmake - get_filename_component(COMPILER_PATH "${CMAKE_CXX_COMPILER}" PATH) - string(REGEX MATCH "^[0-9]+" GCC_VERSION "${CMAKE_CXX_COMPILER_VERSION}") - find_program(GCOV_BIN NAMES gcov-${GCC_VERSION} gcov HINTS ${COMPILER_PATH}) - - # collect all source files from the chosen include dir - file(GLOB_RECURSE SOURCE_FILES ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}*.hpp) - - # add target to collect coverage information and generate HTML file - # (filter script from https://stackoverflow.com/a/43726240/266378) - add_custom_target(lcov_html - COMMAND lcov --directory . --capture --output-file json.info --rc lcov_branch_coverage=1 - COMMAND lcov -e json.info ${SOURCE_FILES} --output-file json.info.filtered --gcov-tool ${GCOV_BIN} --rc lcov_branch_coverage=1 - COMMAND ${CMAKE_SOURCE_DIR}/test/thirdparty/imapdl/filterbr.py json.info.filtered > json.info.filtered.noexcept - COMMAND genhtml --title "JSON for Modern C++" --legend --demangle-cpp --output-directory html --show-details --branch-coverage json.info.filtered.noexcept - COMMENT "Generating HTML report test/html/index.html" - ) -endif() - ############################################################################# # doctest library with the main function to speed up build ############################################################################# @@ -108,11 +68,6 @@ foreach(file ${files}) target_include_directories(${testcase} PRIVATE ${CMAKE_BINARY_DIR}/include thirdparty/doctest thirdparty/fifo_map) target_link_libraries(${testcase} PRIVATE ${NLOHMANN_JSON_TARGET_NAME}) - if (JSON_Coverage) - target_compile_options(${testcase} PRIVATE --coverage) - target_link_libraries(${testcase} PRIVATE --coverage) - endif() - if (JSON_FastTests) add_test(NAME "${testcase}" COMMAND ${testcase} ${DOCTEST_TEST_FILTER}