diff --git a/.github/workflows/check_amalgamation.yml b/.github/workflows/check_amalgamation.yml index a497b4ce4..eb964c979 100644 --- a/.github/workflows/check_amalgamation.yml +++ b/.github/workflows/check_amalgamation.yml @@ -83,8 +83,7 @@ jobs: # byte for byte), so there is nothing to gain from checking out a # separate copy, and doing so would make this step fail on a PR # that adds support for a new dispatch table until that PR itself - # merges to develop, the same way generate_natvis.py's --version - # requirement briefly did. + # merges to develop. TMPDIR=$(mktemp -d ./macro_builder_check.XXXXXX) c++ -std=c++11 tools/macro_builder/main.cpp -o "$TMPDIR/macro_builder" "$TMPDIR/macro_builder" > "$TMPDIR/paste.hpp" @@ -117,7 +116,6 @@ jobs: python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json.json -s . python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json_fwd.json -s . - cp include/nlohmann/json_literals.hpp $INCLUDE_DIR/json_literals.hpp # the header list of the Bazel "json" target must match the files in include/ cmake -P cmake/scripts/gen_bazel_build_file.cmake @@ -138,17 +136,13 @@ jobs: ${{ github.workspace }}/venv/bin/astyle --project=tools/astyle/.astylerc --suffix=none --quiet \ $(find $SOURCE_DIRS -type f \( -name '*.hpp' -o -name '*.cpp' -o -name '*.cu' \) -not -path 'tests/thirdparty/*' -not -path 'tests/abi/include/nlohmann/*' | sort) + # json_literals.hpp is copied verbatim from the (now formatted) include/ + # directory, like `make amalgamate` does + cp include/nlohmann/json_literals.hpp $INCLUDE_DIR/json_literals.hpp + - name: Regenerate nlohmann_json.natvis run: | cd $MAIN_DIR - # Pass --version explicitly so this step also works with the tool - # copy from develop before this repository's own generate_natvis.py - # learns to derive the version itself: the older script requires - # --version, and the newer one accepts it as an explicit override. - ABI_MACROS=include/nlohmann/detail/abi_macros.hpp - VERSION_MAJOR=$(grep -m1 'define NLOHMANN_JSON_VERSION_MAJOR' $ABI_MACROS | grep -o '[0-9]\+') - VERSION_MINOR=$(grep -m1 'define NLOHMANN_JSON_VERSION_MINOR' $ABI_MACROS | grep -o '[0-9]\+') - VERSION_PATCH=$(grep -m1 'define NLOHMANN_JSON_VERSION_PATCH' $ABI_MACROS | grep -o '[0-9]\+') # The template is what this check verifies the committed natvis # file against, so take it from this PR rather than from the # develop checkout: generate_natvis.py loads the template from its @@ -156,7 +150,7 @@ jobs: # template could never pass. Like the macro_builder step above, # this only renders PR content in a job without credentials. cp tools/generate_natvis/nlohmann_json.natvis.j2 $NATVIS_TOOL_DIR/ - python3 $NATVIS_TOOL_DIR/generate_natvis.py --version "$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH" $MAIN_DIR + python3 $NATVIS_TOOL_DIR/generate_natvis.py $MAIN_DIR - name: Build patch and check for differences id: diff @@ -165,7 +159,7 @@ jobs: mkdir -p ${{ github.workspace }}/patch git diff --patch --no-color > ${{ github.workspace }}/patch/amalgamation.patch if [ -s ${{ github.workspace }}/patch/amalgamation.patch ]; then - echo "The source code has not been amalgamated/formatted correctly or BUILD.bazel is out of date. Diff:" + echo "The source code has not been amalgamated/formatted correctly, or BUILD.bazel, nlohmann_json.natvis, or the macro_builder tables in macro_scope.hpp are out of date ('make amalgamate BUILD.bazel natvis' fixes all but the tables, see tools/macro_builder/README.md). Diff:" cat ${{ github.workspace }}/patch/amalgamation.patch echo "has_diff=true" >> "$GITHUB_OUTPUT" else diff --git a/.github/workflows/comment_check_amalgamation.yml b/.github/workflows/comment_check_amalgamation.yml index d5bd23fc8..32bca8486 100644 --- a/.github/workflows/comment_check_amalgamation.yml +++ b/.github/workflows/comment_check_amalgamation.yml @@ -96,7 +96,7 @@ jobs: issue_number: issue_number, owner: context.repo.owner, repo: context.repo.repo, - body: '## šŸ”“ Amalgamation check failed! šŸ”“\nThe source code has not been amalgamated and/or formatted correctly, or `BUILD.bazel` is out of date.' + body: '## šŸ”“ Amalgamation check failed! šŸ”“\nThe source code has not been amalgamated and/or formatted correctly, or `BUILD.bazel`, `nlohmann_json.natvis`, or the macro_builder tables in `macro_scope.hpp` are out of date. `make amalgamate BUILD.bazel natvis` fixes all but the tables (see `tools/macro_builder/README.md`).' + (hasPatch ? '\n\nšŸ“Ž A ready-to-apply patch is attached to the [failed workflow run](' + runUrl + ') as the `amalgamation-patch` artifact.' + ' Download it, then apply it locally from the repository root with:' + '\n\n```shell\ngit apply amalgamation.patch\n```\n\n' diff --git a/.github/workflows/publish_documentation.yml b/.github/workflows/publish_documentation.yml index 5e39574bc..3256c819b 100644 --- a/.github/workflows/publish_documentation.yml +++ b/.github/workflows/publish_documentation.yml @@ -15,6 +15,7 @@ on: - .github/SECURITY.md - cmake/clang_flags.cmake - cmake/gcc_flags.cmake + - include/nlohmann/detail/abi_macros.hpp - tests/fmt_formatter/project/main.cpp - tools/astyle/.astylerc workflow_dispatch: diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 3c94bc1e4..edce983a5 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -109,7 +109,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - target: [ci_test_amalgamation, ci_test_single_header, ci_cppcheck, ci_cpplint, ci_reproducible_tests, ci_non_git_tests, ci_offline_testdata, ci_reuse_compliance, ci_test_valgrind] + target: [ci_test_single_header, ci_cppcheck, ci_cpplint, ci_reproducible_tests, ci_non_git_tests, ci_offline_testdata, ci_reuse_compliance, ci_test_valgrind] steps: - name: Harden Runner uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 @@ -117,6 +117,7 @@ jobs: egress-policy: audit - name: Install Valgrind + if: matrix.target == 'ci_test_valgrind' run: sudo apt-get update ; sudo apt-get install -y valgrind - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -279,7 +280,7 @@ jobs: persist-credentials: false - name: Get latest CMake and ninja uses: lukka/get-cmake@fffaaafeea488556c2c12dad60690008bc1caacb # v4.4.2 - - name: Set env FORCE_STDCPPFS_FLAG for clang 7 / 8 / 9 / 10 + - name: Disable filesystem support (std::filesystem is unusable) for clang 7 / 8 / 9 / 10 run: echo "JSON_FORCED_GLOBAL_COMPILE_OPTIONS=-DJSON_HAS_FILESYSTEM=0;-DJSON_HAS_EXPERIMENTAL_FILESYSTEM=0" >> "$GITHUB_ENV" if: ${{ matrix.compiler == '7' || matrix.compiler == '8' || matrix.compiler == '9' || matrix.compiler == '10' }} - name: Run CMake diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c5220e66c..d906752a0 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -187,7 +187,7 @@ jobs: - name: Test run: cd build ; ctest -j 10 -C Debug --output-on-failure - clang-cl-12: + clang-cl: runs-on: windows-2022 strategy: matrix: diff --git a/BUILD.bazel b/BUILD.bazel index 268c3e959..08d242eef 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -81,6 +81,7 @@ cc_library( hdrs = [ "single_include/nlohmann/json.hpp", "single_include/nlohmann/json_fwd.hpp", + "single_include/nlohmann/json_literals.hpp", ], includes = ["single_include"], visibility = ["//visibility:public"], diff --git a/CMakeLists.txt b/CMakeLists.txt index 19f5dca30..1369b973e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ endif () option(NLOHMANN_JSON_BUILD_MODULES "Build C++ modules support" OFF) if(NLOHMANN_JSON_BUILD_MODULES) - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) + if(NOT CMAKE_VERSION VERSION_LESS 3.28) message(STATUS "Building nlohmann.json C++ module") add_subdirectory(src/modules) else() diff --git a/Makefile b/Makefile index 093fbb7b5..3bd8da5ff 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: pretty clean ChangeLog.md release update_hedley update_hedley_undef BUILD.bazel natvis macro_builder_check check_build_options +.PHONY: all amalgamate check-amalgamation check_build_options pretty install_astyle clean ChangeLog.md release update_hedley update_hedley_undef BUILD.bazel natvis macro_builder_check run_benchmarks pvs_studio serve_header reuse spdx ########################################################################## # configuration @@ -41,12 +41,18 @@ all: @echo "BUILD.bazel - regenerate the Bazel BUILD file from the include/nlohmann sources" @echo "ChangeLog.md - generate ChangeLog file" @echo "check-amalgamation - check whether sources have been amalgamated and BUILD.bazel is up to date" + @echo "check_build_options - check that the Meson build and the pkg-config files offer the options of the CMake target" @echo "clean - remove built files" - @echo "fuzzing - see tests/fuzzing.md for how to build and run the fuzzers" + @echo "(fuzzers) - see tests/fuzzing.md, or run 'make -C tests fuzzers' to build the AFL fuzzers" @echo "macro_builder_check - check that macro_scope.hpp matches tools/macro_builder's output" @echo "natvis - regenerate nlohmann_json.natvis from the current ABI tags and version" @echo "pretty - beautify code with Artistic Style" + @echo "pvs_studio - run the PVS-Studio static analyzer and open the report" + @echo "release - create the release files (include.zip, json.tar.xz, single headers, signatures, hashes)" + @echo "reuse - annotate the source files with REUSE license headers and lint them" @echo "run_benchmarks - build and run benchmarks" + @echo "serve_header - serve the single header, re-amalgamated on demand (see tools/serve_header)" + @echo "spdx - generate the SPDX software bill of materials nlohmann_json.spdx" @echo "update_hedley - download Hedley and regenerate hedley.hpp / hedley_undef.hpp" @echo "update_hedley_undef - rebuild hedley_undef.hpp from the JSON_HEDLEY_* #define names in hedley.hpp" @@ -108,13 +114,18 @@ $(AMALGAMATED_FWD_FILE): $(SRCS) $(AMALGAMATED_LITERALS_FILE): include/nlohmann/json_literals.hpp cp include/nlohmann/json_literals.hpp $(AMALGAMATED_LITERALS_FILE) +NATVIS_VENV=tools/generate_natvis/venv + # regenerate nlohmann_json.natvis from the ABI tags and version in include/nlohmann/detail/abi_macros.hpp +# (the dependencies are installed into a virtual environment first) natvis: - python3 tools/generate_natvis/generate_natvis.py . + @test -d $(NATVIS_VENV) || python3 -mvenv $(NATVIS_VENV) + @$(NATVIS_VENV)/bin/python3 -c 'import jinja2' 2>/dev/null || $(NATVIS_VENV)/bin/pip3 install --quiet -r tools/generate_natvis/requirements.txt + $(NATVIS_VENV)/bin/python3 tools/generate_natvis/generate_natvis.py . # regenerate the two tools/macro_builder blocks of $(MACRO_SCOPE_HPP) (see its README.md) and diff against the # checked-in header; phony, because it never writes $(MACRO_SCOPE_HPP) itself -macro_builder_check: +macro_builder_check: install_astyle @set -e; \ TMPDIR=$$(mktemp -d ./macro_builder_check.XXXXXX); \ trap 'rm -rf "$$TMPDIR"' EXIT; \ @@ -131,27 +142,27 @@ macro_builder_check: check_build_options: python3 tools/check_build_options/check_build_options.py . -# check if file single_include/nlohmann/json.hpp has been amalgamated from the nlohmann sources +# check if the single headers have been amalgamated from the nlohmann sources and if BUILD.bazel and +# nlohmann_json.natvis are up to date; all checks are run, and the checked-in files are always restored check-amalgamation: - @mv $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ - @mv $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ - @mv $(AMALGAMATED_LITERALS_FILE) $(AMALGAMATED_LITERALS_FILE)~ - @$(MAKE) amalgamate - @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) - @diff $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) ; false) - @diff $(AMALGAMATED_LITERALS_FILE) $(AMALGAMATED_LITERALS_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_LITERALS_FILE)~ $(AMALGAMATED_LITERALS_FILE) ; false) - @mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) - @mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) - @mv $(AMALGAMATED_LITERALS_FILE)~ $(AMALGAMATED_LITERALS_FILE) - @mv BUILD.bazel BUILD.bazel~ - @$(MAKE) BUILD.bazel - @diff BUILD.bazel BUILD.bazel~ || (echo "===================================================================\n BUILD.bazel is out of date! Please run 'make BUILD.bazel'.\n===================================================================" ; mv BUILD.bazel~ BUILD.bazel ; false) - @mv BUILD.bazel~ BUILD.bazel - @mv nlohmann_json.natvis nlohmann_json.natvis~ - @$(MAKE) natvis - @diff nlohmann_json.natvis nlohmann_json.natvis~ || (echo "===================================================================\n nlohmann_json.natvis is out of date! Please run 'make natvis'.\n===================================================================" ; mv nlohmann_json.natvis~ nlohmann_json.natvis ; false) - @mv nlohmann_json.natvis~ nlohmann_json.natvis - @$(MAKE) macro_builder_check + @status=0; \ + banner() { printf '===================================================================\n %s\n===================================================================\n' "$$1"; }; \ + for FILE in $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE) BUILD.bazel nlohmann_json.natvis; do \ + mv "$$FILE" "$$FILE~" || exit 1; \ + done; \ + $(MAKE) amalgamate || status=1; \ + $(MAKE) BUILD.bazel || status=1; \ + $(MAKE) natvis || status=1; \ + for FILE in $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE); do \ + diff "$$FILE" "$$FILE~" || { banner "$$FILE is out of date! Amalgamation required! Please read the contribution guidelines in file .github/CONTRIBUTING.md."; status=1; }; \ + done; \ + diff BUILD.bazel BUILD.bazel~ || { banner "BUILD.bazel is out of date! Please run 'make BUILD.bazel'."; status=1; }; \ + diff nlohmann_json.natvis nlohmann_json.natvis~ || { banner "nlohmann_json.natvis is out of date! Please run 'make natvis'."; status=1; }; \ + for FILE in $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE) BUILD.bazel nlohmann_json.natvis; do \ + mv "$$FILE~" "$$FILE"; \ + done; \ + $(MAKE) macro_builder_check || status=1; \ + exit $$status # generate the Bazel BUILD file; phony, because a removed header would not trigger a rebuild BUILD.bazel: @@ -212,8 +223,8 @@ release: include.zip json.tar.xz # clean up clean: - rm -fr fuzz fuzz-testing *.dSYM tests/*.dSYM - rm -fr cmake-build-benchmarks fuzz-testing cmake-build-pvs-studio release_files + rm -fr *.dSYM tests/*.dSYM tests/parse_*_fuzzer + rm -fr cmake-build-benchmarks cmake-build-pvs-studio release_files $(MAKE) clean -Cdocs diff --git a/cmake/ci.cmake b/cmake/ci.cmake index 15345c5d6..5affec6c5 100644 --- a/cmake/ci.cmake +++ b/cmake/ci.cmake @@ -5,15 +5,14 @@ set(N 10) # Needed tools. ############################################################################### -include(FindPython3) find_package(Python3 COMPONENTS Interpreter) -find_program(CLANG_TOOL NAMES clang++-HEAD clang++ clang++-22 clang++-21 clang++-20 clang++-19 clang++-18 clang++-17 clang++-16 clang++-15 clang++-14 clang++-13 clang++-12 clang++-11 clang++) +find_program(CLANG_TOOL NAMES clang++ clang++-HEAD clang++-22 clang++-21 clang++-20 clang++-19 clang++-18 clang++-17 clang++-16 clang++-15 clang++-14 clang++-13 clang++-12 clang++-11) execute_process(COMMAND ${CLANG_TOOL} --version OUTPUT_VARIABLE CLANG_TOOL_VERSION ERROR_VARIABLE CLANG_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TOOL_VERSION "${CLANG_TOOL_VERSION}") message(STATUS "šŸ”– Clang ${CLANG_TOOL_VERSION} (${CLANG_TOOL})") -find_program(CLANG_TIDY_TOOL NAMES clang-tidy-22 clang-tidy-21 clang-tidy-20 clang-tidy-19 clang-tidy-18 clang-tidy-17 clang-tidy-16 clang-tidy-15 clang-tidy-14 clang-tidy-13 clang-tidy-12 clang-tidy-11 clang-tidy) +find_program(CLANG_TIDY_TOOL NAMES clang-tidy clang-tidy-22 clang-tidy-21 clang-tidy-20 clang-tidy-19 clang-tidy-18 clang-tidy-17 clang-tidy-16 clang-tidy-15 clang-tidy-14 clang-tidy-13 clang-tidy-12 clang-tidy-11) execute_process(COMMAND ${CLANG_TIDY_TOOL} --version OUTPUT_VARIABLE CLANG_TIDY_TOOL_VERSION ERROR_VARIABLE CLANG_TIDY_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TIDY_TOOL_VERSION "${CLANG_TIDY_TOOL_VERSION}") message(STATUS "šŸ”– Clang-Tidy ${CLANG_TIDY_TOOL_VERSION} (${CLANG_TIDY_TOOL})") @@ -69,9 +68,7 @@ string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" VALGRIND_TOOL_VERSION "${VALGRIND_TOOL_V message(STATUS "šŸ”– Valgrind ${VALGRIND_TOOL_VERSION} (${VALGRIND_TOOL})") find_program(GENHTML_TOOL NAMES genhtml) -find_program(PLOG_CONVERTER_TOOL NAMES plog-converter) -find_program(PVS_STUDIO_ANALYZER_TOOL NAMES pvs-studio-analyzer) -find_program(SCAN_BUILD_TOOL NAMES scan-build-15 scan-build-14 scan-build-13 scan-build-12 scan-build-11 scan-build) +find_program(SCAN_BUILD_TOOL NAMES scan-build scan-build-22 scan-build-21 scan-build-20 scan-build-19 scan-build-18 scan-build-17 scan-build-16 scan-build-15 scan-build-14 scan-build-13 scan-build-12 scan-build-11) # the individual source files file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp) @@ -367,7 +364,7 @@ add_custom_target(ci_test_coverage COMMAND ${LCOV_TOOL} --directory . --capture --output-file json.info --rc branch_coverage=1 --rc geninfo_unexecuted_blocks=1 --ignore-errors mismatch --ignore-errors unused COMMAND ${LCOV_TOOL} -e json.info ${SRC_FILES} --output-file json.info.filtered --rc branch_coverage=1 --ignore-errors unused COMMAND ${CMAKE_SOURCE_DIR}/tests/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 + COMMAND ${GENHTML_TOOL} --title "JSON for Modern C++" --legend --demangle-cpp --output-directory html --show-details --branch-coverage json.info.filtered.noexcept COMMENT "Compile and test with coverage" ) @@ -392,8 +389,8 @@ add_custom_target(ci_test_clang_sanitizer # Check if header is amalgamated and sources are properly indented. ############################################################################### -# Same file set as .github/workflows/check_amalgamation.yml, so a direct push to develop/master/release/* -# (which only this CMake target checks, not the pull_request-only workflow) is held to the same standard. +# Same file set as .github/workflows/check_amalgamation.yml, so this CMake target (which can be run locally) is held +# to the same standard as the workflow (which runs for pull requests and for pushes to develop/master/release/*). file(GLOB_RECURSE INDENT_FILES ${PROJECT_SOURCE_DIR}/docs/mkdocs/docs/examples/*.hpp ${PROJECT_SOURCE_DIR}/docs/mkdocs/docs/examples/*.cpp @@ -423,7 +420,7 @@ add_custom_target(ci_test_amalgamation COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json.json -s . COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json_fwd.json -s . COMMAND cp ${PROJECT_SOURCE_DIR}/include/nlohmann/json_literals.hpp ${include_dir}/json_literals.hpp - COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=none ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp + COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=none ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp ${include_dir}/json_literals.hpp COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/scripts/gen_bazel_build_file.cmake COMMAND diff ${include_dir}/json.hpp~ ${include_dir}/json.hpp @@ -434,6 +431,8 @@ add_custom_target(ci_test_amalgamation COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=orig ${INDENT_FILES} COMMAND for FILE in `find . -name '*.orig'`\; do false \; done + COMMAND rm -f ${include_dir}/json.hpp~ ${include_dir}/json_fwd.hpp~ ${include_dir}/json_literals.hpp~ ${PROJECT_SOURCE_DIR}/BUILD.bazel~ + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Check amalgamation, formatting, and BUILD.bazel" ) @@ -719,7 +718,7 @@ ci_get_cmake(4.0.0 CMAKE_4_0_0_BINARY) # the tests require CMake 3.13 or later, so they are excluded for CMake 3.5.0 set(JSON_CMAKE_FLAGS_3_5_0 JSON_Diagnostics JSON_Diagnostic_Positions JSON_GlobalUDLs JSON_ImplicitConversions JSON_DisableEnumSerialization - JSON_LegacyDiscardedValueComparison JSON_Install JSON_MultipleHeaders JSON_SystemInclude JSON_Valgrind + JSON_DisableTupleReferenceConversion JSON_LegacyDiscardedValueComparison JSON_Install JSON_MultipleHeaders JSON_SystemInclude JSON_Valgrind JSON_StrictNulHandling JSON_StrictBinaryUTF8 JSON_DeleteDeprecatedFunctions) set(JSON_CMAKE_FLAGS_3_31_6 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_5_0}) set(JSON_CMAKE_FLAGS_4_0_0 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_5_0}) @@ -776,17 +775,14 @@ add_custom_target(ci_cmake_flags # Use more installed compilers. ############################################################################### -foreach(COMPILER g++-4.8 g++-4.9 g++-5 g++-6 g++-7 g++-8 g++-9 g++-10 g++-11 clang++-3.5 clang++-3.6 clang++-3.7 clang++-3.8 clang++-3.9 clang++-4.0 clang++-5.0 clang++-6.0 clang++-7 clang++-8 clang++-9 clang++-10 clang++-11 clang++-12 clang++-13 clang++-14 clang++-15 clang++-16 clang++-17 clang++-18 clang++-19 clang++-20) +foreach(COMPILER g++-4.8 g++-4.9 g++-5 g++-6) find_program(COMPILER_TOOL NAMES ${COMPILER}) if (COMPILER_TOOL) - unset(ADDITIONAL_FLAGS) - add_custom_target(ci_test_compiler_${COMPILER} COMMAND CXX=${COMPILER} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} - ${ADDITIONAL_FLAGS} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} COMMAND cd ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with ${COMPILER}" @@ -800,7 +796,6 @@ add_custom_target(ci_test_compiler_default -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_compiler_default - ${ADDITIONAL_FLAGS} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_compiler_default --parallel ${N} COMMAND cd ${PROJECT_BINARY_DIR}/build_compiler_default && ${CMAKE_CTEST_COMMAND} --parallel ${N} -LE git_required --output-on-failure COMMENT "Compile and test with default C++ compiler" @@ -823,10 +818,12 @@ add_custom_target(ci_cuda_example add_custom_target(ci_module_cpp20 COMMAND ${CMAKE_COMMAND} - -DCMAKE_BUILD_TYPE=Debug -GNinja + -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_CI=ON -DNLOHMANN_JSON_BUILD_MODULES=ON -DJSON_Install=ON + "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" -S${PROJECT_SOURCE_DIR}/tests/module_cpp20 -B${PROJECT_BINARY_DIR}/ci_module_cpp20 COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/ci_module_cpp20 + VERBATIM ) ############################################################################### diff --git a/cmake/scripts/gen_bazel_build_file.cmake b/cmake/scripts/gen_bazel_build_file.cmake index ca5069cb0..fc4e5bab4 100644 --- a/cmake/scripts/gen_bazel_build_file.cmake +++ b/cmake/scripts/gen_bazel_build_file.cmake @@ -49,6 +49,7 @@ cc_library( hdrs = [ "single_include/nlohmann/json.hpp", "single_include/nlohmann/json_fwd.hpp", + "single_include/nlohmann/json_literals.hpp", ], includes = ["single_include"], visibility = ["//visibility:public"], diff --git a/tools/amalgamate/config_json_view.json b/tools/amalgamate/config_json_view.json deleted file mode 100644 index cd25df087..000000000 --- a/tools/amalgamate/config_json_view.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "project": "JSON for Modern C++", - "target": "single_include/nlohmann/json_view.hpp", - "sources": [ - "include/nlohmann/json_view.hpp" - ], - "include_paths": ["include"], - "external": ["nlohmann/json.hpp"] -} diff --git a/tools/generate_natvis/README.md b/tools/generate_natvis/README.md index 3995758c2..30ec550a4 100644 --- a/tools/generate_natvis/README.md +++ b/tools/generate_natvis/README.md @@ -15,7 +15,8 @@ file or the library version is bumped — otherwise the committed make natvis ``` -or, equivalently: +`make natvis` sets up a virtual environment `tools/generate_natvis/venv` with the dependencies from +`requirements.txt` (Jinja2) and runs the script with it. Alternatively, install the requirements yourself and run: ```shell ./generate_natvis.py [--version X.Y.Z] [repository_root/]