Hello!

This is patch to add BUILD_REQUIRES and CONFIGURE_REQUIRES into EUMM.

PREREQ_PM and BUILD_REQUIRES are dumped as PREREQ_PM in 'Makefile' because CPAN.pm does not know about BUILD_REQUIRES.

Please check if I done correct thing with PREREQ_PRINT.

--
Alexandr Ciornii, http://chorny.net
Only in ExtUtils-MakeMaker-6.44: blib
diff -u -r ExtUtils-MakeMaker-6.44.orig/Changes ExtUtils-MakeMaker-6.44/Changes
--- ExtUtils-MakeMaker-6.44.orig/Changes        2008-02-29 01:06:09.000000000 
+0200
+++ ExtUtils-MakeMaker-6.44/Changes     2008-06-01 20:01:20.671875000 +0300
@@ -1,3 +1,6 @@
+    New Features
+    * BUILD_REQUIRES and CONFIGURE_REQUIRES (by Alexandr Ciornii)
+
 6.44  Thu Feb 28 16:06:04 PST 2008
     Bug Fixes
     * Updated bundled ExtUtils::Install to 1.45 which should fix some
diff -u -r ExtUtils-MakeMaker-6.44.orig/lib/ExtUtils/MakeMaker.pm 
ExtUtils-MakeMaker-6.44/lib/ExtUtils/MakeMaker.pm
--- ExtUtils-MakeMaker-6.44.orig/lib/ExtUtils/MakeMaker.pm      2008-02-29 
01:06:55.000000000 +0200
+++ ExtUtils-MakeMaker-6.44/lib/ExtUtils/MakeMaker.pm   2008-06-05 
20:16:55.796875000 +0300
@@ -82,6 +82,8 @@
  PMLIBDIRS          => 'ARRAY',
  PMLIBPARENTDIRS    => 'ARRAY',
  PREREQ_PM          => 'HASH',
+ CONFIGURE_REQUIRES => 'HASH',
+ BUILD_REQUIRES     => 'HASH',
  SKIP               => 'ARRAY',
  TYPEMAPS           => 'ARRAY',
  XS                 => 'HASH',
@@ -239,6 +241,7 @@
     PERL_SRC PERM_RW PERM_RWX
     PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE PPM_INSTALL_EXEC
     PPM_INSTALL_SCRIPT PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
+    BUILD_REQUIRES CONFIGURE_REQUIRES
     SIGN SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
     tool_autosplit
@@ -369,7 +372,7 @@
 
     if ("@ARGV" =~ /\bPREREQ_PRINT\b/) {
         require Data::Dumper;
-        print Data::Dumper->Dump([$self->{PREREQ_PM}], [qw(PREREQ_PM)]);
+        print Data::Dumper->Dump([$self->{PREREQ_PM},$self->{BUILD_REQUIRES}], 
[qw(PREREQ_PM BUILD_REQUIRES)]);
         exit 0;
     }
 
@@ -393,32 +396,35 @@
     my(%initial_att) = %$self; # record initial attributes
 
     my(%unsatisfied) = ();
-    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.
-        my $file = "$prereq.pm";
-        $file =~ s{::}{/}g;
-        eval { require $file };
-
-        my $pr_version = $prereq->VERSION || 0;
-
-        # convert X.Y_Z alpha version #s to X.YZ for easier comparisons
-        $pr_version =~ s/(\d+)\.(\d+)_(\d+)/$1.$2$3/;
-
-        if ($@) {
-            warn sprintf "Warning: prerequisite %s %s not found.\n", 
-              $prereq, $self->{PREREQ_PM}{$prereq} 
-                   unless $self->{PREREQ_FATAL};
-            $unsatisfied{$prereq} = 'not installed';
-        } elsif ($pr_version < $self->{PREREQ_PM}->{$prereq} ){
-            warn sprintf "Warning: prerequisite %s %s not found. We have 
%s.\n",
-              $prereq, $self->{PREREQ_PM}{$prereq}, 
-                ($pr_version || 'unknown version') 
-                  unless $self->{PREREQ_FATAL};
-            $unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ? 
-              $self->{PREREQ_PM}->{$prereq} : 'unknown version' ;
+
+    foreach my $prereq_type ($self->{BUILD_REQUIRES},$self->{PREREQ_PM}) {
+        foreach my $prereq (sort keys %{$prereq_type}) {
+            # 5.8.0 has a bug with require Foo::Bar alone in an eval, so an
+            # extra statement is a workaround.
+            my $file = "$prereq.pm";
+            $file =~ s{::}{/}g;
+            eval { require $file };
+    
+            my $pr_version = $prereq->VERSION || 0;
+    
+            # convert X.Y_Z alpha version #s to X.YZ for easier comparisons
+            $pr_version =~ s/(\d+)\.(\d+)_(\d+)/$1.$2$3/;
+    
+            if ($@) {
+                warn sprintf "Warning: prerequisite %s %s not found.\n", 
+                  $prereq, $prereq_type->{$prereq} 
+                       unless $self->{PREREQ_FATAL};
+                $unsatisfied{$prereq} = 'not installed';
+            } elsif ($pr_version < $prereq_type->{$prereq} ){
+                warn sprintf "Warning: prerequisite %s %s not found. We have 
%s.\n",
+                  $prereq, $prereq_type->{$prereq}, 
+                    ($pr_version || 'unknown version') 
+                      unless $self->{PREREQ_FATAL};
+                $unsatisfied{$prereq} = $prereq_type->{$prereq} ? 
+                  $prereq_type->{$prereq} : 'unknown version' ;
+            }
         }
-    }
+     }
     
      if (%unsatisfied && $self->{PREREQ_FATAL}){
         my $failedprereqs = join "\n", map {"    $_ $unsatisfied{$_}"} 
@@ -567,7 +573,13 @@
 #
 #   MakeMaker Parameters:
 END
-
+    if (exists $initial_att{'BUILD_REQUIRES'} and keys 
%{$initial_att{'BUILD_REQUIRES'}}>0) {
+      #can modify %initial_att because it's life is short
+      $initial_att{'PREREQ_PM'} ||= {};
+      %{$initial_att{'PREREQ_PM'}} = (%{$initial_att{'PREREQ_PM'}}, 
%{$initial_att{'BUILD_REQUIRES'}});
+      #CPAN.pm takes prereqs from this field in 'Makefile'
+      #and does not know about BUILD_REQUIRES
+    }
     foreach my $key (sort keys %initial_att){
         next if $key eq 'ARGS';
 
diff -u -r ExtUtils-MakeMaker-6.44.orig/lib/ExtUtils/MM_Any.pm 
ExtUtils-MakeMaker-6.44/lib/ExtUtils/MM_Any.pm
--- ExtUtils-MakeMaker-6.44.orig/lib/ExtUtils/MM_Any.pm 2008-02-29 
01:06:28.000000000 +0200
+++ ExtUtils-MakeMaker-6.44/lib/ExtUtils/MM_Any.pm      2008-06-01 
16:39:29.968750000 +0300
@@ -738,6 +738,18 @@
         $prereq_pm .= sprintf "\n    %-30s %s", "$mod:", $ver;
     }
 
+    my $build_prereq = '';
+    foreach my $mod ( sort { lc $a cmp lc $b } keys %{$self->{BUILD_REQUIRES}} 
) {
+        my $ver = $self->{BUILD_REQUIRES}{$mod};
+        $build_prereq .= sprintf "\n    %-30s %s", "$mod:", $ver;
+    }
+
+    my $configure_prereq = '';
+    foreach my $mod ( sort { lc $a cmp lc $b } keys 
%{$self->{CONFIGURE_REQUIRES}} ) {
+        my $ver = $self->{CONFIGURE_REQUIRES}{$mod};
+        $configure_prereq .= sprintf "\n    %-30s %s", "$mod:", $ver;
+    }
+
     my $author_value = defined $self->{AUTHOR}
         ? "\n    - $self->{AUTHOR}"
         : undef;
@@ -763,11 +775,13 @@
 
         $meta .= sprintf "%-20s %s\n", "$key:", $val;
     };
-
+    $meta .="requires:     $prereq_pm\n";
+    $meta .="build_requires:     $build_prereq\n" if $build_prereq;
+    $meta .="configure_requires:     $configure_prereq\n" if $configure_prereq;
+    
     $meta .= <<"YAML";
-requires:     $prereq_pm
 meta-spec:
-    url:     http://module-build.sourceforge.net/META-spec-v1.3.html
+    url:     http://module-build.sourceforge.net/META-spec-blead.html
     version: 1.3
 YAML
 
Only in ExtUtils-MakeMaker-6.44: Makefile
Only in ExtUtils-MakeMaker-6.44: pm_to_blib
diff -u -r ExtUtils-MakeMaker-6.44.orig/t/basic.t 
ExtUtils-MakeMaker-6.44/t/basic.t
--- ExtUtils-MakeMaker-6.44.orig/t/basic.t      2007-11-26 02:08:16.000000000 
+0200
+++ ExtUtils-MakeMaker-6.44/t/basic.t   2008-06-01 16:44:45.968750000 +0300
@@ -266,8 +266,12 @@
 distribution_type:   module
 requires:     
     strict:                        0
+build_requires:     
+    warnings:                      0
+configure_requires:     
+    lib:                           0
 meta-spec:
-    url:     http://module-build.sourceforge.net/META-spec-v1.3.html
+    url:     http://module-build.sourceforge.net/META-spec-blead.html
     version: 1.3
 END
 
Only in ExtUtils-MakeMaker-6.44/t: Big-Dummy
diff -u -r ExtUtils-MakeMaker-6.44.orig/t/lib/MakeMaker/Test/Setup/BFD.pm 
ExtUtils-MakeMaker-6.44/t/lib/MakeMaker/Test/Setup/BFD.pm
--- ExtUtils-MakeMaker-6.44.orig/t/lib/MakeMaker/Test/Setup/BFD.pm      
2008-01-01 05:06:43.000000000 +0200
+++ ExtUtils-MakeMaker-6.44/t/lib/MakeMaker/Test/Setup/BFD.pm   2008-06-01 
12:57:49.796875000 +0300
@@ -37,6 +37,8 @@
     VERSION_FROM  => 'lib/Big/Dummy.pm',
     EXE_FILES     => [qw(bin/program)],
     PREREQ_PM     => { strict => 0 },
+    BUILD_REQUIRES => { warnings => 0 },
+    CONFIGURE_REQUIRES => { lib => 0 },
     ABSTRACT_FROM => 'lib/Big/Dummy.pm',
     AUTHOR        => 'Michael G Schwern <[EMAIL PROTECTED]>',
 );
diff -u -r ExtUtils-MakeMaker-6.44.orig/t/prereq.t 
ExtUtils-MakeMaker-6.44/t/prereq.t
--- ExtUtils-MakeMaker-6.44.orig/t/prereq.t     2007-12-07 01:23:42.000000000 
+0200
+++ ExtUtils-MakeMaker-6.44/t/prereq.t  2008-06-01 13:37:38.000000000 +0300
@@ -14,7 +14,7 @@
 }
 
 use strict;
-use Test::More tests => 13;
+use Test::More tests => 14;
 
 use TieOut;
 use MakeMaker::Test::Utils;
@@ -64,6 +64,17 @@
     $warnings = '';
     WriteMakefile(
         NAME            => 'Big::Dummy',
+        BUILD_REQUIRES  => {
+            strict  => 99999
+        }
+    );
+    is $warnings, 
+    sprintf("Warning: prerequisite strict 99999 not found. We have %s.\n",
+            strict->VERSION),'BUILD_REQUIRES';
+
+    $warnings = '';
+    WriteMakefile(
+        NAME            => 'Big::Dummy',
         PREREQ_PM       => {
             "I::Do::Not::Exist" => 0,
         }
Only in ExtUtils-MakeMaker-6.44/t: Recurs

Reply via email to