BUILD_REQUIRES and CONFIGURE_REQUIRES

[email protected] (Alexandr Ciornii)
Newsgroups perl.makemaker
Message-ID <[email protected]>
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
EUMM.patch (text/plain, 8.9 KB)
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.