mirror of
https://github.com/qpdf/qpdf.git
synced 2024-10-31 19:02:30 +00:00
cef6425bca
This results in measurable performance improvements to packaged binary libqpdf distributions. QTC remains available for library users and is still selectively enabled in CI.
146 lines
2.9 KiB
Perl
Executable File
146 lines
2.9 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
require 5.008;
|
|
use warnings;
|
|
use strict;
|
|
use Cwd 'abs_path';
|
|
use File::Basename;
|
|
use File::Spec;
|
|
|
|
my $whoami = basename($0);
|
|
|
|
my $top = undef;
|
|
my $code = undef;
|
|
my @bin = ();
|
|
my $color = undef;
|
|
my $show_on_failure = 0;
|
|
my $disable_tc = 0;
|
|
my @tc = ();
|
|
|
|
if ($^O =~ m/^MSWin32|msys$/)
|
|
{
|
|
for (@ARGV)
|
|
{
|
|
s,^([A-Z]):/,/\L$1\E/,;
|
|
}
|
|
}
|
|
|
|
while (@ARGV)
|
|
{
|
|
my $arg = shift(@ARGV);
|
|
if ($arg eq '--top')
|
|
{
|
|
usage() unless @ARGV;
|
|
$top = shift(@ARGV);
|
|
}
|
|
elsif ($arg eq '--code')
|
|
{
|
|
usage() unless @ARGV;
|
|
$code = shift(@ARGV);
|
|
}
|
|
elsif ($arg eq '--bin')
|
|
{
|
|
usage() unless @ARGV;
|
|
push(@bin, shift(@ARGV));
|
|
}
|
|
elsif ($arg eq '--color')
|
|
{
|
|
usage() unless @ARGV;
|
|
$color = cmake_bool(shift(@ARGV));
|
|
}
|
|
elsif ($arg eq '--show-on-failure')
|
|
{
|
|
usage() unless @ARGV;
|
|
$show_on_failure = cmake_bool(shift(@ARGV));
|
|
}
|
|
elsif ($arg eq '--disable-tc')
|
|
{
|
|
$disable_tc = 1;
|
|
}
|
|
elsif ($arg eq '--tc')
|
|
{
|
|
usage() unless @ARGV;
|
|
while (@ARGV && ($ARGV[0] !~ m/^--/))
|
|
{
|
|
# On Windows, a literal glob in quotes is expanded by the
|
|
# shell, so we have to handle globs when expanded by the
|
|
# shell by consuming arguments until the next --.
|
|
|
|
my $t = shift(@ARGV);
|
|
if (exists $ENV{'TESTS'})
|
|
{
|
|
# No point enabling coverage if we're intentionally
|
|
# running only a subset of tests.
|
|
next;
|
|
}
|
|
push(@tc, $t);
|
|
}
|
|
}
|
|
elsif ($arg eq '--env')
|
|
{
|
|
usage() unless @ARGV;
|
|
my $var = shift(@ARGV);
|
|
usage() unless $var =~ m/^([^=]+)=(.*)$/;
|
|
$ENV{$1} = $2;
|
|
}
|
|
else
|
|
{
|
|
usage();
|
|
}
|
|
}
|
|
usage() unless (defined $top && defined $code && scalar(@bin));
|
|
|
|
my @cmd = ("$top/qtest/bin/qtest-driver");
|
|
if (defined $color)
|
|
{
|
|
push(@cmd, "-stdout-tty=$color");
|
|
}
|
|
push(@cmd,
|
|
"-bindirs", join(':', @bin),
|
|
"-datadir", "$code/qtest",
|
|
"-junit-suffix", basename($code));
|
|
|
|
if (scalar(@tc) && (! $disable_tc))
|
|
{
|
|
my @tc_srcs = map {
|
|
File::Spec->abs2rel(abs_path($_))
|
|
} map {
|
|
# On non-Windows, a literal glob in quotes is not expanded by
|
|
# the shell, so we have to handle globs explicitly.
|
|
glob($_)
|
|
} @tc;
|
|
|
|
$ENV{'TC_SRCS'} = join(' ', @tc_srcs);
|
|
push(@cmd, "-covdir", $code);
|
|
}
|
|
|
|
my $r = system(@cmd);
|
|
if (($r != 0) && $show_on_failure && open(R, "<qtest.log"))
|
|
{
|
|
binmode R;
|
|
while (<R>)
|
|
{
|
|
print;
|
|
}
|
|
close(R);
|
|
}
|
|
exit($r == 0 ? 0 : 2);
|
|
|
|
sub cmake_bool
|
|
{
|
|
my $arg = shift;
|
|
($arg =~ m/^(1|on|true|y(es)?)$/i) ? 1 : 0;
|
|
}
|
|
|
|
sub usage
|
|
{
|
|
die "
|
|
Usage: $whoami options
|
|
--top source-tree
|
|
--code code-subdir
|
|
--bin bindir ...
|
|
[--color [01]]
|
|
[--show-on-failure [01]]
|
|
[--tc \"../a/*.cc\" ...]
|
|
";
|
|
}
|