From 37f6eaa490d61972fa887e4e7bbeaf0de90b3ee9 Mon Sep 17 00:00:00 2001 From: Florian Ragwitz Date: Sat, 11 Sep 2010 22:48:43 +0200 Subject: Upgrade EUMM from version 6.57_01 to 6.57_05 --- cpan/ExtUtils-MakeMaker/Changes | 22 + cpan/ExtUtils-MakeMaker/MANIFEST | 4 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm | 4 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm | 2 +- .../ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm | 101 +++- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 4 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm | 44 +- .../lib/ExtUtils/MakeMaker/Config.pm | 2 +- .../lib/ExtUtils/MakeMaker/YAML.pm | 658 +++++++++++++++++++++ .../ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm | 2 +- cpan/ExtUtils-MakeMaker/t/INST.t | 4 + cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t | 4 + cpan/ExtUtils-MakeMaker/t/basic.t | 64 +- .../t/lib/MakeMaker/Test/Setup/SAS.pm | 67 +++ cpan/ExtUtils-MakeMaker/t/metafile_data.t | 2 +- cpan/ExtUtils-MakeMaker/t/min_perl_version.t | 10 +- cpan/ExtUtils-MakeMaker/t/several_authors.t | 130 ++++ cpan/ExtUtils-MakeMaker/t/writemakefile_args.t | 31 +- 37 files changed, 1148 insertions(+), 45 deletions(-) create mode 100644 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm create mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm create mode 100644 cpan/ExtUtils-MakeMaker/t/several_authors.t (limited to 'cpan') diff --git a/cpan/ExtUtils-MakeMaker/Changes b/cpan/ExtUtils-MakeMaker/Changes index fff588d4f6..8ac998f58c 100644 --- a/cpan/ExtUtils-MakeMaker/Changes +++ b/cpan/ExtUtils-MakeMaker/Changes @@ -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 diff --git a/cpan/ExtUtils-MakeMaker/MANIFEST b/cpan/ExtUtils-MakeMaker/MANIFEST index 93e77bcd8f..929765ee20 100644 --- a/cpan/ExtUtils-MakeMaker/MANIFEST +++ b/cpan/ExtUtils-MakeMaker/MANIFEST @@ -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) diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm index 0d23c24edc..40bf780dea 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm @@ -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'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm index b21fc01a59..2184c4a6d7 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm index a434a0f1d0..cf4826fe36 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm @@ -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'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm index d39118cd59..945f24513b 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm index 8490f2fcf2..021238523e 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm index a94ab43717..a38f2740f7 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm @@ -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. diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm index 1c1eb4f2ba..0eeb795e48 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm @@ -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 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm index 7bee0b938d..d1de9d23f1 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm @@ -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 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm index 0c50626098..68612a80ac 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm index d74cbe353d..20aeb79164 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm @@ -7,7 +7,7 @@ BEGIN { our @ISA = qw( ExtUtils::MM_Unix ); } -our $VERSION = '6.57_01'; +our $VERSION = '6.57_05'; =head1 NAME diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm index b19d037561..4dcb6e55ec 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS; use strict; -our $VERSION = 6.57_01; +our $VERSION = 6.57_05; sub new { die <<'UNSUPPORTED'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm index 5f06e201f7..2089e8f88c 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm index dc0390caa0..46d57be293 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm index 0650b3c6fb..5efd3771f3 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm index 62bc1e0f97..032bf35b84 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm index 0719988ee7..ea2668aa45 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm @@ -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//>/g; - my $author = $self->{AUTHOR} || ''; + my $author = join(', ',@{$self->{AUTHOR} || []}); $author =~ s//>/g; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm index 34b74d2ad3..b4c7ae4198 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm index ad86cc8a88..e5b60d78e3 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm index c41075adbb..faaf219ecb 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm @@ -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` diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm index 1cc0f12ec4..19f5c7d61e 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm @@ -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); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm index 4a0b61fbb6..464f814f0f 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm @@ -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); { diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm index 7ab26e0b04..be9624e389 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm @@ -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 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm index 0b83432545..a7ac47d94a 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm @@ -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 index 0000000000..55ff6fdf43 --- /dev/null +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm @@ -0,0 +1,658 @@ +package ExtUtils::MakeMaker::YAML; + +use strict; + +# UTF Support? +sub HAVE_UTF8 () { $] >= 5.007003 } +BEGIN { + if ( HAVE_UTF8 ) { + # The string eval helps hide this from Test::MinimumVersion + eval "require utf8;"; + die "Failed to load UTF-8 support" if $@; + } + + # Class structure + require 5.004; + require Exporter; + require Carp; + $ExtUtils::MakeMaker::YAML::VERSION = '1.44'; + @ExtUtils::MakeMaker::YAML::ISA = qw{ Exporter }; + @ExtUtils::MakeMaker::YAML::EXPORT = qw{ Load Dump }; + @ExtUtils::MakeMaker::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; + + # Error storage + $ExtUtils::MakeMaker::YAML::errstr = ''; +} + +# The character class of all characters we need to escape +# NOTE: Inlined, since it's only used once +# my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]'; + +# Printed form of the unprintable characters in the lowest range +# of ASCII characters, listed by ASCII ordinal position. +my @UNPRINTABLE = qw( + z x01 x02 x03 x04 x05 x06 a + x08 t n v f r x0e x0f + x10 x11 x12 x13 x14 x15 x16 x17 + x18 x19 x1a e x1c x1d x1e x1f +); + +# Printable characters for escapes +my %UNESCAPES = ( + z => "\x00", a => "\x07", t => "\x09", + n => "\x0a", v => "\x0b", f => "\x0c", + r => "\x0d", e => "\x1b", '\\' => '\\', +); + +# Special magic boolean words +my %QUOTE = map { $_ => 1 } qw{ + null Null NULL + y Y yes Yes YES n N no No NO + true True TRUE false False FALSE + on On ON off Off OFF +}; + + + + + +##################################################################### +# Implementation + +# Create an empty ExtUtils::MakeMaker::YAML object +sub new { + my $class = shift; + bless [ @_ ], $class; +} + +# Create an object from a file +sub read { + my $class = ref $_[0] ? ref shift : shift; + + # Check the file + my $file = shift or return $class->_error( 'You did not specify a file name' ); + return $class->_error( "File '$file' does not exist" ) unless -e $file; + return $class->_error( "'$file' is a directory, not a file" ) unless -f _; + return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; + + # Slurp in the file + local $/ = undef; + local *CFG; + unless ( open(CFG, $file) ) { + return $class->_error("Failed to open file '$file': $!"); + } + my $contents = ; + unless ( close(CFG) ) { + return $class->_error("Failed to close file '$file': $!"); + } + + $class->read_string( $contents ); +} + +# Create an object from a string +sub read_string { + my $class = ref $_[0] ? ref shift : shift; + my $self = bless [], $class; + my $string = $_[0]; + unless ( defined $string ) { + return $self->_error("Did not provide a string to load"); + } + + # Byte order marks + # NOTE: Keeping this here to educate maintainers + # my %BOM = ( + # "\357\273\277" => 'UTF-8', + # "\376\377" => 'UTF-16BE', + # "\377\376" => 'UTF-16LE', + # "\377\376\0\0" => 'UTF-32LE' + # "\0\0\376\377" => 'UTF-32BE', + # ); + if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { + return $self->_error("Stream has a non UTF-8 BOM"); + } else { + # Strip UTF-8 bom if found, we'll just ignore it + $string =~ s/^\357\273\277//; + } + + # Try to decode as utf8 + utf8::decode($string) if HAVE_UTF8; + + # Check for some special cases + return $self unless length $string; + unless ( $string =~ /[\012\015]+\z/ ) { + return $self->_error("Stream does not end with newline character"); + } + + # Split the file into lines + my @lines = grep { ! /^\s*(?:\#.*)?\z/ } + split /(?:\015{1,2}\012|\015|\012)/, $string; + + # Strip the initial YAML header + @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; + + # A nibbling parser + while ( @lines ) { + # Do we have a document header? + if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { + # Handle scalar documents + shift @lines; + if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { + push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); + next; + } + } + + if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { + # A naked document + push @$self, undef; + while ( @lines and $lines[0] !~ /^---/ ) { + shift @lines; + } + + } elsif ( $lines[0] =~ /^\s*\-/ ) { + # An array at the root + my $document = [ ]; + push @$self, $document; + $self->_read_array( $document, [ 0 ], \@lines ); + + } elsif ( $lines[0] =~ /^(\s*)\S/ ) { + # A hash at the root + my $document = { }; + push @$self, $document; + $self->_read_hash( $document, [ length($1) ], \@lines ); + + } else { + Carp::croak("ExtUtils::MakeMaker::YAML failed to classify the line '$lines[0]'"); + } + } + + $self; +} + +# Deparse a scalar string to the actual scalar +sub _read_scalar { + my ($self, $string, $indent, $lines) = @_; + + # Trim trailing whitespace + $string =~ s/\s*\z//; + + # Explitic null/undef + return undef if $string eq '~'; + + # Single quote + if ( $string =~ /^\'(.*?)\'\z/ ) { + return '' unless defined $1; + $string = $1; + $string =~ s/\'\'/\'/g; + return $string; + } + + # Double quote. + # The commented out form is simpler, but overloaded the Perl regex + # engine due to recursion and backtracking problems on strings + # larger than 32,000ish characters. Keep it for reference purposes. + # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { + if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"\z/ ) { + # Reusing the variable is a little ugly, + # but avoids a new variable and a string copy. + $string = $1; + $string =~ s/\\"/"/g; + $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; + return $string; + } + + # Special cases + if ( $string =~ /^[\'\"!&]/ ) { + Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'"); + } + return {} if $string eq '{}'; + return [] if $string eq '[]'; + + # Regular unquoted string + return $string unless $string =~ /^[>|]/; + + # Error + Carp::croak("ExtUtils::MakeMaker::YAML failed to find multi-line scalar content") unless @$lines; + + # Check the indent depth + $lines->[0] =~ /^(\s*)/; + $indent->[-1] = length("$1"); + if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { + Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); + } + + # Pull the lines + my @multiline = (); + while ( @$lines ) { + $lines->[0] =~ /^(\s*)/; + last unless length($1) >= $indent->[-1]; + push @multiline, substr(shift(@$lines), length($1)); + } + + my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; + my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; + return join( $j, @multiline ) . $t; +} + +# Parse an array +sub _read_array { + my ($self, $array, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); + } + + if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { + # Inline nested hash + my $indent2 = length("$1"); + $lines->[0] =~ s/-/ /; + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { + # Array entry with a value + shift @$lines; + push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { + shift @$lines; + unless ( @$lines ) { + push @$array, undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)\-/ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] == $indent2 ) { + # Null array entry + push @$array, undef; + } else { + # Naked indenter + push @$array, [ ]; + $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); + } + + } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); + + } else { + Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); + } + + } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { + # This is probably a structure like the following... + # --- + # foo: + # - list + # bar: value + # + # ... so lets return and let the hash parser handle it + return 1; + + } else { + Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); + } + } + + return 1; +} + +# Parse an array +sub _read_hash { + my ($self, $hash, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); + } + + # Get the key + unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+|$)// ) { + if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { + Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'"); + } + Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); + } + my $key = $1; + + # Do we have a value? + if ( length $lines->[0] ) { + # Yes + $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); + } else { + # An indent + shift @$lines; + unless ( @$lines ) { + $hash->{$key} = undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)-/ ) { + $hash->{$key} = []; + $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } elsif ( $lines->[0] =~ /^(\s*)./ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] >= $indent2 ) { + # Null hash entry + $hash->{$key} = undef; + } else { + $hash->{$key} = {}; + $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } + } + } + } + + return 1; +} + +# Save an object to a file +sub write { + my $self = shift; + my $file = shift or return $self->_error('No file name provided'); + + # Write it to the file + open( CFG, '>' . $file ) or return $self->_error( + "Failed to open file '$file' for writing: $!" + ); + print CFG $self->write_string; + close CFG; + + return 1; +} + +# Save an object to a string +sub write_string { + my $self = shift; + return '' unless @$self; + + # Iterate over the documents + my $indent = 0; + my @lines = (); + foreach my $cursor ( @$self ) { + push @lines, '---'; + + # An empty document + if ( ! defined $cursor ) { + # Do nothing + + # A scalar document + } elsif ( ! ref $cursor ) { + $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); + + # version object + } elsif ( ref $cursor eq 'version' ) { + $lines[-1] .= ' ' . $self->_write_scalar( $cursor->stringify, $indent ); + + # A list at the root + } elsif ( ref $cursor eq 'ARRAY' ) { + unless ( @$cursor ) { + $lines[-1] .= ' []'; + next; + } + push @lines, $self->_write_array( $cursor, $indent, {} ); + + # A hash at the root + } elsif ( ref $cursor eq 'HASH' ) { + unless ( %$cursor ) { + $lines[-1] .= ' {}'; + next; + } + push @lines, $self->_write_hash( $cursor, $indent, {} ); + + } else { + Carp::croak("Cannot serialize " . ref($cursor)); + } + } + + join '', map { "$_\n" } @lines; +} + +sub _write_scalar { + my $string = $_[1]; + return '~' unless defined $string; + return "''" unless length $string; + if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { + $string =~ s/\\/\\\\/g; + $string =~ s/"/\\"/g; + $string =~ s/\n/\\n/g; + $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; + return qq|"$string"|; + } + if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) { + return "'$string'"; + } + return $string; +} + +sub _write_array { + my ($self, $array, $indent, $seen) = @_; + if ( $seen->{refaddr($array)}++ ) { + die "ExtUtils::MakeMaker::YAML does not support circular references"; + } + my @lines = (); + foreach my $el ( @$array ) { + my $line = (' ' x $indent) . '-'; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + # version object + } elsif ( $type eq 'version' ) { + $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "ExtUtils::MakeMaker::YAML does not support $type references"; + } + } + + @lines; +} + +sub _write_hash { + my ($self, $hash, $indent, $seen) = @_; + if ( $seen->{refaddr($hash)}++ ) { + die "ExtUtils::MakeMaker::YAML does not support circular references"; + } + my @lines = (); + foreach my $name ( sort keys %$hash ) { + my $el = $hash->{$name}; + my $line = (' ' x $indent) . "$name:"; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + # version object + } elsif ( $type eq 'version' ) { + $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "ExtUtils::MakeMaker::YAML does not support $type references"; + } + } + + @lines; +} + +# Set error +sub _error { + $ExtUtils::MakeMaker::YAML::errstr = $_[1]; + undef; +} + +# Retrieve error +sub errstr { + $ExtUtils::MakeMaker::YAML::errstr; +} + + + + + +##################################################################### +# YAML Compatibility + +sub Dump { + ExtUtils::MakeMaker::YAML->new(@_)->write_string; +} + +sub Load { + my $self = ExtUtils::MakeMaker::YAML->read_string(@_); + unless ( $self ) { + Carp::croak("Failed to load YAML document from string"); + } + if ( wantarray ) { + return @$self; + } else { + # To match YAML.pm, return the last document + return $self->[-1]; + } +} + +BEGIN { + *freeze = *Dump; + *thaw = *Load; +} + +sub DumpFile { + my $file = shift; + ExtUtils::MakeMaker::YAML->new(@_)->write($file); +} + +sub LoadFile { + my $self = ExtUtils::MakeMaker::YAML->read($_[0]); + unless ( $self ) { + Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); + } + if ( wantarray ) { + return @$self; + } else { + # Return only the last document to match YAML.pm, + return $self->[-1]; + } +} + + + + + +##################################################################### +# Use Scalar::Util if possible, otherwise emulate it + +BEGIN { + eval { + require Scalar::Util; + *refaddr = *Scalar::Util::refaddr; + }; + eval <<'END_PERL' if $@; +# Failed to load Scalar::Util +sub refaddr { + my $pkg = ref($_[0]) or return undef; + if (!!UNIVERSAL::can($_[0], 'can')) { + bless $_[0], 'Scalar::Util::Fake'; + } else { + $pkg = undef; + } + "$_[0]" =~ /0x(\w+)/; + my $i = do { local $^W; hex $1 }; + bless $_[0], $pkg if defined $pkg; + $i; +} +END_PERL + +} + +1; + +__END__ + +=pod + +=head1 NAME + +ExtUtils::MakeMaker::YAML - clone of YAML::Tiny + +=head1 SYNOPSIS + +See L + +=head1 AUTHOR + +Adam Kennedy Eadamk@cpan.orgE + +=head1 SEE ALSO + +L, L + +=head1 COPYRIGHT + +Copyright 2006 - 2010 Adam Kennedy. + +This program is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +=cut diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm index aeb8b27d14..fbf24156c6 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm @@ -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'); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm index e7992936fa..9aac3fd74a 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm @@ -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) = @_; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm index 628dda034f..7314410926 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/t/INST.t b/cpan/ExtUtils-MakeMaker/t/INST.t index 8a140eb0b4..6aac294fbf 100644 --- a/cpan/ExtUtils-MakeMaker/t/INST.t +++ b/cpan/ExtUtils-MakeMaker/t/INST.t @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t b/cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t index 8bb9db8a1d..fbb18a375a 100644 --- a/cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t +++ b/cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t @@ -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; diff --git a/cpan/ExtUtils-MakeMaker/t/basic.t b/cpan/ExtUtils-MakeMaker/t/basic.t index 1842a1c839..9cd1d931c3 100644 --- a/cpan/ExtUtils-MakeMaker/t/basic.t +++ b/cpan/ExtUtils-MakeMaker/t/basic.t @@ -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 ' +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 '', ; +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 '', ; +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 index 0000000000..a8d31e1d60 --- /dev/null +++ b/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm @@ -0,0 +1,67 @@ +package MakeMaker::Test::Setup::SAS; + +@ISA = qw(Exporter); +require Exporter; +@EXPORT = qw(setup_recurs teardown_recurs); + +use strict; +use File::Path; +use File::Basename; + +our $dirname='Multiple-Authors'; +my %Files = ( + $dirname.'/Makefile.PL' => <<'END', +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'Multiple::Authors', + AUTHOR => ['John Doe ', 'Jane Doe '], + VERSION_FROM => 'lib/Multiple/Authors.pm', + PREREQ_PM => { strict => 0 }, +); +END + + $dirname.'/lib/Multiple/Authors.pm' => <<'END', +package Multiple::Authors; + +$VERSION = 0.05; + +=head1 NAME + +Multiple::Authors - several authors + +=cut + +1; +END + +); + + +sub setup_recurs { + while(my($file, $text) = each %Files) { + # Convert to a relative, native file path. + $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file); + + my $dir = dirname($file); + mkpath $dir; + open(FILE, ">$file") || die "Can't create $file: $!"; + print FILE $text; + close FILE; + } + + return 1; +} + +sub teardown_recurs { + foreach my $file (keys %Files) { + my $dir = dirname($file); + if( -e $dir ) { + rmtree($dir) || return; + } + } + return 1; +} + + +1; diff --git a/cpan/ExtUtils-MakeMaker/t/metafile_data.t b/cpan/ExtUtils-MakeMaker/t/metafile_data.t index 7e970ceb3d..9e57cae79c 100644 --- a/cpan/ExtUtils-MakeMaker/t/metafile_data.t +++ b/cpan/ExtUtils-MakeMaker/t/metafile_data.t @@ -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, diff --git a/cpan/ExtUtils-MakeMaker/t/min_perl_version.t b/cpan/ExtUtils-MakeMaker/t/min_perl_version.t index b0eb50631a..6d892b95ba 100644 --- a/cpan/ExtUtils-MakeMaker/t/min_perl_version.t +++ b/cpan/ExtUtils-MakeMaker/t/min_perl_version.t @@ -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 index 0000000000..b11d05e82d --- /dev/null +++ b/cpan/ExtUtils-MakeMaker/t/several_authors.t @@ -0,0 +1,130 @@ +#!/usr/bin/perl -w + +# This is a test checking various aspects of the optional argument +# MIN_PERL_VERSION to WriteMakefile. + +BEGIN { + unshift @INC, 't/lib'; +} + +use strict; +use Test::More tests => 18; + +use TieOut; +use MakeMaker::Test::Utils; +use MakeMaker::Test::Setup::SAS; +use File::Path; + +use ExtUtils::MakeMaker; + +# avoid environment variables interfering with our make runs +delete @ENV{qw(LIB MAKEFLAGS)}; + +my $perl = which_perl(); +my $make = make_run(); +my $makefile = makefile_name(); + +chdir 't'; + +perl_lib(); + +ok( setup_recurs(), 'setup' ); +END { + ok( chdir(File::Spec->updir), 'leaving dir' ); + ok( teardown_recurs(), 'teardown' ); +} + +ok( chdir $MakeMaker::Test::Setup::SAS::dirname, "entering dir $MakeMaker::Test::Setup::SAS::dirname" ) || + diag("chdir failed: $!"); + +{ + # ----- argument verification ----- + + my $stdout = tie *STDOUT, 'TieOut'; + ok( $stdout, 'capturing stdout' ); + my $warnings = ''; + local $SIG{__WARN__} = sub { + $warnings .= join '', @_; + }; + + eval { + WriteMakefile( + NAME => 'Multiple::Authors', + AUTHOR => ['John Doe ', 'Jane Doe '], + ); + }; + is( $warnings, '', 'arrayref in AUTHOR does not trigger a warning' ); + is( $@, '', ' nor a hard failure' ); + +} + + +{ + # ----- argument verification ----- + + my $stdout = tie *STDOUT, 'TieOut'; + ok( $stdout, 'capturing stdout' ); + my $warnings = ''; + local $SIG{__WARN__} = sub { + $warnings .= join '', @_; + }; + + eval { + WriteMakefile( + NAME => 'Multiple::Authors', + CONFIGURE => sub { + return {AUTHOR => 'John Doe ',}; + }, + ); + }; + is( $warnings, '', 'scalar in AUTHOR inside CONFIGURE does not trigger a warning' ); + is( $@, '', ' nor a hard failure' ); + +} + + +# ----- generated files verification ----- +{ + unlink $makefile; + my @mpl_out = run(qq{$perl Makefile.PL}); + END { unlink $makefile, makefile_backup() } + + cmp_ok( $?, '==', 0, 'Makefile.PL exiting normally' ) || diag(@mpl_out); + ok( -e $makefile, 'Makefile present' ); +} + + +# ----- ppd output ----- +{ + my $ppd_file = 'Multiple-Authors.ppd'; + my @make_out = run(qq{$make ppd}); + END { unlink $ppd_file } + + cmp_ok( $?, '==', 0, 'Make ppd exiting normally' ) || diag(@make_out); + + my $ppd_html = slurp($ppd_file); + ok( defined($ppd_html), ' .ppd file present' ); + + like( $ppd_html, qr{John Doe <jd\@example.com>, Jane Doe <jd\@example.com>}, + ' .ppd file content good' ); +} + + +# ----- META.yml output ----- +{ + my $distdir = 'Multiple-Authors-0.05'; + $distdir =~ s{\.}{_}g if $Is_VMS; + + my $meta_yml = "$distdir/META.yml"; + my @make_out = run(qq{$make metafile}); + END { rmtree $distdir } + + cmp_ok( $?, '==', 0, 'Make metafile exiting normally' ) || diag(@make_out); + my $meta = slurp($meta_yml); + ok( defined($meta), ' META.yml present' ); + + like( $meta, qr{\nauthor:\n\s+- John Doe \n\s+- Jane Doe \n}, + ' META.yml content good'); +} + +__END__ diff --git a/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t b/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t index 10913b9f37..421a311c18 100644 --- a/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t +++ b/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t @@ -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, <{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"] ); + } -- cgit v1.2.1