# Latest jamplus is needed to use this # Targets: # pugixml - build pugixml library # tests - build pugixml test suite # run_tests - run pugixml test suite # coverage - get test suite coverage # Options: # toolset=name - select toolset # supported toolsets: mingw*, msvc* # default toolset/configuration if ( ! $(toolset) ) { if ( $(OS) = SOLARIS ) { toolset = suncc ; } else if ( $(UNIX) ) { local GCCVERSION = [ Subst [ Shell "gcc -dumpversion" ] : $(NEWLINE) ] ; toolset = "gcc"$(GCCVERSION) ; } else { exit You should specify a toolset ; } } if ( ! $(configuration) ) { configuration = "debug" ; } if ( ! $(defines) ) { defines = "PUGIXML_STANDARD" ; } # coverage options if ( $(toolset:I=^mingw) || $(toolset:I=^gcc) ) { CCFLAGS = -fprofile-arcs -ftest-coverage ; LDFLAGS = -fprofile-arcs ; GCOVFLAGS = -n ; } # build folder BUILD = build ; # enable dependency cache DEPCACHE.standard = $(BUILD)/.depcache ; # rules include "Jamrules.jam" ; # split define sets into list local DEFINESETS = [ Split $(defines) : ':' ] ; # split configurations into list local CONFIGURATIONS = [ Split $(configuration) : ',' ] ; for CONFIG in $(CONFIGURATIONS) { for DEFINESET in $(DEFINESETS) { local DEFINES = [ Split $(DEFINESET) : ',' ] ; # build folder local CFGBUILD = $(BUILD)/$(toolset)/$(DEFINES:J=_)/$(CONFIG) ; # compilation options local CFGFLAGS = $(CCFLAGS) [ GetCFlags $(CONFIG) : $(DEFINES) ] ; # build library local PUGIXML = $(CFGBUILD)/pugixml.lib ; Library $(PUGIXML) : src/pugixml.cpp src/pugixpath.cpp : $(CFGFLAGS) ; Alias pugixml : $(PUGIXML) ; # build tests local TESTS = $(CFGBUILD)/tests.exe ; Application $(TESTS) : [ Glob tests : *.cpp ] : $(CFGFLAGS) : $(PUGIXML) ; Alias tests : $(TESTS) ; # run tests Test $(TESTS)_run : $(TESTS) ; Alias run_tests : $(TESTS)_run ; # gather coverage Coverage $(TESTS)_coverage : $(PUGIXML) ; Alias coverage : $(TESTS)_coverage ; GCOVFLAGS on $(TESTS)_coverage = $(GCOVFLAGS) -o $(CFGBUILD)/src ; # because stupid gcov can't find files via relative paths # add special autotest markers to build log if $(autotest) { COVPREFIX on $(TESTS)_coverage = "... autotest $(CONFIG) [$(DEFINESET)]" ; } # gather coverage after tests run Depends $(TESTS)_coverage : $(TESTS)_run ; } }