X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExtUtils%2FMakeMaker.pm;h=261808cb59699a0ced63cf4084f3ab2f5e7a02fe;hb=2e65e370d35678c61f33c1e7f90fd07d0254d085;hp=dbfc81a86147553a0c884e9bfbc17b871b639754;hpb=324b23145b17e1acc327e170d31ebe7b00858b10;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/ExtUtils/MakeMaker.pm b/lib/ExtUtils/MakeMaker.pm index dbfc81a..261808c 100644 --- a/lib/ExtUtils/MakeMaker.pm +++ b/lib/ExtUtils/MakeMaker.pm @@ -1,37 +1,37 @@ +# $Id: /local/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm 66493 2008-09-27T21:35:25.560547Z schwern $ package ExtUtils::MakeMaker; -BEGIN {require 5.005_03;} +use strict; -$VERSION = '6.15'; -($Revision) = q$Revision: 1.130 $ =~ /Revision:\s+(\S+)/; +BEGIN {require 5.006;} require Exporter; -use Config; +use ExtUtils::MakeMaker::Config; use Carp (); use File::Path; -use vars qw( - @ISA @EXPORT @EXPORT_OK - $Revision $VERSION $Verbose %Config - @Prepend_parent @Parent - %Recognized_Att_Keys @Get_from_Config @MM_Sections @Overridable - $Filename - ); -use strict; +our $Verbose = 0; # exported +our @Parent; # needs to be localized +our @Get_from_Config; # referenced by MM_Unix +our @MM_Sections; +our @Overridable; +my @Prepend_parent; +my %Recognized_Att_Keys; + +our $VERSION = '6.46'; +our ($Revision) = q$Revision: 66493 $ =~ /Revision:\s+(\S+)/; +our $Filename = __FILE__; # referenced outside MakeMaker -@ISA = qw(Exporter); -@EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt); -@EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists); +our @ISA = qw(Exporter); +our @EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt); +our @EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists + &WriteEmptyMakefile); # These will go away once the last of the Win32 & VMS specific code is # purged. my $Is_VMS = $^O eq 'VMS'; my $Is_Win32 = $^O eq 'MSWin32'; -# Our filename for diagnostic and debugging purposes. More reliable -# than %INC (think caseless filesystems) -$Filename = __FILE__; - full_setup(); require ExtUtils::MM; # Things like CPAN assume loading ExtUtils::MakeMaker @@ -39,7 +39,7 @@ require ExtUtils::MM; # Things like CPAN assume loading ExtUtils::MakeMaker require ExtUtils::MY; # XXX pre-5.8 versions of ExtUtils::Embed expect # loading ExtUtils::MakeMaker will give them MY. - # This will go when Embed is it's own CPAN module. + # This will go when Embed is its own CPAN module. sub WriteMakefile { @@ -62,40 +62,44 @@ sub WriteMakefile { # scalar. my %Att_Sigs; my %Special_Sigs = ( - C => 'array', - CONFIG => 'array', - CONFIGURE => 'code', - DIR => 'array', - DL_FUNCS => 'hash', - DL_VARS => 'array', - EXCLUDE_EXT => 'array', - EXE_FILES => 'array', - FUNCLIST => 'array', - H => 'array', - IMPORTS => 'hash', - INCLUDE_EXT => 'array', - LIBS => ['array',''], - MAN1PODS => 'hash', - MAN3PODS => 'hash', - PL_FILES => 'hash', - PM => 'hash', - PMLIBDIRS => 'array', - PREREQ_PM => 'hash', - SKIP => 'array', - TYPEMAPS => 'array', - XS => 'hash', + C => 'ARRAY', + CONFIG => 'ARRAY', + CONFIGURE => 'CODE', + DIR => 'ARRAY', + DL_FUNCS => 'HASH', + DL_VARS => 'ARRAY', + EXCLUDE_EXT => 'ARRAY', + EXE_FILES => 'ARRAY', + FUNCLIST => 'ARRAY', + H => 'ARRAY', + IMPORTS => 'HASH', + INCLUDE_EXT => 'ARRAY', + LIBS => ['ARRAY',''], + MAN1PODS => 'HASH', + MAN3PODS => 'HASH', + META_ADD => 'HASH', + META_MERGE => 'HASH', + PL_FILES => 'HASH', + PM => 'HASH', + PMLIBDIRS => 'ARRAY', + PMLIBPARENTDIRS => 'ARRAY', + PREREQ_PM => 'HASH', + SKIP => 'ARRAY', + TYPEMAPS => 'ARRAY', + XS => 'HASH', + VERSION => ['version',''], _KEEP_AFTER_FLUSH => '', - clean => 'hash', - depend => 'hash', - dist => 'hash', - dynamic_lib=> 'hash', - linkext => 'hash', - macro => 'hash', - postamble => 'hash', - realclean => 'hash', - test => 'hash', - tool_autosplit => 'hash', + clean => 'HASH', + depend => 'HASH', + dist => 'HASH', + dynamic_lib=> 'HASH', + linkext => 'HASH', + macro => 'HASH', + postamble => 'HASH', + realclean => 'HASH', + test => 'HASH', + tool_autosplit => 'HASH', ); @Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys; @@ -113,20 +117,29 @@ sub _verify_att { } my @sigs = ref $sig ? @$sig : $sig; - my $given = lc ref $val; - unless( grep $given eq $_, @sigs ) { - my $takes = join " or ", map { $_ ne '' ? "$_ reference" - : "string/number" - } @sigs; - my $has = $given ne '' ? "$given reference" - : "string/number"; + my $given = ref $val; + unless( grep { $given eq $_ || ($_ && eval{$val->isa($_)}) } @sigs ) { + my $takes = join " or ", map { _format_att($_) } @sigs; + + my $has = _format_att($given); warn "WARNING: $key takes a $takes not a $has.\n". " Please inform the author.\n"; } } } -sub prompt ($;$) { + +sub _format_att { + my $given = shift; + + return $given eq '' ? "string/number" + : uc $given eq $given ? "$given reference" + : "$given object" + ; +} + + +sub prompt ($;$) { ## no critic my($mess, $def) = @_; Carp::confess("prompt function called without an argument") unless defined $mess; @@ -167,9 +180,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 +222,7 @@ sub full_setup { INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB INST_MAN1DIR INST_MAN3DIR INSTALLDIRS - DESTDIR PREFIX + DESTDIR PREFIX INSTALL_BASE PERLPREFIX SITEPREFIX VENDORPREFIX INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH @@ -215,18 +230,19 @@ sub full_setup { INSTALLMAN1DIR INSTALLMAN3DIR INSTALLSITEMAN1DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN1DIR INSTALLVENDORMAN3DIR - INSTALLSCRIPT + INSTALLSCRIPT INSTALLSITESCRIPT INSTALLVENDORSCRIPT PERL_LIB PERL_ARCHLIB SITELIBEXP SITEARCHEXP - INC INCLUDE_EXT LDFROM LIB LIBPERL_A LIBS - LINKTYPE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET + INC INCLUDE_EXT LDFROM LIB LIBPERL_A LIBS LICENSE + LINKTYPE MAKE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET + META_ADD META_MERGE MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NORECURS NO_VC OBJECT OPTIMIZE PERL_MALLOC_OK PERL PERLMAINCC PERLRUN PERLRUNINST PERL_CORE PERL_SRC PERM_RW PERM_RWX - PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC + PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS 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 +276,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,8 +289,11 @@ sub full_setup { @Overridable = @MM_Sections; push @Overridable, qw[ - dir_target libscan makeaperl needs_linking perm_rw perm_rwx - subdir_x test_via_harness test_via_script init_PERL + libscan makeaperl needs_linking perm_rw perm_rwx + subdir_x test_via_harness test_via_script + + init_VERSION init_dist init_INST init_INSTALL init_DEST init_dirscan + init_PM init_MANPODS init_xs init_PERL init_DIRFILESEP init_linker ]; push @MM_Sections, qw[ @@ -293,9 +312,9 @@ sub full_setup { # we will use all these variables in the Makefile @Get_from_Config = qw( - ar cc cccdlflags ccdlflags dlext dlsrc ld lddlflags ldflags libc - lib_ext obj_ext osname osvers ranlib sitelibexp sitearchexp so - exe_ext full_ar + ar cc cccdlflags ccdlflags dlext dlsrc exe_ext full_ar ld + lddlflags ldflags libc lib_ext obj_ext osname osvers ranlib + sitelibexp sitearchexp so ); # 5.5.3 doesn't have any concept of vendor libs @@ -354,12 +373,13 @@ sub new { if ("@ARGV" =~ /\bPREREQ_PRINT\b/) { require Data::Dumper; print Data::Dumper->Dump([$self->{PREREQ_PM}], [qw(PREREQ_PM)]); - exit 0; + 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; } @@ -379,7 +399,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; @@ -400,13 +422,18 @@ sub new { $self->{PREREQ_PM}->{$prereq} : 'unknown version' ; } } - if (%unsatisfied && $self->{PREREQ_FATAL}){ - my $failedprereqs = join ', ', map {"$_ $unsatisfied{$_}"} - keys %unsatisfied; - die qq{MakeMaker FATAL: prerequisites not found ($failedprereqs)\n - Please install these modules first and rerun 'perl Makefile.PL'.\n}; + + if (%unsatisfied && $self->{PREREQ_FATAL}){ + my $failedprereqs = join "\n", map {" $_ $unsatisfied{$_}"} + sort { $a cmp $b } keys %unsatisfied; + die <<"END"; +MakeMaker FATAL: prerequisites not found. +$failedprereqs + +Please install these modules first and rerun 'perl Makefile.PL'. +END } - + if (defined $self->{CONFIGURE}) { if (ref $self->{CONFIGURE} eq 'CODE') { %configure_att = %{&{$self->{CONFIGURE}}}; @@ -424,19 +451,19 @@ sub new { my $newclass = ++$PACKNAME; local @Parent = @Parent; # Protect against non-local exits { - no strict 'refs'; print "Blessing Object into class [$newclass]\n" if $Verbose>=2; mv_all_methods("MY",$newclass); bless $self, $newclass; push @Parent, $self; require ExtUtils::MY; + + no strict 'refs'; ## no critic; @{"$newclass\:\:ISA"} = 'MM'; } if (defined $Parent[-2]){ $self->{PARENT} = $Parent[-2]; - my $key; - for $key (@Prepend_parent) { + for my $key (@Prepend_parent) { next unless defined $self->{PARENT}{$key}; # Don't stomp on WriteMakefile() args. @@ -462,7 +489,7 @@ sub new { } if ($self->{PARENT}) { $self->{PARENT}->{CHILDREN}->{$newclass} = $self; - foreach my $opt (qw(POLLUTE PERL_CORE)) { + foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE)) { if (exists $self->{PARENT}->{$opt} and not exists $self->{$opt}) { @@ -477,10 +504,12 @@ sub new { parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV); } + $self->{NAME} ||= $self->guess_name; ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g; + $self->init_MAKE; $self->init_main; $self->init_VERSION; $self->init_dist; @@ -488,10 +517,13 @@ sub new { $self->init_INSTALL; $self->init_DEST; $self->init_dirscan; + $self->init_PM; + $self->init_MANPODS; $self->init_xs; $self->init_PERL; $self->init_DIRFILESEP; $self->init_linker; + $self->init_ABSTRACT; if (! $self->{PERL_SRC} ) { require VMS::Filespec if $Is_VMS; @@ -571,8 +603,7 @@ END } # turn the SKIP array into a SKIPHASH hash - my (%skip,$skip); - for $skip (@{$self->{SKIP} || []}) { + for my $skip (@{$self->{SKIP} || []}) { $self->{SKIPHASH}{$skip} = 1; } delete $self->{SKIP}; # free memory @@ -602,7 +633,9 @@ END my(%a) = %{$self->{$section} || {}}; push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:"; push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a; - push @{$self->{RESULT}}, $self->nicetext($self->$method( %a )); + push @{$self->{RESULT}}, $self->maketext_filter( + $self->$method( %a ) + ); } } @@ -612,32 +645,33 @@ END } sub WriteEmptyMakefile { - Carp::croak "WriteEmptyMakefile: Need even number of args" if @_ % 2; + Carp::croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2; my %att = @_; my $self = MM->new(\%att); - if (-f $self->{MAKEFILE_OLD}) { - _unlink($self->{MAKEFILE_OLD}) or - warn "unlink $self->{MAKEFILE_OLD}: $!"; + + my $new = $self->{MAKEFILE}; + my $old = $self->{MAKEFILE_OLD}; + if (-f $old) { + _unlink($old) or warn "unlink $old: $!"; } - if ( -f $self->{MAKEFILE} ) { - _rename($self->{MAKEFILE}, $self->{MAKEFILE_OLD}) or - warn "rename $self->{MAKEFILE} => $self->{MAKEFILE_OLD}: $!" + if ( -f $new ) { + _rename($new, $old) or warn "rename $new => $old: $!" } - open MF, '>'.$self->{MAKEFILE} or die "open $self->{MAKEFILE} for write: $!"; - print MF <<'EOP'; -all: + open my $mfh, '>', $new or die "open $new for write: $!"; + print $mfh <<'EOP'; +all : -clean: +clean : -install: +install : -makemakerdflt: +makemakerdflt : -test: +test : EOP - close MF or die "close $self->{MAKEFILE} for write: $!"; + close $mfh or die "close $new for write: $!"; } sub check_manifest { @@ -660,7 +694,6 @@ sub parse_args{ my($self, @args) = @_; foreach (@args) { unless (m/(.*?)=(.*)/) { - help(),exit 1 if m/^help$/; ++$Verbose if m/^verb/; next; } @@ -757,7 +790,7 @@ sub check_hints { } sub _run_hintfile { - no strict 'vars'; + our $self; local($self) = shift; # make $self available to the hint file. my($hint_file) = shift; @@ -776,8 +809,6 @@ sub _run_hintfile { sub mv_all_methods { my($from,$to) = @_; - no strict 'refs'; - my($symtab) = \%{"${from}::"}; # Here you see the *current* list of methods that are overridable # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm @@ -800,19 +831,23 @@ sub mv_all_methods { next unless defined &{"${from}::$method"}; - *{"${to}::$method"} = \&{"${from}::$method"}; - - # delete would do, if we were sure, nobody ever called - # MY->makeaperl directly - - # delete $symtab->{$method}; - - # If we delete a method, then it will be undefined and cannot - # be called. But as long as we have Makefile.PLs that rely on - # %MY:: being intact, we have to fill the hole with an - # inheriting method: - - eval "package MY; sub $method { shift->SUPER::$method(\@_); }"; + { + no strict 'refs'; ## no critic + *{"${to}::$method"} = \&{"${from}::$method"}; + + # If we delete a method, then it will be undefined and cannot + # be called. But as long as we have Makefile.PLs that rely on + # %MY:: being intact, we have to fill the hole with an + # inheriting method: + + { + package MY; + my $super = "SUPER::".$method; + *{$method} = sub { + shift->$super(@_); + }; + } + } } # We have to clean out %INC also, because the current directory is @@ -861,19 +896,19 @@ sub skipcheck { sub flush { my $self = shift; - my($chunk); - local *FH; - print STDOUT "Writing $self->{MAKEFILE} for $self->{NAME}\n"; - unlink($self->{MAKEFILE}, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ''); - open(FH,">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!"; + my $finalname = $self->{MAKEFILE}; + print STDOUT "Writing $finalname for $self->{NAME}\n"; + + unlink($finalname, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ()); + open(my $fh,">", "MakeMaker.tmp") + or die "Unable to open MakeMaker.tmp: $!"; - for $chunk (@{$self->{RESULT}}) { - print FH "$chunk\n"; + for my $chunk (@{$self->{RESULT}}) { + print $fh "$chunk\n"; } - close FH; - my($finalname) = $self->{MAKEFILE}; + close $fh; _rename("MakeMaker.tmp", $finalname) or warn "rename MakeMaker.tmp => $finalname: $!"; chmod 0644, $finalname unless $Is_VMS; @@ -1013,7 +1048,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 INSTALL_BASE=~ Other interesting targets in the generated Makefile are @@ -1075,7 +1110,7 @@ INSTALLDIRS according to the following table: INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH INST_LIB INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB INST_BIN INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN - INST_SCRIPT INSTALLSCRIPT INSTALLSCRIPT INSTALLSCRIPT + INST_SCRIPT INSTALLSCRIPT INSTALLSITESCRIPT INSTALLVENDORSCRIPT INST_MAN1DIR INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR INST_MAN3DIR INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR @@ -1091,18 +1126,60 @@ 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 INSTALL_BASE + +INSTALL_BASE can be passed into Makefile.PL to change where your +module will be installed. INSTALL_BASE is more like what everyone +else calls "prefix" than PREFIX is. + +To have everything installed in your home directory, do the following. + + # Unix users, INSTALL_BASE=~ works fine + perl Makefile.PL INSTALL_BASE=/path/to/your/home/dir + +Like PREFIX, it sets several INSTALL* attributes at once. Unlike +PREFIX it is easy to predict where the module will end up. The +installation pattern looks like this: + + INSTALLARCHLIB INSTALL_BASE/lib/perl5/$Config{archname} + INSTALLPRIVLIB INSTALL_BASE/lib/perl5 + INSTALLBIN INSTALL_BASE/bin + INSTALLSCRIPT INSTALL_BASE/bin + INSTALLMAN1DIR INSTALL_BASE/man/man1 + INSTALLMAN3DIR INSTALL_BASE/man/man3 + +INSTALL_BASE in MakeMaker and C<--install_base> in Module::Build (as +of 0.28) install to the same location. If you want MakeMaker and +Module::Build to install to the same location simply set INSTALL_BASE +and C<--install_base> to the same location. + +INSTALL_BASE was added in 6.31. + =head2 PREFIX and LIB attribute PREFIX and LIB can be used to set several INSTALL* attributes in one -go. The quickest way to install a module in a non-standard place might -be +go. Here's an example for installing into your home directory. - perl Makefile.PL PREFIX=~ + # Unix users, PREFIX=~ works fine + perl Makefile.PL PREFIX=/path/to/your/home/dir This will install all files in the module under your home directory, with man pages and libraries going into an appropriate place (usually -~/man and ~/lib). +~/man and ~/lib). How the exact location is determined is complicated +and depends on how your Perl was configured. INSTALL_BASE works more +like what other build systems call "prefix" than PREFIX and we +recommend you use that instead. Another way to specify many INSTALL directories with a single parameter is LIB. @@ -1355,13 +1432,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 @@ -1527,7 +1604,7 @@ Defaults to $Config{installprivlib}. =item INSTALLSCRIPT Used by 'make install' which copies files from INST_SCRIPT to this -directory. +directory if INSTALLDIRS=perl. =item INSTALLSITEARCH @@ -1554,6 +1631,11 @@ $(SITEPREFIX)/man/man$(MAN*EXT). If set to 'none', no man pages will be installed. +=item INSTALLSITESCRIPT + +Used by 'make install' which copies files from INST_SCRIPT to this +directory if INSTALLDIRS is set to site (default). + =item INSTALLVENDORARCH Used by 'make install', which copies files from INST_ARCHLIB to this @@ -1578,6 +1660,11 @@ INSTALLDIRS=vendor. Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT). If set to 'none', no man pages will be installed. +=item INSTALLVENDORSCRIPT + +Used by 'make install' which copies files from INST_SCRIPT to this +directory if INSTALLDIRS is set to is set to vendor. + =item INST_ARCHLIB Same as INST_LIB for architecture dependent files. @@ -1661,12 +1748,35 @@ you specify a scalar as in MakeMaker will turn it into an array with one element. +=item LICENSE + +The licensing terms of your distribution. Generally its "perl" for the +same license as Perl itself. + +See L for the list of options. + +Defaults to "unknown". + =item LINKTYPE 'static' or 'dynamic' (default unless usedl=undef in config.sh). Should only be used to force static linking (also see linkext below). +=item MAKE + +Variant of make you intend to run the generated Makefile with. This +parameter lets Makefile.PL know what make quirks to account for when +generating the Makefile. + +MakeMaker also honors the MAKE environment variable. This parameter +takes precedent. + +Currently the only significant values are 'dmake' and 'nmake' for Windows +users. + +Defaults to $Config{make}. + =item MAKEAPERL Boolean which tells MakeMaker, that it should include the rules to @@ -1700,6 +1810,19 @@ C and will be installed during C. If it is intended, that a new perl binary be produced, this variable may hold a name for that binary. Defaults to perl +=item META_ADD + +=item META_MERGE + +A hashrefs of items to add to the F. + +They differ in how they behave if they have the same key as the +default metadata. META_ADD will override the default value with it's +own. META_MERGE will merge its value with the default. + +Unless you want to override the defaults, prefer META_MERGE so as to +get the advantage of any future defaults. + =item MYEXTLIB If the extension links to a library that it builds set this to the @@ -1854,18 +1977,39 @@ 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 + +PL files are normally run B pm_to_blib and include INST_LIB and +INST_ARCH in its C<@INC> so the just built modules can be +accessed... unless the PL file is making a module (or anything else in +PM) in which case it is run B pm_to_blib and does not include +INST_LIB and INST_ARCH in its C<@INC>. This apparently odd behavior +is there for backwards compatibility (and its somewhat DWIM). - {'foobar.PL' => ['foobar1','foobar2']} =item PM @@ -1898,7 +2042,7 @@ done. For instance, you would need to say: {'PM_FILTER' => 'grep -v \\"^\\#\\"'} -to remove all the leading coments on the fly during the build. The +to remove all the leading comments on the fly during the build. The extra \\ are necessary, unfortunately, because this variable is interpolated within the context of a Perl program built on the command line, and double quotes are what is used with the -e switch to build that command line. The @@ -1945,16 +2089,23 @@ by the PREFIX. =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. +(or the right versions thereof) will be fatal. C +will C instead of simply informing the user of the missing dependencies. -Note: see L for a shortcut for stopping tests early if -you are missing dependencies. +It is I rare to have to use C. Its use by module +authors is I and should never be used lightly. +Module installation tools have ways of resolving umet dependencies but +to do that they need a F. Using C breaks this. +That's bad. -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. +The only situation where it is appropriate is when you have +dependencies that are indispensible to actually I a +F. For example, MakeMaker's F needs L. +If its not available it cannot write the F. -It is I rare to have to use C at all! +Note: see L for a shortcut for stopping tests early +if you are missing dependencies and are afraid that users might +use your module with an incomplete environment. =item PREREQ_PM @@ -1966,7 +2117,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, @@ -1990,6 +2142,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,19 +2200,33 @@ will be evaluated with eval() and the value of the named variable B the eval() will be assigned to the VERSION attribute of the MakeMaker object. The following lines will be parsed o.k.: - $VERSION = '1.00'; - *VERSION = \'1.01'; - $VERSION = sprintf "%d.%03d", q$Revision: 1.130 $ =~ /(\d+)/g; + $VERSION = '1.00'; + *VERSION = \'1.01'; + ($VERSION) = q$Revision: 66493 $ =~ /(\d+)/g; $FOO::VERSION = '1.10'; *FOO::VERSION = \'1.11'; - our $VERSION = 1.2.3; # new for perl5.6.0 but these will fail: - my $VERSION = '1.01'; - local $VERSION = '1.02'; + # Bad + my $VERSION = '1.01'; + local $VERSION = '1.02'; local $FOO::VERSION = '1.30'; +"Version strings" are incompatible should not be used. + + # Bad + $VERSION = 1.2.3; + $VERSION = v1.2.3; + +L objects are fine. As of MakeMaker 6.35 version.pm will be +automatically loaded, but you must declare the dependency on version.pm. +For compatibility with older MakeMaker you should load on the same line +as $VERSION is declared. + + # All on one line + use version; our $VERSION = qv(1.2.3); + (Putting C or C on the preceding line will work o.k.) The file named in VERSION_FROM is not added as a dependency to @@ -2110,7 +2287,7 @@ passed to the method as a hash. =item depend - {ANY_TARGET => ANY_DEPENDECY, ...} + {ANY_TARGET => ANY_DEPENDENCY, ...} (ANY_TARGET must not be given a double-colon rule by MakeMaker.) @@ -2191,7 +2368,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. @@ -2218,13 +2395,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 +This is commonly used to suppress 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 @@ -2284,9 +2461,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 MANIFEST. You can shut this +behavior off with the NO_META flag. =item make disttest @@ -2296,7 +2473,7 @@ a make test in that directory. =item make tardist First does a distdir. Then a command $(PREOP) which defaults to a null -command, followed by $(TOUNIX), which defaults to a null command under +command, followed by $(TO_UNIX), which defaults to a null command under UNIX, and will convert files in distribution directory to UNIX format otherwise. Next it runs C on that directory into a tarfile and deletes the directory. Finishes with a command $(POSTOP) which @@ -2381,7 +2558,8 @@ to create the Module, but this is a normal state of things, then you can create a F which does nothing, but succeeds on all the "usual" build targets. To do so, use - ExtUtils::MakeMaker::WriteEmptyMakefile(); + use ExtUtils::MakeMaker qw(WriteEmptyMakefile); + WriteEmptyMakefile(); instead of WriteMakefile(). @@ -2430,35 +2608,46 @@ is processed before any actual command line arguments are processed. If set to a true value then MakeMaker's prompt function will always return the default without waiting for user input. +=item PERL_CORE + +Same as the PERL_CORE parameter. The parameter overrides this. + =back =head1 SEE ALSO -ExtUtils::MM_Unix, ExtUtils::Manifest ExtUtils::Install, -ExtUtils::Embed +L is a pure-Perl alternative to MakeMaker which does +not rely on make or any other external utility. It is easier to +extend to suit your needs. + +L is a wrapper around MakeMaker which adds features +not normally available. + +L and L are both modules to +help you setup your distribution. =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