Upgrade EUMM from version 6.57_01 to 6.57_05
authorFlorian Ragwitz <rafl@debian.org>
Sat, 11 Sep 2010 20:48:43 +0000 (22:48 +0200)
committerFlorian Ragwitz <rafl@debian.org>
Sat, 11 Sep 2010 20:59:35 +0000 (22:59 +0200)
42 files changed:
.gitignore
MANIFEST
Porting/Maintainers.pl
cpan/ExtUtils-MakeMaker/Changes
cpan/ExtUtils-MakeMaker/MANIFEST
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm [new file with mode: 0644]
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
cpan/ExtUtils-MakeMaker/t/INST.t
cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t
cpan/ExtUtils-MakeMaker/t/basic.t
cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm [new file with mode: 0644]
cpan/ExtUtils-MakeMaker/t/metafile_data.t
cpan/ExtUtils-MakeMaker/t/min_perl_version.t
cpan/ExtUtils-MakeMaker/t/several_authors.t [new file with mode: 0644]
cpan/ExtUtils-MakeMaker/t/writemakefile_args.t
lib/.gitignore
pod/perldelta.pod

index adf8b97..f8af423 100644 (file)
@@ -72,6 +72,7 @@ ext.libs
 
 # these are scattered everywhere, ignore them
 .exists
+MYMETA.yml
 
 /miniperl
 /perl
index e05d019..a2e6397 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -893,6 +893,7 @@ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm    MakeMaker wrapper for C
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod         MakeMaker FAQ
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm              Write Makefiles for extensions
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod    Writing a module with MakeMaker
+cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm         clone of YAML::Tiny
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm            Writes a bootstrap file (see MakeMaker)
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm             Writes a linker options file for extensions
 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm                 MakeMaker methods for AIX
@@ -942,6 +943,7 @@ cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/MPV.pm   MakeMaker test utiliti
 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/PL_FILES.pm MakeMaker test utilities
 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/Problem.pm  MakeMaker test utilities
 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/Recurs.pm   MakeMaker test utilities
+cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm      MakeMaker test utilities
 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm       MakeMaker test utilities
 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm          MakeMaker test utilities
 cpan/ExtUtils-MakeMaker/t/lib/TieIn.pm                         Testing library for dummy input handles
@@ -978,6 +980,7 @@ cpan/ExtUtils-MakeMaker/t/problems.t                                How MakeMaker reacts to build problems
 cpan/ExtUtils-MakeMaker/t/prompt.t                             See if E::MM::prompt() works
 cpan/ExtUtils-MakeMaker/t/recurs.t                             See if recursive builds work
 cpan/ExtUtils-MakeMaker/t/revision.t                           See if $Revision is correct
+cpan/ExtUtils-MakeMaker/t/several_authors.t                    See if multiple AUTHORs work
 cpan/ExtUtils-MakeMaker/t/split_command.t                      See if MM's xargs-like function works
 cpan/ExtUtils-MakeMaker/t/test_boilerplate.t                   MakeMaker test
 cpan/ExtUtils-MakeMaker/t/testdata/reallylongdirectoryname/arch1/Config.pm     test data for MakeMaker
index e1c761c..1d2fd3f 100755 (executable)
@@ -581,7 +581,7 @@ use File::Glob qw(:case);
     'ExtUtils::MakeMaker' =>
        {
        'MAINTAINER'    => 'mschwern',
-       'DISTRIBUTION'  => 'MSCHWERN/ExtUtils-MakeMaker-6.57_01.tar.gz',
+       'DISTRIBUTION'  => 'CHORNY/ExtUtils-MakeMaker-6.57_05.tar.gz',
        'FILES'         => q[cpan/ExtUtils-MakeMaker],
        'EXCLUDED'      => [ qr{^t/lib/Test/},
                             qr{^inc/ExtUtils/},
index fff588d..8ac998f 100644 (file)
@@ -1,3 +1,25 @@
+6.57_05  Sat Sep 11 23:24:00 EEST 2010
+    Bug Fixes
+    * AUTHOR compatibility code should also be called after CONFIGURE callback
+
+6.57_04  Thu Sep 09 23:59:00 EEST 2010
+    Bug Fixes
+    * Fix several_authors.t
+    * Upgrade bundled modules: ExtUtils::Manifest 1.58.
+
+6.57_03  Thu Sep 09 01:31:00 EEST 2010
+    Bug Fixes
+    * Update MANIFEST
+
+6.57_02  Wed Sep 08 02:40:00 EEST 2010
+    Bug Fixes
+    * Don't do MANIFEST checks in PERL_CORE (Robin Barker)
+
+    New Features
+    * Accept several values (arrayref) in AUTHOR (Alexandr Ciornii)
+    * Add MYMETA.yml support (Adam Kennedy, Alexandr Ciornii)
+    * NO_MYMETA key to suppress MYMETA.yml generation (Alexandr Ciornii)
+
 6.57_01  Tue Aug 24 01:36:20 PDT 2010
     Improvements
     * parse_abstract() is more robust supporting "Package.pm" and multiple
index 93e77bc..929765e 100644 (file)
@@ -15,6 +15,7 @@ lib/ExtUtils/MakeMaker.pm
 lib/ExtUtils/MakeMaker/Config.pm
 lib/ExtUtils/MakeMaker/FAQ.pod
 lib/ExtUtils/MakeMaker/Tutorial.pod
+lib/ExtUtils/MakeMaker/YAML.pm
 lib/ExtUtils/Mkbootstrap.pm
 lib/ExtUtils/Mksymlists.pm
 lib/ExtUtils/MM.pm
@@ -65,6 +66,7 @@ t/lib/MakeMaker/Test/Setup/MPV.pm
 t/lib/MakeMaker/Test/Setup/PL_FILES.pm
 t/lib/MakeMaker/Test/Setup/Problem.pm
 t/lib/MakeMaker/Test/Setup/Recurs.pm
+t/lib/MakeMaker/Test/Setup/SAS.pm
 t/lib/MakeMaker/Test/Setup/XS.pm
 t/lib/MakeMaker/Test/Utils.pm
 t/lib/Test/Builder.pm
@@ -106,6 +108,7 @@ t/problems.t
 t/prompt.t
 t/recurs.t
 t/revision.t
+t/several_authors.t
 t/split_command.t
 t/test_boilerplate.t
 t/testdata/reallylongdirectoryname/arch1/Config.pm
@@ -117,4 +120,3 @@ t/writemakefile_args.t
 t/xs.t
 TODO
 META.yml                                 Module meta-data (added by MakeMaker)
-SIGNATURE                                Public-key signature (added by MakeMaker)
index 0d23c24..40bf780 100644 (file)
@@ -8,9 +8,9 @@ use warnings;
 require Exporter;
 our @ISA = qw(Exporter);
 
-our @EXPORT  = qw(test_harness pod2man perllocal_install uninstall 
+our @EXPORT  = qw(test_harness pod2man perllocal_install uninstall
                   warn_if_old_packlist);
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 my $Is_VMS = $^O eq 'VMS';
 
index b21fc01..2184c4a 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::Liblist;
 
 use strict;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 use File::Spec;
 require ExtUtils::Liblist::Kid;
index a434a0f..cf4826f 100644 (file)
@@ -9,7 +9,7 @@ use 5.006;
 # Broken out of MakeMaker from version 4.11
 
 use strict;
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 
 use Config;
 use Cwd 'cwd';
index d39118c..945f245 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MM;
 use strict;
 use ExtUtils::MakeMaker::Config;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::Liblist;
 require ExtUtils::MakeMaker;
index 8490f2f..0212385 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_AIX;
 
 use strict;
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Unix;
 our @ISA = qw(ExtUtils::MM_Unix);
index a94ab43..a38f274 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_Any;
 
 use strict;
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 use Carp;
 use File::Spec;
@@ -486,8 +486,8 @@ clean :: clean_subdirs
                         split /\s+/, $attribs{FILES}   ;
     }
 
-    push(@files, qw[$(MAKE_APERL_FILE) 
-                    perlmain.c tmon.out mon.out so_locations 
+    push(@files, qw[$(MAKE_APERL_FILE)
+                    MYMETA.yml perlmain.c tmon.out mon.out so_locations
                     blibdirs.ts pm_to_blib pm_to_blib.ts
                     *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT)
                     $(BOOTSTRAP) $(BASEEXT).bso
@@ -880,7 +880,7 @@ sub metafile_data {
     );
 
     # The author key is required and it takes a list.
-    $meta{author}   = defined $self->{AUTHOR}    ? [$self->{AUTHOR}] : [];
+    $meta{author}   = defined $self->{AUTHOR}    ? $self->{AUTHOR} : [];
 
     $meta{requires} = $self->{PREREQ_PM} if defined $self->{PREREQ_PM};
     $meta{requires}{perl} = $self->{MIN_PERL_VERSION} if $self->{MIN_PERL_VERSION};
@@ -1085,6 +1085,99 @@ MAKE
 }
 
 
+=head3 mymeta
+
+    my $mymeta = $mm->mymeta;
+
+Generate MYMETA information as a hash either from an existing META.yml
+or from internal data.
+
+=cut
+
+sub mymeta {
+    my $self = shift;
+
+    my $mymeta;
+
+    if ( -e 'META.yml' ) {
+        $mymeta = $self->_mymeta_from_meta();
+    }
+
+    unless ( $mymeta ) {
+        my @metadata = $self->metafile_data(
+            $self->{META_ADD}   || {},
+            $self->{META_MERGE} || {},
+        );
+        $mymeta = {@metadata};
+    }
+
+    $mymeta->{dynamic_config} = 0;
+
+    return $mymeta;
+}
+
+
+sub _mymeta_from_meta {
+    my $self = shift;
+
+    my $meta;
+    eval {
+        my @yaml = ExtUtils::MakeMaker::YAML::LoadFile('META.yml');
+        $meta = $yaml[0];
+    };
+    return undef unless $meta;
+
+    # META.yml before 6.25_01 cannot be trusted.  META.yml lived in the source directory.
+    # There was a good chance the author accidentally uploaded a stale META.yml if they
+    # rolled their own tarball rather than using "make dist".
+    if ($meta->{generated_by} &&
+        $meta->{generated_by} =~ /ExtUtils::MakeMaker version ([\d\._]+)/) {
+        my $eummv = do { local $^W = 0; $1+0; };
+        if ($eummv < 6.2501) {
+            return undef;
+        }
+    }
+
+    # Overwrite the non-configure dependency hashs
+    delete $meta->{requires};
+    delete $meta->{build_requires};
+    delete $meta->{recommends};
+    if ( exists $self->{PREREQ_PM} ) {
+        $meta->{requires} = $self->{PREREQ_PM} || {};
+    }
+    if ( exists $self->{BUILD_REQUIRES} ) {
+        $meta->{build_requires} = $self->{BUILD_REQUIRES} || {};
+    }
+    return $meta;
+}
+
+
+=head3 write_mymeta
+
+    $self->write_mymeta( $mymeta );
+
+Write MYMETA information to MYMETA.yml.
+
+This will probably be refactored into a more generic YAML dumping method.
+
+=cut
+
+sub write_mymeta {
+    my $self = shift;
+    my $mymeta = shift;
+
+    require ExtUtils::MakeMaker::YAML;
+    my $mymeta_content = ExtUtils::MakeMaker::YAML::Dump($mymeta);
+
+    open(my $myfh, ">", "MYMETA.yml")
+      or die "Unable to open MYMETA.yml: $!";
+    print $myfh $mymeta_content;
+    close $myfh;
+
+    return;
+}
+
+
 =head3 realclean (o)
 
 Defines the realclean target.
index 1c1eb4f..0eeb795 100644 (file)
@@ -26,7 +26,7 @@ require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
 
 our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 
 =item os_flavor
index 7bee0b9..d1de9d2 100644 (file)
@@ -9,7 +9,7 @@ require ExtUtils::MM_Unix;
 require ExtUtils::MM_Win32;
 our @ISA = qw( ExtUtils::MM_Unix );
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 
 =head1 NAME
index 0c50626..68612a8 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_DOS;
 
 use strict;
 
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
index d74cbe3..20aeb79 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     our @ISA = qw( ExtUtils::MM_Unix );
 }
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 
 =head1 NAME
index b19d037..4dcb6e5 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS;
 
 use strict;
 
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 
 sub new {
     die <<'UNSUPPORTED';
index 5f06e20..2089e8f 100644 (file)
@@ -22,7 +22,7 @@ use strict;
 use ExtUtils::MakeMaker::Config;
 use File::Basename;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Win32;
 our @ISA = qw(ExtUtils::MM_Win32);
index dc0390c..46d57be 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use ExtUtils::MakeMaker qw(neatvalue);
 use File::Spec;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
index 0650b3c..5efd377 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_QNX;
 
 use strict;
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Unix;
 our @ISA = qw(ExtUtils::MM_Unix);
index 62bc1e0..032bf35 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_UWIN;
 
 use strict;
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 
 require ExtUtils::MM_Unix;
 our @ISA = qw(ExtUtils::MM_Unix);
index 0719988..ea2668a 100644 (file)
@@ -15,7 +15,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue);
 
 # If we make $VERSION an our variable parse_version() breaks
 use vars qw($VERSION);
-$VERSION = '6.57_01';
+$VERSION = '6.57_05';
 
 require ExtUtils::MM_Any;
 our @ISA = qw(ExtUtils::MM_Any);
@@ -2884,7 +2884,7 @@ sub ppd {
     $abstract =~ s/</&lt;/g;
     $abstract =~ s/>/&gt;/g;
 
-    my $author = $self->{AUTHOR} || '';
+    my $author = join(', ',@{$self->{AUTHOR} || []});
     $author =~ s/</&lt;/g;
     $author =~ s/>/&gt;/g;
 
index 34b74d2..b4c7ae4 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
 
 use File::Basename;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
index ad86cc8..e5b60d7 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_VOS;
 
 use strict;
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Unix;
 our @ISA = qw(ExtUtils::MM_Unix);
index c41075a..faaf219 100644 (file)
@@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw( neatvalue );
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
 our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 $ENV{EMXSHELL} = 'sh'; # to run `commands`
 
index 1cc0f12..19f5c7d 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_Win95;
 
 use strict;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require ExtUtils::MM_Win32;
 our @ISA = qw(ExtUtils::MM_Win32);
index 4a0b61f..464f814 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MY;
 use strict;
 require ExtUtils::MM;
 
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 our @ISA = qw(ExtUtils::MM);
 
 {
index 7ab26e0..be9624e 100644 (file)
@@ -18,7 +18,7 @@ our @Overridable;
 my @Prepend_parent;
 my %Recognized_Att_Keys;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 # Emulate something resembling CVS $Revision$
 (our $Revision = $VERSION) =~ s{_}{};
@@ -52,6 +52,8 @@ sub WriteMakefile {
     require ExtUtils::MY;
     my %att = @_;
 
+    _convert_compat_attrs(\%att);
+
     _verify_att(\%att);
 
     my $mm = MM->new(\%att);
@@ -66,6 +68,7 @@ sub WriteMakefile {
 # scalar.
 my %Att_Sigs;
 my %Special_Sigs = (
+ AUTHOR             => 'ARRAY',
  C                  => 'ARRAY',
  CONFIG             => 'ARRAY',
  CONFIGURE          => 'CODE',
@@ -111,6 +114,19 @@ my %Special_Sigs = (
 @Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys;
 @Att_Sigs{keys %Special_Sigs} = values %Special_Sigs;
 
+sub _convert_compat_attrs {
+    my($att) = @_;
+    if (exists $att->{AUTHOR}) {
+        if ($att->{AUTHOR}) {
+            if (!ref($att->{AUTHOR})) {
+                my $t = $att->{AUTHOR};
+                $att->{AUTHOR} = [$t];
+            }
+        } else {
+                $att->{AUTHOR} = [];
+        }
+    }
+}
 
 sub _verify_att {
     my($att) = @_;
@@ -257,8 +273,8 @@ sub full_setup {
     INC INCLUDE_EXT LDFROM LIB LIBPERL_A LIBS LICENSE
     LINKTYPE MAKE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET
     META_ADD META_MERGE MIN_PERL_VERSION BUILD_REQUIRES CONFIGURE_REQUIRES
-    MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NORECURS NO_VC OBJECT OPTIMIZE 
-    PERL_MALLOC_OK PERL PERLMAINCC PERLRUN PERLRUNINST PERL_CORE
+    MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NO_MYMETA NORECURS NO_VC OBJECT
+    OPTIMIZE PERL_MALLOC_OK PERL PERLMAINCC PERLRUN PERLRUNINST PERL_CORE
     PERL_SRC PERM_DIR 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
@@ -409,7 +425,7 @@ sub new {
    }
 
     print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose;
-    if (-f "MANIFEST" && ! -f "Makefile"){
+    if (-f "MANIFEST" && ! -f "Makefile" && ! $ENV{PERL_CORE}){
         check_manifest();
     }
 
@@ -496,6 +512,7 @@ END
     if (defined $self->{CONFIGURE}) {
         if (ref $self->{CONFIGURE} eq 'CODE') {
             %configure_att = %{&{$self->{CONFIGURE}}};
+            _convert_compat_attrs(\%configure_att);
             $self = { %$self, %configure_att };
         } else {
             Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
@@ -1010,8 +1027,13 @@ sub flush {
       warn "rename MakeMaker.tmp => $finalname: $!";
     chmod 0644, $finalname unless $Is_VMS;
 
-    my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE);
+    unless ($self->{NO_MYMETA}) {
+        # Write MYMETA.yml to communicate metadata up to the CPAN clients
+        print STDOUT "Writing MYMETA.yml\n";
 
+        $self->write_mymeta( $self->mymeta );
+    }
+    my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE);
     if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) {
         foreach (keys %$self) { # safe memory
             delete $self->{$_} unless $keep{$_};
@@ -1021,7 +1043,6 @@ sub flush {
     system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
 }
 
-
 # This is a rename for OS's where the target must be unlinked first.
 sub _rename {
     my($src, $dest) = @_;
@@ -1469,8 +1490,8 @@ the first line in the "=head1 NAME" section. $2 becomes the abstract.
 
 =item AUTHOR
 
-String containing name (and email address) of package author(s). Is used
-in META.yml and PPD (Perl Package Description) files for PPM (Perl
+Array of strings containing name (and email address) of package author(s).
+Is used in META.yml and PPD (Perl Package Description) files for PPM (Perl
 Package Manager).
 
 =item BINARY_LOCATION
@@ -1995,6 +2016,13 @@ the META.yml module meta-data file during 'make distdir'.
 
 Defaults to false.
 
+=item NO_MYMETA
+
+When true, suppresses the generation of MYMETA.yml module meta-data file
+during 'perl Makefile.PL'.
+
+Defaults to false.
+
 =item NO_VC
 
 In general, any generated Makefile checks for the current version of
index 0b83432..a7ac47d 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Config;
 
 use strict;
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 use Config ();
 
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm
new file mode 100644 (file)
index 0000000..55ff6fd
--- /dev/null
@@ -0,0 +1,658 @@
+package ExtUtils::MakeMaker::YAML;\r
+\r
+use strict;\r
+\r
+# UTF Support?\r
+sub HAVE_UTF8 () { $] >= 5.007003 }\r
+BEGIN {\r
+       if ( HAVE_UTF8 ) {\r
+               # The string eval helps hide this from Test::MinimumVersion\r
+               eval "require utf8;";\r
+               die "Failed to load UTF-8 support" if $@;\r
+       }\r
+\r
+       # Class structure\r
+       require 5.004;\r
+       require Exporter;\r
+       require Carp;\r
+       $ExtUtils::MakeMaker::YAML::VERSION   = '1.44';\r
+       @ExtUtils::MakeMaker::YAML::ISA       = qw{ Exporter  };\r
+       @ExtUtils::MakeMaker::YAML::EXPORT    = qw{ Load Dump };\r
+       @ExtUtils::MakeMaker::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw };\r
+\r
+       # Error storage\r
+       $ExtUtils::MakeMaker::YAML::errstr    = '';\r
+}\r
+\r
+# The character class of all characters we need to escape\r
+# NOTE: Inlined, since it's only used once\r
+# my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]';\r
+\r
+# Printed form of the unprintable characters in the lowest range\r
+# of ASCII characters, listed by ASCII ordinal position.\r
+my @UNPRINTABLE = qw(\r
+       z    x01  x02  x03  x04  x05  x06  a\r
+       x08  t    n    v    f    r    x0e  x0f\r
+       x10  x11  x12  x13  x14  x15  x16  x17\r
+       x18  x19  x1a  e    x1c  x1d  x1e  x1f\r
+);\r
+\r
+# Printable characters for escapes\r
+my %UNESCAPES = (\r
+       z => "\x00", a => "\x07", t    => "\x09",\r
+       n => "\x0a", v => "\x0b", f    => "\x0c",\r
+       r => "\x0d", e => "\x1b", '\\' => '\\',\r
+);\r
+\r
+# Special magic boolean words\r
+my %QUOTE = map { $_ => 1 } qw{\r
+       null Null NULL\r
+       y Y yes Yes YES n N no No NO\r
+       true True TRUE false False FALSE\r
+       on On ON off Off OFF\r
+};\r
+\r
+\r
+\r
+\r
+\r
+#####################################################################\r
+# Implementation\r
+\r
+# Create an empty ExtUtils::MakeMaker::YAML object\r
+sub new {\r
+       my $class = shift;\r
+       bless [ @_ ], $class;\r
+}\r
+\r
+# Create an object from a file\r
+sub read {\r
+       my $class = ref $_[0] ? ref shift : shift;\r
+\r
+       # Check the file\r
+       my $file = shift or return $class->_error( 'You did not specify a file name' );\r
+       return $class->_error( "File '$file' does not exist" )              unless -e $file;\r
+       return $class->_error( "'$file' is a directory, not a file" )       unless -f _;\r
+       return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _;\r
+\r
+       # Slurp in the file\r
+       local $/ = undef;\r
+       local *CFG;\r
+       unless ( open(CFG, $file) ) {\r
+               return $class->_error("Failed to open file '$file': $!");\r
+       }\r
+       my $contents = <CFG>;\r
+       unless ( close(CFG) ) {\r
+               return $class->_error("Failed to close file '$file': $!");\r
+       }\r
+\r
+       $class->read_string( $contents );\r
+}\r
+\r
+# Create an object from a string\r
+sub read_string {\r
+       my $class  = ref $_[0] ? ref shift : shift;\r
+       my $self   = bless [], $class;\r
+       my $string = $_[0];\r
+       unless ( defined $string ) {\r
+               return $self->_error("Did not provide a string to load");\r
+       }\r
+\r
+       # Byte order marks\r
+       # NOTE: Keeping this here to educate maintainers\r
+       # my %BOM = (\r
+       #     "\357\273\277" => 'UTF-8',\r
+       #     "\376\377"     => 'UTF-16BE',\r
+       #     "\377\376"     => 'UTF-16LE',\r
+       #     "\377\376\0\0" => 'UTF-32LE'\r
+       #     "\0\0\376\377" => 'UTF-32BE',\r
+       # );\r
+       if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) {\r
+               return $self->_error("Stream has a non UTF-8 BOM");\r
+       } else {\r
+               # Strip UTF-8 bom if found, we'll just ignore it\r
+               $string =~ s/^\357\273\277//;\r
+       }\r
+\r
+       # Try to decode as utf8\r
+       utf8::decode($string) if HAVE_UTF8;\r
+\r
+       # Check for some special cases\r
+       return $self unless length $string;\r
+       unless ( $string =~ /[\012\015]+\z/ ) {\r
+               return $self->_error("Stream does not end with newline character");\r
+       }\r
+\r
+       # Split the file into lines\r
+       my @lines = grep { ! /^\s*(?:\#.*)?\z/ }\r
+                   split /(?:\015{1,2}\012|\015|\012)/, $string;\r
+\r
+       # Strip the initial YAML header\r
+       @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines;\r
+\r
+       # A nibbling parser\r
+       while ( @lines ) {\r
+               # Do we have a document header?\r
+               if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) {\r
+                       # Handle scalar documents\r
+                       shift @lines;\r
+                       if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) {\r
+                               push @$self, $self->_read_scalar( "$1", [ undef ], \@lines );\r
+                               next;\r
+                       }\r
+               }\r
+\r
+               if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) {\r
+                       # A naked document\r
+                       push @$self, undef;\r
+                       while ( @lines and $lines[0] !~ /^---/ ) {\r
+                               shift @lines;\r
+                       }\r
+\r
+               } elsif ( $lines[0] =~ /^\s*\-/ ) {\r
+                       # An array at the root\r
+                       my $document = [ ];\r
+                       push @$self, $document;\r
+                       $self->_read_array( $document, [ 0 ], \@lines );\r
+\r
+               } elsif ( $lines[0] =~ /^(\s*)\S/ ) {\r
+                       # A hash at the root\r
+                       my $document = { };\r
+                       push @$self, $document;\r
+                       $self->_read_hash( $document, [ length($1) ], \@lines );\r
+\r
+               } else {\r
+                       Carp::croak("ExtUtils::MakeMaker::YAML failed to classify the line '$lines[0]'");\r
+               }\r
+       }\r
+\r
+       $self;\r
+}\r
+\r
+# Deparse a scalar string to the actual scalar\r
+sub _read_scalar {\r
+       my ($self, $string, $indent, $lines) = @_;\r
+\r
+       # Trim trailing whitespace\r
+       $string =~ s/\s*\z//;\r
+\r
+       # Explitic null/undef\r
+       return undef if $string eq '~';\r
+\r
+       # Single quote\r
+       if ( $string =~ /^\'(.*?)\'\z/ ) {\r
+               return '' unless defined $1;\r
+               $string = $1;\r
+               $string =~ s/\'\'/\'/g;\r
+               return $string;\r
+       }\r
+\r
+       # Double quote.\r
+       # The commented out form is simpler, but overloaded the Perl regex\r
+       # engine due to recursion and backtracking problems on strings\r
+       # larger than 32,000ish characters. Keep it for reference purposes.\r
+       # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) {\r
+       if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"\z/ ) {\r
+               # Reusing the variable is a little ugly,\r
+               # but avoids a new variable and a string copy.\r
+               $string = $1;\r
+               $string =~ s/\\"/"/g;\r
+               $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex;\r
+               return $string;\r
+       }\r
+\r
+       # Special cases\r
+       if ( $string =~ /^[\'\"!&]/ ) {\r
+               Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'");\r
+       }\r
+       return {} if $string eq '{}';\r
+       return [] if $string eq '[]';\r
+\r
+       # Regular unquoted string\r
+       return $string unless $string =~ /^[>|]/;\r
+\r
+       # Error\r
+       Carp::croak("ExtUtils::MakeMaker::YAML failed to find multi-line scalar content") unless @$lines;\r
+\r
+       # Check the indent depth\r
+       $lines->[0]   =~ /^(\s*)/;\r
+       $indent->[-1] = length("$1");\r
+       if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) {\r
+               Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");\r
+       }\r
+\r
+       # Pull the lines\r
+       my @multiline = ();\r
+       while ( @$lines ) {\r
+               $lines->[0] =~ /^(\s*)/;\r
+               last unless length($1) >= $indent->[-1];\r
+               push @multiline, substr(shift(@$lines), length($1));\r
+       }\r
+\r
+       my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n";\r
+       my $t = (substr($string, 1, 1) eq '-') ? ''  : "\n";\r
+       return join( $j, @multiline ) . $t;\r
+}\r
+\r
+# Parse an array\r
+sub _read_array {\r
+       my ($self, $array, $indent, $lines) = @_;\r
+\r
+       while ( @$lines ) {\r
+               # Check for a new document\r
+               if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {\r
+                       while ( @$lines and $lines->[0] !~ /^---/ ) {\r
+                               shift @$lines;\r
+                       }\r
+                       return 1;\r
+               }\r
+\r
+               # Check the indent level\r
+               $lines->[0] =~ /^(\s*)/;\r
+               if ( length($1) < $indent->[-1] ) {\r
+                       return 1;\r
+               } elsif ( length($1) > $indent->[-1] ) {\r
+                       Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");\r
+               }\r
+\r
+               if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) {\r
+                       # Inline nested hash\r
+                       my $indent2 = length("$1");\r
+                       $lines->[0] =~ s/-/ /;\r
+                       push @$array, { };\r
+                       $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines );\r
+\r
+               } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) {\r
+                       # Array entry with a value\r
+                       shift @$lines;\r
+                       push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines );\r
+\r
+               } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) {\r
+                       shift @$lines;\r
+                       unless ( @$lines ) {\r
+                               push @$array, undef;\r
+                               return 1;\r
+                       }\r
+                       if ( $lines->[0] =~ /^(\s*)\-/ ) {\r
+                               my $indent2 = length("$1");\r
+                               if ( $indent->[-1] == $indent2 ) {\r
+                                       # Null array entry\r
+                                       push @$array, undef;\r
+                               } else {\r
+                                       # Naked indenter\r
+                                       push @$array, [ ];\r
+                                       $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines );\r
+                               }\r
+\r
+                       } elsif ( $lines->[0] =~ /^(\s*)\S/ ) {\r
+                               push @$array, { };\r
+                               $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines );\r
+\r
+                       } else {\r
+                               Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");\r
+                       }\r
+\r
+               } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) {\r
+                       # This is probably a structure like the following...\r
+                       # ---\r
+                       # foo:\r
+                       # - list\r
+                       # bar: value\r
+                       #\r
+                       # ... so lets return and let the hash parser handle it\r
+                       return 1;\r
+\r
+               } else {\r
+                       Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");\r
+               }\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+# Parse an array\r
+sub _read_hash {\r
+       my ($self, $hash, $indent, $lines) = @_;\r
+\r
+       while ( @$lines ) {\r
+               # Check for a new document\r
+               if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {\r
+                       while ( @$lines and $lines->[0] !~ /^---/ ) {\r
+                               shift @$lines;\r
+                       }\r
+                       return 1;\r
+               }\r
+\r
+               # Check the indent level\r
+               $lines->[0] =~ /^(\s*)/;\r
+               if ( length($1) < $indent->[-1] ) {\r
+                       return 1;\r
+               } elsif ( length($1) > $indent->[-1] ) {\r
+                       Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");\r
+               }\r
+\r
+               # Get the key\r
+               unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+|$)// ) {\r
+                       if ( $lines->[0] =~ /^\s*[?\'\"]/ ) {\r
+                               Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'");\r
+                       }\r
+                       Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");\r
+               }\r
+               my $key = $1;\r
+\r
+               # Do we have a value?\r
+               if ( length $lines->[0] ) {\r
+                       # Yes\r
+                       $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines );\r
+               } else {\r
+                       # An indent\r
+                       shift @$lines;\r
+                       unless ( @$lines ) {\r
+                               $hash->{$key} = undef;\r
+                               return 1;\r
+                       }\r
+                       if ( $lines->[0] =~ /^(\s*)-/ ) {\r
+                               $hash->{$key} = [];\r
+                               $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines );\r
+                       } elsif ( $lines->[0] =~ /^(\s*)./ ) {\r
+                               my $indent2 = length("$1");\r
+                               if ( $indent->[-1] >= $indent2 ) {\r
+                                       # Null hash entry\r
+                                       $hash->{$key} = undef;\r
+                               } else {\r
+                                       $hash->{$key} = {};\r
+                                       $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines );\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+# Save an object to a file\r
+sub write {\r
+       my $self = shift;\r
+       my $file = shift or return $self->_error('No file name provided');\r
+\r
+       # Write it to the file\r
+       open( CFG, '>' . $file ) or return $self->_error(\r
+               "Failed to open file '$file' for writing: $!"\r
+               );\r
+       print CFG $self->write_string;\r
+       close CFG;\r
+\r
+       return 1;\r
+}\r
+\r
+# Save an object to a string\r
+sub write_string {\r
+       my $self = shift;\r
+       return '' unless @$self;\r
+\r
+       # Iterate over the documents\r
+       my $indent = 0;\r
+       my @lines  = ();\r
+       foreach my $cursor ( @$self ) {\r
+               push @lines, '---';\r
+\r
+               # An empty document\r
+               if ( ! defined $cursor ) {\r
+                       # Do nothing\r
+\r
+               # A scalar document\r
+               } elsif ( ! ref $cursor ) {\r
+                       $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent );\r
+\r
+               # version object\r
+               } elsif ( ref $cursor eq 'version' ) {\r
+                       $lines[-1] .= ' ' . $self->_write_scalar( $cursor->stringify, $indent );\r
+\r
+               # A list at the root\r
+               } elsif ( ref $cursor eq 'ARRAY' ) {\r
+                       unless ( @$cursor ) {\r
+                               $lines[-1] .= ' []';\r
+                               next;\r
+                       }\r
+                       push @lines, $self->_write_array( $cursor, $indent, {} );\r
+\r
+               # A hash at the root\r
+               } elsif ( ref $cursor eq 'HASH' ) {\r
+                       unless ( %$cursor ) {\r
+                               $lines[-1] .= ' {}';\r
+                               next;\r
+                       }\r
+                       push @lines, $self->_write_hash( $cursor, $indent, {} );\r
+\r
+               } else {\r
+                       Carp::croak("Cannot serialize " . ref($cursor));\r
+               }\r
+       }\r
+\r
+       join '', map { "$_\n" } @lines;\r
+}\r
+\r
+sub _write_scalar {\r
+       my $string = $_[1];\r
+       return '~'  unless defined $string;\r
+       return "''" unless length  $string;\r
+       if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) {\r
+               $string =~ s/\\/\\\\/g;\r
+               $string =~ s/"/\\"/g;\r
+               $string =~ s/\n/\\n/g;\r
+               $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g;\r
+               return qq|"$string"|;\r
+       }\r
+       if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) {\r
+               return "'$string'";\r
+       }\r
+       return $string;\r
+}\r
+\r
+sub _write_array {\r
+       my ($self, $array, $indent, $seen) = @_;\r
+       if ( $seen->{refaddr($array)}++ ) {\r
+               die "ExtUtils::MakeMaker::YAML does not support circular references";\r
+       }\r
+       my @lines  = ();\r
+       foreach my $el ( @$array ) {\r
+               my $line = ('  ' x $indent) . '-';\r
+               my $type = ref $el;\r
+               if ( ! $type ) {\r
+                       $line .= ' ' . $self->_write_scalar( $el, $indent + 1 );\r
+                       push @lines, $line;\r
+\r
+               # version object\r
+               } elsif ( $type eq 'version' ) {\r
+                       $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 );\r
+                       push @lines, $line;\r
+\r
+               } elsif ( $type eq 'ARRAY' ) {\r
+                       if ( @$el ) {\r
+                               push @lines, $line;\r
+                               push @lines, $self->_write_array( $el, $indent + 1, $seen );\r
+                       } else {\r
+                               $line .= ' []';\r
+                               push @lines, $line;\r
+                       }\r
+\r
+               } elsif ( $type eq 'HASH' ) {\r
+                       if ( keys %$el ) {\r
+                               push @lines, $line;\r
+                               push @lines, $self->_write_hash( $el, $indent + 1, $seen );\r
+                       } else {\r
+                               $line .= ' {}';\r
+                               push @lines, $line;\r
+                       }\r
+\r
+               } else {\r
+                       die "ExtUtils::MakeMaker::YAML does not support $type references";\r
+               }\r
+       }\r
+\r
+       @lines;\r
+}\r
+\r
+sub _write_hash {\r
+       my ($self, $hash, $indent, $seen) = @_;\r
+       if ( $seen->{refaddr($hash)}++ ) {\r
+               die "ExtUtils::MakeMaker::YAML does not support circular references";\r
+       }\r
+       my @lines  = ();\r
+       foreach my $name ( sort keys %$hash ) {\r
+               my $el   = $hash->{$name};\r
+               my $line = ('  ' x $indent) . "$name:";\r
+               my $type = ref $el;\r
+               if ( ! $type ) {\r
+                       $line .= ' ' . $self->_write_scalar( $el, $indent + 1 );\r
+                       push @lines, $line;\r
+\r
+               # version object\r
+               } elsif ( $type eq 'version' ) {\r
+                       $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 );\r
+                       push @lines, $line;\r
+\r
+               } elsif ( $type eq 'ARRAY' ) {\r
+                       if ( @$el ) {\r
+                               push @lines, $line;\r
+                               push @lines, $self->_write_array( $el, $indent + 1, $seen );\r
+                       } else {\r
+                               $line .= ' []';\r
+                               push @lines, $line;\r
+                       }\r
+\r
+               } elsif ( $type eq 'HASH' ) {\r
+                       if ( keys %$el ) {\r
+                               push @lines, $line;\r
+                               push @lines, $self->_write_hash( $el, $indent + 1, $seen );\r
+                       } else {\r
+                               $line .= ' {}';\r
+                               push @lines, $line;\r
+                       }\r
+\r
+               } else {\r
+                       die "ExtUtils::MakeMaker::YAML does not support $type references";\r
+               }\r
+       }\r
+\r
+       @lines;\r
+}\r
+\r
+# Set error\r
+sub _error {\r
+       $ExtUtils::MakeMaker::YAML::errstr = $_[1];\r
+       undef;\r
+}\r
+\r
+# Retrieve error\r
+sub errstr {\r
+       $ExtUtils::MakeMaker::YAML::errstr;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+#####################################################################\r
+# YAML Compatibility\r
+\r
+sub Dump {\r
+       ExtUtils::MakeMaker::YAML->new(@_)->write_string;\r
+}\r
+\r
+sub Load {\r
+       my $self = ExtUtils::MakeMaker::YAML->read_string(@_);\r
+       unless ( $self ) {\r
+               Carp::croak("Failed to load YAML document from string");\r
+       }\r
+       if ( wantarray ) {\r
+               return @$self;\r
+       } else {\r
+               # To match YAML.pm, return the last document\r
+               return $self->[-1];\r
+       }\r
+}\r
+\r
+BEGIN {\r
+       *freeze = *Dump;\r
+       *thaw   = *Load;\r
+}\r
+\r
+sub DumpFile {\r
+       my $file = shift;\r
+       ExtUtils::MakeMaker::YAML->new(@_)->write($file);\r
+}\r
+\r
+sub LoadFile {\r
+       my $self = ExtUtils::MakeMaker::YAML->read($_[0]);\r
+       unless ( $self ) {\r
+               Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'");\r
+       }\r
+       if ( wantarray ) {\r
+               return @$self;\r
+       } else {\r
+               # Return only the last document to match YAML.pm, \r
+               return $self->[-1];\r
+       }\r
+}\r
+\r
+\r
+\r
+\r
+\r
+#####################################################################\r
+# Use Scalar::Util if possible, otherwise emulate it\r
+\r
+BEGIN {\r
+       eval {\r
+               require Scalar::Util;\r
+               *refaddr = *Scalar::Util::refaddr;\r
+       };\r
+       eval <<'END_PERL' if $@;\r
+# Failed to load Scalar::Util  \r
+sub refaddr {\r
+       my $pkg = ref($_[0]) or return undef;\r
+       if (!!UNIVERSAL::can($_[0], 'can')) {\r
+               bless $_[0], 'Scalar::Util::Fake';\r
+       } else {\r
+               $pkg = undef;\r
+       }\r
+       "$_[0]" =~ /0x(\w+)/;\r
+       my $i = do { local $^W; hex $1 };\r
+       bless $_[0], $pkg if defined $pkg;\r
+       $i;\r
+}\r
+END_PERL\r
+\r
+}\r
+\r
+1;\r
+\r
+__END__\r
+\r
+=pod\r
+\r
+=head1 NAME\r
+\r
+ExtUtils::MakeMaker::YAML - clone of YAML::Tiny\r
+\r
+=head1 SYNOPSIS\r
+\r
+See L<YAML::Tiny>\r
+\r
+=head1 AUTHOR\r
+\r
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>\r
+\r
+=head1 SEE ALSO\r
+\r
+L<YAML>, L<YAML::Syck>\r
+\r
+=head1 COPYRIGHT\r
+\r
+Copyright 2006 - 2010 Adam Kennedy.\r
+\r
+This program is free software; you can redistribute\r
+it and/or modify it under the same terms as Perl itself.\r
+\r
+=cut\r
index aeb8b27..fbf2415 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::Mkbootstrap;
 # There's just too much Dynaloader incest here to turn on strict vars.
 use strict 'refs';
 
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 require Exporter;
 our @ISA = ('Exporter');
index e799293..9aac3fd 100644 (file)
@@ -10,7 +10,7 @@ use Config;
 
 our @ISA = qw(Exporter);
 our @EXPORT = qw(&Mksymlists);
-our $VERSION = '6.57_01';
+our $VERSION = '6.57_05';
 
 sub Mksymlists {
     my(%spec) = @_;
index 628dda0..7314410 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::testlib;
 use strict;
 use warnings;
 
-our $VERSION = 6.57_01;
+our $VERSION = 6.57_05;
 
 use Cwd;
 use File::Spec;
index 8a140eb..6aac294 100644 (file)
@@ -46,10 +46,12 @@ my $mm = WriteMakefile(
 );
 like( $stdout->read, qr{
                         Writing\ $Makefile\ for\ Big::Liar\n
+                        Writing\ MYMETA.yml\n
                         Big::Liar's\ vars\n
                         INST_LIB\ =\ \S+\n
                         INST_ARCHLIB\ =\ \S+\n
                         Writing\ $Makefile\ for\ Big::Dummy\n
+                        Writing\ MYMETA.yml\n
 }x );
 undef $stdout;
 untie *STDOUT;
@@ -126,10 +128,12 @@ $mm = WriteMakefile(
 );
 like( $stdout->read, qr{
                         Writing\ $Makefile\ for\ Big::Liar\n
+                       Writing\ MYMETA.yml\n
                         Big::Liar's\ vars\n
                         INST_LIB\ =\ \S+\n
                         INST_ARCHLIB\ =\ \S+\n
                         Writing\ $Makefile\ for\ Big::Dummy\n
+                       Writing\ MYMETA.yml\n
 }x );
 undef $stdout;
 untie *STDOUT;
index 8bb9db8..fbb18a3 100644 (file)
@@ -50,10 +50,12 @@ my $mm = WriteMakefile(
 
 like( $stdout->read, qr{
                         Writing\ $Makefile\ for\ Big::Liar\n
+                       Writing\ MYMETA.yml\n
                         Big::Liar's\ vars\n
                         INST_LIB\ =\ \S+\n
                         INST_ARCHLIB\ =\ \S+\n
                         Writing\ $Makefile\ for\ Big::Dummy\n
+                       Writing\ MYMETA.yml\n
 }x );
 
 is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' );
@@ -78,10 +80,12 @@ $mm = WriteMakefile(
 );
 like( $stdout->read, qr{
                         Writing\ $Makefile\ for\ Big::Liar\n
+                       Writing\ MYMETA.yml\n
                         Big::Liar's\ vars\n
                         INST_LIB\ =\ \S+\n
                         INST_ARCHLIB\ =\ \S+\n
                         Writing\ $Makefile\ for\ Big::Dummy\n
+                       Writing\ MYMETA.yml\n
 }x );
 undef $stdout;
 untie *STDOUT;
index 1842a1c..9cd1d93 100644 (file)
@@ -11,7 +11,7 @@ use strict;
 use Config;
 use ExtUtils::MakeMaker;
 
-use Test::More tests => 80;
+use Test::More tests => 98;
 use MakeMaker::Test::Utils;
 use MakeMaker::Test::Setup::BFD;
 use File::Find;
@@ -229,18 +229,23 @@ use ExtUtils::Manifest qw(maniread);
 my $distdir  = 'Big-Dummy-0.01';
 $distdir =~ s/\./_/g if $Is_VMS;
 my $meta_yml = "$distdir/META.yml";
+my $mymeta_yml = "$distdir/MYMETA.yml";
 
 ok( !-f 'META.yml',  'META.yml not written to source dir' );
 ok( -f $meta_yml,    'META.yml written to dist dir' );
 ok( !-e "META_new.yml", 'temp META.yml file not left around' );
 
+ok( -f 'MYMETA.yml',  'MYMETA.yml is written to source dir' );
+ok( -f $mymeta_yml,    'MYMETA.yml is written to dist dir on disttest' );
+
 SKIP: {
     # META.yml spec 1.4 was added in 0.11
-    skip "Test::YAML::Meta >= 0.11 required", 2
+    skip "Test::YAML::Meta >= 0.11 required", 4
       unless eval { require Test::YAML::Meta }   and
              Test::YAML::Meta->VERSION >= 0.11;
 
     Test::YAML::Meta::meta_spec_ok($meta_yml);
+    Test::YAML::Meta::meta_spec_ok($mymeta_yml);
 }
 
 ok open META, $meta_yml or diag $!;
@@ -272,6 +277,48 @@ meta-spec:
     version:  1.4
 END
 
+my $mymeta_expected_content=<<"END";
+---
+abstract: "Try \\"our\\" hot dog's"
+author:
+  - 'Michael G Schwern <schwern\@pobox.com>'
+build_requires:
+  warnings: 0
+configure_requires:
+  ExtUtils::MakeMaker: 0
+distribution_type: module
+dynamic_config: 0
+generated_by: 'ExtUtils::MakeMaker version $ExtUtils::MakeMaker::VERSION'
+license: unknown
+meta-spec:
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Big-Dummy
+no_index:
+  directory:
+    - t
+    - inc
+requires:
+  strict: 0
+version: 0.01
+END
+
+{
+ok open META, $mymeta_yml or diag $!;
+my $mymeta_content = join '', <META>;
+ok close META;
+
+is($mymeta_content,$mymeta_expected_content,"MYMETA.yml (using Parse::CPAN::Meta) content is correct");
+}
+
+{
+ok open META, 'MYMETA.yml' or diag $!;
+my $mymeta_content = join '', <META>;
+ok close META;
+
+is($mymeta_content,$mymeta_expected_content,"MYMETA.yml (generated from scratch)content is correct");
+}
+
 my $manifest = maniread("$distdir/MANIFEST");
 # VMS is non-case preserving, so we can't know what the MANIFEST will
 # look like. :(
@@ -281,12 +328,25 @@ is( $manifest->{'meta.yml'}, 'Module meta-data (added by MakeMaker)' );
 
 # Test NO_META META.yml suppression
 unlink $meta_yml;
+unlink 'MYMETA.yml';
 ok( !-f $meta_yml,   'META.yml deleted' );
+ok( !-f 'MYMETA.yml','MYMETA.yml deleted' );
 @mpl_out = run(qq{$perl Makefile.PL "NO_META=1"});
+ok( -f 'MYMETA.yml', 'MYMETA.yml generation not suppressed by NO_META' );
 cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || diag(@mpl_out);
+ok( !-f $meta_yml,   'META.yml generation suppressed by NO_META' );
 my $distdir_out = run("$make distdir");
 is( $?, 0, 'distdir' ) || diag($distdir_out);
 ok( !-f $meta_yml,   'META.yml generation suppressed by NO_META' );
+unlink 'MYMETA.yml';
+
+ok( !-f 'MYMETA.yml','MYMETA.yml deleted' );
+@mpl_out = run(qq{$perl Makefile.PL "NO_MYMETA=1"});
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || diag(@mpl_out);
+$distdir_out = run("$make distdir");
+is( $?, 0, 'distdir' ) || diag($distdir_out);
+ok( !-f 'MYMETA.yml','MYMETA.yml generation suppressed by NO_MYMETA' );
+ok( -f $meta_yml,    'META.yml generation not suppressed by NO_MYMETA' );
 
 
 # Make sure init_dirscan doesn't go into the distdir
diff --git a/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm b/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm
new file mode 100644 (file)
index 0000000..a8d31e1
--- /dev/null
@@ -0,0 +1,67 @@
+package MakeMaker::Test::Setup::SAS;\r
+\r
+@ISA = qw(Exporter);\r
+require Exporter;\r
+@EXPORT = qw(setup_recurs teardown_recurs);\r
+\r
+use strict;\r
+use File::Path;\r
+use File::Basename;\r
+\r
+our $dirname='Multiple-Authors';\r
+my %Files = (\r
+             $dirname.'/Makefile.PL'   => <<'END',\r
+use ExtUtils::MakeMaker;\r
+\r
+WriteMakefile(\r
+    NAME             => 'Multiple::Authors',\r
+    AUTHOR           => ['John Doe <jd@example.com>', 'Jane Doe <jd@example.com>'],\r
+    VERSION_FROM     => 'lib/Multiple/Authors.pm',\r
+    PREREQ_PM        => { strict => 0 },\r
+);\r
+END\r
+\r
+             $dirname.'/lib/Multiple/Authors.pm'    => <<'END',\r
+package Multiple::Authors;\r
+\r
+$VERSION = 0.05;\r
+\r
+=head1 NAME\r
+\r
+Multiple::Authors - several authors\r
+\r
+=cut\r
+\r
+1;\r
+END\r
+\r
+);\r
+\r
+\r
+sub setup_recurs {\r
+    while(my($file, $text) = each %Files) {\r
+        # Convert to a relative, native file path.\r
+        $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);\r
+\r
+        my $dir = dirname($file);\r
+        mkpath $dir;\r
+        open(FILE, ">$file") || die "Can't create $file: $!";\r
+        print FILE $text;\r
+        close FILE;\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+sub teardown_recurs {\r
+    foreach my $file (keys %Files) {\r
+        my $dir = dirname($file);\r
+        if( -e $dir ) {\r
+            rmtree($dir) || return;\r
+        }\r
+    }\r
+    return 1;\r
+}\r
+\r
+\r
+1;\r
index 7e970ce..9e57cae 100644 (file)
@@ -81,7 +81,7 @@ my $new_mm = sub {
     my $mm = $new_mm->(
         DISTNAME        => 'Foo-Bar',
         VERSION         => 1.23,
-        AUTHOR          => 'Some Guy',
+        AUTHOR          => ['Some Guy'],
         PREREQ_PM       => {
             Foo                 => 2.34,
             Bar                 => 4.56,
index b0eb506..6d892b9 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 }
 
 use strict;
-use Test::More tests => 33;
+use Test::More tests => 35;
 
 use TieOut;
 use MakeMaker::Test::Utils;
@@ -180,6 +180,14 @@ END
     my $distdir  = 'Min-PerlVers-0.05';
     $distdir =~ s{\.}{_}g if $Is_VMS;
 
+    my $mymeta_yml = "MYMETA.yml";
+    my $mymeta = slurp($mymeta_yml);
+
+    ok( defined($mymeta),  '  MYMETA.yml present' );
+
+    like( $mymeta, qr{\nrequires:[^\S\n]*\n\s+perl:\s+5\.005\n\s+strict:\s+0\n},
+                         '  MYMETA.yml content good');
+
     my $meta_yml = "$distdir/META.yml";
     my @make_out    = run(qq{$make metafile});
     END { rmtree $distdir }
diff --git a/cpan/ExtUtils-MakeMaker/t/several_authors.t b/cpan/ExtUtils-MakeMaker/t/several_authors.t
new file mode 100644 (file)
index 0000000..b11d05e
--- /dev/null
@@ -0,0 +1,130 @@
+#!/usr/bin/perl -w\r
+\r
+# This is a test checking various aspects of the optional argument\r
+# MIN_PERL_VERSION to WriteMakefile.\r
+\r
+BEGIN {\r
+    unshift @INC, 't/lib';\r
+}\r
+\r
+use strict;\r
+use Test::More tests => 18;\r
+\r
+use TieOut;\r
+use MakeMaker::Test::Utils;\r
+use MakeMaker::Test::Setup::SAS;\r
+use File::Path;\r
+\r
+use ExtUtils::MakeMaker;\r
+\r
+# avoid environment variables interfering with our make runs\r
+delete @ENV{qw(LIB MAKEFLAGS)};\r
+\r
+my $perl     = which_perl();\r
+my $make     = make_run();\r
+my $makefile = makefile_name();\r
+\r
+chdir 't';\r
+\r
+perl_lib();\r
+\r
+ok( setup_recurs(), 'setup' );\r
+END {\r
+    ok( chdir(File::Spec->updir), 'leaving dir' );\r
+    ok( teardown_recurs(), 'teardown' );\r
+}\r
+\r
+ok( chdir $MakeMaker::Test::Setup::SAS::dirname, "entering dir $MakeMaker::Test::Setup::SAS::dirname" ) ||\r
+    diag("chdir failed: $!");\r
+\r
+{\r
+    # ----- argument verification -----\r
+\r
+    my $stdout = tie *STDOUT, 'TieOut';\r
+    ok( $stdout, 'capturing stdout' );\r
+    my $warnings = '';\r
+    local $SIG{__WARN__} = sub {\r
+        $warnings .= join '', @_;\r
+    };\r
+\r
+    eval {\r
+        WriteMakefile(\r
+            NAME             => 'Multiple::Authors',\r
+            AUTHOR           => ['John Doe <jd@example.com>', 'Jane Doe <jd@example.com>'],\r
+        );\r
+    };\r
+    is( $warnings, '', 'arrayref in AUTHOR does not trigger a warning' );\r
+    is( $@, '',        '  nor a hard failure' );\r
+\r
+}\r
+\r
+\r
+{\r
+    # ----- argument verification -----\r
+\r
+    my $stdout = tie *STDOUT, 'TieOut';\r
+    ok( $stdout, 'capturing stdout' );\r
+    my $warnings = '';\r
+    local $SIG{__WARN__} = sub {\r
+        $warnings .= join '', @_;\r
+    };\r
+\r
+    eval {\r
+        WriteMakefile(\r
+            NAME             => 'Multiple::Authors',\r
+            CONFIGURE => sub { \r
+               return {AUTHOR => 'John Doe <jd@example.com>',};\r
+            },\r
+        );\r
+    };\r
+    is( $warnings, '', 'scalar in AUTHOR inside CONFIGURE does not trigger a warning' );\r
+    is( $@, '',        '  nor a hard failure' );\r
+\r
+}\r
+\r
+\r
+# ----- generated files verification -----\r
+{\r
+    unlink $makefile;\r
+    my @mpl_out = run(qq{$perl Makefile.PL});\r
+    END { unlink $makefile, makefile_backup() }\r
+\r
+    cmp_ok( $?, '==', 0, 'Makefile.PL exiting normally' ) || diag(@mpl_out);\r
+    ok( -e $makefile, 'Makefile present' );\r
+}\r
+\r
+\r
+# ----- ppd output -----\r
+{\r
+    my $ppd_file = 'Multiple-Authors.ppd';\r
+    my @make_out = run(qq{$make ppd});\r
+    END { unlink $ppd_file }\r
+\r
+    cmp_ok( $?, '==', 0,    'Make ppd exiting normally' ) || diag(@make_out);\r
+\r
+    my $ppd_html = slurp($ppd_file);\r
+    ok( defined($ppd_html), '  .ppd file present' );\r
+\r
+    like( $ppd_html, qr{John Doe &lt;jd\@example.com&gt;, Jane Doe &lt;jd\@example.com&gt;},\r
+                            '  .ppd file content good' );\r
+}\r
+\r
+\r
+# ----- META.yml output -----\r
+{\r
+    my $distdir  = 'Multiple-Authors-0.05';\r
+    $distdir =~ s{\.}{_}g if $Is_VMS;\r
+\r
+    my $meta_yml = "$distdir/META.yml";\r
+    my @make_out    = run(qq{$make metafile});\r
+    END { rmtree $distdir }\r
+\r
+    cmp_ok( $?, '==', 0, 'Make metafile exiting normally' ) || diag(@make_out);\r
+    my $meta = slurp($meta_yml);\r
+    ok( defined($meta),  '  META.yml present' );\r
+\r
+    like( $meta, qr{\nauthor:\n\s+- John Doe <jd\@example.com>\n\s+- Jane Doe <jd\@example.com>\n},\r
+                         '  META.yml content good');\r
+}\r
+\r
+__END__\r
index 10913b9..421a311 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 }
 
 use strict;
-use Test::More tests => 35;
+use Test::More tests => 39;
 
 use TieOut;
 use MakeMaker::Test::Utils;
@@ -61,7 +61,7 @@ VERIFY
     };
 
     is( $warnings, <<VERIFY );
-WARNING: AUTHOR takes a string/number not a CODE reference.
+WARNING: AUTHOR takes a ARRAY reference not a CODE reference.
          Please inform the author.
 VERIFY
 
@@ -212,4 +212,31 @@ VERIFY
     };
     is( $warnings, '' );
     is( $mm->{DISTVNAME}, 'Hooballoo' );
+
+
+    # AUTHOR / scalar
+    $warnings = '';
+    eval {
+        $mm = WriteMakefile(
+            NAME       => 'Big::Dummy',
+            VERSION    => '1.00',
+            AUTHOR     => "test",
+        );
+    };
+    is( $warnings, '' );
+    is_deeply( $mm->{AUTHOR},  ["test"] );
+
+
+    # AUTHOR / array
+    $warnings = '';
+    eval {
+        $mm = WriteMakefile(
+            NAME       => 'Big::Dummy',
+            VERSION    => '1.00',
+            AUTHOR     => ["test1", "test2"],
+        );
+    };
+    is( $warnings, '' );
+    is_deeply( $mm->{AUTHOR},  ["test1","test2"] );
+
 }
index 42bee2e..6346b25 100644 (file)
 /ExtUtils/MakeMaker.pm
 /ExtUtils/MakeMaker/Config.pm
 /ExtUtils/MakeMaker/FAQ.pod
+/ExtUtils/MakeMaker/YAML.pm
 /ExtUtils/MakeMaker/Tutorial.pod
 /ExtUtils/Manifest.pm
 /ExtUtils/Miniperl.pm
index 6391a1e..c187c02 100644 (file)
@@ -211,7 +211,7 @@ by C<Errno>. This has been fixed (RT#77416).
 
 =item *
 
-C<ExtUtils::MakeMaker> has been upgraded from version 6.56 to 6.57_01.
+C<ExtUtils::MakeMaker> has been upgraded from version 6.56 to 6.57_05.
 
 =item *