Only require File::Spec::Functions on Win32, as only it needs rel2abs().
Nicholas Clark [Tue, 29 Sep 2009 15:23:37 +0000 (16:23 +0100)]
This seems easier than changing @INC so that it loads, but causing all other
platforms to have to load a module they don't need.

make_ext.pl

index e272d5b..81369b0 100644 (file)
@@ -6,7 +6,6 @@ BEGIN {
     unshift @INC, $^O eq 'MSWin32' ? ('../cpan/Cwd', '../cpan/Cwd/lib') : 'cpan/Cwd';
 }
 use Cwd;
-use File::Spec::Functions qw(rel2abs);
 
 # To clarify, this isn't the entire suite of modules considered "toolchain"
 # It's not even all modules needed to build ext/
@@ -289,7 +288,12 @@ sub build_extension {
     # another process has half-written.
     my @new_inc = ((map {"$up/$_"} @toolchain), $lib_dir);
     if ($is_Win32) {
-       @new_inc = map {rel2abs($_)} @new_inc;
+       # It feels somewhat wrong putting this in a loop, but require caches
+       # results, so is fast for subsequent calls. To my mind it's clearer
+       # here than putting the require somewhere far from the code it relates
+       # to.
+       require File::Spec::Functions;
+       @new_inc = map {File::Spec::Functions::rel2abs($_)} @new_inc;
     }
     $ENV{PERL5LIB} = join $Config{path_sep}, @new_inc;
     $ENV{PERL_CORE} = 1;