This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use a buildcustomize.pl to set @INC in miniperl when building extensions.
authorNicholas Clark <nick@ccl4.org>
Mon, 14 Feb 2011 10:14:18 +0000 (10:14 +0000)
committerNicholas Clark <nick@ccl4.org>
Tue, 15 Feb 2011 14:10:05 +0000 (14:10 +0000)
commit5e4c4c91bd52a48de59520d5e9b4e3478e49c613
treef48289786af8d9237deb0640edf73e19f7dfda34
parent43c0c913165d6abe1bc0cb45a784eb1c32c3700b
Use a buildcustomize.pl to set @INC in miniperl when building extensions.

With the build tools now shipped in various subdirectories of cpan/ and dist/
we need to add several paths to @INC when invoking MakeMaker (etc) to build
extensions.

The previous approach of using $ENV{PERL5LIB} was fragile, because:
a: It was hitting the length limit for %ENV variables on VMS
b: It was running the risk of race conditions in a parallel build -
   ExtUtils::Makemaker "knows" to add -I../..lib, which puts lib at the *front*
   of @INC, but if one parallel process happens to copy a module into lib/
   whilst another is searching for it, the second may get a partial read
c: Overwriting $ENV{PERL5LIB} breaks any system where any of the installed
   build tools are actually implemented in Perl, if they are relying on
   $ENV{PERL5LIB} for setup

This approach

a: Doesn't have %ENV length limits
b: Ensures that lib/ is last, so copy targets are always shadowing copy
   sources
c: Only affects miniperl, and doesn't touch $ENV{PERL5LIB}

Approaches that turned out to have fatal flaws:

1: Using $ENV{PERL5OPT} with a module fails because ExtUtils::MakeMaker
   searches for the build perl without setting lib, and treats the error
   caused by a failed -M as "not a valid perl 5 binary"
2: Refactoring ExtUtils::MakeMaker to *not* use -I for lib, and instead rely
   on $ENV{PERL5LIB} [which includes "../../lib"] fails because:
   some extensions have subdirectories, and on these EU::MM correctly uses
   -I../../../lib, where as $ENV{PERL5LIB} only has space for relative paths,
   and only with two levels.

This approach actually takes advantage of ExtUtils::MakeMaker setting an -I
option correct for the depth of directory being built.
Cross/Makefile-cross-SH
MANIFEST
Makefile.SH
installperl
make_ext.pl
vms/descrip_mms.template
win32/Makefile
win32/makefile.mk
write_buildcustomize.pl [new file with mode: 0644]