| #!/usr/bin/perl |
| # |
| # Wrapper script to run tests from inside the Wine tree |
| # |
| # Usage: runtest [options] input_file [perl_args...] |
| # |
| |
| sub usage |
| { |
| print STDERR <<EOF; |
| |
| Usage: $0 [options] input_file [perl_args...] |
| |
| Options: |
| -q quiet mode |
| -v verbose mode (can be specified multiple times) |
| -I dir prepend dir to Perl include path |
| -P name set the current platform name |
| -T dir set Wine tree top directory (autodetected if not specified) |
| |
| EOF |
| exit 1; |
| } |
| |
| # default values |
| $platform = $ENV{WINETEST_PLATFORM}; |
| $ENV{WINETEST_DEBUG} ||= 1; |
| |
| # parse command-line options |
| while ($#ARGV >= 0) |
| { |
| $arg = shift @ARGV; |
| if ($arg eq "-h") { usage; } |
| if ($arg eq "-q") { $ENV{WINETEST_DEBUG} = 0; next; } |
| if ($arg eq "-v") { $ENV{WINETEST_DEBUG}++; next; } |
| if ($arg eq "-I") { $ENV{WINETEST_DEBUG} = 0; next; } |
| if ($arg eq "-P") { $platform = shift @ARGV; next; } |
| if ($arg eq "-I") { push @include_dirs, shift @ARGV; next; } |
| if ($arg eq "-T") |
| { |
| $topobjdir = shift @ARGV; |
| usage unless (-d $topobjdir); |
| next; |
| } |
| $infile = $arg; |
| last; |
| } |
| |
| # we must have found an input file |
| usage unless defined($infile); |
| |
| # check/detect topobjdir |
| if (defined($topobjdir)) |
| { |
| unless (-f $topobjdir . "/server/wineserver") |
| { |
| printf STDERR "Wrong -T argument, %s/server/wineserver does not exist\n", $topobjdir; |
| usage; |
| } |
| } |
| else # try to detect it automatically |
| { |
| if (-f "./server/wineserver") { $topobjdir = "."; } |
| elsif (-f "../server/wineserver") { $topobjdir = ".."; } |
| elsif (-f "../../server/wineserver") { $topobjdir = "../.."; } |
| elsif (-f "../../../server/wineserver") { $topobjdir = "../../.."; } |
| } |
| |
| # set environment variables needed for Wine |
| if (defined($topobjdir)) |
| { |
| chop($topobjdir = `cd $topobjdir && pwd`); |
| $ENV{LD_LIBRARY_PATH} = $topobjdir . "/dlls:" . $topobjdir . ":" . $ENV{LD_LIBRARY_PATH}; |
| $ENV{WINESERVER} ||= $topobjdir . "/server/wineserver"; |
| $ENV{WINELOADER} ||= $topobjdir . "/wine"; |
| $ENV{WINETEST_PLATFORM} = $platform || "wine"; |
| } |
| else |
| { |
| $ENV{WINETEST_PLATFORM} = $platform || "windows"; |
| } |
| |
| # check for include/ dir in script source directory and append it to search path |
| my $basedir = $0; |
| if ($basedir =~ /\//) { $basedir =~ s!/[^/]+$!!; } |
| else { $basedir = "."; } |
| if (-d $basedir . "/include") { push @include_dirs, $basedir . "/include"; } |
| |
| $ENV{PERL5LIB} = join( ":", @include_dirs, split( ":", $ENV{PERL5LIB} ) ); |
| |
| # and now exec winetest |
| if (defined($topobjdir)) |
| { |
| exec $topobjdir . "/programs/winetest/winetest", "--", $infile, @ARGV; |
| } |
| exec "winetest", $infile, @ARGV; |
| print STDERR "Could not exec winetest\n"; |