X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExtUtils%2FMakeMaker.pm;h=a6e56b3ab3968cba1bf621e7f9a36688f8fa7817;hb=8c7f0036c6170bb0e341d84874bdb51f472a6afb;hp=51477a4001807c348b6965bd4fe08f16f501299a;hpb=ffbaec2a8fe592331bb95ad6288802d907f301d7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/ExtUtils/MakeMaker.pm b/lib/ExtUtils/MakeMaker.pm index 51477a4..a6e56b3 100644 --- a/lib/ExtUtils/MakeMaker.pm +++ b/lib/ExtUtils/MakeMaker.pm @@ -2,7 +2,7 @@ BEGIN {require 5.002;} # MakeMaker 5.17 was the last MakeMaker that was compatib package ExtUtils::MakeMaker; -$VERSION = "5.46"; +$VERSION = "5.47"; $Version_OK = "5.17"; # Makefiles older than $Version_OK will die # (Will be checked from MakeMaker version 4.13 onwards) ($Revision = substr(q$Revision: 1.222 $, 10)) =~ s/\s+$//; @@ -139,7 +139,7 @@ sub prompt ($;$) { my $ans; local $|=1; print "$mess $dispdef"; - if ($ISA_TTY) { + if ($ISA_TTY && !$ENV{PERL_MM_USE_DEFAULT}) { chomp($ans = ); } else { print "$def\n"; @@ -150,8 +150,9 @@ sub prompt ($;$) { sub eval_in_subdirs { my($self) = @_; my($dir); - use Cwd 'cwd'; + use Cwd qw(cwd abs_path); my $pwd = cwd(); + local @INC = map eval {abs_path($_) if -e} || $_, @INC; foreach $dir (@{$self->{DIR}}){ my($abs) = $self->catdir($pwd,$dir); @@ -209,7 +210,8 @@ sub full_setup { PERL_LIB PERL_SRC PERM_RW PERM_RWX PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX - PREREQ_PM SKIP TEST_LIBS TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG + PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ + SKIP TEST_LIBS TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG XS_VERSION clean depend dist dynamic_lib linkext macro realclean tool_autosplit MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC @@ -326,6 +328,17 @@ sub ExtUtils::MakeMaker::new { my($class,$self) = @_; my($key); + if ("@ARGV" =~ /\bPREREQ_PRINT\b/) { + require Data::Dumper; + print Data::Dumper->Dump([$self->{PREREQ_PM}], [qw(PREREQ_PM)]); + } + + # PRINT_PREREQ is RedHatism. + if ("@ARGV" =~ /\bPRINT_PREREQ\b/) { + print join(" ", map { "perl($_)>=$self->{PREREQ_PM}->{$_} " } sort keys %{$self->{PREREQ_PM}}), "\n"; + exit 0; + } + print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose; if (-f "MANIFEST" && ! -f "Makefile"){ check_manifest(); @@ -335,27 +348,29 @@ sub ExtUtils::MakeMaker::new { check_hints($self); + my %configure_att; # record &{$self->{CONFIGURE}} attributes my(%initial_att) = %$self; # record initial attributes + my(%unsatisfied) = (); my($prereq); foreach $prereq (sort keys %{$self->{PREREQ_PM}}) { my $eval = "require $prereq"; eval $eval; if ($@) { - warn "Warning: prerequisite $prereq failed to load: $@"; - } - elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){ - warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found"; -# Why is/was this 'delete' here? We need PREREQ_PM later to make PPDs. -# } else { -# delete $self->{PREREQ_PM}{$prereq}; + warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found.\n" unless $self->{PREREQ_FATAL}; + $unsatisfied{$prereq} = 'not installed'; + } elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){ + warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found. We have" + . ($prereq->VERSION || 'unknown version') unless $self->{PREREQ_FATAL}; + $unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ? $self->{PREREQ_PM}->{$prereq} : 'unknown version' ; } } -# if (@unsatisfied){ + if (%unsatisfied && $self->{PREREQ_FATAL}){ # unless (defined $ExtUtils::MakeMaker::useCPAN) { -# print qq{MakeMaker WARNING: prerequisites not found (@unsatisfied) -# Please install these modules first and rerun 'perl Makefile.PL'.\n}; + my $failedprereqs = join ', ', map {"$_ $unsatisfied{$_}"} keys %unsatisfied; + die qq{MakeMaker FATAL: prerequisites not found ($failedprereqs) + Please install these modules first and rerun 'perl Makefile.PL'.\n}; # if ($ExtUtils::MakeMaker::hasCPAN) { # $ExtUtils::MakeMaker::useCPAN = prompt(qq{Should I try to use the CPAN module to fetch them for you?},"yes"); # } else { @@ -367,14 +382,15 @@ sub ExtUtils::MakeMaker::new { # require CPAN; # CPAN->import(@unsatisfied); # } else { -# die qq{prerequisites not found (@unsatisfied)}; +# die qq{prerequisites not found (@unsatisfied)}; # } # warn qq{WARNING: prerequisites not found (@unsatisfied)}; -# } + } if (defined $self->{CONFIGURE}) { if (ref $self->{CONFIGURE} eq 'CODE') { - $self = { %$self, %{&{$self->{CONFIGURE}}}}; + %configure_att = %{&{$self->{CONFIGURE}}}; + $self = { %$self, %configure_att }; } else { Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n"; } @@ -411,7 +427,7 @@ sub ExtUtils::MakeMaker::new { } if ($self->{PARENT}) { $self->{PARENT}->{CHILDREN}->{$newclass} = $self; - foreach my $opt (qw(CAPI POLLUTE)) { + foreach my $opt (qw(POLLUTE PERL_CORE)) { if (exists $self->{PARENT}->{$opt} and not exists $self->{$opt}) { @@ -420,6 +436,8 @@ sub ExtUtils::MakeMaker::new { } } } + my @fm = grep /^FIRST_MAKEFILE=/, @ARGV; + parse_args($self,@fm) if @fm; } else { parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV); } @@ -480,6 +498,27 @@ END $v =~ tr/\n/ /s; push @{$self->{RESULT}}, "# $key => $v"; } + undef %initial_att; # free memory + + if (defined $self->{CONFIGURE}) { + push @{$self->{RESULT}}, < 0) { + foreach $key (sort keys %configure_att){ + my($v) = neatvalue($configure_att{$key}); + $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/; + $v =~ tr/\n/ /s; + push @{$self->{RESULT}}, "# $key => $v"; + } + } + else + { + push @{$self->{RESULT}}, "# no values returned"; + } + undef %configure_att; # free memory + } # turn the SKIP array into a SKIPHASH hash my (%skip,$skip); @@ -520,14 +559,20 @@ END } sub WriteEmptyMakefile { - if (-f 'Makefile.old') { - chmod 0666, 'Makefile.old'; - unlink 'Makefile.old' or warn "unlink Makefile.old: $!"; - } - rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!" - if -f 'Makefile'; - open MF, '> Makefile' or die "open Makefile for write: $!"; - print MF <<'EOP'; + Carp::croak "WriteEmptyMakefile: Need even number of args" if @_ % 2; + local $SIG{__WARN__} = \&warnhandler; + + my %att = @_; + my $self = MM->new(\%att); + if (-f "$self->{MAKEFILE}.old") { + chmod 0666, "$self->{MAKEFILE}.old"; + unlink "$self->{MAKEFILE}.old" or warn "unlink $self->{MAKEFILE}.old: $!"; + } + rename $self->{MAKEFILE}, "$self->{MAKEFILE}.old" + or warn "rename $self->{MAKEFILE} $self->{MAKEFILE}.old: $!" + if -f $self->{MAKEFILE}; + open MF, '>', $self->{MAKEFILE} or die "open $self->{MAKEFILE} for write: $!"; + print MF <<'EOP'; all: clean: @@ -539,7 +584,7 @@ makemakerdflt: test: EOP - close MF or die "close Makefile for write: $!"; + close MF or die "close $self->{MAKEFILE} for write: $!"; } sub check_manifest { @@ -1202,17 +1247,6 @@ Ref to array of *.c file names. Initialised from a directory scan and the values portion of the XS attribute hash. This is not currently used by MakeMaker but may be handy in Makefile.PLs. -=item CAPI - -[This attribute is obsolete in Perl 5.6. PERL_OBJECT builds are C-compatible -by default.] - -Switch to force usage of the Perl C API even when compiling for PERL_OBJECT. - -Note that this attribute is passed through to any recursive build, -but if and only if the submodule's Makefile.PL itself makes no mention -of the 'CAPI' attribute. - =item CCFLAGS String that will be included in the compiler call command line between @@ -1647,12 +1681,15 @@ of memory allocations, etc. =item PERLRUN - $(PERL) -I$(PERL_ARCH) -I$(PERL_LIB) - +Use this instead of $(PERL) or $(FULLPERL) when you wish to run perl. +It will set up extra necessary flags for you. + =item PERLRUNINST - - $(PERL) -I$(INST_ARCH) -I$(INST_LIB) -I$(PERL_ARCH) -I$(PERL_LIB) - + +Use this instead of $(PERL) or $(FULLPERL) when you wish to run +perl to work with modules. It will add things like -I$(INST_ARCH) +and other necessary flags. + =item PERL_SRC Directory containing the Perl source code (use of this should be @@ -1763,6 +1800,37 @@ extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the desired version is the value. If the required version number is 0, we only check if any version is installed already. +=item PREREQ_FATAL + +Bool. If this parameter is true, failing to have the required modules +(or the right versions thereof) will be fatal. perl Makefile.PL will die +with the proper message. + +Note: see L for a shortcut for stopping tests early if +you are missing dependencies. + +Do I use this parameter for simple requirements, which could be resolved +at a later time, e.g. after an unsuccessful B of your module. + +It is I rare to have to use C at all! + +=item PREREQ_PRINT + +Bool. If this parameter is true, the prerequisites will be printed to +stdout and MakeMaker will exit. The output format is + +$PREREQ_PM = { + 'A::B' => Vers1, + 'C::D' => Vers2, + ... + }; + +=item PRINT_PREREQ + +RedHatism for C. The output format is different, though: + + perl(A::B)>=Vers1 perl(C::D)>=Vers2 ... + =item SKIP Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the @@ -1772,8 +1840,9 @@ if you really need it. =item TEST_LIBS -The set of -I's necessary to run a "make test". - +The set of -I's necessary to run a "make test". Use as: +$(PERL) $(TEST_LIBS) -e '...' for example. + =item TYPEMAPS Ref to array of typemap file names. Use this when the typemaps are @@ -2107,6 +2176,11 @@ Command line options used by Cnew()>, and thus by C. The string is split on whitespace, and the result is processed before any actual command line arguments are processed. +=item PERL_MM_USE_DEFAULT + +If set to a true value then MakeMaker's prompt function will +always return the default without waiting for user input. + =back =head1 SEE ALSO @@ -2121,6 +2195,9 @@ Andy Dougherty >, Andreas KEnig support by Charles Bailey >. OS/2 support by Ilya Zakharevich >. +Contact the MakeMaker mailing list > if you have +any questions. + Send patches and bug reports to >. =cut