2015-03-20 00:34:37 -07:00
|
|
|
.SUFFIXES:
|
|
|
|
MAKEFLAGS+=-r
|
|
|
|
|
2014-02-09 21:56:30 +00:00
|
|
|
config=debug
|
|
|
|
defines=standard
|
2016-01-24 19:52:49 +01:00
|
|
|
cxxstd=c++11
|
|
|
|
# set cxxstd=any to disable use of -std=...
|
2014-02-09 21:56:30 +00:00
|
|
|
|
2016-01-24 19:52:49 +01:00
|
|
|
BUILD=build/make-$(CXX)-$(config)-$(defines)-$(cxxstd)
|
2014-02-09 21:56:30 +00:00
|
|
|
|
2015-03-20 00:34:37 -07:00
|
|
|
SOURCES=src/pugixml.cpp $(filter-out tests/fuzz_%,$(wildcard tests/*.cpp))
|
2014-02-09 21:56:30 +00:00
|
|
|
EXECUTABLE=$(BUILD)/test
|
|
|
|
|
2015-03-20 00:36:10 -07:00
|
|
|
VERSION=$(shell sed -n 's/.*version \(.*\).*/\1/p' src/pugiconfig.hpp)
|
2016-06-10 21:12:00 -07:00
|
|
|
RELEASE=$(shell git ls-files src docs/*.html docs/*.css docs/samples docs/images scripts contrib CMakeLists.txt readme.txt)
|
2015-03-20 00:36:10 -07:00
|
|
|
|
2016-07-10 18:19:18 -07:00
|
|
|
CXXFLAGS=-g -Wall -Wextra -Werror -pedantic -Wundef -Wshadow -Wcast-align -Wcast-qual -Wold-style-cast
|
2014-02-09 21:56:30 +00:00
|
|
|
LDFLAGS=
|
|
|
|
|
|
|
|
ifeq ($(config),release)
|
|
|
|
CXXFLAGS+=-O3 -DNDEBUG
|
|
|
|
endif
|
|
|
|
|
2014-10-25 05:28:37 +00:00
|
|
|
ifeq ($(config),coverage)
|
2015-08-25 08:12:54 -07:00
|
|
|
CXXFLAGS+=-coverage
|
|
|
|
LDFLAGS+=-coverage
|
2014-10-25 05:28:37 +00:00
|
|
|
endif
|
|
|
|
|
2015-05-12 20:57:57 -07:00
|
|
|
ifeq ($(config),sanitize)
|
2015-06-13 00:00:08 -07:00
|
|
|
CXXFLAGS+=-fsanitize=address
|
|
|
|
LDFLAGS+=-fsanitize=address
|
|
|
|
|
|
|
|
ifneq ($(shell uname),Darwin)
|
|
|
|
CXXFLAGS+=-fsanitize=undefined
|
|
|
|
LDFLAGS+=-fsanitize=undefined
|
|
|
|
endif
|
2015-05-12 20:57:57 -07:00
|
|
|
endif
|
|
|
|
|
2015-10-18 18:00:17 -07:00
|
|
|
ifeq ($(config),analyze)
|
|
|
|
CXXFLAGS+=--analyze
|
|
|
|
endif
|
|
|
|
|
2014-02-09 21:56:30 +00:00
|
|
|
ifneq ($(defines),standard)
|
|
|
|
COMMA=,
|
|
|
|
CXXFLAGS+=-D $(subst $(COMMA), -D ,$(defines))
|
|
|
|
endif
|
|
|
|
|
2015-04-11 22:41:39 -07:00
|
|
|
ifneq ($(findstring PUGIXML_NO_EXCEPTIONS,$(defines)),)
|
|
|
|
CXXFLAGS+=-fno-exceptions
|
|
|
|
endif
|
|
|
|
|
2016-01-24 19:52:49 +01:00
|
|
|
ifneq ($(cxxstd),any)
|
|
|
|
CXXFLAGS+=-std=$(cxxstd)
|
2015-04-21 20:32:40 -07:00
|
|
|
endif
|
|
|
|
|
2014-02-09 21:56:30 +00:00
|
|
|
OBJECTS=$(SOURCES:%=$(BUILD)/%.o)
|
|
|
|
|
|
|
|
all: $(EXECUTABLE)
|
|
|
|
|
2014-10-25 05:28:37 +00:00
|
|
|
ifeq ($(config),coverage)
|
2014-02-09 21:56:30 +00:00
|
|
|
test: $(EXECUTABLE)
|
2015-08-25 09:32:48 -07:00
|
|
|
-@find $(BUILD) -name '*.gcda' -exec rm {} +
|
2014-02-09 21:56:30 +00:00
|
|
|
./$(EXECUTABLE)
|
2016-07-28 00:07:41 -05:00
|
|
|
@gcov -o $(BUILD)/src/ pugixml.cpp.gcda | sed -e '/./{H;$!d;}' -e 'x;/pugixml.cpp/!d;'
|
2015-08-25 09:32:48 -07:00
|
|
|
@find . -name '*.gcov' -and -not -name 'pugixml.cpp.gcov' -exec rm {} +
|
2014-10-25 05:28:37 +00:00
|
|
|
else
|
|
|
|
test: $(EXECUTABLE)
|
|
|
|
./$(EXECUTABLE)
|
|
|
|
endif
|
2014-02-09 21:56:30 +00:00
|
|
|
|
2015-03-13 00:18:30 -07:00
|
|
|
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 @@
|
|
|
|
|
2014-02-09 21:56:30 +00:00
|
|
|
clean:
|
|
|
|
rm -rf $(BUILD)
|
|
|
|
|
2015-03-20 00:36:10 -07:00
|
|
|
release: build/pugixml-$(VERSION).tar.gz build/pugixml-$(VERSION).zip
|
|
|
|
|
2015-03-21 21:06:48 -07:00
|
|
|
docs: docs/quickstart.html docs/manual.html
|
|
|
|
|
2015-03-20 00:36:10 -07:00
|
|
|
build/pugixml-%: .FORCE | $(RELEASE)
|
2015-10-10 12:35:40 -07:00
|
|
|
@mkdir -p $(BUILD)
|
2015-03-20 00:36:10 -07:00
|
|
|
perl tests/archive.pl $@ $|
|
|
|
|
|
2014-02-09 21:56:30 +00:00
|
|
|
$(EXECUTABLE): $(OBJECTS)
|
|
|
|
$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
|
|
|
|
|
|
|
|
$(BUILD)/%.o: %
|
|
|
|
@mkdir -p $(dir $@)
|
2015-03-13 00:18:30 -07:00
|
|
|
$(CXX) $< $(CXXFLAGS) -c -MMD -MP -o $@
|
2014-02-09 21:56:30 +00:00
|
|
|
|
|
|
|
-include $(OBJECTS:.o=.d)
|
|
|
|
|
2015-03-22 11:33:45 -07:00
|
|
|
.SECONDEXPANSION:
|
|
|
|
docs/%.html: docs/%.adoc $$(shell sed -n 's/include\:\:\(.*\)\[.*/docs\/\1/p' docs/%.adoc)
|
2015-03-24 20:59:04 -07:00
|
|
|
asciidoctor -b html5 -a version=$(VERSION) $< -o $@
|
2015-03-22 11:33:45 -07:00
|
|
|
|
2015-03-20 00:36:10 -07:00
|
|
|
.PHONY: all test clean release .FORCE
|