From c622ce6fed61e07125c7d764f84fc70bb73c6c78 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Wed, 2 Jun 2010 06:25:40 +0000 Subject: tests: Redesigned test building; now all configurations of a single toolset are built in a single jam run git-svn-id: http://pugixml.googlecode.com/svn/trunk@493 99668b35-9821-0410-8761-19e4c4f06640 --- Jamfile.jam | 78 ++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 21 deletions(-) (limited to 'Jamfile.jam') diff --git a/Jamfile.jam b/Jamfile.jam index bc47f10..28c7f04 100644 --- a/Jamfile.jam +++ b/Jamfile.jam @@ -33,37 +33,73 @@ if ( ! $(configuration) ) configuration = "debug" ; } -# split defines into list -defines = [ Split $(defines) : ',' ] ; - -# options -if ( $(defines) ) -{ - BUILD = build/$(toolset)/$(defines:J=_)/$(configuration) ; -} -else +if ( ! $(defines) ) { - BUILD = build/$(toolset)/standard/$(configuration) ; + defines = "PUGIXML_STANDARD" ; } +# coverage options if ( $(toolset:I=^mingw) || $(toolset:I=^gcc) ) { CCFLAGS = -fprofile-arcs -ftest-coverage ; LDFLAGS = -fprofile-arcs ; GCOVFLAGS = -n ; - - GCOVFLAGS += -o $(BUILD)/src ; # because stupid gcov can't find files via relative paths } +# build folder +BUILD = build ; + +# enable dependency cache +DEPCACHE.standard = $(BUILD)/.depcache ; + # rules include "Jamrules.jam" ; -# enable dependency cache -DEPCACHE.standard = build/.depcache ; - -# targets -Library pugixml : src/pugixml.cpp src/pugixpath.cpp ; -Application tests : [ Glob tests : *.cpp ] : pugixml ; -Test run_tests : tests ; -Coverage coverage : pugixml ; -Depends coverage : run_tests ; +# 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 ; + } +} -- cgit v1.2.3