0
0
mirror of https://github.com/zeux/pugixml.git synced 2024-12-27 13:33:17 +08:00

Merge branch 'master' into compact

This commit is contained in:
Arseny Kapoulkine 2015-04-13 20:35:26 -07:00
commit ed2c822643
14 changed files with 91 additions and 1735 deletions

View File

@ -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 ;

File diff suppressed because it is too large Load Diff

4
appveyor.yml Normal file
View File

@ -0,0 +1,4 @@
version: "{build}"
build_script:
- ps: .\tests\autotest-appveyor.ps1

View File

@ -3,6 +3,7 @@ project(pugixml)
cmake_minimum_required(VERSION 2.6)
option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)
option(BUILD_TESTS "Build tests" OFF)
set(BUILD_DEFINES "" CACHE STRING "Build defines")
# Pre-defines standard install locations on *nix systems.
@ -13,13 +14,15 @@ set(HEADERS ../src/pugixml.hpp ../src/pugiconfig.hpp)
set(SOURCES ${HEADERS} ../src/pugixml.cpp)
if(DEFINED BUILD_DEFINES)
add_definitions(${BUILD_DEFINES})
foreach(DEFINE ${BUILD_DEFINES})
add_definitions("-D" ${DEFINE})
endforeach()
endif()
if(BUILD_SHARED_LIBS)
add_library(pugixml SHARED ${SOURCES})
add_library(pugixml SHARED ${SOURCES})
else()
add_library(pugixml STATIC ${SOURCES})
add_library(pugixml STATIC ${SOURCES})
endif()
set_target_properties(pugixml PROPERTIES VERSION 1.6 SOVERSION 1)
@ -32,3 +35,13 @@ install(TARGETS pugixml EXPORT pugixml-config
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT pugixml-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml)
if(BUILD_TESTS)
file(GLOB TEST_SOURCES ../tests/*.cpp)
file(GLOB FUZZ_SOURCES ../tests/fuzz_*.cpp)
list(REMOVE_ITEM TEST_SOURCES ${FUZZ_SOURCES})
add_executable(check ${TEST_SOURCES})
target_link_libraries(check pugixml)
add_custom_command(TARGET check POST_BUILD COMMAND check WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..)
endif()

View File

@ -0,0 +1,71 @@
function Invoke-CmdScript($scriptName)
{
$cmdLine = """$scriptName"" $args & set"
& $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
select-string '^([^=]*)=(.*)$' | foreach-object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
set-item Env:$varName $varValue
}
}
$sources = @("src/pugixml.cpp") + (Get-ChildItem -Path "tests/*.cpp" -Exclude "fuzz_*.cpp")
$failed = $FALSE
foreach ($vs in 9,10,11,12)
{
foreach ($arch in "x86","x64")
{
Write-Output "# Setting up VS$vs $arch"
Invoke-CmdScript "C:\Program Files (x86)\Microsoft Visual Studio $vs.0\VC\vcvarsall.bat" $arch
if (! $?) { throw "Error setting up VS$vs $arch" }
foreach ($defines in "standard", "PUGIXML_WCHAR_MODE")
{
$target = "tests_vs${vs}_${arch}_${defines}"
$deflist = if ($defines -eq "standard") { "" } else { "/D$defines" }
Add-AppveyorTest $target -Outcome Running
Write-Output "# Building $target.exe"
& cmd /c "cl.exe /Fe$target.exe /EHsc /W4 /WX $deflist $sources 2>&1" | Tee-Object -Variable buildOutput
if ($?)
{
Write-Output "# Running $target.exe"
$sw = [Diagnostics.Stopwatch]::StartNew()
& .\$target | Tee-Object -Variable testOutput
if ($?)
{
Write-Output "# Passed"
Update-AppveyorTest $target -Outcome Passed -StdOut ($testOutput | out-string) -Duration $sw.ElapsedMilliseconds
}
else
{
Write-Output "# Failed"
Update-AppveyorTest $target -Outcome Failed -StdOut ($testOutput | out-string) -ErrorMessage "Running failed"
$failed = $TRUE
}
}
else
{
Write-Output "# Failed to build"
Update-AppveyorTest $target -Outcome Failed -StdOut ($buildOutput | out-string) -ErrorMessage "Compilation failed"
$failed = $TRUE
}
}
}
}
if ($failed) { throw "One or more build steps failed" }
Write-Output "# End"

View File

@ -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

View File

@ -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

View File

@ -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";

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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 ? "+" : "&nbsp;") . "</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'>&nbsp;</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

View File

@ -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

View File

@ -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";
}