Update ExtUtils-MakeMaker to CPAN version 7.28
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 9 Jun 2017 16:41:20 +0000 (17:41 +0100)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 9 Jun 2017 16:41:20 +0000 (17:41 +0100)
  [DELTA]

7.28  Tue May 30 22:01:08 BST 2017

    No changes since v7.27_02

7.27_02 Tue May 30 09:27:56 BST 2017

    Bug fixes:
    - Prune auto/share from search paths RT#121918

7.27_01 Sun May 28 11:35:46 BST 2017

    Bug fixes:
    - Fix regression with metadata RT#121913

7.26  Sat May 27 21:01:47 BST 2017

    No changes since 7.25_06

7.25_06 Tue May 23 20:18:01 BST 2017

    Bug fixes:
    - Fix regression with XS tests on MSWin32 with MS toolchain

7.25_05 Mon May 15 10:18:01 BST 2017

    Bug fixes:
    - Make MakeMaker pass compilation tests on AIX again
    - Test, fix test dep on SKIPped linktype

7.25_04 Fri May 12 12:24:09 BST 2017

    Enhancements:
    - Add os_unsupported() function

7.25_03 Thu May 11 17:51:23 BST 2017

    Bug fixes:
    - processPL now depends on 'pure_all' instead of 'all'

7.25_02 Thu May 11 11:54:42 BST 2017

    Bug fixes:
    - Only add staticlibs that are installed under auto/
    - Correct the order of tests of chmod()

    Doc fixes:
    - Fixed typo in MakeMaker.pm

7.25_01 Fri Feb  3 13:36:25 GMT 2017

    Bug fixes:
    - Make perllocal.pod files reproducible
    - META_ADD/MERGE default meta version based on each other
    - Eliminate an ancient, unneeded, dangerous call to Carp::longmess

40 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
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/FAQ.pod
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm
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/03-xsstatic.t
cpan/ExtUtils-MakeMaker/t/basic.t
cpan/ExtUtils-MakeMaker/t/eu_command.t
cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm
cpan/ExtUtils-MakeMaker/t/metafile_data.t
cpan/ExtUtils-MakeMaker/t/os_unsupported.t [new file with mode: 0644]

index 1214581..27bd737 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1200,6 +1200,7 @@ cpan/ExtUtils-MakeMaker/t/MM_Unix.t                               See if ExtUtils::MM_UNIX works
 cpan/ExtUtils-MakeMaker/t/MM_VMS.t                             See if ExtUtils::MM_VMS works
 cpan/ExtUtils-MakeMaker/t/MM_Win32.t                           See if ExtUtils::MM_Win32 works
 cpan/ExtUtils-MakeMaker/t/oneliner.t                           See if MM can generate perl one-liners
+cpan/ExtUtils-MakeMaker/t/os_unsupported.t
 cpan/ExtUtils-MakeMaker/t/parse_abstract.t                     See if parse_abstract works
 cpan/ExtUtils-MakeMaker/t/parse_version.t                      See if parse_version works
 cpan/ExtUtils-MakeMaker/t/PL_FILES.t                           Test PL_FILES in MakeMaker
index b7d4b3b..693f2a5 100755 (executable)
@@ -460,7 +460,7 @@ use File::Glob qw(:case);
     },
 
     'ExtUtils::MakeMaker' => {
-        'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.24.tar.gz',
+        'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.28.tar.gz',
         'FILES'        => q[cpan/ExtUtils-MakeMaker],
         'EXCLUDED'     => [
             qr{^t/lib/Test/},
index c9ff022..b96609d 100644 (file)
@@ -7,7 +7,7 @@ use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
 @ISA       = qw(Exporter);
 @EXPORT    = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f test_d chmod
                 dos2unix);
-$VERSION = '7.24';
+$VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 my $Is_VMS   = $^O eq 'VMS';
index 69779b2..ea69e14 100644 (file)
@@ -10,7 +10,7 @@ our @ISA = qw(Exporter);
 
 our @EXPORT  = qw(test_harness pod2man perllocal_install uninstall
                   warn_if_old_packlist test_s cp_nonempty);
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 my $Is_VMS = $^O eq 'VMS';
@@ -219,7 +219,8 @@ sub perllocal_install {
                            : @ARGV;
 
     my $pod;
-    $pod = sprintf <<'POD', scalar(localtime), $type, $name, $name;
+    my $time = gmtime($ENV{SOURCE_DATE_EPOCH} || time);
+    $pod = sprintf <<'POD', scalar($time), $type, $name, $name;
  =head2 %s: C<%s> L<%s|%s>
 
  =over 4
index 7b2ca53..5841881 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::Liblist;
 
 use strict;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 use File::Spec;
index a7fae86..0dc9fc5 100644 (file)
@@ -11,7 +11,7 @@ use 5.006;
 
 use strict;
 use warnings;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 use ExtUtils::MakeMaker::Config;
index b327932..ec1aa80 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MM;
 use strict;
 use ExtUtils::MakeMaker::Config;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::Liblist;
index ea64660..19f1d5c 100644 (file)
@@ -1,9 +1,10 @@
 package ExtUtils::MM_AIX;
 
 use strict;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
+use ExtUtils::MakeMaker::Config;
 require ExtUtils::MM_Unix;
 our @ISA = qw(ExtUtils::MM_Unix);
 
@@ -34,13 +35,7 @@ Define DL_FUNCS and DL_VARS and write the *.exp files.
 sub dlsyms {
     my($self,%attribs) = @_;
     return '' unless $self->needs_linking;
-    my @m;
-    # these will need XSMULTI-fying but maybe that already happens
-    push @m,"\ndynamic :: $self->{BASEEXT}.exp\n\n"
-      unless $self->{SKIPHASH}{'dynamic'}; # dynamic and static are subs, so...
-    push @m,"\nstatic :: $self->{BASEEXT}.exp\n\n"
-      unless $self->{SKIPHASH}{'static'};  # we avoid a warning if we tick them
-    join "\n", @m, $self->xs_dlsyms_iterator(\%attribs);
+    join "\n", $self->xs_dlsyms_iterator(\%attribs);
 }
 
 =head3 xs_dlsyms_ext
@@ -53,6 +48,21 @@ sub xs_dlsyms_ext {
     '.exp';
 }
 
+sub xs_dlsyms_arg {
+    my($self, $file) = @_;
+    return qq{-bE:${file}};
+}
+
+sub init_others {
+    my $self = shift;
+    $self->SUPER::init_others;
+    # perl "hints" add -bE:$(BASEEXT).exp to LDDLFLAGS. strip that out
+    # so right value can be added by xs_make_dynamic_lib to work for XSMULTI
+    $self->{LDDLFLAGS} ||= $Config{lddlflags};
+    $self->{LDDLFLAGS} =~ s#(\s*)\S*\Q$(BASEEXT)\E\S*(\s*)#$1$2#;
+    return;
+}
+
 =head1 AUTHOR
 
 Michael G Schwern <schwern@pobox.com> with code from ExtUtils::MM_Unix
index 433a8dd..4afe450 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_Any;
 
 use strict;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 use Carp;
@@ -910,6 +910,17 @@ MAKE_FRAG
 }
 
 
+=head3 xs_dlsyms_arg
+
+Returns command-line arg(s) to linker for file listing dlsyms to export.
+Defaults to returning empty string, can be overridden by e.g. AIX.
+
+=cut
+
+sub xs_dlsyms_arg {
+    return '';
+}
+
 =head3 xs_dlsyms_ext
 
 Returns file-extension for C<xs_make_dlsyms> method's output file,
@@ -1318,8 +1329,10 @@ sub metafile_data {
     # needs to be based on the original version
     my $v1_add = _metaspec_version($meta_add) !~ /^2/;
 
+    my ($add_v, $merge_v) = map _metaspec_version($_), $meta_add, $meta_merge;
     for my $frag ($meta_add, $meta_merge) {
-        $frag = CPAN::Meta::Converter->new($frag, default_version => "1.4")->upgrade_fragment;
+        my $def_v = $frag == $meta_add ? $merge_v : $add_v;
+        $frag = CPAN::Meta::Converter->new($frag, default_version => $def_v)->upgrade_fragment;
     }
 
     # if we upgraded a 1.x _ADD fragment, we gave it a prereqs key that
index 9ede797..a2700b5 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 = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 
index e180a44..ce20844 100644 (file)
@@ -9,7 +9,7 @@ require ExtUtils::MM_Unix;
 require ExtUtils::MM_Win32;
 our @ISA = qw( ExtUtils::MM_Unix );
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 
index a453278..ee24ac3 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_DOS;
 
 use strict;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Any;
index 03dfe27..557a9f5 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     our @ISA = qw( ExtUtils::MM_Unix );
 }
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 
index 8207502..787a82e 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS;
 
 use strict;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 sub new {
index 6ec9b7c..f46ecb6 100644 (file)
@@ -22,7 +22,7 @@ use strict;
 use ExtUtils::MakeMaker::Config;
 use File::Basename;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Win32;
index f23ec5a..7b4f8fa 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use ExtUtils::MakeMaker qw(neatvalue);
 use File::Spec;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Any;
index 6475983..2c8d56b 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_QNX;
 
 use strict;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Unix;
index e7e65ef..0a4f0bf 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_UWIN;
 
 use strict;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Unix;
index 66a24d7..ce3dc1a 100644 (file)
@@ -14,7 +14,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562);
 
 # If we make $VERSION an our variable parse_version() breaks
 use vars qw($VERSION);
-$VERSION = '7.24';
+$VERSION = '7.28';
 $VERSION = eval $VERSION;  ## no critic [BuiltinFunctions::ProhibitStringyEval]
 
 require ExtUtils::MM_Any;
@@ -932,6 +932,7 @@ sub dynamic_lib {
     return '' unless $self->has_link_code;
     my @m = $self->xs_dynamic_lib_macros(\%attribs);
     my @libs;
+    my $dlsyms_ext = eval { $self->xs_dlsyms_ext };
     if ($self->{XSMULTI}) {
         my @exts = $self->_xs_list_basenames;
         for my $ext (@exts) {
@@ -952,10 +953,14 @@ sub dynamic_lib {
             my $ldfrom = $self->_xsbuild_value('xs', $ext, 'LDFROM');
             $ldfrom = $objfile unless defined $ldfrom;
             my $exportlist = "$ext.def";
-            push @libs, [ $objfile, $instfile, $instdir, $ldfrom, $exportlist ];
+            my @libchunk = ($objfile, $instfile, $instdir, $ldfrom, $exportlist);
+            push @libchunk, $dlsyms_ext ? $ext.$dlsyms_ext : undef;
+            push @libs, \@libchunk;
         }
     } else {
-        @libs = ([ qw($(OBJECT) $(INST_DYNAMIC) $(INST_ARCHAUTODIR) $(LDFROM) $(EXPORT_LIST)) ]);
+        my @libchunk = qw($(OBJECT) $(INST_DYNAMIC) $(INST_ARCHAUTODIR) $(LDFROM) $(EXPORT_LIST));
+        push @libchunk, $dlsyms_ext ? '$(BASEEXT)'.$dlsyms_ext : undef;
+        @libs = (\@libchunk);
     }
     push @m, map { $self->xs_make_dynamic_lib(\%attribs, @$_); } @libs;
 
@@ -999,10 +1004,11 @@ Defines the recipes for the C<dynamic_lib> section.
 =cut
 
 sub xs_make_dynamic_lib {
-    my ($self, $attribs, $object, $to, $todir, $ldfrom, $exportlist) = @_;
+    my ($self, $attribs, $object, $to, $todir, $ldfrom, $exportlist, $dlsyms) = @_;
     $exportlist = '' if $exportlist ne '$(EXPORT_LIST)';
     my $armaybe = $self->_xs_armaybe($attribs);
-    my @m = sprintf '%s : %s $(MYEXTLIB) %s$(DFSEP).exists %s $(PERL_ARCHIVEDEP) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)'."\n", $to, $object, $todir, $exportlist;
+    my @m = sprintf '%s : %s $(MYEXTLIB) %s$(DFSEP).exists %s $(PERL_ARCHIVEDEP) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP) %s'."\n", $to, $object, $todir, $exportlist, ($dlsyms || '');
+    my $dlsyms_arg = $self->xs_dlsyms_arg($dlsyms);
     if ($armaybe ne ':'){
         $ldfrom = 'tmp$(LIB_EXT)';
         push(@m,"      \$(ARMAYBE) cr $ldfrom $object\n");
@@ -1043,8 +1049,8 @@ sub xs_make_dynamic_lib {
         $ld_run_path_shell = 'LD_RUN_PATH="$(LD_RUN_PATH)" ';
     }
 
-    push @m, sprintf <<'MAKE', $ld_run_path_shell, $ldrun, $ldfrom, $self->xs_obj_opt('$@'), $libs, $exportlist;
-       %s$(LD) %s $(LDDLFLAGS) %s $(OTHERLDFLAGS) %s $(MYEXTLIB) \
+    push @m, sprintf <<'MAKE', $ld_run_path_shell, $ldrun, $dlsyms_arg, $ldfrom, $self->xs_obj_opt('$@'), $libs, $exportlist;
+       %s$(LD) %s $(LDDLFLAGS) %s %s $(OTHERLDFLAGS) %s $(MYEXTLIB) \
          $(PERL_ARCHIVE) %s $(PERL_ARCHIVE_AFTER) %s \
          $(INST_DYNAMIC_FIX)
        $(CHMOD) $(PERM_RWX) $@
@@ -2531,6 +2537,14 @@ $(MAKE_APERL_FILE) : static $(FIRST_MAKEFILE) pm_to_blib
        'auto', $self->{FULLEXT}, "$self->{BASEEXT}$self->{LIB_EXT}"
     );
     File::Find::find(sub {
+       if ($File::Find::name =~ m{/auto/share\z}) {
+           # in a subdir of auto/share, prune because e.g.
+           # Alien::pkgconfig uses File::ShareDir to put .a files
+           # there. do not want
+           $File::Find::prune = 1;
+           return;
+       }
+
        return unless m/\Q$self->{LIB_EXT}\E$/;
 
         # Skip perl's libraries.
@@ -2578,7 +2592,7 @@ $(MAKE_APERL_FILE) : static $(FIRST_MAKEFILE) pm_to_blib
        return if $File::Find::name =~ m:\Q$installed_version\E\z:;
        use Cwd 'cwd';
        $static{cwd() . "/" . $_}++;
-    }, grep( -d $_, @{$searchdirs || []}) );
+    }, grep( -d $_, map { $self->catdir($_, 'auto') } @{$searchdirs || []}) );
 
     # We trust that what has been handed in as argument, will be buildable
     $static = [] unless $static;
@@ -3259,7 +3273,7 @@ sub processPL {
 
             $m .= <<MAKE_FRAG;
 
-all :: $target
+pure_all :: $target
        \$(NOECHO) \$(NOOP)
 
 $target :: $plfile $pm_dep
@@ -3659,7 +3673,7 @@ test_ : test_$default_testtype
 EOF
 
     for my $linktype (qw(dynamic static)) {
-        my $directdeps = "$linktype pure_all";
+        my $directdeps = join ' ', grep !$self->{SKIPHASH}{$_}, $linktype, "pure_all"; # no depend on a linktype if SKIPped
         push @m, "subdirs-test_$linktype :: $directdeps\n";
         foreach my $dir (@{ $self->{DIR} }) {
             my $test = $self->cd($dir, "\$(MAKE) test_$linktype \$(PASTHRU)");
@@ -3869,7 +3883,7 @@ Obsolete, deprecated method. Not used since Version 5.21.
 sub writedoc {
 # --- perllocal.pod section ---
     my($self,$what,$name,@attribs)=@_;
-    my $time = localtime;
+    my $time = gmtime($ENV{SOURCE_DATE_EPOCH} || time);
     print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
     print join "\n\n=item *\n\n", map("C<$_>",@attribs);
     print "\n\n=back\n\n";
index ed3ec8c..01c1807 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
 
 use File::Basename;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Any;
index c176118..a280176 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MM_VOS;
 
 use strict;
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Unix;
index 9844d83..2f65eb9 100644 (file)
@@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw(neatvalue _sprintf562);
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
 our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 $ENV{EMXSHELL} = 'sh'; # to run `commands`
index 0d6f0e3..c9f5bed 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_Win95;
 
 use strict;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require ExtUtils::MM_Win32;
index 779c791..af7faf6 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MY;
 use strict;
 require ExtUtils::MM;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 our @ISA = qw(ExtUtils::MM);
 
index d579256..1d81d5e 100644 (file)
@@ -24,7 +24,7 @@ my %Recognized_Att_Keys;
 our %macro_fsentity; # whether a macro is a filesystem name
 our %macro_dep; # whether a macro is a dependency
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;  ## no critic [BuiltinFunctions::ProhibitStringyEval]
 
 # Emulate something resembling CVS $Revision$
@@ -34,7 +34,7 @@ $Revision = int $Revision * 10000;
 our $Filename = __FILE__;   # referenced outside MakeMaker
 
 our @ISA = qw(Exporter);
-our @EXPORT    = qw(&WriteMakefile $Verbose &prompt);
+our @EXPORT    = qw(&WriteMakefile $Verbose &prompt &os_unsupported);
 our @EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists
                     &WriteEmptyMakefile &open_for_writing &write_file_via_tmp
                     &_sprintf562);
@@ -227,6 +227,10 @@ sub prompt ($;$) {  ## no critic
     return (!defined $ans || $ans eq '') ? $def : $ans;
 }
 
+sub os_unsupported {
+    die "OS unsupported\n";
+}
+
 sub eval_in_subdirs {
     my($self) = @_;
     use Cwd qw(cwd abs_path);
@@ -652,11 +656,6 @@ END
         }
     }
 
-    # This is for old Makefiles written pre 5.00, will go away
-    if ( Carp::longmess("") =~ /runsubdirpl/s ){
-        carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");
-    }
-
     my $newclass = ++$PACKNAME;
     local @Parent = @Parent;    # Protect against non-local exits
     {
@@ -3014,6 +3013,8 @@ you provide your own C<TESTS> attribute, defaults to false.
 
   {RECURSIVE_TEST_FILES=>1}
 
+This is supported since 6.76
+
 =item tool_autosplit
 
   {MAXLEN => 8}
@@ -3290,6 +3291,17 @@ prevents automated processes from blocking on user input.
 
 If no $default is provided an empty string will be used instead.
 
+=item os_unsupported
+
+  os_unsupported();
+  os_unsupported if $^O eq 'MSWin32';
+
+The C<os_unsupported()> function provides a way to correctly exit your
+C<Makefile.PL> before calling C<WriteMakefile>. It is essentially a
+C<die> with the message "OS unsupported".
+
+This is supported since 7.26
+
 =back
 
 =head2 Supported versions of Perl
index bce9c66..5ef367c 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Config;
 
 use strict;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 use Config ();
index 179c9d6..f4d9575 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::MakeMaker::FAQ;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 1;
index bec2cc1..9d45f5e 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::MakeMaker::Locale;
 
 use strict;
-our $VERSION = "7.24";
+our $VERSION = "7.28";
 $VERSION = eval $VERSION;
 
 use base 'Exporter';
index 76c08d1..74b9330 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::MakeMaker::Tutorial;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 
@@ -125,7 +125,7 @@ Simply add another entry in the test location string. For example, to test:
 
 You would use the following C<test> directive:
 
-    test => {TESTS => 't/*.t t/*/*/*.t}
+    test => {TESTS => 't/*.t t/*/*/*.t'}
 
 Note that in the above example, tests in the first subdirectory will not be
 run. To run all tests in the intermediary subdirectory preceeding the one
index bcfaaa3..3e7b2ae 100644 (file)
@@ -15,7 +15,7 @@ use strict;
 
 use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
 
-$VERSION = '7.24';
+$VERSION = '7.28';
 $VERSION = eval $VERSION;
 $CLASS = 'version';
 
index 0255909..3be9475 100644 (file)
@@ -10,7 +10,7 @@ use strict;
 
 use vars qw($VERSION $CLASS $STRICT $LAX);
 
-$VERSION = '7.24';
+$VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 #--------------------------------------------------------------------------#
index 5eea8bc..d3344f3 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 = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 require Exporter;
index 0cfb22a..6211063 100644 (file)
@@ -10,7 +10,7 @@ use Config;
 
 our @ISA = qw(Exporter);
 our @EXPORT = qw(&Mksymlists);
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 sub Mksymlists {
index 0e77466..d342bd2 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::testlib;
 use strict;
 use warnings;
 
-our $VERSION = '7.24';
+our $VERSION = '7.28';
 $VERSION = eval $VERSION;
 
 use Cwd;
index 1d748eb..8e18ab3 100644 (file)
@@ -11,9 +11,6 @@ use MakeMaker::Test::Utils;
 use MakeMaker::Test::Setup::XS;
 use Test::More;
 
-plan skip_all => "Disabled as broken perl installs give false negative"
-  # if not static perl, and not author
-  unless !$Config{usedl} or $ENV{AUTHOR_TESTING};
 plan skip_all => "ExtUtils::CBuilder not installed or couldn't find a compiler"
   unless have_compiler();
 plan skip_all => 'Shared perl library' if $Config{useshrplib} eq 'true';
index c98e28c..41ecd99 100644 (file)
@@ -24,7 +24,7 @@ use ExtUtils::MM;
 use Test::More
     !MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'}
     ? (skip_all => "cross-compiling and make not available")
-    : (tests => 186);
+    : (tests => 188);
 use File::Find;
 use File::Spec;
 use File::Path;
@@ -438,8 +438,11 @@ note "META file validity"; SKIP: {
 }
 
 
-
 # Make sure init_dirscan doesn't go into the distdir
+# also with a "messup.PL" that will make a build fail
+open $fh, '>', 'messup.PL' or die "messup.PL: $!";
+print $fh 'die';
+close $fh;
 @mpl_out = run(qq{$perl Makefile.PL "PREFIX=$DUMMYINST"});
 
 cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || diag(@mpl_out);
@@ -448,6 +451,14 @@ ok( grep(/^Writing $makefile for Big::Dummy/, @mpl_out) == 1,
                                 'init_dirscan skipped distdir') ||
   diag(@mpl_out);
 
+# "make test" straight after "perl Makefile.PL" is expected to work same as
+#   "make all test" so check that with "messup.PL" that will make the
+#   build step fail
+$test_out = run("$make test");
+unlike( $test_out, qr/All tests successful/, 'make test caused build' );
+isnt( $?, 0,                                 '  build should fail' ) ||
+    diag $test_out;
+
 # I know we'll get ignored errors from make here, that's ok.
 # Send STDERR off to oblivion.
 open(SAVERR, ">&STDERR") or die $!;
@@ -455,6 +466,7 @@ open(STDERR, ">",File::Spec->devnull) or die $!;
 
 my $realclean_out = run("$make realclean");
 is( $?, 0, 'realclean' ) || diag($realclean_out);
+1 while unlink 'messup.PL'; # also zap deliberate build-breaker
 
 open(STDERR, ">&SAVERR") or die $!;
 close SAVERR;
index 269aa5c..32a6f59 100644 (file)
@@ -151,20 +151,21 @@ BEGIN {
         is( ((stat('testdir'))[2] & 07777) & 0700,
             0100, 'change a dir to execute-only' );
 
-        # change a dir to read-only
-        @ARGV = ( '0400', 'testdir' );
+        # change a dir to write-only
+        @ARGV = ( '0200', 'testdir' );
         ExtUtils::Command::chmod();
 
         is( ((stat('testdir'))[2] & 07777) & 0700,
-            0400, 'change a dir to read-only' );
+            0200, 'change a dir to write-only' );
 
-        # change a dir to write-only
-        @ARGV = ( '0200', 'testdir' );
+        # change a dir to read-only
+        @ARGV = ( '0400', 'testdir' );
         ExtUtils::Command::chmod();
 
         is( ((stat('testdir'))[2] & 07777) & 0700,
-            0200, 'change a dir to write-only' );
+            0400, 'change a dir to read-only' );
 
+        # remove the dir we've been playing with
         @ARGV = ('testdir');
         rm_rf;
         ok( ! -e 'testdir', 'rm_rf can delete a read-only dir' );
index f557875..89628a5 100644 (file)
@@ -19,7 +19,8 @@ use ExtUtils::MM;
 my $tempdir = tempdir(DIR => getcwd, CLEANUP => 1);
 chdir $tempdir;
 my $typemap = 'type map';
-$typemap =~ s/ //g unless MM->new({NAME=>'name', NORECURS=>1})->can_dep_space;
+my $MM = MM->new({NAME=>'name', NORECURS=>1});
+$typemap =~ s/ //g unless $MM->can_dep_space;
 chdir File::Spec->updir;
 
 my $PM_TEST = <<'END';
@@ -148,6 +149,7 @@ $label2files{static} = +{
     $MAKEFILEPL, 'Test', 'lib/XS/Test.pm', qq{'$typemap'},
     q{LINKTYPE => 'static'},
   ),
+  "blib/arch/auto/share/dist/x-y/libwhatevs$MM->{LIB_EXT}" => 'hi there', # mimic what File::ShareDir can do
 };
 
 $label2files{subdirs} = +{
@@ -211,6 +213,69 @@ $label2files{subdirsstatic} = +{
   ),
 };
 
+# to mimic behaviour of CGI-Deurl-XS version 0.08
+$label2files{subdirsskip} = +{
+  %{ $label2files{subdirscomplex} }, # make copy
+  'Makefile.PL' => sprintf(
+    $MAKEFILEPL,
+    'Test', 'Test.pm', qq{},
+    <<'EOF',
+MYEXTLIB => 'Other$(DIRFILESEP)libparser$(LIB_EXT)',
+EOF
+  ) . <<'EOF',
+sub MY::postamble {
+    my ($self) = @_;
+    return '$(MYEXTLIB) : Other$(DIRFILESEP)Makefile'."\n\t".$self->cd('Other', '$(MAKE) $(PASSTHRU)')."\n";
+}
+EOF
+  'Other/Makefile.PL' => sprintf(
+    $MAKEFILEPL,
+    'Other', 'Other.pm', qq{},
+    <<'EOF',
+SKIP   => [qw(all static dynamic )],
+clean  => {'FILES' => 'libparser$(LIB_EXT)'},
+EOF
+  ) . <<'EOF',
+sub MY::top_targets {
+  my ($self) = @_;
+  my $static_lib_pure_cmd = $self->static_lib_pure_cmd('$(O_FILES)');
+  <<'SNIP' . $static_lib_pure_cmd;
+all :: static
+
+pure_all :: static
+
+static :: libparser$(LIB_EXT)
+
+libparser$(LIB_EXT): $(O_FILES)
+SNIP
+}
+EOF
+  't/plus1.t' => <<'END',
+#!/usr/bin/perl -w
+use Test::More tests => 2;
+use_ok "XS::Test";
+is XS::Test::plus1(3), 4;
+END
+  'Test.xs' => <<EOF,
+#ifdef __cplusplus
+extern "C" {
+#endif
+int plus1(int);
+#ifdef __cplusplus
+}
+#endif
+$XS_TEST
+int
+plus1(input)
+       int     input
+   CODE:
+       RETVAL = plus1(input);
+   OUTPUT:
+       RETVAL
+EOF
+};
+virtual_rename('subdirsskip', 'Other/lib/file.c', 'Other/file.c');
+
 my $XS_MULTI = $XS_OTHER;
 # check compiling from top dir still can include local
 $XS_MULTI =~ s:(#include "XSUB.h"):$1\n#include "header.h":;
@@ -326,7 +391,7 @@ sub list_dynamic {
     $^O ne 'MSWin32' ? (
         [ 'bscode', '', '' ],
         [ 'bscodemulti', '', '' ],
-        $^O ne 'VMS' ? ([ 'subdirscomplex', '', '' ]) : (),
+        $^O !~ m!^(VMS|aix)$! ? ([ 'subdirscomplex', '', '' ]) : (),
     ) : (), # DynaLoader different
     [ 'subdirs', '', '' ],
     [ 'subdirsstatic', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ],
@@ -335,6 +400,7 @@ sub list_dynamic {
     [ 'staticmulti', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ],
     [ 'staticmulti', ' dynamic', '_dynamic' ],
     [ 'xsbuild', '', '' ],
+    [ 'subdirsskip', '', '' ],
   );
 }
 
@@ -391,7 +457,11 @@ sub run_tests {
   }
 
   chdir File::Spec->updir or die;
-  ok rmtree($dir), "teardown $dir";
+  if ($ENV{EUMM_KEEP_TESTDIRS}) {
+    ok 1, "don't teardown $dir";
+  } else {
+    ok rmtree($dir), "teardown $dir";
+  }
 }
 
 1;
index 01d72d8..bb3670a 100644 (file)
@@ -17,7 +17,7 @@ use File::Temp;
 use Cwd;
 use MakeMaker::Test::Utils;
 
-plan tests => 31;
+plan tests => 35;
 require ExtUtils::MM_Any;
 
 sub mymeta_ok {
@@ -262,6 +262,110 @@ my @GENERIC_OUT = (
     },'TEST_REQUIRES meta-spec 2.0';
 }
 
+{
+    my $mm = $new_mm->(
+        @GENERIC_IN,
+    );
+    is_deeply $mm->metafile_data(
+        {
+            resources => {
+                homepage => "https://metacpan.org/release/ExtUtils-MakeMaker",
+                repository => "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker",
+            },
+        },
+        { @METASPEC14 },
+    ), {
+        prereqs => { @REQ20 },
+        resources => {
+            homepage => "https://metacpan.org/release/ExtUtils-MakeMaker",
+            repository => {
+                url => "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker",
+            },
+        },
+        @GENERIC_OUT,
+    }, 'META_ADD takes meta version 1.4 from META_MERGE';
+}
+
+{
+    my $mm = $new_mm->(
+        @GENERIC_IN,
+    );
+    is_deeply $mm->metafile_data(
+        { @METASPEC14 },
+        {
+            resources => {
+                homepage => "https://metacpan.org/release/ExtUtils-MakeMaker",
+                repository => "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker",
+            },
+        },
+    ), {
+        prereqs => { @REQ20 },
+        resources => {
+            homepage => "https://metacpan.org/release/ExtUtils-MakeMaker",
+            repository => {
+                url => "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker",
+            },
+        },
+        @GENERIC_OUT,
+    }, 'META_MERGE takes meta version 1.4 from META_ADD';
+}
+
+{
+    my $mm = $new_mm->(
+        @GENERIC_IN,
+    );
+    is_deeply $mm->metafile_data(
+        {
+            'configure_requires' => {
+                'Fake::Module1' => 1,
+            },
+            'prereqs' => {
+                @REQ20,
+                'test' => {
+                    'requires' => {
+                        'Fake::Module2' => 2,
+                    },
+                },
+            },
+        },
+        { @METASPEC20 },
+    ), {
+        prereqs => {
+            @REQ20,
+            test => { requires => { "Fake::Module2" => 2, }, },
+        },
+        @GENERIC_OUT,
+    }, 'META_ADD takes meta version 2 from META_MERGE';
+}
+
+{
+    my $mm = $new_mm->(
+        @GENERIC_IN,
+    );
+    is_deeply $mm->metafile_data(
+        { @METASPEC20 },
+        {
+            'configure_requires' => {
+                'Fake::Module1' => 1,
+            },
+            'prereqs' => {
+                @REQ20,
+                'test' => {
+                    'requires' => {
+                        'Fake::Module2' => 2,
+                    },
+                },
+            },
+        },
+    ), {
+        prereqs => {
+            @REQ20,
+            test => { requires => { "Fake::Module2" => 2, }, },
+        },
+        @GENERIC_OUT,
+    }, 'META_MERGE takes meta version 2 from META_ADD';
+}
+
 # Test _REQUIRES key priority over META_ADD
 {
     my $mm = $new_mm->(
diff --git a/cpan/ExtUtils-MakeMaker/t/os_unsupported.t b/cpan/ExtUtils-MakeMaker/t/os_unsupported.t
new file mode 100644 (file)
index 0000000..42396c0
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+    unshift @INC, 't/lib';
+}
+
+use strict;
+use Test::More tests => 1;
+use ExtUtils::MakeMaker;
+
+eval q{
+    os_unsupported();
+};
+
+like( $@, qr/^OS unsupported$/, 'OS Unsupported' );