t/lib/common.pl should use absolute paths in @INC
authorNicholas Clark <nick@ccl4.org>
Wed, 6 Mar 2013 11:40:01 +0000 (12:40 +0100)
committerNicholas Clark <nick@ccl4.org>
Thu, 7 Mar 2013 11:14:14 +0000 (12:14 +0100)
t/lib/common.pl needs to run test files within a subdirectory, and hence
needs change directory into it. Changing a directory poses a problem when
running the tests, because @INC is typically '../lib'. The fix for this had
been to prepend '../../lib' to @INC, which is the correct relative path
while in the subdirectory.

However, the END block changes directory upwards (so that it can delete the
temporary directory), and in the process of deletion may end up lazy-loading
more modules. This will end up searching in ../lib first (ie outside the
build directory), which is wrong, and will cause problems if a directory lib/
exists up one level with files of the expected names (eg a lib/ directory
from a different version of Perl).

Problem identified and diagnosed by Daniel Dragan in RT #116971.

t/lib/common.pl

index e6a33b2..beb59a0 100644 (file)
@@ -54,11 +54,11 @@ foreach my $file (@w_files) {
 }
 
 $^X = rel2abs($^X);
+@INC = map { rel2abs($_) } @INC;
 my $tempdir = tempfile;
 
 mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
 chdir $tempdir or die die "Can't chdir '$tempdir': $!";
-unshift @INC, '../../lib';
 my $cleanup = 1;
 
 END {