Remove all files for the Jamplus-based build system
End of an era. Make can be used for regular development (Linux/OSX), documentation building and release packaging. CMake can be used for regular development (Windows); it's also used by some Linux distributions. Continuous integration is now performed by Travis CI and AppVeyor.
This commit is contained in:
parent
baacd81907
commit
1c4098a7d9
169
Jamfile.jam
169
Jamfile.jam
@ -1,169 +0,0 @@
|
|||||||
# 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
|
|
||||||
{
|
|
||||||
toolset = msvc ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 ;
|
|
||||||
|
|
||||||
if $(fullcoverage)
|
|
||||||
{
|
|
||||||
GCOVFLAGS = --branch-probabilities --function-summaries ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GCOVFLAGS = --no-output ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# 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 : $(CFGFLAGS) ;
|
|
||||||
Alias pugixml : $(PUGIXML) ;
|
|
||||||
|
|
||||||
# build tests
|
|
||||||
local TESTS = $(CFGBUILD)/tests.exe ;
|
|
||||||
local TEST_SOURCES = [ Glob tests : *.cpp ] ;
|
|
||||||
TEST_SOURCES -= [ Glob tests : fuzz_*.cpp ] ;
|
|
||||||
Application $(TESTS) : $(TEST_SOURCES) : $(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 ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# documentation
|
|
||||||
Documentation docs/manual.html : docs/manual.qbk : docs/manual.xsl ;
|
|
||||||
Documentation docs/quickstart.html : docs/quickstart.qbk : docs/quickstart.xsl ;
|
|
||||||
|
|
||||||
Alias docs : docs/manual.html docs/quickstart.html ;
|
|
||||||
|
|
||||||
# samples
|
|
||||||
for SAMPLE in [ Glob docs/samples : *.cpp ]
|
|
||||||
{
|
|
||||||
local CONFIG = "debug" ;
|
|
||||||
local DEFINES = "PUGIXML_STANDARD" ;
|
|
||||||
|
|
||||||
# build folder
|
|
||||||
local CFGBUILD = $(BUILD)/$(toolset)/$(DEFINES:J=_)/$(CONFIG) ;
|
|
||||||
|
|
||||||
# compilation options
|
|
||||||
local CFGFLAGS = $(CCFLAGS) [ GetCFlags $(CONFIG) : $(DEFINES) ] ;
|
|
||||||
CFGFLAGS += -I src ;
|
|
||||||
|
|
||||||
# build and run sample
|
|
||||||
local EXECUTABLE = $(CFGBUILD)/samples/$(SAMPLE:B).exe ;
|
|
||||||
local PUGIXML = $(CFGBUILD)/pugixml.lib ;
|
|
||||||
|
|
||||||
Application $(EXECUTABLE) : $(SAMPLE) : $(CFGFLAGS) : $(PUGIXML) ;
|
|
||||||
|
|
||||||
RunSampleAction $(EXECUTABLE)_run : $(EXECUTABLE) ;
|
|
||||||
Depends $(EXECUTABLE)_run : $(EXECUTABLE) ;
|
|
||||||
|
|
||||||
Depends samples : $(EXECUTABLE)_run ;
|
|
||||||
}
|
|
||||||
|
|
||||||
# release
|
|
||||||
VERSION = 1.6 ;
|
|
||||||
RELEASE_FILES =
|
|
||||||
[ Glob contrib : *.cpp *.hpp ]
|
|
||||||
[ Glob src : *.cpp *.hpp ]
|
|
||||||
[ Glob docs : *.html *.css ]
|
|
||||||
[ Glob docs/samples : *.cpp *.hpp *.xml ]
|
|
||||||
[ Glob docs/images : *.png ]
|
|
||||||
[ Glob docs/manual : *.html ]
|
|
||||||
@("scripts/**":W=:X=svn)
|
|
||||||
readme.txt
|
|
||||||
;
|
|
||||||
|
|
||||||
actions ArchiveAction
|
|
||||||
{
|
|
||||||
perl tests/archive.pl $(<) $(>)
|
|
||||||
}
|
|
||||||
|
|
||||||
ArchiveAction pugixml-$(VERSION).zip : $(RELEASE_FILES) ;
|
|
||||||
ArchiveAction pugixml-$(VERSION).tar.gz : $(RELEASE_FILES) ;
|
|
||||||
Depends release : pugixml-$(VERSION).zip pugixml-$(VERSION).tar.gz : $(RELEASE_FILES) ;
|
|
||||||
NotFile release ;
|
|
||||||
1032
Jamrules.jam
1032
Jamrules.jam
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# put this to /etc/rc.d/pugixml-autotest
|
|
||||||
# don't forget to chmod +x pugixml-autotest and to replace /home/USERNAME with actual path
|
|
||||||
|
|
||||||
if [ "$1" = "start" -o "$1" = "faststart" ]
|
|
||||||
then
|
|
||||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
|
||||||
cd /home/USERNAME/pugixml
|
|
||||||
perl tests/autotest-remote-host.pl "shutdown -p now" &
|
|
||||||
fi
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# chkconfig: 2345 20 80
|
|
||||||
# description: pugixml autotest script
|
|
||||||
# put this to /etc/init.d/pugixml-autotest.sh, then launch
|
|
||||||
# Debian/Ubuntu: sudo update-rc.d pugixml-autotest.sh defaults 80
|
|
||||||
# Fedora/RedHat: sudo chkconfig --add pugixml-autotest.sh
|
|
||||||
# don't forget to chmod +x pugixml-autotest.sh and to replace /home/USERNAME with actual path
|
|
||||||
|
|
||||||
if [ "$1" = "start" ]
|
|
||||||
then
|
|
||||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
|
||||||
cd /home/USERNAME/pugixml
|
|
||||||
perl tests/autotest-remote-host.pl "shutdown -P now" &
|
|
||||||
fi
|
|
||||||
@ -1,150 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
use Config;
|
|
||||||
|
|
||||||
sub permute
|
|
||||||
{
|
|
||||||
my @defines = @_;
|
|
||||||
my @result = ('');
|
|
||||||
|
|
||||||
foreach $define (@defines)
|
|
||||||
{
|
|
||||||
push @result, map { length($_) == 0 ? $define : "$_,$define" } @result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@result;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub gcctoolset
|
|
||||||
{
|
|
||||||
my $gccversion = `gcc -dumpversion`;
|
|
||||||
chomp($gccversion);
|
|
||||||
|
|
||||||
my $gcc = "gcc$gccversion";
|
|
||||||
|
|
||||||
return ($^O =~ /darwin/) ? ($gcc, "${gcc}_x64", "${gcc}_ppc") : (`uname -m` =~ /64/) ? ("${gcc}_x64") : ($gcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getcpucount
|
|
||||||
{
|
|
||||||
return $1 if ($^O =~ /linux/ && `cat /proc/cpuinfo` =~ /cpu cores\s*:\s*(\d+)/);
|
|
||||||
return $1 if ($^O =~ /freebsd|darwin/ && `sysctl -a` =~ /hw\.ncpu\s*:\s*(\d+)/);
|
|
||||||
return $1 - 1 if ($^O =~ /solaris/ && `mpstat | wc -l` =~ /(\d+)/);
|
|
||||||
|
|
||||||
undef;
|
|
||||||
}
|
|
||||||
|
|
||||||
@alltoolsets = ($^O =~ /MSWin/)
|
|
||||||
? (bcc, cw, dmc,
|
|
||||||
ic8, ic9, ic9_x64, ic10, ic10_x64, ic11, ic11_x64,
|
|
||||||
mingw34, mingw44, mingw45, mingw45_0x, mingw46_x64,
|
|
||||||
msvc6, msvc7, msvc71, msvc8, msvc8_x64, msvc9, msvc9_x64,
|
|
||||||
msvc10, msvc10_x64, msvc10_clr, msvc10_clr_x64,
|
|
||||||
msvc11, msvc11_x64, msvc11_clr, msvc11_clr_x64, msvc11_arm,
|
|
||||||
msvc12, msvc12_x64, msvc12_clr, msvc12_clr_x64, msvc12_arm,
|
|
||||||
xbox360, ps3_gcc, ps3_snc, msvc8_wince, bada, blackberry, android, android_stlport)
|
|
||||||
: ($^O =~ /solaris/)
|
|
||||||
? (suncc, suncc_x64)
|
|
||||||
: &gcctoolset();
|
|
||||||
|
|
||||||
$fast = scalar grep(/^fast$/, @ARGV);
|
|
||||||
@toolsets = map { /^fast$/ ? () : ($_) } @ARGV;
|
|
||||||
@toolsets = @toolsets ? @toolsets : @alltoolsets;
|
|
||||||
|
|
||||||
@configurations = (debug, release);
|
|
||||||
@defines = (PUGIXML_NO_XPATH, PUGIXML_NO_EXCEPTIONS, PUGIXML_NO_STL, PUGIXML_WCHAR_MODE);
|
|
||||||
$stddefine = 'PUGIXML_STANDARD';
|
|
||||||
|
|
||||||
if ($fast)
|
|
||||||
{
|
|
||||||
@defines = (PUGIXML_WCHAR_MODE);
|
|
||||||
@configurations = (debug);
|
|
||||||
}
|
|
||||||
|
|
||||||
@definesets = permute(@defines);
|
|
||||||
|
|
||||||
print "### autotest begin " . scalar localtime() . "\n";
|
|
||||||
|
|
||||||
# print Git revision info
|
|
||||||
print "### autotest revision $1\n" if (`git rev-parse HEAD` =~ /(.+)/);
|
|
||||||
|
|
||||||
# get CPU info
|
|
||||||
$cpucount = &getcpucount();
|
|
||||||
|
|
||||||
# build all configurations
|
|
||||||
%results = ();
|
|
||||||
|
|
||||||
foreach $toolset (@toolsets)
|
|
||||||
{
|
|
||||||
my $cmdline = "jam";
|
|
||||||
|
|
||||||
# parallel build on non-windows platforms (since jam can't detect processor count)
|
|
||||||
$cmdline .= " -j$cpucount" if (defined $cpucount);
|
|
||||||
|
|
||||||
# add toolset
|
|
||||||
$cmdline .= " toolset=$toolset";
|
|
||||||
|
|
||||||
# add configurations
|
|
||||||
$cmdline .= " configuration=" . join(',', @configurations);
|
|
||||||
|
|
||||||
# add definesets
|
|
||||||
$cmdline .= " defines=$stddefine";
|
|
||||||
|
|
||||||
foreach $defineset (@definesets)
|
|
||||||
{
|
|
||||||
# STLport lacks bad_alloc on Android so skip configurations without PUGIXML_NO_EXCEPTIONS
|
|
||||||
next if ($toolset eq 'android_stlport' && $defineset !~ /PUGIXML_NO_EXCEPTIONS/);
|
|
||||||
|
|
||||||
$cmdline .= ":$defineset" if ($defineset ne '');
|
|
||||||
|
|
||||||
# any configuration with prepare but without result is treated as failed
|
|
||||||
foreach $configuration (@configurations)
|
|
||||||
{
|
|
||||||
print "### autotest $Config{archname} $toolset $configuration [$defineset] prepare\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print STDERR "*** testing $toolset... ***\n";
|
|
||||||
|
|
||||||
# launch command
|
|
||||||
print "### autotest launch $cmdline\n";
|
|
||||||
|
|
||||||
open PIPE, "$cmdline autotest=on coverage |" || die "$cmdline failed: $!\n";
|
|
||||||
|
|
||||||
# parse build output
|
|
||||||
while (<PIPE>)
|
|
||||||
{
|
|
||||||
# ... autotest release [wchar] success
|
|
||||||
if (/^\.\.\. autotest (\S+) \[(.*?)\] (success|skiprun)/)
|
|
||||||
{
|
|
||||||
my $configuration = $1;
|
|
||||||
my $defineset = ($2 eq $stddefine) ? '' : $2;
|
|
||||||
my $result = $3;
|
|
||||||
|
|
||||||
print "### autotest $Config{archname} $toolset $configuration [$defineset] $result\n";
|
|
||||||
}
|
|
||||||
# ... autotest release [wchar] gcov
|
|
||||||
elsif (/^\.\.\. autotest (\S+) \[(.*?)\] gcov/)
|
|
||||||
{
|
|
||||||
my $configuration = $1;
|
|
||||||
my $defineset = ($2 eq $stddefine) ? '' : $2;
|
|
||||||
|
|
||||||
if (/pugixml\.cpp' executed:([^%]+)%/)
|
|
||||||
{
|
|
||||||
print "### autotest $Config{archname} $toolset $configuration [$defineset] coverage $1\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close PIPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
print "### autotest end " . scalar localtime() . "\n";
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# put this to /Library/StartupItems/pugixml-autotest/pugixml-autotest, then create
|
|
||||||
# file StartupParameters.plist in the same folder with the following contents:
|
|
||||||
# <plist><dict><key>Provides</key><array><string>pugixml-autotest</string></array></dict></plist>
|
|
||||||
# don't forget to chmod +x pugixml-autotest and to replace /Users/USERNAME with actual path
|
|
||||||
|
|
||||||
if [ "$1" = "start" ]
|
|
||||||
then
|
|
||||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
|
||||||
cd /Users/USERNAME/pugixml
|
|
||||||
perl tests/autotest-remote-host.pl "shutdown -h now" &
|
|
||||||
fi
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
sub execprint
|
|
||||||
{
|
|
||||||
my $cmd = shift;
|
|
||||||
|
|
||||||
open PIPE, "$cmd |" || die "$cmd failed: $!\n";
|
|
||||||
print while (<PIPE>);
|
|
||||||
close PIPE;
|
|
||||||
|
|
||||||
return $?;
|
|
||||||
}
|
|
||||||
|
|
||||||
use IO::Socket;
|
|
||||||
use Net::Ping;
|
|
||||||
|
|
||||||
$exitcmd = shift;
|
|
||||||
$host = "10.0.2.2";
|
|
||||||
|
|
||||||
# wait while network is up
|
|
||||||
$ping = Net::Ping->new("icmp");
|
|
||||||
|
|
||||||
while (!$ping->ping($host))
|
|
||||||
{
|
|
||||||
print "### autotest $host is down, retrying...\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "### autotest $host is up, connecting...\n";
|
|
||||||
|
|
||||||
my $client = new IO::Socket::INET(PeerAddr => "$host:7183");
|
|
||||||
exit unless $client;
|
|
||||||
|
|
||||||
select $client;
|
|
||||||
|
|
||||||
&execprint('git pull') == 0 || die "error updating from repo\n";
|
|
||||||
&execprint('perl tests/autotest-local.pl') == 0 || die "error launching tests\n";
|
|
||||||
system($exitcmd);
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
use IO::Socket;
|
|
||||||
|
|
||||||
$vm = shift;
|
|
||||||
$log = shift;
|
|
||||||
|
|
||||||
# start virtualbox gui in minimized mode - this should be the first thing we do since this process
|
|
||||||
# inherits all handles and we want our sockets/log file closed
|
|
||||||
system("start /min virtualbox --startvm $vm");
|
|
||||||
|
|
||||||
# start a server; vm will connect to the server via autotest-remote-host.pl
|
|
||||||
my $server = new IO::Socket::INET(LocalPort => 7183, Listen => 1);
|
|
||||||
die "Could not create socket: $!\n" unless $server;
|
|
||||||
|
|
||||||
open LOG, ">> $log" || die "Could not open log file: $!\n";
|
|
||||||
|
|
||||||
print LOG "Listening for connection...\n";
|
|
||||||
|
|
||||||
my $client = $server->accept();
|
|
||||||
|
|
||||||
# echo all input to log file
|
|
||||||
print LOG $_ while (<$client>);
|
|
||||||
close LOG;
|
|
||||||
|
|
||||||
$client->close();
|
|
||||||
$server->close();
|
|
||||||
|
|
||||||
# wait for vm shutdown to decrease peak memory consumption
|
|
||||||
while (`vboxmanage showvminfo $vm` !~ /State:\s+powered off/)
|
|
||||||
{
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
@ -1,229 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# pretty-printing
|
|
||||||
sub prettysuffix
|
|
||||||
{
|
|
||||||
my $suffix = shift;
|
|
||||||
|
|
||||||
return " C++0x" if ($suffix eq '_0x');
|
|
||||||
return " x64" if ($suffix eq '_x64');
|
|
||||||
return " CLR" if ($suffix eq '_clr');
|
|
||||||
return " CLR x64" if ($suffix eq '_clr_x64');
|
|
||||||
return " PPC" if ($suffix eq '_ppc');
|
|
||||||
return " WinCE" if ($suffix eq '_wince');
|
|
||||||
return " ARM" if ($suffix eq '_arm');
|
|
||||||
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prettytoolset
|
|
||||||
{
|
|
||||||
my $toolset = shift;
|
|
||||||
|
|
||||||
return "Borland C++ 5.82" if ($toolset eq 'bcc');
|
|
||||||
return "Metrowerks CodeWarrior 8" if ($toolset eq 'cw');
|
|
||||||
return "Digital Mars C++ 8.51" if ($toolset eq 'dmc');
|
|
||||||
return "Sun C++ 5.10" . prettysuffix($1) if ($toolset =~ /^suncc(.*)$/);
|
|
||||||
|
|
||||||
return "Intel C++ Compiler $1.0" . prettysuffix($2) if ($toolset =~ /^ic(\d+)(.*)$/);
|
|
||||||
return "MinGW (GCC $1.$2)" . prettysuffix($3) if ($toolset =~ /^mingw(\d)(\d)(.*)$/);
|
|
||||||
return "Microsoft Visual C++ 7.1" if ($toolset eq 'msvc71');
|
|
||||||
return "Microsoft Visual C++ $1.0" . prettysuffix($2) if ($toolset =~ /^msvc(\d+)(.*)$/);
|
|
||||||
return "GNU C++ Compiler $1" . prettysuffix($2) if ($toolset =~ /^gcc([\d.]*)(.*)$/);
|
|
||||||
|
|
||||||
return "Microsoft Xbox360 Compiler" if ($toolset =~ /^xbox360/);
|
|
||||||
return "Sony PlayStation3 GCC" if ($toolset =~ /^ps3_gcc/);
|
|
||||||
return "Sony PlayStation3 SNC" if ($toolset =~ /^ps3_snc/);
|
|
||||||
|
|
||||||
return "Android NDK (GCC)" . ($1 eq '_stlport' ? " STLport" : "") if ($toolset =~ /^android(.*)$/);
|
|
||||||
return "bada SDK (GCC)" if ($toolset =~ /^bada$/);
|
|
||||||
return "BlackBerry NDK (GCC)" if ($toolset =~ /^blackberry$/);
|
|
||||||
|
|
||||||
$toolset;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prettyplatform
|
|
||||||
{
|
|
||||||
my ($platform, $toolset) = @_;
|
|
||||||
|
|
||||||
return "solaris" if ($platform =~ /solaris/);
|
|
||||||
|
|
||||||
return "macos" if ($platform =~ /darwin/);
|
|
||||||
|
|
||||||
return "linux64" if ($platform =~ /64-linux/);
|
|
||||||
return "linux32" if ($platform =~ /86-linux/);
|
|
||||||
|
|
||||||
return "fbsd64" if ($platform =~ /64-freebsd/);
|
|
||||||
return "fbsd32" if ($platform =~ /86-freebsd/);
|
|
||||||
|
|
||||||
return "x360" if ($toolset =~ /^xbox360/);
|
|
||||||
return "ps3" if ($toolset =~ /^ps3/);
|
|
||||||
|
|
||||||
return "arm" if ($toolset =~ /_arm$/);
|
|
||||||
return "arm" if ($toolset =~ /_wince$/);
|
|
||||||
return "arm" if ($toolset =~ /^android/);
|
|
||||||
return "arm" if ($toolset =~ /^bada/);
|
|
||||||
return "arm" if ($toolset =~ /^blackberry/);
|
|
||||||
|
|
||||||
return "win64" if ($platform =~ /MSWin32-x64/);
|
|
||||||
return "win32" if ($platform =~ /MSWin32/);
|
|
||||||
|
|
||||||
$platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prettybox
|
|
||||||
{
|
|
||||||
my $enabled = shift;
|
|
||||||
my $color = $enabled ? "#cccccc" : "#ffffff";
|
|
||||||
|
|
||||||
"<td bgcolor='$color' align='center'>" . ($enabled ? "+" : " ") . "</td>";
|
|
||||||
}
|
|
||||||
|
|
||||||
# parse build log
|
|
||||||
%results = ();
|
|
||||||
%toolsets = ();
|
|
||||||
%defines = ();
|
|
||||||
%configurations = ();
|
|
||||||
|
|
||||||
sub insertindex
|
|
||||||
{
|
|
||||||
my ($hash, $key) = @_;
|
|
||||||
|
|
||||||
$$hash{$key} = scalar(keys %$hash) unless defined $$hash{$key};
|
|
||||||
}
|
|
||||||
|
|
||||||
while (<>)
|
|
||||||
{
|
|
||||||
### autotest i386-freebsd-64int gcc release [wchar] result 0 97.78 98.85
|
|
||||||
if (/^### autotest (\S+) (\S+) (\S+) \[(.*?)\] (.*)/)
|
|
||||||
{
|
|
||||||
my ($platform, $toolset, $configuration, $defineset, $info) = ($1, $2, $3, $4, $5);
|
|
||||||
|
|
||||||
my $fulltool = &prettyplatform($platform, $toolset) . ' ' . &prettytoolset($toolset);
|
|
||||||
my $fullconf = "$configuration $defineset";
|
|
||||||
|
|
||||||
if ($info =~ /^prepare/)
|
|
||||||
{
|
|
||||||
$results{$fulltool}{$fullconf}{result} = "";
|
|
||||||
}
|
|
||||||
elsif ($info =~ /^success/)
|
|
||||||
{
|
|
||||||
$results{$fulltool}{$fullconf}{result} = "success";
|
|
||||||
}
|
|
||||||
elsif ($info =~ /^skiprun/)
|
|
||||||
{
|
|
||||||
$results{$fulltool}{$fullconf}{result} = "skiprun";
|
|
||||||
}
|
|
||||||
elsif ($info =~ /^coverage (\S+)/)
|
|
||||||
{
|
|
||||||
$results{$fulltool}{$fullconf}{coverage} = $1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print STDERR "Unrecognized autotest infoline $_";
|
|
||||||
}
|
|
||||||
|
|
||||||
&insertindex(\%toolsets, $fulltool);
|
|
||||||
|
|
||||||
$defines{$_} = 1 foreach (split /,/, $defineset);
|
|
||||||
&insertindex(\%configurations, $fullconf);
|
|
||||||
}
|
|
||||||
elsif (/^### autotest revision (.+)/)
|
|
||||||
{
|
|
||||||
if (defined $revision && $revision != $1)
|
|
||||||
{
|
|
||||||
print STDERR "Autotest build report contains several revisions: $revision, $1\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$revision = $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# make arrays of toolsets and configurations
|
|
||||||
@toolsetarray = ();
|
|
||||||
@configurationarray = ();
|
|
||||||
|
|
||||||
$toolsetarray[$toolsets{$_}] = $_ foreach (keys %toolsets);
|
|
||||||
$configurationarray[$configurations{$_}] = $_ foreach (keys %configurations);
|
|
||||||
|
|
||||||
# print header
|
|
||||||
$stylesheet = <<END;
|
|
||||||
table.autotest { border: 1px solid black; border-left: none; border-top: none; }
|
|
||||||
table.autotest td { border: 1px solid black; border-right: none; border-bottom: none; }
|
|
||||||
END
|
|
||||||
|
|
||||||
print <<END;
|
|
||||||
<html><head><title>pugixml autotest report</title><style type="text/css"><!-- $stylesheet --></style></head><body>
|
|
||||||
<h3>pugixml autotest report</h3>
|
|
||||||
<table border=1 cellspacing=0 cellpadding=4 class="autotest">
|
|
||||||
END
|
|
||||||
|
|
||||||
# print configuration header (release/debug)
|
|
||||||
print "<tr><td align='right' colspan=2>optimization</td>";
|
|
||||||
print &prettybox((split /\s+/)[0] eq 'release') foreach (@configurationarray);
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
# print defines header (one row for each define)
|
|
||||||
foreach $define (sort {$a cmp $b} keys %defines)
|
|
||||||
{
|
|
||||||
print "<tr><td align='right' colspan=2><small>$define</small></td>";
|
|
||||||
|
|
||||||
foreach (@configurationarray)
|
|
||||||
{
|
|
||||||
my $present = ($_ =~ /\b$define\b/);
|
|
||||||
|
|
||||||
print &prettybox($present);
|
|
||||||
}
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# print data (one row for each toolset)
|
|
||||||
foreach $tool (@toolsetarray)
|
|
||||||
{
|
|
||||||
my ($platform, $toolset) = split(/\s+/, $tool, 2);
|
|
||||||
print "<tr><td style='border-right: none' align='center'><small>$platform</small></td><td style='border-left: none'><nobr>$toolset</nobr></td>";
|
|
||||||
|
|
||||||
foreach (@configurationarray)
|
|
||||||
{
|
|
||||||
my $info = $results{$tool}{$_};
|
|
||||||
|
|
||||||
if (!defined $$info{result})
|
|
||||||
{
|
|
||||||
print "<td bgcolor='#cccccc'> </td>";
|
|
||||||
}
|
|
||||||
elsif ($$info{result} eq "success")
|
|
||||||
{
|
|
||||||
my $coverage = $$info{coverage};
|
|
||||||
|
|
||||||
print "<td bgcolor='#00ff00' align='center'>pass";
|
|
||||||
|
|
||||||
if ($coverage > 0)
|
|
||||||
{
|
|
||||||
print "<br><font size='-2'>" . ($coverage + 0) . "%</font>";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</td>";
|
|
||||||
}
|
|
||||||
elsif ($$info{result} eq "skiprun")
|
|
||||||
{
|
|
||||||
print "<td bgcolor='#ffff80' align='center'>pass</td>"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "<td bgcolor='#ff0000' align='center'>fail</td>"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# print footer
|
|
||||||
$date = localtime;
|
|
||||||
|
|
||||||
print <<END;
|
|
||||||
</table><br>
|
|
||||||
Generated on $date from Git $revision
|
|
||||||
</body></html>
|
|
||||||
END
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# put this to /etc/init.d/pugixml-autotest.sh, then launch
|
|
||||||
# ln -s /etc/init.d/pugixml-autotest.sh /etc/rc3.d/S80pugixml-autotest
|
|
||||||
# don't forget to chmod +x pugixml-autotest.sh and to replace /export/home/USERNAME with actual path
|
|
||||||
|
|
||||||
if [ "$1" = "start" ]
|
|
||||||
then
|
|
||||||
cd /export/home/USERNAME/pugixml
|
|
||||||
perl tests/autotest-remote-host.pl "shutdown -g 0 -i 5 -y" &
|
|
||||||
fi
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
sub funcinfo
|
|
||||||
{
|
|
||||||
my ($name, $info) = @_;
|
|
||||||
|
|
||||||
return if ($info =~ /No executable lines/);
|
|
||||||
|
|
||||||
my $lines = ($info =~ /Lines executed:([^%]+)%/) ? $1 : 100;
|
|
||||||
my $calls = ($info =~ /Calls executed:([^%]+)%/) ? $1 : 100;
|
|
||||||
my $branches = ($info =~ /Branches executed:([^%]+)%/) ? $1 : 100;
|
|
||||||
my $taken = ($info =~ /Taken at least once:([^%]+)%/) ? $1 : 100;
|
|
||||||
|
|
||||||
return if ($lines == 100 && $calls == 100 && $branches == 100 && $taken == 100);
|
|
||||||
|
|
||||||
return "Function $name: L $lines, C $calls, B $branches, BT $taken\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$prefix = join(' ', @ARGV);
|
|
||||||
$prefix .= ' ' if ($prefix ne '');
|
|
||||||
|
|
||||||
$lines = join('', <STDIN>);
|
|
||||||
|
|
||||||
# merge file information
|
|
||||||
$lines =~ s/File (.+)\nLines (.+)\n(.+\n)*\n/$1 $2\n/g;
|
|
||||||
|
|
||||||
# merge function information
|
|
||||||
$lines =~ s/Function (.+)\n((.+\n)*)\n/funcinfo($1, $2)/eg;
|
|
||||||
|
|
||||||
# remove include information
|
|
||||||
$lines =~ s/.+include\/c\+\+.+\n//g;
|
|
||||||
|
|
||||||
foreach $line (split /\n/, $lines)
|
|
||||||
{
|
|
||||||
print "$prefix$line\n";
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user