X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExtUtils%2FMakeMaker.pm;h=a02b25963828a53928429112bd6891bba10d7fb5;hb=76ca89edebb126a10dcdc3521c9db0680eba1b5c;hp=405ce771fa28834ad19d2c503dc37396da6818ac;hpb=531e2ba17c3281a8e6bbb5e7c03fd7923b41370f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/ExtUtils/MakeMaker.pm b/lib/ExtUtils/MakeMaker.pm index 405ce77..a02b259 100644 --- a/lib/ExtUtils/MakeMaker.pm +++ b/lib/ExtUtils/MakeMaker.pm @@ -1,24 +1,29 @@ +# $Id: $ package ExtUtils::MakeMaker; BEGIN {require 5.005_03;} -$VERSION = '6.11'; -($Revision) = q$Revision: 1.123 $ =~ /Revision:\s+(\S+)/; - require Exporter; -use Config; +use ExtUtils::MakeMaker::Config; use Carp (); use File::Path; use vars qw( @ISA @EXPORT @EXPORT_OK - $Revision $VERSION $Verbose %Config + $VERSION $Verbose %Config @Prepend_parent @Parent %Recognized_Att_Keys @Get_from_Config @MM_Sections @Overridable $Filename ); + +# Has to be on its own line with no $ after it to avoid being noticed by +# the version control system +use vars qw($Revision); use strict; +$VERSION = '6.28'; +($Revision = q$Revision: 4409 $) =~ /Revision:\s+(\S+)/; + @ISA = qw(Exporter); @EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt); @EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists); @@ -167,9 +172,11 @@ sub eval_in_subdirs { foreach my $dir (@{$self->{DIR}}){ my($abs) = $self->catdir($pwd,$dir); - $self->eval_in_x($abs); + eval { $self->eval_in_x($abs); }; + last if $@; } chdir $pwd; + die $@ if $@; } sub eval_in_x { @@ -207,7 +214,7 @@ sub full_setup { INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB INST_MAN1DIR INST_MAN3DIR INSTALLDIRS - DESTDIR PREFIX + DESTDIR PREFIX INSTALLBASE PERLPREFIX SITEPREFIX VENDORPREFIX INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH @@ -226,7 +233,7 @@ sub full_setup { PERL_SRC PERM_RW PERM_RWX PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ - SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG + SIGN SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG XS_VERSION clean depend dist dynamic_lib linkext macro realclean tool_autosplit @@ -260,12 +267,12 @@ sub full_setup { special_targets c_o xs_c xs_o - top_targets linkext dlsyms dynamic dynamic_bs + top_targets blibdirs linkext dlsyms dynamic dynamic_bs dynamic_lib static static_lib manifypods processPL installbin subdirs clean_subdirs clean realclean_subdirs realclean - metafile metafile_addtomanifest - dist_basics dist_core distdir dist_test dist_ci + metafile signature + dist_basics dist_core distdir dist_test dist_ci distmeta distsignature install force perldepend makefile staticmake test ppd ); # loses section ordering @@ -273,7 +280,7 @@ sub full_setup { @Overridable = @MM_Sections; push @Overridable, qw[ - dir_target libscan makeaperl needs_linking perm_rw perm_rwx + libscan makeaperl needs_linking perm_rw perm_rwx subdir_x test_via_harness test_via_script init_PERL ]; @@ -354,11 +361,13 @@ sub new { if ("@ARGV" =~ /\bPREREQ_PRINT\b/) { require Data::Dumper; print Data::Dumper->Dump([$self->{PREREQ_PM}], [qw(PREREQ_PM)]); + exit 0; } # PRINT_PREREQ is RedHatism. if ("@ARGV" =~ /\bPRINT_PREREQ\b/) { - print join(" ", map { "perl($_)>=$self->{PREREQ_PM}->{$_} " } sort keys %{$self->{PREREQ_PM}}), "\n"; + print join(" ", map { "perl($_)>=$self->{PREREQ_PM}->{$_} " } + sort keys %{$self->{PREREQ_PM}}), "\n"; exit 0; } @@ -378,7 +387,9 @@ sub new { foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) { # 5.8.0 has a bug with require Foo::Bar alone in an eval, so an # extra statement is a workaround. - eval "require $prereq; 0"; + my $file = "$prereq.pm"; + $file =~ s{::}{/}g; + eval { require $file }; my $pr_version = $prereq->VERSION || 0; @@ -439,9 +450,10 @@ sub new { next unless defined $self->{PARENT}{$key}; # Don't stomp on WriteMakefile() args. - $self->{$key} = $self->{PARENT}{$key} - unless defined $self->{ARGS}{$key} and - $self->{ARGS}{$key} eq $self->{$key}; + next if defined $self->{ARGS}{$key} and + $self->{ARGS}{$key} eq $self->{$key}; + + $self->{$key} = $self->{PARENT}{$key}; unless ($Is_VMS && $key =~ /PERL$/) { $self->{$key} = $self->catdir("..",$self->{$key}) @@ -658,7 +670,6 @@ sub parse_args{ my($self, @args) = @_; foreach (@args) { unless (m/(.*?)=(.*)/) { - help(),exit 1 if m/^help$/; ++$Verbose if m/^verb/; next; } @@ -1011,7 +1022,7 @@ The generated Makefile enables the user of the extension to invoke The Makefile to be produced may be altered by adding arguments of the form C. E.g. - perl Makefile.PL PREFIX=/tmp/myperl5 + perl Makefile.PL PREFIX=~ Other interesting targets in the generated Makefile are @@ -1089,6 +1100,15 @@ searched by perl, run perl -le 'print join $/, @INC' +Sometimes older versions of the module you're installing live in other +directories in @INC. Because Perl loads the first version of a module it +finds, not the newest, you might accidentally get one of these older +versions even after installing a brand new version. To delete I (not simply older ones) set the +C variable. + + make install UNINST=1 + =head2 PREFIX and LIB attribute @@ -1353,13 +1373,13 @@ Something like C<"-DHAVE_UNISTD_H"> This is the root directory into which the code will be installed. It I. For example, if your code -would normally go into /usr/local/lib/perl you could set DESTDIR=/tmp/ -and installation would go into /tmp/usr/local/lib/perl. +would normally go into F you could set DESTDIR=~/tmp/ +and installation would go into F<~/tmp/usr/local/lib/perl>. This is primarily of use for people who repackage Perl modules. NOTE: Due to the nature of make, it is important that you put the trailing -slash on your DESTDIR. "/tmp/" not "/tmp". +slash on your DESTDIR. F<~/tmp/> not F<~/tmp>. =item DIR @@ -1852,18 +1872,32 @@ See also L. =item PL_FILES -Ref to hash of files to be processed as perl programs. MakeMaker -will default to any found *.PL file (except Makefile.PL) being keys -and the basename of the file being the value. E.g. +MakeMaker can run programs to generate files for you at build time. +By default any file named *.PL (except Makefile.PL and Build.PL) in +the top level directory will be assumed to be a Perl program and run +passing its own basename in as an argument. For example... + + perl foo.PL foo + +This behavior can be overridden by supplying your own set of files to +search. PL_FILES accepts a hash ref, the key being the file to run +and the value is passed in as the first argument when the PL file is run. + + PL_FILES => {'bin/foobar.PL' => 'bin/foobar'} - {'foobar.PL' => 'foobar'} +Would run bin/foobar.PL like this: -The *.PL files are expected to produce output to the target files -themselves. If multiple files can be generated from the same *.PL -file then the value in the hash can be a reference to an array of -target file names. E.g. + perl bin/foobar.PL bin/foobar + +If multiple files from one program are desired an array ref can be used. + + PL_FILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]} + +In this case the program will be run multiple times using each target file. + + perl bin/foobar.PL bin/foobar1 + perl bin/foobar.PL bin/foobar2 - {'foobar.PL' => ['foobar1','foobar2']} =item PM @@ -1964,7 +1998,8 @@ only check if any version is installed already. =item PREREQ_PRINT Bool. If this parameter is true, the prerequisites will be printed to -stdout and MakeMaker will exit. The output format is +stdout and MakeMaker will exit. The output format is an evalable hash +ref. $PREREQ_PM = { 'A::B' => Vers1, @@ -1988,6 +2023,17 @@ $Config{installprefix} will be used. Overridable by PREFIX +=item SIGN + +When true, perform the generation and addition to the MANIFEST of the +SIGNATURE file in the distdir during 'make distdir', via 'cpansign +-s'. + +Note that you need to install the Module::Signature module to +perform this operation. + +Defaults to false. + =item SKIP Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the @@ -2037,7 +2083,7 @@ MakeMaker object. The following lines will be parsed o.k.: $VERSION = '1.00'; *VERSION = \'1.01'; - $VERSION = sprintf "%d.%03d", q$Revision: 1.123 $ =~ /(\d+)/g; + $VERSION = sprintf "%d.%03d", q$Revision: 4409 $ =~ /(\d+)/g; $FOO::VERSION = '1.10'; *FOO::VERSION = \'1.11'; our $VERSION = 1.2.3; # new for perl5.6.0 @@ -2189,7 +2235,7 @@ for embedding. If you still need a different solution, try to develop another subroutine that fits your needs and submit the diffs to -F +C For a complete description of all MakeMaker methods see L. @@ -2216,13 +2262,13 @@ Some of the most common mistakes: =over 2 -=item C< ' '>> +=item C<< MAN3PODS => ' ' >> This is commonly used to supress the creation of man pages. MAN3PODS takes a hash ref not a string, but the above worked by accident in old versions of MakeMaker. -The correct code is C< { }>>. +The correct code is C<< MAN3PODS => { } >>. =back @@ -2282,9 +2328,9 @@ Copies all the files that are in the MANIFEST file to a newly created directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory exists, it will be removed first. -Additionally, it will create a META.yml module meta-data file and add -this to your MANFIEST. You can shut this behavior off with the NO_META -flag. +Additionally, it will create a META.yml module meta-data file in the +distdir and add this to the distdir's MANFIEST. You can shut this +behavior off with the NO_META flag. =item make disttest @@ -2362,7 +2408,8 @@ meta-data file has been introduced, F. F is a YAML document (see http://www.yaml.org) containing basic information about the module (name, version, prerequisites...) in an easy to read format. The format is developed and defined by the -Module::Build developers. +Module::Build developers (see +http://module-build.sourceforge.net/META-spec.html) MakeMaker will automatically generate a F file for you and add it to your F as part of the 'distdir' target (and thus @@ -2436,26 +2483,26 @@ ExtUtils::Embed =head1 AUTHORS -Andy Dougherty >, Andreas KEnig ->, Tim Bunce >. VMS -support by Charles Bailey >. OS/2 support -by Ilya Zakharevich >. +Andy Dougherty C, Andreas KEnig +C, Tim Bunce C. VMS +support by Charles Bailey C. OS/2 support +by Ilya Zakharevich C. -Currently maintained by Michael G Schwern > +Currently maintained by Michael G Schwern C -Send patches and ideas to >. +Send patches and ideas to C. Send bug reports via http://rt.cpan.org/. Please send your generated Makefile along with your report. -For more up-to-date information, see http://www.makemaker.org. +For more up-to-date information, see L. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. -See F +See L =cut