[asperl] added AS patch#12 with minor changes
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
index 273ebe7..c86486a 100644 (file)
@@ -2,10 +2,10 @@ BEGIN {require 5.002;} # MakeMaker 5.17 was the last MakeMaker that was compatib
 
 package ExtUtils::MakeMaker;
 
-$Version = $VERSION = "5.4002";
+$Version = $VERSION = "5.42";
 $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.211 $, 10)) =~ s/\s+$//;
+($Revision = substr(q$Revision: 1.216 $, 10)) =~ s/\s+$//;
 
 
 
@@ -66,7 +66,7 @@ package ExtUtils::Liblist;
 
 package ExtUtils::MakeMaker;
 #
-# Now we can can pull in the friends
+# Now we can pull in the friends
 #
 $Is_VMS   = $^O eq 'VMS';
 $Is_OS2   = $^O eq 'os2';
@@ -235,6 +235,7 @@ sub full_setup {
 
     @Attrib_help = qw/
 
+    AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION LICENSE_HREF
     C CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DL_FUNCS DL_VARS
     EXE_FILES EXCLUDE_EXT INCLUDE_EXT NO_VC FIRST_MAKEFILE FULLPERL H
     INC INSTALLARCHLIB INSTALLBIN INSTALLDIRS INSTALLMAN1DIR
@@ -278,7 +279,7 @@ sub full_setup {
  c_o xs_c xs_o top_targets linkext dlsyms dynamic dynamic_bs
  dynamic_lib static static_lib manifypods processPL installbin subdirs
  clean realclean dist_basics dist_core dist_dir dist_test dist_ci
- install force perldepend makefile staticmake test
+ install force perldepend makefile staticmake test ppd
 
          ); # loses section ordering
 
@@ -307,7 +308,7 @@ sub full_setup {
     @Get_from_Config = 
        qw(
           ar cc cccdlflags ccdlflags dlext dlsrc ld lddlflags ldflags libc
-          lib_ext obj_ext ranlib sitelibexp sitearchexp so exe_ext
+          lib_ext obj_ext osname osvers ranlib sitelibexp sitearchexp so exe_ext
          );
 
     my $item;
@@ -381,8 +382,9 @@ sub ExtUtils::MakeMaker::new {
        eval $eval;
        if ($@){
            warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found";
-       } else {
-           delete $self->{PREREQ_PM}{$prereq};
+# mjn
+#      } else {
+#          delete $self->{PREREQ_PM}{$prereq};
        }
     }
 #    if (@unsatisfied){
@@ -454,11 +456,17 @@ sub ExtUtils::MakeMaker::new {
 
     if (! $self->{PERL_SRC} ) {
        my($pthinks) = $self->canonpath($INC{'Config.pm'});
+       my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');
        $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;
-       if ($pthinks ne $self->catfile($Config{archlibexp},'Config.pm')){
-            print "Have $pthinks expected ",$self->catfile($Config{archlibexp},'Config.pm'),"\n";
-           $pthinks =~ s!/Config\.pm$!!;
-           $pthinks =~ s!.*/!!;
+       if ($pthinks ne $cthinks &&
+           !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {
+            print "Have $pthinks expected $cthinks\n";
+           if ($Is_Win32) {
+               $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;
+           }
+           else {
+               $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;
+           }
            print STDOUT <<END;
 Your perl and your Config.pm seem to have different ideas about the architecture
 they are running on.
@@ -531,6 +539,29 @@ END
     $self;
 }
 
+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';
+all:
+
+clean:
+
+install:
+
+makemakerdflt:
+
+test:
+
+EOP
+  close MF or die "close Makefile for write: $!";
+}
+
 sub check_manifest {
     print STDOUT "Checking if your kit is complete...\n";
     require ExtUtils::Manifest;
@@ -1151,6 +1182,11 @@ 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 CCFLAGS
+
+String that will be included in the compiler call command line between
+the arguments INC and OPTIMIZE.
+
 =item CONFIG
 
 Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
@@ -1251,6 +1287,10 @@ Perl binary able to run this extension.
 
 Ref to array of *.h file names. Similar to C.
 
+=item IMPORTS
+
+IMPORTS is only used on OS/2.
+
 =item INC
 
 Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
@@ -1558,15 +1598,17 @@ routine requires that the file named by VERSION_FROM contains one
 single line to compute the version number. The first line in the file
 that contains the regular expression
 
-    /\$(([\w\:\']*)\bVERSION)\b.*\=/
+    /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
 
 will be evaluated with eval() and the value of the named variable
 B<after> 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 ) = '$Revision: 1.211 $ ' =~ /\$Revision:\s+([^\s]+)/;
+    *VERSION = \'1.01';
+    ( $VERSION ) = '$Revision: 1.216 $ ' =~ /\$Revision:\s+([^\s]+)/;
     $FOO::VERSION = '1.10';
+    *FOO::VERSION = \'1.11';
 
 but these will fail:
 
@@ -1574,9 +1616,16 @@ but these will fail:
     local $VERSION = '1.02';
     local $FOO::VERSION = '1.30';
 
-The file named in VERSION_FROM is added as a dependency to Makefile to
-guarantee, that the Makefile contains the correct VERSION macro after
-a change of the file.
+The file named in VERSION_FROM is not added as a dependency to
+Makefile. This is not really correct, but it would be a major pain
+during development to have to rewrite the Makefile for any smallish
+change in that file. If you want to make sure that the Makefile
+contains the correct VERSION macro after any change of the file, you
+would have to do something like
+
+    depend => { Makefile => '$(VERSION_FROM)' }
+
+See attribute C<depend> below.
 
 =item XS
 
@@ -1834,6 +1883,23 @@ An example:
 
     WriteMakefile( 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })
 
+=head2 Disabling an extension
+
+If some events detected in F<Makefile.PL> imply that there is no way
+to create the Module, but this is a normal state of things, then you
+can create a F<Makefile> which does nothing, but succeeds on all the
+"usual" build targets.  To do so, use
+
+   ExtUtils::MakeMaker::WriteEmptyMakefile();
+
+instead of WriteMakefile().
+
+This may be useful if other modules expect this module to be I<built>
+OK, as opposed to I<work> OK (say, this system-dependent module builds
+in a subdirectory of some other distribution, or is listed as a
+dependency in a CPAN::Bundle, but the functionality is supported by
+different means on the current architecture).
+
 =head1 SEE ALSO
 
 ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,