mirror of
https://github.com/nlohmann/json.git
synced 2026-10-03 13:10:33 +00:00
docs/Makefile's debug echo used a space instead of a comma in $(call cxx_standard ...), so it always printed an empty standard. Every example was also compiled with -Wno-deprecated-declarations, which would silently hide an accidental deprecated-API call in any of them. Factor the duplicated compile flags into EXAMPLE_CPPFLAGS/ EXAMPLE_WARNFLAGS, build with -Werror=deprecated-declarations by default, and only allow the three examples that intentionally document deprecated API (the DEPRECATED_EXAMPLES list) to suppress it. Part of #5718 Signed-off-by: Niels Lohmann <mail@nlohmann.me>
56 lines
2.0 KiB
Makefile
56 lines
2.0 KiB
Makefile
SRCDIR = ../single_include
|
|
|
|
all: create_output
|
|
|
|
##########################################################################
|
|
# example files
|
|
##########################################################################
|
|
|
|
# where are the example cpp files
|
|
EXAMPLES = $(wildcard mkdocs/docs/examples/*.cpp)
|
|
|
|
cxx_standard = $(lastword c++11 $(filter c++%, $(subst ., ,$1)))
|
|
|
|
# common compile flags for the stand-alone example files
|
|
EXAMPLE_CPPFLAGS = -I $(SRCDIR) -DJSON_USE_GLOBAL_UDLS=0
|
|
EXAMPLE_WARNFLAGS = -Werror=deprecated-declarations
|
|
|
|
# examples that document deprecated API and are allowed to use it
|
|
DEPRECATED_EXAMPLES = $(addprefix mkdocs/docs/examples/, \
|
|
json_pointer__operator__equal_stringtype \
|
|
json_pointer__operator__notequal_stringtype \
|
|
json_pointer__operator_string_t)
|
|
$(DEPRECATED_EXAMPLES:=.output) $(DEPRECATED_EXAMPLES:=.test): EXAMPLE_WARNFLAGS = -Wno-deprecated-declarations
|
|
|
|
# create output from a stand-alone example file
|
|
%.output: %.cpp
|
|
@echo "standard $(call cxx_standard,$(<:.cpp=))"
|
|
$(MAKE) $(<:.cpp=) \
|
|
CPPFLAGS="$(EXAMPLE_CPPFLAGS)" \
|
|
CXXFLAGS="-std=$(call cxx_standard,$(<:.cpp=)) $(EXAMPLE_WARNFLAGS)"
|
|
./$(<:.cpp=) > $@
|
|
rm $(<:.cpp=)
|
|
|
|
# compare created output with current output of the example files
|
|
%.test: %.cpp
|
|
$(MAKE) $(<:.cpp=) \
|
|
CPPFLAGS="$(EXAMPLE_CPPFLAGS)" \
|
|
CXXFLAGS="-std=$(call cxx_standard,$(<:.cpp=)) $(EXAMPLE_WARNFLAGS)"
|
|
./$(<:.cpp=) > $@
|
|
diff $@ $(<:.cpp=.output)
|
|
rm $(<:.cpp=) $@
|
|
|
|
# create output from all stand-alone example files
|
|
create_output: $(EXAMPLES:.cpp=.output)
|
|
|
|
# check output of all stand-alone example files
|
|
check_output: $(EXAMPLES:.cpp=.test)
|
|
|
|
# check output of all stand-alone example files (exclude files with platform-dependent output.)
|
|
# This target is used in the CI (ci_test_documentation).
|
|
check_output_portable: $(filter-out mkdocs/docs/examples/meta.test mkdocs/docs/examples/max_size.test mkdocs/docs/examples/std_hash.test mkdocs/docs/examples/basic_json__CompatibleType.test,$(EXAMPLES:.cpp=.test))
|
|
|
|
clean:
|
|
rm -fr $(EXAMPLES:.cpp=)
|
|
$(MAKE) clean -C docset
|