X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Makefile.PL;h=ad1ad46ab37f9bd8688852fc1a3899a74c86d954;hb=fe03358f442f762eb8872cbb9ede5b4380493c72;hp=2714a0d7f1124b9305d3b310931b1712cccbcc13;hpb=c4dbb66caaa1ba28bf029d041676b2efb0e401fa;p=p5sagit%2Flocal-lib.git diff --git a/Makefile.PL b/Makefile.PL index 2714a0d..ad1ad46 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -2,7 +2,8 @@ use strict; use warnings; use File::Spec; use Cwd; -use vars qw($bootstrapping $bootstrapping_args); +use vars qw($bootstrapping $bootstrapping_args $no_manpages); +use Config; my $cwd; BEGIN { @@ -26,6 +27,10 @@ DEATH if (my ($x) = grep { /^--bootstrap(?:=.*)?$/ } @ARGV) { @ARGV = grep { !/^--bootstrap(?:=.*)?$/ } @ARGV; $bootstrapping = 1; + if(my ($x) = grep { /^--no-manpages/ } @ARGV) { + $no_manpages = 1; + @ARGV = grep { !/^--no-manpages/ } @ARGV; + } my ($path) = $x =~ /^--bootstrap(?:=(.*))?$/; my @args = $path ? $path : (); @@ -37,7 +42,7 @@ DEATH local::lib->import(@args); - my @libs = map { "-I$_" } split ':', $ENV{PERL5LIB}; + my @libs = map { "-I$_" } split $Config{path_sep}, $ENV{PERL5LIB}; $bootstrapping_args = "@libs"; push(@ARGV,$ENV{PERL_MM_OPT}); push(@ARGV, @libs); @@ -45,6 +50,9 @@ DEATH system($^X, '-MExtUtils::MakeMaker 6.31', '-e1'); my $eumm = $? >> 8; + system($^X, '-MExtUtils::Install 1.43', '-e1'); + my $eui = $? >> 8; + system($^X, '-MCPAN 1.80', '-e1'); my $cpan = $? >> 8; my $cpan_command = ''; @@ -52,7 +60,7 @@ DEATH system($^X, '-MCPAN', '-e', 'my $done; require ExtUtils::MakeMaker; my $orig = ExtUtils::MakeMaker->can("prompt"); - *ExtUtils::MakeMaker::prompt = sub { + *ExtUtils::MakeMaker::prompt = sub ($;$) { if (!$done && $_[0] =~ /manual configuration/) { $done++; return "no"; @@ -75,6 +83,9 @@ DEATH if ($eumm) { # non-zero exit $cpan_command .= 'force("install","ExtUtils::MakeMaker"); '; } + if ($eui) { + $cpan_command .= 'install("ExtUtils::Install"); '; + } if ($cpan) { $cpan_command .= 'force("install","CPAN"); '; } @@ -84,6 +95,23 @@ DEATH if ($cpan) { system($^X, '-MCPAN', '-e', 'CPAN::Config->load; CPAN::Config->commit;'); } + if($no_manpages) { + # if we call this code directly, the changes get written to + # $BOOTSTRAP/lib/perl5/CPAN/Config.pm, not where the user expects them to + # be in their ~/.cpan/CPAN/MyConfig.pm. + system($^X, '-MCPAN', + '-e', + q[CPAN::HandleConfig->load;], + '-e', + q[$CPAN::Config->{makepl_arg} = ] . + q['INSTALLMAN1DIR=none INSTALLMAN3DIR=none';], + '-e', + q[$CPAN::Config->{buildpl_arg} = ] . + q['--install_path libdoc="" --install_path bindoc=""';], + '-e', + q[CPAN::Config->commit;], + ); + } chdir($cwd); } @@ -95,10 +123,12 @@ name 'local-lib'; all_from 'lib/local/lib.pm'; requires 'ExtUtils::MakeMaker' => '6.31'; # version INSTALL_BASE was added +requires 'ExtUtils::Install' => '1.43'; # ditto requires 'ExtUtils::CBuilder'; # this and ParseXS are needed for MB C_support requires 'ExtUtils::ParseXS'; requires 'Module::Build' => '0.28'; # lib -> lib/perl5 change -requires 'CPAN' => '1.80'; # sudo support +my $required_CPAN = '1.80'; +requires 'CPAN' => $required_CPAN; # sudo support + CPAN::HandleConfig # No, really. See # https://rt.cpan.org/Public/Bug/Display.html?id=23735 @@ -107,22 +137,41 @@ requires 'CPAN' => '1.80'; # sudo support # without this beautiful hack my $no_cpanplus_env = !exists $ENV{PERL5_CPANPLUS_IS_RUNNING}; +my $no_cpan_env = !exists $ENV{PERL5_CPAN_IS_RUNNING}; require CPAN; delete $ENV{PERL5_CPANPLUS_IS_RUNNING} if $no_cpanplus_env; +delete $ENV{PERL5_CPAN_IS_RUNNING} if $no_cpan_env; # and make sure that the user doesn't have any existing CPAN config that'll # cause us problems for the next few steps. -require CPAN::HandleConfig; -CPAN::HandleConfig->load; -for my $eumm_setting ( qw/makepl_arg make_install_arg/ ) { - if ($CPAN::Config->{$eumm_setting} =~ /(?:PREFIX|INSTALL_BASE)/) { - die "Possibly invalid config detected in $eumm_setting: " . $CPAN::Config->{$eumm_setting}; +{ + local $@; + eval { require CPAN::HandleConfig; }; + # Need newish CPAN.pm for this, ergo skip it if that version of CPAN isn't + # installed yet. + # It will already be installed by the time we reach here if bootstrapping, + # otherwise, if we're running from CPAN then it will be installed soon + # enough, and we'll come back here.. + if (!$@) { + CPAN::HandleConfig->load; + for my $eumm_setting ( qw/makepl_arg make_install_arg/ ) { + if ($CPAN::Config->{$eumm_setting} =~ /(?:PREFIX|INSTALL_BASE)/) { + die "Possibly invalid config detected in $eumm_setting: " . $CPAN::Config->{$eumm_setting}; + } + } + + for my $mb_setting (qw/mbuild_arg mbuild_install_arg mbuildpl_arg/) { + if ($CPAN::Config->{$mb_setting} =~ /(?:--prefix|--install_base)/) { + die "Possibly invalid config detected in $mb_setting: " . $CPAN::Config->{$mb_setting}; + } + } } -} - -for my $mb_setting (qw/mbuild_arg mbuild_install_arg mbuildpl_arg/) { - if ($CPAN::Config->{$mb_setting} =~ /(?:--prefix|--install_base)/) { - die "Possibly invalid config detected in $mb_setting: " . $CPAN::Config->{$mb_setting}; + else { + my $error = $@; + require CPAN; + # Explode if it looks like requiring CPAN::HandleConfig should + # have worked, but didn't. + die($error) if $CPAN::VERSION >= $required_CPAN; } }