From 218ddd03767772d3dfab0d44a9d924d919442924 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Mon, 13 Apr 2015 20:03:49 -0700 Subject: Add AppVeyor build scripts --- tests/autotest-appveyor.ps1 | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/autotest-appveyor.ps1 (limited to 'tests') diff --git a/tests/autotest-appveyor.ps1 b/tests/autotest-appveyor.ps1 new file mode 100644 index 0000000..8b7a24c --- /dev/null +++ b/tests/autotest-appveyor.ps1 @@ -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" -- cgit v1.2.3 From 1c4098a7d9a5eb067ff63b5602d60d91a218b4a0 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Mon, 13 Apr 2015 20:30:14 -0700 Subject: 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. --- tests/autotest-freebsd.sh | 10 -- tests/autotest-linux.sh | 14 --- tests/autotest-local.pl | 150 -------------------------- tests/autotest-macos.sh | 12 --- tests/autotest-remote-host.pl | 37 ------- tests/autotest-remote-server.pl | 33 ------ tests/autotest-report.pl | 229 ---------------------------------------- tests/autotest-solaris.sh | 10 -- tests/gcov-filter.pl | 36 ------- 9 files changed, 531 deletions(-) delete mode 100644 tests/autotest-freebsd.sh delete mode 100644 tests/autotest-linux.sh delete mode 100644 tests/autotest-local.pl delete mode 100644 tests/autotest-macos.sh delete mode 100644 tests/autotest-remote-host.pl delete mode 100644 tests/autotest-remote-server.pl delete mode 100644 tests/autotest-report.pl delete mode 100644 tests/autotest-solaris.sh delete mode 100644 tests/gcov-filter.pl (limited to 'tests') diff --git a/tests/autotest-freebsd.sh b/tests/autotest-freebsd.sh deleted file mode 100644 index ccb5c6c..0000000 --- a/tests/autotest-freebsd.sh +++ /dev/null @@ -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 diff --git a/tests/autotest-linux.sh b/tests/autotest-linux.sh deleted file mode 100644 index 30b9346..0000000 --- a/tests/autotest-linux.sh +++ /dev/null @@ -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 diff --git a/tests/autotest-local.pl b/tests/autotest-local.pl deleted file mode 100644 index 60f8b20..0000000 --- a/tests/autotest-local.pl +++ /dev/null @@ -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 () - { - # ... 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"; diff --git a/tests/autotest-macos.sh b/tests/autotest-macos.sh deleted file mode 100644 index fc21fc8..0000000 --- a/tests/autotest-macos.sh +++ /dev/null @@ -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: -# Providespugixml-autotest -# 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 diff --git a/tests/autotest-remote-host.pl b/tests/autotest-remote-host.pl deleted file mode 100644 index 63dfe68..0000000 --- a/tests/autotest-remote-host.pl +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/perl - -sub execprint -{ - my $cmd = shift; - - open PIPE, "$cmd |" || die "$cmd failed: $!\n"; - print while (); - 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); diff --git a/tests/autotest-remote-server.pl b/tests/autotest-remote-server.pl deleted file mode 100644 index 811c3e8..0000000 --- a/tests/autotest-remote-server.pl +++ /dev/null @@ -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); -} diff --git a/tests/autotest-report.pl b/tests/autotest-report.pl deleted file mode 100644 index 9eebf39..0000000 --- a/tests/autotest-report.pl +++ /dev/null @@ -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"; - - "" . ($enabled ? "+" : " ") . ""; -} - -# 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 = <pugixml autotest report -

pugixml autotest report

- -END - -# print configuration header (release/debug) -print ""; -print &prettybox((split /\s+/)[0] eq 'release') foreach (@configurationarray); -print "\n"; - -# print defines header (one row for each define) -foreach $define (sort {$a cmp $b} keys %defines) -{ - print ""; - - foreach (@configurationarray) - { - my $present = ($_ =~ /\b$define\b/); - - print &prettybox($present); - } - print "\n"; -} - -# print data (one row for each toolset) -foreach $tool (@toolsetarray) -{ - my ($platform, $toolset) = split(/\s+/, $tool, 2); - print ""; - - foreach (@configurationarray) - { - my $info = $results{$tool}{$_}; - - if (!defined $$info{result}) - { - print ""; - } - elsif ($$info{result} eq "success") - { - my $coverage = $$info{coverage}; - - print ""; - } - elsif ($$info{result} eq "skiprun") - { - print "" - } - else - { - print "" - } - } - - print "\n"; -} - -# print footer -$date = localtime; - -print <
-Generated on $date from Git $revision - -END diff --git a/tests/autotest-solaris.sh b/tests/autotest-solaris.sh deleted file mode 100644 index 96111a7..0000000 --- a/tests/autotest-solaris.sh +++ /dev/null @@ -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 diff --git a/tests/gcov-filter.pl b/tests/gcov-filter.pl deleted file mode 100644 index f0d2019..0000000 --- a/tests/gcov-filter.pl +++ /dev/null @@ -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('', ); - -# 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"; -} -- cgit v1.2.3
optimization
$define
$platform$toolset pass"; - - if ($coverage > 0) - { - print "
" . ($coverage + 0) . "%"; - } - - print "
passfail