We used to use the current timestamp when building the archive; switch to using the timestamp of the tag with the version we're packaging. This requires some monkey patching since tarfile module is always using current timestamp when writing gzip header... Also exclude archive.py from archive and simplify release file list in Makefile.
100 lines
2.5 KiB
Makefile
100 lines
2.5 KiB
Makefile
.SUFFIXES:
|
|
MAKEFLAGS+=-r
|
|
|
|
config=debug
|
|
defines=standard
|
|
cxxstd=c++11
|
|
# set cxxstd=any to disable use of -std=...
|
|
|
|
BUILD=build/make-$(CXX)-$(config)-$(defines)-$(cxxstd)
|
|
|
|
SOURCES=src/pugixml.cpp $(filter-out tests/fuzz_%,$(wildcard tests/*.cpp))
|
|
EXECUTABLE=$(BUILD)/test
|
|
|
|
VERSION=$(shell sed -n 's/.*version \(.*\).*/\1/p' src/pugiconfig.hpp)
|
|
RELEASE=$(filter-out scripts/archive.py docs/%.adoc,$(shell git ls-files contrib docs scripts src CMakeLists.txt readme.txt))
|
|
|
|
CXXFLAGS=-g -Wall -Wextra -Werror -pedantic -Wundef -Wshadow -Wcast-align -Wcast-qual -Wold-style-cast
|
|
LDFLAGS=
|
|
|
|
ifeq ($(config),release)
|
|
CXXFLAGS+=-O3 -DNDEBUG
|
|
endif
|
|
|
|
ifeq ($(config),coverage)
|
|
CXXFLAGS+=-coverage
|
|
LDFLAGS+=-coverage
|
|
endif
|
|
|
|
ifeq ($(config),sanitize)
|
|
CXXFLAGS+=-fsanitize=address
|
|
LDFLAGS+=-fsanitize=address
|
|
|
|
ifneq ($(shell uname),Darwin)
|
|
CXXFLAGS+=-fsanitize=undefined
|
|
LDFLAGS+=-fsanitize=undefined
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(config),analyze)
|
|
CXXFLAGS+=--analyze
|
|
endif
|
|
|
|
ifneq ($(defines),standard)
|
|
COMMA=,
|
|
CXXFLAGS+=-D $(subst $(COMMA), -D ,$(defines))
|
|
endif
|
|
|
|
ifneq ($(findstring PUGIXML_NO_EXCEPTIONS,$(defines)),)
|
|
CXXFLAGS+=-fno-exceptions
|
|
endif
|
|
|
|
ifneq ($(cxxstd),any)
|
|
CXXFLAGS+=-std=$(cxxstd)
|
|
endif
|
|
|
|
OBJECTS=$(SOURCES:%=$(BUILD)/%.o)
|
|
|
|
all: $(EXECUTABLE)
|
|
|
|
ifeq ($(config),coverage)
|
|
test: $(EXECUTABLE)
|
|
-@find $(BUILD) -name '*.gcda' -exec rm {} +
|
|
./$(EXECUTABLE)
|
|
@gcov -o $(BUILD)/src/ pugixml.cpp.gcda | sed -e '/./{H;$!d;}' -e 'x;/pugixml.cpp/!d;'
|
|
@find . -name '*.gcov' -and -not -name 'pugixml.cpp.gcov' -exec rm {} +
|
|
else
|
|
test: $(EXECUTABLE)
|
|
./$(EXECUTABLE)
|
|
endif
|
|
|
|
fuzz:
|
|
@mkdir -p $(BUILD)
|
|
$(AFL)/afl-clang++ tests/fuzz_parse.cpp tests/allocator.cpp src/pugixml.cpp $(CXXFLAGS) -o $(BUILD)/fuzz_parse
|
|
$(AFL)/afl-fuzz -i tests/data_fuzz_parse -o $(BUILD)/fuzz_parse_out -x $(AFL)/testcases/_extras/xml/ -- $(BUILD)/fuzz_parse @@
|
|
|
|
clean:
|
|
rm -rf $(BUILD)
|
|
|
|
release: build/pugixml-$(VERSION).tar.gz build/pugixml-$(VERSION).zip
|
|
|
|
docs: docs/quickstart.html docs/manual.html
|
|
|
|
build/pugixml-%: .FORCE | $(RELEASE)
|
|
@mkdir -p $(BUILD)
|
|
TIMESTAMP=`git show v$(VERSION) -s --format=%ct` && python scripts/archive.py $@ pugixml-$(VERSION) $$TIMESTAMP $|
|
|
|
|
$(EXECUTABLE): $(OBJECTS)
|
|
$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
|
|
|
|
$(BUILD)/%.o: %
|
|
@mkdir -p $(dir $@)
|
|
$(CXX) $< $(CXXFLAGS) -c -MMD -MP -o $@
|
|
|
|
-include $(OBJECTS:.o=.d)
|
|
|
|
.SECONDEXPANSION:
|
|
docs/%.html: docs/%.adoc $$(shell sed -n 's/include\:\:\(.*\)\[.*/docs\/\1/p' docs/%.adoc)
|
|
asciidoctor -b html5 -a version=$(VERSION) $< -o $@
|
|
|
|
.PHONY: all test clean release .FORCE
|