This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move ExtUtils-Manifest from cpan/ to dist/
[perl5.git] / t / TEST
diff --git a/t/TEST b/t/TEST
index 096417a..6bcaa41 100755 (executable)
--- a/t/TEST
+++ b/t/TEST
@@ -23,12 +23,44 @@ my %dir_to_switch =
      '../ext/File-Glob/t' => '-I.. -MTestInit', # FIXME - tests assume t/
      );
 
-# I think in the end I'd like "not absolute" to be the default", as it saves
-# some fakery within TestInit which can peturb tests, and takes CPU.
-my %no_abs =
-    ('../cpan/Pod-Parser' => 1,
-    );
-             
+# "not absolute" is the the default, as it saves some fakery within TestInit
+# which can peturb tests, and takes CPU. Working with the upstream author of
+# any of these, to figure out how to remove them from this list, considered
+# "a good thing".
+my %abs = (
+          '../cpan/Archive-Extract' => 1,
+          '../cpan/Archive-Tar' => 1,
+          '../cpan/AutoLoader' => 1,
+          '../cpan/CPAN' => 1,
+          '../cpan/Class-ISA' => 1,
+          '../cpan/Devel-PPPort' => 1,
+          '../cpan/Encode' => 1,
+          '../cpan/ExtUtils-Command' => 1,
+          '../cpan/ExtUtils-Constant' => 1,
+          '../cpan/ExtUtils-MakeMaker' => 1,
+          '../cpan/File-Fetch' => 1,
+          '../cpan/IPC-Cmd' => 1,
+          '../cpan/IPC-SysV' => 1,
+          '../cpan/Locale-Codes' => 1,
+          '../cpan/Log-Message' => 1,
+          '../cpan/Math-Complex' => 1,
+          '../cpan/Module-Build' => 1,
+          '../cpan/Module-Load' => 1,
+          '../cpan/Module-Load-Conditional' => 1,
+          '../cpan/Object-Accessor' => 1,
+          '../cpan/Package-Constants' => 1,
+          '../cpan/Parse-CPAN-Meta' => 1,
+          '../cpan/Pod-Simple' => 1,
+          '../cpan/Term-UI' => 1,
+          '../cpan/Test-Simple' => 1,
+          '../cpan/Tie-File' => 1,
+          '../cpan/podlators' => 1,
+          '../dist/Cwd' => 1,
+          '../dist/ExtUtils-Install' => 1,
+          '../dist/ExtUtils-Manifest' => 1,
+          '../dist/ExtUtils-ParseXS' => 1,
+         );
+
 my %temp_no_core =
     ('../cpan/B-Debug' => 1,
      '../cpan/Compress-Raw-Bzip2' => 1,
@@ -36,10 +68,7 @@ my %temp_no_core =
      '../cpan/Devel-PPPort' => 1,
      '../cpan/Getopt-Long' => 1,
      '../cpan/IO-Compress' => 1,
-     '../cpan/Math-BigInt' => 1,
-     '../cpan/Math-BigRat' => 1,
      '../cpan/MIME-Base64' => 1,
-     '../cpan/NEXT' => 1,
      '../cpan/parent' => 1,
      '../cpan/Parse-CPAN-Meta' => 1,
      '../cpan/Pod-Simple' => 1,
@@ -51,12 +80,26 @@ my %temp_no_core =
      '../cpan/Unicode-Normalize' => 1,
     );
 
+# delete env vars that may influence the results
+# but allow override via *_TEST env var if wanted
+# (e.g. PERL5OPT_TEST=-d:NYTProf)
+for my $envname (qw(PERL5LIB PERLLIB PERL5OPT)) {
+    my $override = $ENV{"${envname}_TEST"};
+    if (defined $override) {
+       warn "$0: $envname=$override\n";
+       $ENV{$envname} = $override;
+    }
+    else {
+       delete $ENV{$envname};
+    }
+}
+
 if ($::do_nothing) {
     return 1;
 }
 
 # Location to put the Valgrind log.
-my $Valgrind_Log = 'current.valgrind';
+our $Valgrind_Log;
 
 $| = 1;
 
@@ -64,10 +107,6 @@ $| = 1;
 #BEGIN { require '../lib/strict.pm'; "strict"->import() };
 #BEGIN { require '../lib/warnings.pm'; "warnings"->import() };
 
-delete $ENV{PERL5LIB};
-delete $ENV{PERLLIB};
-delete $ENV{PERL5OPT};
-
 # remove empty elements due to insertion of empty symbols via "''p1'" syntax
 @ARGV = grep($_,@ARGV) if $^O eq 'VMS';
 our $show_elapsed_time = $ENV{HARNESS_TIMER} || 0;
@@ -199,8 +238,8 @@ sub _scan_test {
            $lib = '../../lib';
            $perl = '../../t/perl';
            $testswitch = "-I../.. -MTestInit=U2T";
-           if ($2 eq 'cpan') {
-               if(!$no_abs{$run_dir}) {
+           if ($2 eq 'cpan' || $2 eq 'dist') {
+               if($abs{$run_dir}) {
                    $testswitch = $testswitch . ',A';
                }
                if ($temp_no_core{$run_dir}) {
@@ -212,7 +251,7 @@ sub _scan_test {
        }
     }
 
-    my $utf8 = $::with_utf8 ? "-I$lib -Mutf8" : '';
+    my $utf8 = ($::with_utf8 || $::with_utf16) ? "-I$lib -Mutf8" : '';
 
     my %options = (
        perl => $perl,
@@ -251,13 +290,17 @@ sub _cmd {
         my $redir = $^O eq 'VMS' ? '2>&1' : '';
 
         if ($ENV{PERL_VALGRIND}) {
+            my $perl_supp = $options->{return_dir} ? "$options->{return_dir}/perl.supp" : "perl.supp";
             my $valgrind = $ENV{VALGRIND} // 'valgrind';
             my $vg_opts = $ENV{VG_OPTS}
-              //  "--suppressions=perl.supp --leak-check=yes "
+              //  "--suppressions=$perl_supp --leak-check=yes "
                 . "--leak-resolution=high --show-reachable=yes "
-                  . "--num-callers=50";
+                  . "--num-callers=50 --track-origins=yes";
             $perl = "$valgrind --log-fd=3 $vg_opts $perl";
             $redir = "3>$Valgrind_Log";
+            if ($options->{run_dir}) {
+                $Valgrind_Log = "$options->{run_dir}/$Valgrind_Log";
+            }
         }
 
         my $args = "$options->{testswitch} $options->{switch} $options->{utf8}";
@@ -351,7 +394,7 @@ sub _tests_from_manifest {
                my $extension = $2;
                if (!$::core || $t =~ m!^lib/[a-z]!) {
                    if (defined $extension) {
-                       $extension =~ s!/t$!!;
+                       $extension =~ s!/t(:?/\S+)*$!!;
                        # XXX Do I want to warn that I'm skipping these?
                        next if $skip{$extension};
                        my $flat_extension = $extension;
@@ -504,6 +547,7 @@ EOT
            $te = '';
        }
 
+        (local $Valgrind_Log = "$test.valgrind-current") =~ s/^.*\///;
        my $results = _run_test($test, $type);
 
        my $failure;