FAQ
In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/f68c540351c7aa8d731d66d76cce5fa9b18310e6?hp=31f7d6b96b4add13808a033633e6dd1e4d791845>

- Log -----------------------------------------------------------------
commit f68c540351c7aa8d731d66d76cce5fa9b18310e6
Author: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
Date: Tue May 24 11:39:59 2016 +0100

     Update ExtUtils-MakeMaker to CPAN version 7.18

       [DELTA]

     7.18 Mon May 23 15:55:26 BST 2016

         No changes since 7.17_03

     7.17_03 Wed May 11 18:22:06 BST 2016

         Dist fixes:
         - remove build_requires on ourselves

     7.17_02 Mon May 9 23:55:09 BST 2016

         Bug fixes:
         - Resolve a regression in c_o with trailing spaces

     7.17_01 Mon May 9 20:02:02 BST 2016

         Test fixes:
         - Resolve issues with tests when running in core

     7.16 Sat May 7 10:13:05 BST 2016

         No changes since 7.15_03

     7.15_03 Sun May 1 14:13:44 BST 2016

         Bug fixes:
         - lazy load Time::HiRes in ExtUtils::Command::MM
         - fix 5.6 compat by removing indexed sprintf

     7.15_02 Thu Apr 28 12:54:23 BST 2016

         Bug fixes:
         - Fix regression with small fractional numeric versions

     7.15_01 Wed Apr 27 19:13:46 BST 2016

         Bug fixes:
         - Fix regression with SKIP and dynamic and static targets

     7.14 Sun Apr 24 13:53:33 BST 2016

       No changes since 7.13_01

     7.13_01 Sat Apr 23 16:41:20 BST 2016

         Bug fixes:
         - Make dynamic depend on config again, fixes issues with Inline

     7.12 Tue Apr 19 12:24:41 BST 2016

         Enhancements:
         - version ranges are now supported for PREREQS, etc.
         - Metadata is now represented internally as Meta Spec 2.0
         - ExtUtils::Command has been re-incorporated at 1.19 of that module
         - Refactored XS handling
         - XSMULTI=>1 - put multiple *.xs under lib, it "just works" and XSBUILD
           for refined control of XSMULTI
         - can do "make test" without first doing "make"

         Bug fixes:
         - Handle new warnings from File::Path
         - Resolve RT#106572 specifying AUTHOR via command-line is broken
         - Warning on missing TEST_REQUIRES and CONFIGURE_REQUIRES
         - Sanitise make_type on Win32
         - Cygwin rebase fixes
         - Makefile starting comments reflect decoded @ARGV, not raw
         - Add various targets to .PHONY to avoid disk IO with dmake
         - Fixed race condition in realclean
         - improve static-build lib detection
         - Eliminate non-error STDERR
         - Make WriteEmptyMakefile Makefile functional when called in subdir
         - manifypods fixes
         - perllocal.pod generation "Perl in Space" fix
         - PASTHRU fixes
         - Fix distsignature dependencies for parallel make
         - Check exit status for commands in "make ci" target
         - Less noisey output during building sub-modules
         - Fix dos2unix() on Windows
         - stop makeaperl from polluting @ARGV in cases where ARGV contains args with spaces
         - Fix regression when both test.pl and t/*.t are present
         - Refactored internals to remove DirHandle usage
         - MM_Unix::find_perl() dont repeatedly stat the same path in a loop
         - No longer repeatedly attempt to load CPAN::Meta if it is now available

         VMS fixes:
         - Made MM_VMS::oneline build continuation lines properly
         - Implemented XSMULTI and XSBUILD
         - Resurrect PASTHRU on VMS
         - make_macro should handle multiple macros
         - Fix regression with File::Spec changes in previous release

         Win32 fixes:
         - t/echo.t needs SHELL env for Win32 gmake

         Dist fixes:
         - Made %ExtraPrereqs match bundled prereqs
         - Included MANIFEST.SKIP from ExtUtils::Manifest
         - The bundled Encode::Locale has been updated to 1.04

         Test fixes:
         - test PL_FILES of a "module"
         - Various tests no longer require a separate .pm file for testing
         - Support v5.6.1 in various tests
         - test static build if $ENV{AUTHOR_TESTING}
         - XS tests now pluggable
         - test for "Perl in Space"

         Doc fixes:
         - better document for PL_FILES, oneliner method
         - FAQ updated
-----------------------------------------------------------------------

Summary of changes:
  MANIFEST | 9 +-
  Porting/Maintainers.pl | 44 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm | 20 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm | 9 +-
  .../ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm | 5 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm | 44 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm | 579 +++++++++-----
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm | 38 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm | 173 ++--
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm | 53 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 881 +++++++++++++--------
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm | 403 +++++++---
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm | 212 +++--
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm | 52 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm | 3 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm | 419 ++++++----
  .../lib/ExtUtils/MakeMaker/Config.pm | 3 +-
  .../lib/ExtUtils/MakeMaker/FAQ.pod | 239 +++++-
  .../lib/ExtUtils/MakeMaker/Locale.pm | 5 +-
  .../lib/ExtUtils/MakeMaker/Tutorial.pod | 3 +-
  .../lib/ExtUtils/MakeMaker/version.pm | 5 +-
  .../lib/ExtUtils/MakeMaker/version/regex.pm | 3 +-
  .../ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm | 21 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm | 5 +-
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm | 3 +-
  cpan/ExtUtils-MakeMaker/t/01perl_bugs.t | 4 +-
  cpan/ExtUtils-MakeMaker/t/02-xsdynamic.t | 23 +
  cpan/ExtUtils-MakeMaker/t/03-xsstatic.t | 27 +
  cpan/ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t | 14 +-
  cpan/ExtUtils-MakeMaker/t/INST.t | 16 +-
  cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t | 23 +-
  cpan/ExtUtils-MakeMaker/t/INST_PREFIX.t | 16 +-
  cpan/ExtUtils-MakeMaker/t/MM_Cygwin.t | 2 +-
  cpan/ExtUtils-MakeMaker/t/MM_NW5.t | 2 -
  cpan/ExtUtils-MakeMaker/t/MM_OS2.t | 2 +-
  cpan/ExtUtils-MakeMaker/t/MM_Unix.t | 8 +-
  cpan/ExtUtils-MakeMaker/t/MM_Win32.t | 23 +-
  cpan/ExtUtils-MakeMaker/t/MakeMaker_Parameters.t | 4 +-
  cpan/ExtUtils-MakeMaker/t/Mkbootstrap.t | 2 +-
  cpan/ExtUtils-MakeMaker/t/PL_FILES.t | 109 ++-
  cpan/ExtUtils-MakeMaker/t/WriteEmptyMakefile.t | 1 +
  cpan/ExtUtils-MakeMaker/t/basic.t | 83 +-
  cpan/ExtUtils-MakeMaker/t/build_man.t | 37 +-
  cpan/ExtUtils-MakeMaker/t/cd.t | 1 +
  cpan/ExtUtils-MakeMaker/t/dir_target.t | 1 +
  cpan/ExtUtils-MakeMaker/t/echo.t | 8 +-
  cpan/ExtUtils-MakeMaker/t/fixin.t | 10 +-
  cpan/ExtUtils-MakeMaker/t/hints.t | 4 +-
  cpan/ExtUtils-MakeMaker/t/installed_file.t | 5 +-
  .../t/lib/MakeMaker/Test/Setup/BFD.pm | 16 +-
  .../t/lib/MakeMaker/Test/Setup/MPV.pm | 67 --
  .../t/lib/MakeMaker/Test/Setup/PL_FILES.pm | 119 ---
  .../t/lib/MakeMaker/Test/Setup/Problem.pm | 62 --
  .../t/lib/MakeMaker/Test/Setup/Recurs.pm | 72 --
  .../t/lib/MakeMaker/Test/Setup/SAS.pm | 67 --
  .../t/lib/MakeMaker/Test/Setup/Unicode.pm | 90 ---
  .../t/lib/MakeMaker/Test/Setup/XS.pm | 385 +++++++--
  .../t/lib/MakeMaker/Test/Utils.pm | 114 ++-
  cpan/ExtUtils-MakeMaker/t/meta_convert.t | 211 +++--
  cpan/ExtUtils-MakeMaker/t/metafile_data.t | 721 ++++-------------
  cpan/ExtUtils-MakeMaker/t/min_perl_version.t | 53 +-
  cpan/ExtUtils-MakeMaker/t/parse_abstract.t | 21 +-
  cpan/ExtUtils-MakeMaker/t/parse_version.t | 29 +
  cpan/ExtUtils-MakeMaker/t/pm_to_blib.t | 12 +-
  cpan/ExtUtils-MakeMaker/t/postamble.t | 7 +-
  cpan/ExtUtils-MakeMaker/t/prereq.t | 78 +-
  cpan/ExtUtils-MakeMaker/t/prereq_print.t | 11 +-
  cpan/ExtUtils-MakeMaker/t/problems.t | 29 +-
  cpan/ExtUtils-MakeMaker/t/prompt.t | 21 +-
  cpan/ExtUtils-MakeMaker/t/recurs.t | 104 ++-
  cpan/ExtUtils-MakeMaker/t/several_authors.t | 57 +-
  cpan/ExtUtils-MakeMaker/t/test_boilerplate.t | 6 +-
  cpan/ExtUtils-MakeMaker/t/unicode.t | 69 +-
  cpan/ExtUtils-MakeMaker/t/vstrings.t | 86 +-
  cpan/ExtUtils-MakeMaker/t/writemakefile_args.t | 8 +-
  cpan/ExtUtils-MakeMaker/t/xs.t | 53 --
  t/porting/customized.dat | 35 -
  86 files changed, 3391 insertions(+), 2895 deletions(-)
  create mode 100644 cpan/ExtUtils-MakeMaker/t/02-xsdynamic.t
  create mode 100644 cpan/ExtUtils-MakeMaker/t/03-xsstatic.t
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/MPV.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/PL_FILES.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/Problem.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/Recurs.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/SAS.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/Unicode.pm
  delete mode 100644 cpan/ExtUtils-MakeMaker/t/xs.t

diff --git a/MANIFEST b/MANIFEST
index cb53872..5e9eb7b 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1089,6 +1089,8 @@ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm MakeMaker user override class
  cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm Fixes up @INC to use just-built extension
  cpan/ExtUtils-MakeMaker/t/00compile.t See if MakeMaker modules compile
  cpan/ExtUtils-MakeMaker/t/01perl_bugs.t
+cpan/ExtUtils-MakeMaker/t/02-xsdynamic.t
+cpan/ExtUtils-MakeMaker/t/03-xsstatic.t
  cpan/ExtUtils-MakeMaker/t/arch_check.t Test MakeMaker's arch_check()
  cpan/ExtUtils-MakeMaker/t/backwards.t Check MakeMaker's backwards compatibility
  cpan/ExtUtils-MakeMaker/t/basic.t See if MakeMaker can build a module
@@ -1111,12 +1113,6 @@ cpan/ExtUtils-MakeMaker/t/is_of_type.t Test for ExtUtils::MakeMaker
  cpan/ExtUtils-MakeMaker/t/Liblist.t See if ExtUtils::Liblist works
  cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm MakeMaker test utilities
  cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm MakeMaker test utilities
-cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/MPV.pm MakeMaker test utilities
-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/Unicode.pm
  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
@@ -1167,7 +1163,6 @@ cpan/ExtUtils-MakeMaker/t/VERSION_FROM.t See if MakeMaker's VERSION_FROM works
  cpan/ExtUtils-MakeMaker/t/vstrings.t
  cpan/ExtUtils-MakeMaker/t/WriteEmptyMakefile.t See if WriteEmptyMakefile works
  cpan/ExtUtils-MakeMaker/t/writemakefile_args.t See if WriteMakefile works
-cpan/ExtUtils-MakeMaker/t/xs.t Part of MakeMaker's test suite
  cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm Utilities to write MANIFEST files
  cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP The default MANIFEST.SKIP
  cpan/ExtUtils-Manifest/t/Manifest.t See if ExtUtils::Manifest works
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index d5d673b..369b3f3 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -464,7 +464,7 @@ use File::Glob qw(:case);
      },

      'ExtUtils::MakeMaker' => {
- 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.10.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.18.tar.gz',
          'FILES' => q[cpan/ExtUtils-MakeMaker],
          'EXCLUDED' => [
              qr{^t/lib/Test/},
@@ -476,48 +476,6 @@ use File::Glob qw(:case);
              'README.packaging',
              'lib/ExtUtils/MakeMaker/version/vpp.pm',
          ],
- # Upstreamed as https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/commit/ede9ea4a
- 'CUSTOMIZED' => [
- qq[lib/ExtUtils/MakeMaker.pm],
- qq[t/prereq.t],
- qq[t/vstrings.t],
- # Upstreamed as https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/commit/dd1e236ab
- qq[lib/ExtUtils/MM_VMS.pm],
- # Not yet submitted
- qq[t/lib/MakeMaker/Test/NoXS.pm],
- # Backported commits from upstream
- qw(lib/ExtUtils/Command/MM.pm
- lib/ExtUtils/Liblist.pm
- lib/ExtUtils/Liblist/Kid.pm
- lib/ExtUtils/MM.pm
- lib/ExtUtils/MM_AIX.pm
- lib/ExtUtils/MM_Any.pm
- lib/ExtUtils/MM_BeOS.pm
- lib/ExtUtils/MM_Cygwin.pm
- lib/ExtUtils/MM_DOS.pm
- lib/ExtUtils/MM_Darwin.pm
- lib/ExtUtils/MM_MacOS.pm
- lib/ExtUtils/MM_NW5.pm
- lib/ExtUtils/MM_OS2.pm
- lib/ExtUtils/MM_QNX.pm
- lib/ExtUtils/MM_UWIN.pm
- lib/ExtUtils/MM_Unix.pm
- lib/ExtUtils/MM_VOS.pm
- lib/ExtUtils/MM_Win32.pm
- lib/ExtUtils/MM_Win95.pm
- lib/ExtUtils/MY.pm
- lib/ExtUtils/MakeMaker/Config.pm
- lib/ExtUtils/MakeMaker/FAQ.pod
- lib/ExtUtils/MakeMaker/Tutorial.pod
- lib/ExtUtils/MakeMaker/version.pm
- lib/ExtUtils/MakeMaker/version/regex.pm
- lib/ExtUtils/Mkbootstrap.pm
- lib/ExtUtils/Mksymlists.pm
- lib/ExtUtils/testlib.pm
- t/cd.t
- t/echo.t
- ),
- ],
      },

      'ExtUtils::Manifest' => {
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
index ba79592..98395d2 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
@@ -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.10';
+$VERSION = '7.18';
  $VERSION = eval $VERSION;

  my $Is_VMS = $^O eq 'VMS';
@@ -347,6 +347,7 @@ sub dos2unix {
   open ORIG, $_ or do { warn "dos2unix can't open $_: $!"; return };
   open TEMP, ">$temp" or
       do { warn "dos2unix can't create .dos2unix_tmp: $!"; return };
+ binmode ORIG; binmode TEMP;
          while (my $line = <ORIG>) {
              $line =~ s/\015\012/\012/g;
              print TEMP $line;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
index 9184471..d9fbb5d 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
@@ -10,14 +10,20 @@ our @ISA = qw(Exporter);

  our @EXPORT = qw(test_harness pod2man perllocal_install uninstall
                    warn_if_old_packlist test_s cp_nonempty);
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  my $Is_VMS = $^O eq 'VMS';

-eval { require Time::HiRes; die unless Time::HiRes->can("stat"); };
-*mtime = $@ ?
- sub { [ stat($_[0])]->[9] } :
- sub { [Time::HiRes::stat($_[0])]->[9] } ;
+sub mtime {
+ no warnings 'redefine';
+ local $@;
+ *mtime = (eval { require Time::HiRes } && defined &Time::HiRes::stat)
+ ? sub { (Time::HiRes::stat($_[0]))[9] }
+ : sub { ( stat($_[0]))[9] }
+ ;
+ goto &mtime;
+}

  =head1 NAME

@@ -213,8 +219,8 @@ sub perllocal_install {
                             : @ARGV;

      my $pod;
- $pod = sprintf <<POD, scalar localtime;
- =head2 %s: C<$type> L<$name|$name>
+ $pod = sprintf <<'POD', scalar(localtime), $type, $name, $name;
+ =head2 %s: C<%s> L<%s|%s>

   =over 4

diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
index 3bb49d2..56fc355 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
@@ -2,7 +2,8 @@ package ExtUtils::Liblist;

  use strict;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  use File::Spec;
  require ExtUtils::Liblist::Kid;
@@ -16,9 +17,9 @@ sub ext {
  sub lsdir {
    shift;
    my $rex = qr/$_[1]/;
- opendir DIR, $_[0];
- my @out = grep /$rex/, readdir DIR;
- closedir DIR;
+ opendir my $dir_fh, $_[0];
+ my @out = grep /$rex/, readdir $dir_fh;
+ closedir $dir_fh;
    return @out;
  }

diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
index 43d554e..23708e2 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
@@ -11,7 +11,8 @@ use 5.006;

  use strict;
  use warnings;
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  use ExtUtils::MakeMaker::Config;
  use Cwd 'cwd';
@@ -337,7 +338,7 @@ sub _win32_ext {
          $libs_seen{$fullname} = 1 if $path; # why is this a special case?
      }

- my @libs = keys %libs_seen;
+ my @libs = sort keys %libs_seen;

      return ( '', '', '', '', ( $give_libs ? \@libs : () ) ) unless @extralibs;

diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
index fa5f72c..0b2835c 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
@@ -3,7 +3,8 @@ package ExtUtils::MM;
  use strict;
  use ExtUtils::MakeMaker::Config;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  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 ec3a2fc..0db269b 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
@@ -1,14 +1,12 @@
  package ExtUtils::MM_AIX;

  use strict;
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  require ExtUtils::MM_Unix;
  our @ISA = qw(ExtUtils::MM_Unix);

-use ExtUtils::MakeMaker qw(neatvalue);
-
-
  =head1 NAME

  ExtUtils::MM_AIX - AIX specific subclass of ExtUtils::MM_Unix
@@ -35,36 +33,26 @@ 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);
+}

- return '' unless $self->needs_linking();
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my(@m);
-
- push(@m,"
-dynamic :: $self->{BASEEXT}.exp
-
-") unless $self->{SKIPHASH}{'dynamic'}; # dynamic and static are subs, so...
-
- push(@m,"
-static :: $self->{BASEEXT}.exp
+=head3 xs_dlsyms_ext

-") unless $self->{SKIPHASH}{'static'}; # we avoid a warning if we tick them
+On AIX, is C<.exp>.

- push(@m,"
-$self->{BASEEXT}.exp: Makefile.PL
-",' $(PERLRUN) -e \'use ExtUtils::Mksymlists; \\
- Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
- neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
- ', "DL_VARS" => ', neatvalue($vars), ');\'
-');
+=cut

- join('',@m);
+sub xs_dlsyms_ext {
+ '.exp';
  }

-
  =head1 AUTHOR

  Michael G Schwern <schwern@pobox.com> with code from ExtUtils::MM_Unix
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
index 129ad9e..7320aee 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
@@ -1,7 +1,8 @@
  package ExtUtils::MM_Any;

  use strict;
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  use Carp;
  use File::Spec;
@@ -9,7 +10,7 @@ use File::Basename;
  BEGIN { our @ISA = qw(File::Spec); }

  # We need $Verbose
-use ExtUtils::MakeMaker qw($Verbose);
+use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562);

  use ExtUtils::MakeMaker::Config;

@@ -17,9 +18,10 @@ use ExtUtils::MakeMaker::Config;
  # So we don't have to keep calling the methods over and over again,
  # we have these globals to cache the values. Faster and shrtr.
  my $Curdir = __PACKAGE__->curdir;
-my $Rootdir = __PACKAGE__->rootdir;
-my $Updir = __PACKAGE__->updir;
+#my $Updir = __PACKAGE__->updir;

+my $METASPEC_URL = 'https://metacpan.org/pod/CPAN::Meta::Spec';
+my $METASPEC_V = 2;

  =head1 NAME

@@ -348,6 +350,34 @@ sub _expand_macros {
  }


+=head3 make_type
+
+Returns a suitable string describing the type of makefile being written.
+
+=cut
+
+# override if this isn't suitable!
+sub make_type { return 'Unix-style'; }
+
+
+=head3 stashmeta
+
+ my @recipelines = $MM->stashmeta($text, $file);
+
+Generates a set of C<@recipelines> which will result in the literal
+C<$text> ending up in literal C<$file> when the recipe is executed. Call
+it once, with all the text you want in C<$file>. Make macros will not
+be expanded, so the locations will be fixed at configure-time, not
+at build-time.
+
+=cut
+
+sub stashmeta {
+ my($self, $text, $file) = @_;
+ $self->echo($text, $file, { allow_variables => 0, append => 0 });
+}
+
+
  =head3 echo

      my @commands = $MM->echo($text);
@@ -367,7 +397,7 @@ all C<$>.

  Example of use:

- my $make = map "\t$_\n", $MM->echo($text, $file);
+ my $make = join '', map "\t$_\n", $MM->echo($text, $file);

  =cut

@@ -480,13 +510,14 @@ Usage might be something like:
      $oneliner = $MM->oneliner('print "Foo\n"');
      $make = '$oneliner > somefile';

-All dollar signs must be doubled in the $perl_code if you expect them
-to be interpreted normally, otherwise it will be considered a make
-macro. Also remember to quote make macros else it might be used as a
-bareword. For example:
+Dollar signs in the $perl_code will be protected from make using the
+C<quote_literal> method, unless they are recognised as being a make
+variable, C<$(varname)>, in which case they will be left for make
+to expand. Remember to quote make macros else it might be used as a
+bareword. For example:

      # Assign the value of the $(VERSION_FROM) make macro to $vf.
- $oneliner = $MM->oneliner('$$vf = "$(VERSION_FROM)"');
+ $oneliner = $MM->oneliner('$vf = "$(VERSION_FROM)"');

  Its currently very simple and may be expanded sometime in the figure
  to include more flexible code and switches.
@@ -620,6 +651,11 @@ The blibdirs.ts target is deprecated. Depend on blibdirs instead.

  =cut

+sub _xs_list_basenames {
+ my ($self) = @_;
+ map { (my $b = $_) =~ s/\.xs$//; $b } sort keys %{ $self->{XS} };
+}
+
  sub blibdirs_target {
      my $self = shift;

@@ -628,6 +664,14 @@ sub blibdirs_target {
                                             bin script
                                             man1dir man3dir
                                            );
+ if ($self->{XSMULTI}) {
+ for my $ext ($self->_xs_list_basenames) {
+ my ($v, $d, $f) = File::Spec->splitpath($ext);
+ my @d = File::Spec->splitdir($d);
+ shift @d if $d[0] eq 'lib';
+ push @dirs, $self->catdir('$(INST_ARCHLIB)', 'auto', @d, $f);
+ }
+ }

      my @exists = map { $_.'$(DFSEP).exists' } @dirs;

@@ -666,6 +710,10 @@ clean :: clean_subdirs
  ');

      my @files = sort values %{$self->{XS}}; # .c files from *.xs files
+ push @files, map {
+ my $file = $_;
+ map { $file.$_ } $self->{OBJ_EXT}, qw(.def _def.old .bs .bso .exp .base);
+ } $self->_xs_list_basenames;
      my @dirs = qw(blib);

      # Normally these are all under blib but they might have been
@@ -862,6 +910,110 @@ MAKE_FRAG
  }


+=head3 xs_dlsyms_ext
+
+Returns file-extension for C<xs_make_dlsyms> method's output file,
+including any "." character.
+
+=cut
+
+sub xs_dlsyms_ext {
+ die "Pure virtual method";
+}
+
+=head3 xs_dlsyms_extra
+
+Returns any extra text to be prepended to the C<$extra> argument of
+C<xs_make_dlsyms>.
+
+=cut
+
+sub xs_dlsyms_extra {
+ '';
+}
+
+=head3 xs_dlsyms_iterator
+
+Iterates over necessary shared objects, calling C<xs_make_dlsyms> method
+for each with appropriate arguments.
+
+=cut
+
+sub xs_dlsyms_iterator {
+ my ($self, $attribs) = @_;
+ if ($self->{XSMULTI}) {
+ my @m;
+ for my $ext ($self->_xs_list_basenames) {
+ my @parts = File::Spec->splitdir($ext);
+ shift @parts if $parts[0] eq 'lib';
+ my $name = join '::', @parts;
+ push @m, $self->xs_make_dlsyms(
+ $attribs,
+ $ext . $self->xs_dlsyms_ext,
+ "$ext.xs",
+ $name,
+ $parts[-1],
+ {}, [], {}, [],
+ $self->xs_dlsyms_extra . q!, 'FILE' => ! . neatvalue($ext),
+ );
+ }
+ return join "\n", @m;
+ } else {
+ return $self->xs_make_dlsyms(
+ $attribs,
+ $self->{BASEEXT} . $self->xs_dlsyms_ext,
+ 'Makefile.PL',
+ $self->{NAME},
+ $self->{DLBASE},
+ $attribs->{DL_FUNCS} || $self->{DL_FUNCS} || {},
+ $attribs->{FUNCLIST} || $self->{FUNCLIST} || [],
+ $attribs->{IMPORTS} || $self->{IMPORTS} || {},
+ $attribs->{DL_VARS} || $self->{DL_VARS} || [],
+ $self->xs_dlsyms_extra,
+ );
+ }
+}
+
+=head3 xs_make_dlsyms
+
+ $self->xs_make_dlsyms(
+ \%attribs, # hashref from %attribs in caller
+ "$self->{BASEEXT}.def", # output file for Makefile target
+ 'Makefile.PL', # dependency
+ $self->{NAME}, # shared object's "name"
+ $self->{DLBASE}, # last ::-separated part of name
+ $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {}, # various params
+ $attribs{FUNCLIST} || $self->{FUNCLIST} || [],
+ $attribs{IMPORTS} || $self->{IMPORTS} || {},
+ $attribs{DL_VARS} || $self->{DL_VARS} || [],
+ # optional extra param that will be added as param to Mksymlists
+ );
+
+Utility method that returns Makefile snippet to call C<Mksymlists>.
+
+=cut
+
+sub xs_make_dlsyms {
+ my ($self, $attribs, $target, $dep, $name, $dlbase, $funcs, $funclist, $imports, $vars, $extra) = @_;
+ my @m = (
+ "\n$target: $dep\n",
+ q! $(PERLRUN) -MExtUtils::Mksymlists \\
+ -e "Mksymlists('NAME'=>\"!, $name,
+ q!\", 'DLBASE' => '!,$dlbase,
+ # The above two lines quoted differently to work around
+ # a bug in the 4DOS/4NT command line interpreter. The visible
+ # result of the bug was files named q('extension_name',) *with the
+ # single quotes and the comma* in the extension build directories.
+ q!', 'DL_FUNCS' => !,neatvalue($funcs),
+ q!, 'FUNCLIST' => !,neatvalue($funclist),
+ q!, 'IMPORTS' => !,neatvalue($imports),
+ q!, 'DL_VARS' => !, neatvalue($vars)
+ );
+ push @m, $extra if defined $extra;
+ push @m, qq!);"\n!;
+ join '', @m;
+}
+
  =head3 dynamic (o)

  Defines the dynamic target.
@@ -873,7 +1025,7 @@ sub dynamic {

      my($self) = shift;
      '
-dynamic :: $(FIRST_MAKEFILE) $(BOOTSTRAP) $(INST_DYNAMIC)
+dynamic :: $(FIRST_MAKEFILE) config $(INST_BOOT) $(INST_DYNAMIC)
   $(NOECHO) $(NOOP)
  ';
  }
@@ -921,14 +1073,14 @@ sub manifypods_target {
      }

      my $manify = <<END;
-manifypods : pure_all $dependencies
+manifypods : pure_all config $dependencies
  END

      my @man_cmds;
      foreach my $section (qw(1 3)) {
          my $pods = $self->{"MAN${section}PODS"};
- my $p2m = sprintf <<CMD, $] > 5.008 ? " -u" : "";
- \$(NOECHO) \$(POD2MAN) --section=$section --perm_rw=\$(PERM_RW)%s
+ my $p2m = sprintf <<'CMD', $section, $] > 5.008 ? " -u" : "";
+ $(NOECHO) $(POD2MAN) --section=%s --perm_rw=$(PERM_RW)%s
  CMD
          push @man_cmds, $self->split_command($p2m, map {($_,$pods->{$_})} sort keys %$pods);
      }
@@ -939,12 +1091,16 @@ CMD
      return $manify;
  }

-sub _has_cpan_meta {
- return eval {
- require CPAN::Meta;
- CPAN::Meta->VERSION(2.112150);
- 1;
- };
+{
+ my $has_cpan_meta;
+ sub _has_cpan_meta {
+ return $has_cpan_meta if defined $has_cpan_meta;
+ return $has_cpan_meta = !!eval {
+ require CPAN::Meta;
+ CPAN::Meta->VERSION(2.112150);
+ 1;
+ };
+ }
  }

  =head3 metafile_target
@@ -966,34 +1122,18 @@ metafile :
   $(NOECHO) $(NOOP)
  MAKE_FRAG

- my %metadata = $self->metafile_data(
+ my $metadata = $self->metafile_data(
          $self->{META_ADD} || {},
          $self->{META_MERGE} || {},
      );

- _fix_metadata_before_conversion( \%metadata );
-
- # paper over validation issues, but still complain, necessary because
- # there's no guarantee that the above will fix ALL errors
- my $meta = eval { CPAN::Meta->create( \%metadata, { lazy_validation => 1 } ) };
- warn $@ if $@ and
- $@ !~ /encountered CODE.*, but JSON can only represent references to arrays or hashes/;
+ my $meta = $self->_fix_metadata_before_conversion( $metadata );

- # use the original metadata straight if the conversion failed
- # or if it can't be stringified.
- if( !$meta ||
- !eval { $meta->as_string( { version => "1.4" } ) } ||
- !eval { $meta->as_string }
- )
- {
- $meta = bless \%metadata, 'CPAN::Meta';
- }
-
- my @write_metayml = $self->echo(
+ my @write_metayml = $self->stashmeta(
        $meta->as_string({version => "1.4"}), 'META_new.yml'
      );
- my @write_metajson = $self->echo(
- $meta->as_string(), 'META_new.json'
+ my @write_metajson = $self->stashmeta(
+ $meta->as_string({version => "2.0"}), 'META_new.json'
      );

      my $metayml = join("\n\t", @write_metayml);
@@ -1014,7 +1154,7 @@ MAKE_FRAG

  =head3 _fix_metadata_before_conversion

- _fix_metadata_before_conversion( \%metadata );
+ $mm->_fix_metadata_before_conversion( \%metadata );

  Fixes errors in the metadata before it's handed off to CPAN::Meta for
  conversion. This hopefully results in something that can be used further
@@ -1025,7 +1165,7 @@ on, no guarantee is made though.
  =cut

  sub _fix_metadata_before_conversion {
- my ( $metadata ) = @_;
+ my ( $self, $metadata ) = @_;

      # we should never be called unless this already passed but
      # prefer to be defensive in case somebody else calls this
@@ -1034,18 +1174,24 @@ sub _fix_metadata_before_conversion {

      my $bad_version = $metadata->{version} &&
                        !CPAN::Meta::Validator->new->version( 'version', $metadata->{version} );
-
      # just delete all invalid versions
      if( $bad_version ) {
          warn "Can't parse version '$metadata->{version}'\n";
          $metadata->{version} = '';
      }

- my $validator = CPAN::Meta::Validator->new( $metadata );
- return if $validator->is_valid;
-
+ my $validator2 = CPAN::Meta::Validator->new( $metadata );
+ my @errors;
+ push @errors, $validator2->errors if !$validator2->is_valid;
+ my $validator14 = CPAN::Meta::Validator->new(
+ {
+ %$metadata,
+ 'meta-spec' => { version => 1.4 },
+ }
+ );
+ push @errors, $validator14->errors if !$validator14->is_valid;
      # fix non-camelcase custom resource keys (only other trick we know)
- for my $error ( $validator->errors ) {
+ for my $error ( @errors ) {
          my ( $key ) = ( $error =~ /Custom resource '(.*)' must be in CamelCase./ );
          next if !$key;

@@ -1053,17 +1199,39 @@ sub _fix_metadata_before_conversion {
          ( my $new_key = $key ) =~ s/[^_a-zA-Z]//g;

          # if that doesn't work, uppercase first one
- $new_key = ucfirst $new_key if !$validator->custom_1( $new_key );
+ $new_key = ucfirst $new_key if !$validator14->custom_1( $new_key );

          # copy to new key if that worked
          $metadata->{resources}{$new_key} = $metadata->{resources}{$key}
- if $validator->custom_1( $new_key );
+ if $validator14->custom_1( $new_key );

          # and delete old one in any case
          delete $metadata->{resources}{$key};
      }

- return;
+ # paper over validation issues, but still complain, necessary because
+ # there's no guarantee that the above will fix ALL errors
+ my $meta = eval { CPAN::Meta->create( $metadata, { lazy_validation => 1 } ) };
+ warn $@ if $@ and
+ $@ !~ /encountered CODE.*, but JSON can only represent references to arrays or hashes/;
+
+ # use the original metadata straight if the conversion failed
+ # or if it can't be stringified.
+ if( !$meta ||
+ !eval { $meta->as_string( { version => $METASPEC_V } ) } ||
+ !eval { $meta->as_string }
+ ) {
+ $meta = bless $metadata, 'CPAN::Meta';
+ }
+
+ my $now_license = $meta->as_struct({ version => 2 })->{license};
+ if ($self->{LICENSE} and $self->{LICENSE} ne 'unknown' and
+ @{$now_license} == 1 and $now_license->[0] eq 'unknown'
+ ) {
+ warn "Invalid LICENSE value '$self->{LICENSE}' ignored\n";
+ }
+
+ $meta;
  }


@@ -1104,10 +1272,10 @@ sub _hash_merge {

  =head3 metafile_data

- my @metadata_pairs = $mm->metafile_data(\%meta_add, \%meta_merge);
+ my $metadata_hashref = $mm->metafile_data(\%meta_add, \%meta_merge);

  Returns the data which MakeMaker turns into the META.yml file
-and the META.json file.
+and the META.json file. It is always in version 2.0 of the format.

  Values of %meta_add will overwrite any existing metadata in those
  keys. %meta_merge will be merged with them.
@@ -1118,48 +1286,59 @@ sub metafile_data {
      my $self = shift;
      my($meta_add, $meta_merge) = @_;

+ $meta_add ||= {};
+ $meta_merge ||= {};
+
+ my $version = _normalize_version($self->{VERSION});
+ my $release_status = ($version =~ /_/) ? 'unstable' : 'stable';
      my %meta = (
          # required
- name => $self->{DISTNAME},
- version => _normalize_version($self->{VERSION}),
          abstract => $self->{ABSTRACT} || 'unknown',
- license => $self->{LICENSE} || 'unknown',
+ author => defined($self->{AUTHOR}) ? $self->{AUTHOR} : ['unknown'],
          dynamic_config => 1,
-
- # optional
- distribution_type => $self->{PM} ? 'module' : 'script',
-
- no_index => {
- directory => [qw(t inc)]
- },
-
          generated_by => "ExtUtils::MakeMaker version $ExtUtils::MakeMaker::VERSION",
+ license => [ $self->{LICENSE} || 'unknown' ],
          'meta-spec' => {
- url => 'http://module-build.sourceforge.net/META-spec-v1.4.html',
- version => 1.4
+ url => $METASPEC_URL,
+ version => $METASPEC_V,
          },
+ name => $self->{DISTNAME},
+ release_status => $release_status,
+ version => $version,
+
+ # optional
+ no_index => { directory => [qw(t inc)] },
      );
+ $self->_add_requirements_to_meta(\%meta);

- # The author key is required and it takes a list.
- $meta{author} = defined $self->{AUTHOR} ? $self->{AUTHOR} : [];
+ if (!eval { require JSON::PP; require CPAN::Meta::Converter; CPAN::Meta::Converter->VERSION(2.141170) }) {
+ return \%meta;
+ }

- {
- my $vers = _metaspec_version( $meta_add, $meta_merge );
- my $method = $vers =~ m!^2!
- ? '_add_requirements_to_meta_v2'
- : '_add_requirements_to_meta_v1_4';
- %meta = $self->$method( %meta );
+ # needs to be based on the original version
+ my $v1_add = _metaspec_version($meta_add) !~ /^2/;
+
+ for my $frag ($meta_add, $meta_merge) {
+ $frag = CPAN::Meta::Converter->new($frag, default_version => "1.4")->upgrade_fragment;
      }

+ # if we upgraded a 1.x _ADD fragment, we gave it a prereqs key that
+ # will override all prereqs, which is more than the user asked for;
+ # instead, we'll go inside the prereqs and override all those
      while( my($key, $val) = each %$meta_add ) {
- $meta{$key} = $val;
+ if ($v1_add and $key eq 'prereqs') {
+ $meta{$key}{$_} = $val->{$_} for keys %$val;
+ } elsif ($key ne 'meta-spec') {
+ $meta{$key} = $val;
+ }
      }

      while( my($key, $val) = each %$meta_merge ) {
+ next if $key eq 'meta-spec';
          $self->_hash_merge(\%meta, $key, $val);
      }

- return %meta;
+ return \%meta;
  }


@@ -1167,84 +1346,61 @@ sub metafile_data {

  =cut

+sub _add_requirements_to_meta {
+ my ( $self, $meta ) = @_;
+ # Check the original args so we can tell between the user setting it
+ # to an empty hash and it just being initialized.
+ $meta->{prereqs}{configure}{requires} = $self->{ARGS}{CONFIGURE_REQUIRES}
+ ? $self->{CONFIGURE_REQUIRES}
+ : { 'ExtUtils::MakeMaker' => 0, };
+ $meta->{prereqs}{build}{requires} = $self->{ARGS}{BUILD_REQUIRES}
+ ? $self->{BUILD_REQUIRES}
+ : { 'ExtUtils::MakeMaker' => 0, };
+ $meta->{prereqs}{test}{requires} = $self->{TEST_REQUIRES}
+ if $self->{ARGS}{TEST_REQUIRES};
+ $meta->{prereqs}{runtime}{requires} = $self->{PREREQ_PM}
+ if $self->{ARGS}{PREREQ_PM};
+ $meta->{prereqs}{runtime}{requires}{perl} = _normalize_version($self->{MIN_PERL_VERSION})
+ if $self->{MIN_PERL_VERSION};
+}
+
+# spec version of given fragment - if not given, assume 1.4
  sub _metaspec_version {
- my ( $meta_add, $meta_merge ) = @_;
- return $meta_add->{'meta-spec'}->{version}
- if defined $meta_add->{'meta-spec'}
- and defined $meta_add->{'meta-spec'}->{version};
- return $meta_merge->{'meta-spec'}->{version}
- if defined $meta_merge->{'meta-spec'}
- and defined $meta_merge->{'meta-spec'}->{version};
+ my ( $meta ) = @_;
+ return $meta->{'meta-spec'}->{version}
+ if defined $meta->{'meta-spec'}
+ and defined $meta->{'meta-spec'}->{version};
    return '1.4';
  }

  sub _add_requirements_to_meta_v1_4 {
- my ( $self, %meta ) = @_;
-
+ my ( $self, $meta ) = @_;
      # Check the original args so we can tell between the user setting it
      # to an empty hash and it just being initialized.
      if( $self->{ARGS}{CONFIGURE_REQUIRES} ) {
- $meta{configure_requires} = $self->{CONFIGURE_REQUIRES};
+ $meta->{configure_requires} = $self->{CONFIGURE_REQUIRES};
      } else {
- $meta{configure_requires} = {
+ $meta->{configure_requires} = {
              'ExtUtils::MakeMaker' => 0,
          };
      }
-
      if( $self->{ARGS}{BUILD_REQUIRES} ) {
- $meta{build_requires} = $self->{BUILD_REQUIRES};
+ $meta->{build_requires} = $self->{BUILD_REQUIRES};
      } else {
- $meta{build_requires} = {
+ $meta->{build_requires} = {
              'ExtUtils::MakeMaker' => 0,
          };
      }
-
      if( $self->{ARGS}{TEST_REQUIRES} ) {
- $meta{build_requires} = {
- %{ $meta{build_requires} },
+ $meta->{build_requires} = {
+ %{ $meta->{build_requires} },
            %{ $self->{TEST_REQUIRES} },
          };
      }
-
- $meta{requires} = $self->{PREREQ_PM}
+ $meta->{requires} = $self->{PREREQ_PM}
          if defined $self->{PREREQ_PM};
- $meta{requires}{perl} = _normalize_version($self->{MIN_PERL_VERSION})
+ $meta->{requires}{perl} = _normalize_version($self->{MIN_PERL_VERSION})
          if $self->{MIN_PERL_VERSION};
-
- return %meta;
-}
-
-sub _add_requirements_to_meta_v2 {
- my ( $self, %meta ) = @_;
-
- # Check the original args so we can tell between the user setting it
- # to an empty hash and it just being initialized.
- if( $self->{ARGS}{CONFIGURE_REQUIRES} ) {
- $meta{prereqs}{configure}{requires} = $self->{CONFIGURE_REQUIRES};
- } else {
- $meta{prereqs}{configure}{requires} = {
- 'ExtUtils::MakeMaker' => 0,
- };
- }
-
- if( $self->{ARGS}{BUILD_REQUIRES} ) {
- $meta{prereqs}{build}{requires} = $self->{BUILD_REQUIRES};
- } else {
- $meta{prereqs}{build}{requires} = {
- 'ExtUtils::MakeMaker' => 0,
- };
- }
-
- if( $self->{ARGS}{TEST_REQUIRES} ) {
- $meta{prereqs}{test}{requires} = $self->{TEST_REQUIRES};
- }
-
- $meta{prereqs}{runtime}{requires} = $self->{PREREQ_PM}
- if $self->{ARGS}{PREREQ_PM};
- $meta{prereqs}{runtime}{requires}{perl} = _normalize_version($self->{MIN_PERL_VERSION})
- if $self->{MIN_PERL_VERSION};
-
- return %meta;
  }

  # Adapted from Module::Build::Base
@@ -1253,7 +1409,7 @@ sub _normalize_version {
    $version = 0 unless defined $version;

    if ( ref $version eq 'version' ) { # version objects
- $version = $version->is_qv ? $version->normal : $version->stringify;
+ $version = $version->stringify;
    }
    elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots
      # normalize string tuples without "v": "1.2.3" -> "v1.2.3"
@@ -1426,12 +1582,12 @@ sub distmeta_target {
        $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']),
  exit unless -e q{META.yml};
  eval { maniadd({q{META.yml} => q{Module YAML meta-data (added by MakeMaker)}}) }
- or print "Could not add META.yml to MANIFEST: $${'@'}\n"
+ or die "Could not add META.yml to MANIFEST: ${'@'}"
  CODE
        $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd'])
  exit unless -f q{META.json};
  eval { maniadd({q{META.json} => q{Module JSON meta-data (added by MakeMaker)}}) }
- or print "Could not add META.json to MANIFEST: $${'@'}\n"
+ or die "Could not add META.json to MANIFEST: ${'@'}"
  CODE
      );

@@ -1464,21 +1620,15 @@ sub mymeta {
      my $v2 = 1;

      unless ( $mymeta ) {
- my @metadata = $self->metafile_data(
+ $mymeta = $self->metafile_data(
              $self->{META_ADD} || {},
              $self->{META_MERGE} || {},
          );
- $mymeta = {@metadata};
          $v2 = 0;
      }

      # Overwrite the non-configure dependency hashes
-
- my $method = $v2
- ? '_add_requirements_to_meta_v2'
- : '_add_requirements_to_meta_v1_4';
-
- $mymeta = { $self->$method( %$mymeta ) };
+ $self->_add_requirements_to_meta($mymeta);

      $mymeta->{dynamic_config} = 0;

@@ -1530,13 +1680,9 @@ sub write_mymeta {

      return unless _has_cpan_meta();

- _fix_metadata_before_conversion( $mymeta );
+ my $meta_obj = $self->_fix_metadata_before_conversion( $mymeta );

- # this can still blow up
- # not sure if i should just eval this and skip file creation if it
- # blows up
- my $meta_obj = CPAN::Meta->new( $mymeta, { lazy_validation => 1 } );
- $meta_obj->save( 'MYMETA.json' );
+ $meta_obj->save( 'MYMETA.json', { version => "2.0" } );
      $meta_obj->save( 'MYMETA.yml', { version => "1.4" } );
      return 1;
  }
@@ -1574,8 +1720,8 @@ sub realclean {
      }

      # Occasionally files are repeated several times from different sources
- { my(%f) = map { ($_ => 1) } @files; @files = keys %f; }
- { my(%d) = map { ($_ => 1) } @dirs; @dirs = keys %d; }
+ { my(%f) = map { ($_ => 1) } @files; @files = sort keys %f; }
+ { my(%d) = map { ($_ => 1) } @dirs; @dirs = sort keys %d; }

      my $rm_cmd = join "\n\t", map { "$_" }
                      $self->split_command('- $(RM_F)', @files);
@@ -1584,7 +1730,7 @@ sub realclean {

      my $m = sprintf <<'MAKE', $rm_cmd, $rmf_cmd;
  # Delete temporary files (via clean) and also delete dist files
-realclean purge :: clean realclean_subdirs
+realclean purge :: realclean_subdirs
   %s
   %s
  MAKE
@@ -1606,28 +1752,20 @@ target to call realclean on any subdirectories which contain Makefiles.

  sub realclean_subdirs_target {
      my $self = shift;
-
- return <<'NOOP_FRAG' unless @{$self->{DIR}};
-realclean_subdirs :
- $(NOECHO) $(NOOP)
-NOOP_FRAG
-
- my $rclean = "realclean_subdirs :\n";
-
+ my @m = <<'EOF';
+# so clean is forced to complete before realclean_subdirs runs
+realclean_subdirs : clean
+EOF
+ return join '', @m, "\t\$(NOECHO) \$(NOOP)\n" unless @{$self->{DIR}};
      foreach my $dir (@{$self->{DIR}}) {
          foreach my $makefile ('$(MAKEFILE_OLD)', '$(FIRST_MAKEFILE)' ) {
- my $subrclean .= $self->oneliner(sprintf <<'CODE', $dir, ($makefile) x 2);
-chdir '%s'; system '$(MAKE) $(USEMAKEFILE) %s realclean' if -f '%s';
+ my $subrclean .= $self->oneliner(_sprintf562 <<'CODE', $dir, $makefile);
+chdir '%1$s'; system '$(MAKE) $(USEMAKEFILE) %2$s realclean' if -f '%2$s';
  CODE
-
- $rclean .= sprintf <<'RCLEAN', $subrclean;
- - %s
-RCLEAN
-
+ push @m, "\t- $subrclean\n";
          }
      }
-
- return $rclean;
+ return join '', @m;
  }


@@ -1666,7 +1804,7 @@ sub distsignature_target {

      my $add_sign = $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']);
  eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) }
- or print "Could not add SIGNATURE to MANIFEST: $${'@'}\n"
+ or die "Could not add SIGNATURE to MANIFEST: ${'@'}"
  CODE

      my $sign_dist = $self->cd('$(DISTVNAME)' => 'cpansign -s');
@@ -1700,7 +1838,7 @@ sub special_targets {
      my $make_frag = <<'MAKE_FRAG';
  .SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)

-.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir pure_all subdirs clean_subdirs makemakerdflt manifypods realclean_subdirs subdirs_dynamic subdirs_pur ... [89 chars truncated]

  MAKE_FRAG

@@ -2291,7 +2429,7 @@ sub init_others {
      if ( $self->{OBJECT} ) {
          $self->{OBJECT} = join(" ", @{$self->{OBJECT}}) if ref $self->{OBJECT};
          $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g;
- } elsif ( $self->{MAGICXS} && @{$self->{O_FILES}||[]} ) {
+ } elsif ( ($self->{MAGICXS} || $self->{XSMULTI}) && @{$self->{O_FILES}||[]} ) {
          $self->{OBJECT} = join(" ", @{$self->{O_FILES}});
          $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g;
      } else {
@@ -2659,38 +2797,50 @@ sub find_tests {
    my $tests = $mm->find_tests_recursive;

  Returns a string suitable for feeding to the shell to return all
-tests in t/ but recursively.
+tests in t/ but recursively. Equivalent to
+
+ my $tests = $mm->find_tests_recursive_in('t');

  =cut

  sub find_tests_recursive {
- my($self) = shift;
- return '' unless -d 't';
+ my $self = shift;
+ return $self->find_tests_recursive_in('t');
+}
+
+=head3 find_tests_recursive_in
+
+ my $tests = $mm->find_tests_recursive_in($dir);
+
+Returns a string suitable for feeding to the shell to return all
+tests in $dir recursively.
+
+=cut
+
+sub find_tests_recursive_in {
+ my($self, $dir) = @_;
+ return '' unless -d $dir;

      require File::Find;

- my %testfiles;
+ my $base_depth = grep { $_ ne '' } File::Spec->splitdir( (File::Spec->splitpath($dir))[1] );
+ my %depths;

      my $wanted = sub {
          return unless m!\.t$!;
          my ($volume,$directories,$file) =
              File::Spec->splitpath( $File::Find::name );
- my @dirs = File::Spec->splitdir( $directories );
- for ( @dirs ) {
- next if $_ eq 't';
- unless ( $_ ) {
- $_ = '*.t';
- next;
- }
- $_ = '*';
- }
- my $testfile = join '/', @dirs;
- $testfiles{ $testfile } = 1;
+ my $depth = grep { $_ ne '' } File::Spec->splitdir( $directories );
+ $depth -= $base_depth;
+ $depths{ $depth } = 1;
      };

- File::Find::find( $wanted, 't' );
+ File::Find::find( $wanted, $dir );

- return join ' ', sort keys %testfiles;
+ return join ' ',
+ map { $dir . '/*' x $_ . '.t' }
+ sort { $a <=> $b }
+ keys %depths;
  }

  =head3 extra_clean_files
@@ -2764,6 +2914,39 @@ sub platform_constants {
      return '';
  }

+=head3 post_constants (o)
+
+Returns an empty string per default. Dedicated to overrides from
+within Makefile.PL after all constants have been defined.
+
+=cut
+
+sub post_constants {
+ "";
+}
+
+=head3 post_initialize (o)
+
+Returns an empty string per default. Used in Makefile.PLs to add some
+chunk of text to the Makefile after the object is initialized.
+
+=cut
+
+sub post_initialize {
+ "";
+}
+
+=head3 postamble (o)
+
+Returns an empty string. Can be used in Makefile.PLs to write some
+text to the Makefile at the end.
+
+=cut
+
+sub postamble {
+ "";
+}
+
  =begin private

  =head3 _PREREQ_PRINT
@@ -2799,7 +2982,7 @@ sub _PREREQ_PRINT {
  Implements PRINT_PREREQ, a slightly different version of PREREQ_PRINT
  added by Redhat to, I think, support generating RPMs from Perl modules.

-Should not include BUILD_REQUIRES as RPMs do not incluide them.
+Should not include BUILD_REQUIRES as RPMs do not include them.

  Refactored out of MakeMaker->new().

@@ -2825,24 +3008,6 @@ sub _PRINT_PREREQ {

  =begin private

-=head3 _all_prereqs
-
- my $prereqs = $self->_all_prereqs;
-
-Returns a hash ref of both PREREQ_PM and BUILD_REQUIRES.
-
-=end private
-
-=cut
-
-sub _all_prereqs {
- my $self = shift;
-
- return { %{$self->{PREREQ_PM}}, %{$self->{BUILD_REQUIRES}} };
-}
-
-=begin private
-
  =head3 _perl_header_files

    my $perl_header_files= $self->_perl_header_files;
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
index 801b035..1a910d9 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
@@ -26,7 +26,8 @@ require ExtUtils::MM_Any;
  require ExtUtils::MM_Unix;

  our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;


  =item os_flavor
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
index a9331ff..e8e9d3d 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
@@ -9,7 +9,8 @@ require ExtUtils::MM_Unix;
  require ExtUtils::MM_Win32;
  our @ISA = qw( ExtUtils::MM_Unix );

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;


  =head1 NAME
@@ -129,16 +130,31 @@ But for new archdir dll's use the same rebase address if the old exists.
  sub dynamic_lib {
      my($self, %attribs) = @_;
      my $s = ExtUtils::MM_Unix::dynamic_lib($self, %attribs);
- my $ori = "$self->{INSTALLARCHLIB}/auto/$self->{FULLEXT}/$self->{BASEEXT}.$self->{DLEXT}";
- if (-e $ori) {
- my $imagebase = `/bin/objdump -p $ori | /bin/grep ImageBase | /bin/cut -c12-`;
- chomp $imagebase;
- if ($imagebase gt "40000000") {
- my $LDDLFLAGS = $self->{LDDLFLAGS};
- $LDDLFLAGS =~ s/-Wl,--enable-auto-image-base/-Wl,--image-base=0x$imagebase/;
- $s =~ s/ \$\(LDDLFLAGS\) / $LDDLFLAGS /m;
- }
- }
+ return '' unless $s;
+ return $s unless %{$self->{XS}};
+
+ # do an ephemeral rebase so the new DLL fits to the current rebase map
+ $s .= "\t/bin/find \$\(INST_ARCHLIB\)/auto -xdev -name \\*.$self->{DLEXT} | /bin/rebase -sOT -" if (( $Config{myarchname} eq 'i686-cygwin' ) and not ( exists $ENV{CYGPORT_PACKAGE_VERSION} ));
+ $s;
+}
+
+=item install
+
+Rebase dll's with the global rebase database after installation.
+
+=cut
+
+sub install {
+ my($self, %attribs) = @_;
+ my $s = ExtUtils::MM_Unix::install($self, %attribs);
+ return '' unless $s;
+ return $s unless %{$self->{XS}};
+
+ my $INSTALLDIRS = $self->{INSTALLDIRS};
+ my $INSTALLLIB = $self->{"INSTALL". ($INSTALLDIRS eq 'perl' ? 'ARCHLIB' : uc($INSTALLDIRS)."ARCH")};
+ my $dop = "\$\(DESTDIR\)$INSTALLLIB/auto/";
+ my $dll = "$dop/$self->{FULLEXT}/$self->{BASEEXT}.$self->{DLEXT}";
+ $s =~ s|^(pure_install :: pure_\$\(INSTALLDIRS\)_install\n\t)\$\(NOECHO\) \$\(NOOP\)\n|$1\$(CHMOD) \$(PERM_RWX) $dll\n\t/bin/find $dop -xdev -name \\*.$self->{DLEXT} \| /bin/rebase -sOT -\n|m if ... [91 chars truncated]
      $s;
  }

diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
index c6ffc59..6bbd02e 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
@@ -2,7 +2,8 @@ package ExtUtils::MM_DOS;

  use strict;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  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 cc52f1d..a6490db 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
@@ -7,7 +7,8 @@ BEGIN {
      our @ISA = qw( ExtUtils::MM_Unix );
  }

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;


  =head1 NAME
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
index 820ffd1..5cee011 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
@@ -2,7 +2,8 @@ package ExtUtils::MM_MacOS;

  use strict;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  sub new {
      die 'MacOS Classic (MacPerl) is no longer supported by MakeMaker';
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
index 0b89a15..48b0b46 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
@@ -22,17 +22,18 @@ use strict;
  use ExtUtils::MakeMaker::Config;
  use File::Basename;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  require ExtUtils::MM_Win32;
  our @ISA = qw(ExtUtils::MM_Win32);

-use ExtUtils::MakeMaker qw( &neatvalue );
+use ExtUtils::MakeMaker qw(&neatvalue &_sprintf562);

  $ENV{EMXSHELL} = 'sh'; # to run `commands`

-my $BORLAND = $Config{'cc'} =~ /^bcc/i;
-my $GCC = $Config{'cc'} =~ /^gcc/i;
+my $BORLAND = $Config{'cc'} =~ /\bbcc/i;
+my $GCC = $Config{'cc'} =~ /\bgcc/i;


  =item os_flavor
@@ -122,148 +123,78 @@ sub platform_constants {
      return $make_frag;
  }

+=item static_lib_pure_cmd

-=item const_cccmd
+Defines how to run the archive utility

  =cut

-sub const_cccmd {
- my($self,$libperl)=@_;
- return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
- return '' unless $self->needs_linking();
- return $self->{CONST_CCCMD} = <<'MAKE_FRAG';
-CCCMD = $(CC) $(CCFLAGS) $(INC) $(OPTIMIZE) \
- $(PERLTYPE) $(MPOLLUTE) -o $@ \
- -DVERSION=\"$(VERSION)\" -DXS_VERSION=\"$(XS_VERSION)\"
-MAKE_FRAG
-
-}
-
-
-=item static_lib
-
-=cut
-
-sub static_lib {
- my($self) = @_;
-
- return '' unless $self->has_link_code;
-
- my $m = <<'END';
-$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(RM_RF) $@
-END
-
- # If this extension has it's own library (eg SDBM_File)
- # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- $m .= <<'END' if $self->{MYEXTLIB};
- $self->{CP} $(MYEXTLIB) $@
-END
-
- my $ar_arg;
- if( $BORLAND ) {
- $ar_arg = '$@ $(OBJECT:^"+")';
- }
- elsif( $GCC ) {
- $ar_arg = '-ru $@ $(OBJECT)';
- }
- else {
- $ar_arg = '-type library -o $@ $(OBJECT)';
- }
-
- $m .= sprintf <<'END', $ar_arg;
- $(AR) %s
- $(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
- $(CHMOD) 755 $@
-END
-
- $m .= <<'END' if $self->{PERL_SRC};
- $(NOECHO) $(ECHO) "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs
-
-
-END
- return $m;
+sub static_lib_pure_cmd {
+ my ($self, $src) = @_;
+ $src =~ s/(\$\(\w+)(\))/$1:^"+"$2/g if $BORLAND;
+ sprintf qq{\t\$(AR) %s\n}, ($BORLAND ? '$@ ' . $src
+ : ($GCC ? '-ru $@ ' . $src
+ : '-type library -o $@ ' . $src));
  }

  =item dynamic_lib

-Defines how to produce the *.so (or equivalent) files.
+Override of utility methods for OS-specific work.

  =cut

-sub dynamic_lib {
- my($self, %attribs) = @_;
- return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my($ldfrom) = '$(LDFROM)';
-
- (my $boot = $self->{NAME}) =~ s/:/_/g;
-
- my $m = <<'MAKE_FRAG';
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-OTHERLDFLAGS = '.$otherldflags.'
-INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-
+sub xs_make_dynamic_lib {
+ my ($self, $attribs, $from, $to, $todir, $ldfrom, $exportlist) = @_;
+ my @m;
+ # Taking care of long names like FileHandle, ByteLoader, SDBM_File etc
+ if ($to =~ /^\$/) {
+ if ($self->{NLM_SHORT_NAME}) {
+ # deal with shortnames
+ my $newto = q{$(INST_AUTODIR)\\$(NLM_SHORT_NAME).$(DLEXT)};
+ push @m, "$to: $newto\n\n";
+ $to = $newto;
+ }
+ } else {
+ my ($v, $d, $f) = File::Spec->splitpath($to);
+ # relies on $f having a literal "." in it, unlike for $(OBJ_EXT)
+ if ($f =~ /[^\.]{9}\./) {
+ # 9+ chars before '.', need to shorten
+ $f = substr $f, 0, 8;
+ }
+ my $newto = File::Spec->catpath($v, $d, $f);
+ push @m, "$to: $newto\n\n";
+ $to = $newto;
+ }
+ # bits below should be in dlsyms, not here
+ # 1 2 3 4
+ push @m, _sprintf562 <<'MAKE_FRAG', $to, $from, $todir, $exportlist;
  # Create xdc data for an MT safe NLM in case of mpk build
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(NOECHO) $(ECHO) Export boot_$(BOOT_SYMBOL) > $(BASEEXT).def
- $(NOECHO) $(ECHO) $(BASE_IMPORT) >> $(BASEEXT).def
- $(NOECHO) $(ECHO) Import @$(PERL_INC)\perl.imp >> $(BASEEXT).def
+%1$s: %2$s $(MYEXTLIB) $(BOOTSTRAP) %3$s$(DFSEP).exists
+ $(NOECHO) $(ECHO) Export boot_$(BOOT_SYMBOL) > %4$s
+ $(NOECHO) $(ECHO) $(BASE_IMPORT) >> %4$s
+ $(NOECHO) $(ECHO) Import @$(PERL_INC)\perl.imp >> %4$s
  MAKE_FRAG
-
-
      if ( $self->{CCFLAGS} =~ m/ -DMPK_ON /) {
- $m .= <<'MAKE_FRAG';
- $(MPKTOOL) $(XDCFLAGS) $(BASEEXT).xdc
- $(NOECHO) $(ECHO) xdcdata $(BASEEXT).xdc >> $(BASEEXT).def
+ (my $xdc = $exportlist) =~ s#def\z#xdc#;
+ $xdc = '$(BASEEXT).xdc';
+ push @m, sprintf <<'MAKE_FRAG', $xdc, $exportlist;
+ $(MPKTOOL) $(XDCFLAGS) %s
+ $(NOECHO) $(ECHO) xdcdata $(BASEEXT).xdc >> %s
  MAKE_FRAG
      }
-
      # Reconstruct the X.Y.Z version.
      my $version = join '.', map { sprintf "%d", $_ }
                                $] =~ /(\d)\.(\d{3})(\d{2})/;
- $m .= sprintf ' $(LD) $(LDFLAGS) $(OBJECT:.obj=.obj) -desc "Perl %s Extension ($(BASEEXT)) XS_VERSION: $(XS_VERSION)" -nlmversion $(NLM_VERSION)', $version;
-
- # Taking care of long names like FileHandle, ByteLoader, SDBM_File etc
- if($self->{NLM_SHORT_NAME}) {
- # In case of nlms with names exceeding 8 chars, build nlm in the
- # current dir, rename and move to auto\lib.
- $m .= q{ -o $(NLM_SHORT_NAME).$(DLEXT)}
- } else {
- $m .= q{ -o $(INST_AUTODIR)\\$(BASEEXT).$(DLEXT)}
- }
-
- # Add additional lib files if any (SDBM_File)
- $m .= q{ $(MYEXTLIB) } if $self->{MYEXTLIB};
-
- $m .= q{ $(PERL_INC)\Main.lib -commandfile $(BASEEXT).def}."\n";
-
- if($self->{NLM_SHORT_NAME}) {
- $m .= <<'MAKE_FRAG';
- if exist $(INST_AUTODIR)\$(NLM_SHORT_NAME).$(DLEXT) del $(INST_AUTODIR)\$(NLM_SHORT_NAME).$(DLEXT)
- move $(NLM_SHORT_NAME).$(DLEXT) $(INST_AUTODIR)
-MAKE_FRAG
- }
-
- $m .= <<'MAKE_FRAG';
-
+ push @m, sprintf <<'EOF', $from, $version, $to, $exportlist;
+ $(LD) $(LDFLAGS) %s -desc "Perl %s Extension ($(BASEEXT)) XS_VERSION: $(XS_VERSION)" -nlmversion $(NLM_VERSION) -o %s $(MYEXTLIB) $(PERL_INC)\Main.lib -commandfile %s
   $(CHMOD) 755 $@
-MAKE_FRAG
-
- return $m;
+EOF
+ join '', @m;
  }

-
  1;
  __END__

  =back

  =cut
-
-
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
index 2c64ac4..4dc8bcce 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
@@ -5,7 +5,8 @@ use strict;
  use ExtUtils::MakeMaker qw(neatvalue);
  use File::Spec;

-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  require ExtUtils::MM_Any;
  require ExtUtils::MM_Unix;
@@ -49,33 +50,12 @@ MAKE_TEXT

  sub dlsyms {
      my($self,%attribs) = @_;
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
- my(@m);
- (my $boot = $self->{NAME}) =~ s/:/_/g;
-
- if (not $self->{SKIPHASH}{'dynamic'}) {
- push(@m,"
-$self->{BASEEXT}.def: Makefile.PL
-",
- ' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
- Mksymlists("NAME" => "$(NAME)", "DLBASE" => "$(DLBASE)", ',
- '"VERSION" => "$(VERSION)", "DISTNAME" => "$(DISTNAME)", ',
- '"INSTALLDIRS" => "$(INSTALLDIRS)", ',
- '"DL_FUNCS" => ',neatvalue($funcs),
- ', "FUNCLIST" => ',neatvalue($funclist),
- ', "IMPORTS" => ',neatvalue($imports),
- ', "DL_VARS" => ', neatvalue($vars), ');\'
-');
- }
      if ($self->{IMPORTS} && %{$self->{IMPORTS}}) {
   # Make import files (needed for static build)
   -d 'tmp_imp' or mkdir 'tmp_imp', 0777 or die "Can't mkdir tmp_imp";
   open my $imp, '>', 'tmpimp.imp' or die "Can't open tmpimp.imp";
- while (my($name, $exp) = each %{$self->{IMPORTS}}) {
+ foreach my $name (sort keys %{$self->{IMPORTS}}) {
+ my $exp = $self->{IMPORTS}->{$name};
       my ($lib, $id) = ($exp =~ /(.*)\.(.*)/) or die "Malformed IMPORT `$exp'";
       print $imp "$name $lib $id ?\n";
   }
@@ -88,21 +68,26 @@ $self->{BASEEXT}.def: Makefile.PL
   system "cd tmp_imp; $Config::Config{ar} x ../tmpimp$Config::Config{lib_ext}"
       and die "Cannot extract import objects: $!, \$?=$?";
      }
- join('',@m);
+ return '' if $self->{SKIPHASH}{'dynamic'};
+ $self->xs_dlsyms_iterator(\%attribs);
  }

-sub static_lib {
- my($self) = @_;
- my $old = $self->ExtUtils::MM_Unix::static_lib();
- return $old unless $self->{IMPORTS} && %{$self->{IMPORTS}};
+sub xs_dlsyms_ext {
+ '.def';
+}

- my @chunks = split /\n{2,}/, $old;
- shift @chunks unless length $chunks[0]; # Empty lines at the start
- $chunks[0] .= <<'EOC';
+sub xs_dlsyms_extra {
+ join '', map { qq{, "$_" => "\$($_)"} } qw(VERSION DISTNAME INSTALLDIRS);
+}

- $(AR) $(AR_STATIC_ARGS) $@ tmp_imp/* && $(RANLIB) $@
+sub static_lib_pure_cmd {
+ my($self) = @_;
+ my $old = $self->SUPER::static_lib_pure_cmd;
+ return $old unless $self->{IMPORTS} && %{$self->{IMPORTS}};
+ $old . <<'EOC';
+ $(AR) $(AR_STATIC_ARGS) "$@" tmp_imp/*
+ $(RANLIB) "$@"
  EOC
- return join "\n\n". '', @chunks;
  }

  sub replace_manpage_separator {
diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
index 71c4bd5..9a604a1 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
@@ -1,7 +1,8 @@
  package ExtUtils::MM_QNX;

  use strict;
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  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 2350482..38c1042 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
@@ -1,7 +1,8 @@
  package ExtUtils::MM_UWIN;

  use strict;
-our $VERSION = '7.10_01';
+our $VERSION = '7.18';
+$VERSION = eval $VERSION;

  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 e24a61b..fe0ff54 100644
--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
@@ -7,15 +7,14 @@ use strict;
  use Carp;
  use ExtUtils::MakeMaker::Config;
  use File::Basename qw(basename dirname);
-use DirHandle;

  our %Config_Override;

-use ExtUtils::MakeMaker qw($Verbose neatvalue);
+use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562);

  # If we make $VERSION an our variable parse_version() breaks
  use vars qw($VERSION);
-$VERSION = '7.10_01';
+$VERSION = '7.18';
  $VERSION = eval $VERSION; ## no critic [BuiltinFunctions::ProhibitStringyEval]

  require ExtUtils::MM_Any;
@@ -98,7 +97,6 @@ something that used to be in here, look in MM_Any.
  # So we don't have to keep calling the methods over and over again,
  # we have these globals to cache the values. Faster and shrtr.
  my $Curdir = __PACKAGE__->curdir;
-my $Rootdir = __PACKAGE__->rootdir;
  my $Updir = __PACKAGE__->updir;


@@ -143,31 +141,36 @@ sub c_o {
  };
      }

- push @m, qq{
-.c.s:
- $command -S $flags \$*.c
+ my $m_o = $self->{XSMULTI} ? $self->xs_obj_opt('$*.s') : '';
+ push @m, sprintf <<'EOF', $command, $flags, $m_o;

-.c\$(OBJ_EXT):
- $command $flags \$*.c
+.c.s :
+ %s -S %s $*.c %s
+EOF

-.cpp\$(OBJ_EXT):
- $command $flags \$*.cpp
+ my @exts = qw(c cpp cxx cc);
+ push @exts, 'C' if !$Is{OS2} and !$Is{Win32} and !$Is{Dos}; #Case-specific
+ $m_o = $self->{XSMULTI} ? $self->xs_obj_opt('$*$(OBJ_EXT)') : '';
+ for my $ext (@exts) {
+ push @m, "\n.$ext\$(OBJ_EXT) :\n\t$command $flags \$*.$ext" . ( $m_o ? " $m_o" : '' ) . "\n";
+ }
+ return join "", @m;
+}

-.cxx\$(OBJ_EXT):
- $command $flags \$*.cxx

-.cc\$(OBJ_EXT):
- $command $flags \$*.cc
-};
+=item xs_obj_opt

- push @m, qq{
-.C\$(OBJ_EXT):
- $command $flags \$*.C
-} if !$Is{OS2} and !$Is{Win32} and !$Is{Dos}; #Case-specific
+Takes the object file as an argument, and returns the portion of compile
+command-line that will output to the specified object file.

- return join "", @m;
+=cut
+
+sub xs_obj_opt {
+ my ($self, $output_file) = @_;
+ "-o $output_file";
  }

+
  =item cflags (o)

  Does very much the same as the cflags script in the perl
@@ -284,9 +287,6 @@ sub cflags {
   $pollute = '$(PERL_MALLOC_DEF)';
      }

- $self->{CCFLAGS} = quote_paren($self->{CCFLAGS});
- $self->{OPTIMIZE} = quote_paren($self->{OPTIMIZE});
-
      return $self->{CFLAGS} = qq{
  CCFLAGS = $self->{CCFLAGS}
  OPTIMIZE = $self->{OPTIMIZE}
@@ -337,7 +337,6 @@ END
      foreach my $key (@{$self->{CONFIG}}){
          # SITE*EXP macros are defined in &constants; avoid duplicates here
          next if $once_only{$key};
- $self->{uc $key} = quote_paren($self->{uc $key});
          push @m, uc($key) , ' = ' , $self->{uc $key}, "\n";
          $once_only{$key} = 1;
      }
@@ -455,9 +454,9 @@ MM_REVISION = $self->{MM_REVISION}
      push @m, "
  # Handy lists of source code files:
  XS_FILES = ".$self->wraplist(sort keys %{$self->{XS}})."
-C_FILES = ".$self->wraplist(@{$self->{C}})."
-O_FILES = ".$self->wraplist(@{$self->{O_FILES}})."
-H_FILES = ".$self->wraplist(@{$self->{H}})."
+C_FILES = ".$self->wraplist(sort @{$self->{C}})."
+O_FILES = ".$self->wraplist(sort @{$self->{O_FILES}})."
+H_FILES = ".$self->wraplist(sort @{$self->{H}})."
  MAN1PODS = ".$self->wraplist(sort keys %{$self->{MAN1PODS}})."
  MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
  ";
@@ -466,7 +465,7 @@ MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
      push @m, q{
  # Where is the Config information that we are using/depend on
  CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_INCDEP)$(DFSEP)config.h
-} if -e File::Spec->catfile( $self->{PERL_INC}, 'config.h' );
+} if -e $self->catfile( $self->{PERL_INC}, 'config.h' );


      push @m, qq{
@@ -492,10 +491,7 @@ PERL_ARCHIVE_AFTER = $self->{PERL_ARCHIVE_AFTER}

      push @m, "

-TO_INST_PM = ".$self->wraplist(sort keys %{$self->{PM}})."
-
-PM_TO_BLIB = ".$self->wraplist(map { ($_ => $self->{PM}->{$_}) } sort keys %{$self->{PM}})."
-";
+TO_INST_PM = ".$self->wraplist(map $self->quote_dep($_), sort keys %{$self->{PM}})."\n";

      join('',@m);
  }
@@ -510,8 +506,9 @@ Same as macro for the depend attribute.
  sub depend {
      my($self,%attribs) = @_;
      my(@m,$key,$val);
- while (($key,$val) = each %attribs){
- last unless defined $key;
+ for my $key (sort keys %attribs){
+ my $val = $attribs{$key};
+ next unless defined $key and defined $val;
   push @m, "$key : $val\n";
      }
      join "", @m;
@@ -883,25 +880,43 @@ Defines targets for bootstrap files.

  sub dynamic_bs {
      my($self, %attribs) = @_;
- return '
-BOOTSTRAP =
-' unless $self->has_link_code();
-
- my $target = $Is{VMS} ? '$(MMS$TARGET)' : '$@';
-
- return sprintf <<'MAKE_FRAG', ($target) x 2;
-BOOTSTRAP = $(BASEEXT).bs
-
+ return "\nBOOTSTRAP =\n" unless $self->has_link_code();
+ my @exts;
+ if ($self->{XSMULTI}) {
+ @exts = $self->_xs_list_basenames;
+ } else {
+ @exts = '$(BASEEXT)';
+ }
+ return join "\n",
+ "BOOTSTRAP = @{[map { qq{$_.bs} } @exts]}\n",
+ map { $self->_xs_make_bs($_) } @exts;
+}
+
+sub _xs_make_bs {
+ my ($self, $basename) = @_;
+ my ($v, $d, $f) = File::Spec->splitpath($basename);
+ my @d = File::Spec->splitdir($d);
+ shift @d if $self->{XSMULTI} and $d[0] eq 'lib';
+ my $instdir = $self->catdir('$(INST_ARCHLIB)', 'auto', @d, $f);
+ $instdir = '$(INST_ARCHAUTODIR)' if $basename eq '$(BASEEXT)';
+ my $instfile = $self->catfile($instdir, "$f.bs");
+ my $exists = "$instdir\$(DFSEP).exists"; # match blibdirs_target
+ # 1 2 3
+ return _sprintf562 <<'MAKE_FRAG', $basename, $instfile, $exists;
  # As Mkbootstrap might not write a file (if none is required)
  # we use touch to prevent make continually trying to remake it.
  # The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP) : $(FIRST_MAKEFILE) $(BOOTDEP) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(NOECHO) $(ECHO) "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
+%1$s.bs : $(FIRST_MAKEFILE) $(BOOTDEP)
+ $(NOECHO) $(ECHO) "Running Mkbootstrap for %1$s ($(BSLOADLIBS))"
   $(NOECHO) $(PERLRUN) \
    "-MExtUtils::Mkbootstrap" \
- -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
- $(NOECHO) $(TOUCH) "%s"
- $(CHMOD) $(PERM_RW) "%s"
+ -e "Mkbootstrap('%1$s','$(BSLOADLIBS)');"
+ $(NOECHO) $(TOUCH) "%1$s.bs"
+ $(CHMOD) $(PERM_RW) "%1$s.bs"
+
+%2$s : %1$s.bs %3$s
+ $(NOECHO) $(RM_RF) %2$s
+ - $(CP_NONEMPTY) %1$s.bs %2$s $(PERM_RW)
  MAKE_FRAG
  }

@@ -914,31 +929,84 @@ Defines how to produce the *.so (or equivalent) files.
  sub dynamic_lib {
      my($self, %attribs) = @_;
      return '' unless $self->needs_linking(); #might be because of a subdir
-
      return '' unless $self->has_link_code;
+ my @m = $self->xs_dynamic_lib_macros(\%attribs);
+ my @libs;
+ if ($self->{XSMULTI}) {
+ my @exts = $self->_xs_list_basenames;
+ for my $ext (@exts) {
+ my ($v, $d, $f) = File::Spec->splitpath($ext);
+ my @d = File::Spec->splitdir($d);
+ shift @d if $d[0] eq 'lib';
+ my $instdir = $self->catdir('$(INST_ARCHLIB)', 'auto', @d, $f);
+
+ # Dynamic library names may need special handling.
+ eval { require DynaLoader };
+ if (defined &DynaLoader::mod2fname) {
+ $f = &DynaLoader::mod2fname([@d, $f]);
+ }

- my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
- my($ldfrom) = '$(LDFROM)';
- $armaybe = 'ar' if ($Is{OSF} and $armaybe eq ':');
- my(@m);
- my $ld_opt = $Is{OS2} ? '$(OPTIMIZE) ' : ''; # Useful on other systems too?
+ my $instfile = $self->catfile($instdir, "$f.\$(DLEXT)");
+ my $objfile = $self->_xsbuild_value('xs', $ext, 'OBJECT');
+ $objfile = "$ext\$(OBJ_EXT)" unless defined $objfile;
+ my $ldfrom = $self->_xsbuild_value('xs', $ext, 'LDFROM');
+ $ldfrom = $objfile unless defined $ldfrom;
+ my $exportlist = "$ext.def";
+ push @libs, [ $objfile, $instfile, $instdir, $ldfrom, $exportlist ];
+ }
+ } else {
+ @libs = ([ qw($(OBJECT) $(INST_DYNAMIC) $(INST_ARCHAUTODIR) $(LDFROM) $(EXPORT_LIST)) ]);
+ }
+ push @m, map { $self->xs_make_dynamic_lib(\%attribs, @$_); } @libs;
+
+ return join("\n",@m);
+}
+
+=item xs_dynamic_lib_macros
+
+Defines the macros for the C<dynamic_lib> section.
+
+=cut
+
+sub xs_dynamic_lib_macros {
+ my ($self, $attribs) = @_;
+ my $otherldflags = $attribs->{OTHERLDFLAGS} || "";
+ my $inst_dynamic_dep = $attribs->{INST_DYNAMIC_DEP} || "";
+ my $armaybe = $self->_xs_armaybe($attribs);
+ my $ld_opt = $Is{OS2} ? '$(OPTIMIZE) ' : ''; # Useful on other systems too?
      my $ld_fix = $Is{OS2} ? '|| ( $(RM_F) $@ && sh -c false )' : '';
- push(@m,'
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-ARMAYBE = '.$armaybe.'
-OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
-INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-INST_DYNAMIC_FIX = '.$ld_fix.'
-
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVEDEP) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
-');
+ sprintf <<'EOF', $armaybe, $ld_opt.$otherldflags, $inst_dynamic_dep, $ld_fix;
+# This section creates the dynamically loadable objects from relevant
+# objects and possibly $(MYEXTLIB).
+ARMAYBE = %s
+OTHERLDFLAGS = %s
+INST_DYNAMIC_DEP = %s
+INST_DYNAMIC_FIX = %s
+EOF
+}
+
+sub _xs_armaybe {
+ my ($self, $attribs) = @_;
+ my $armaybe = $attribs->{ARMAYBE} || $self->{ARMAYBE} || ":";
+ $armaybe = 'ar' if ($Is{OSF} and $armaybe eq ':');
+ $armaybe;
+}
+
+=item xs_make_dynamic_lib
+
+Defines the recipes for the C<dynamic_lib> section.
+
+=cut
+
+sub xs_make_dynamic_lib {
+ my ($self, $attribs, $object, $to, $todir, $ldfrom, $exportlist) = @_;
+ $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;
      if ($armaybe ne ':'){
- $ldfrom = 'tmp$(LIB_EXT)';
- push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
- push(@m,' $(RANLIB) '."$ldfrom\n");
+ $ldfrom = 'tmp$(LIB_EXT)';
+ push(@m," \$(ARMAYBE) cr $ldfrom $object\n");
+ push(@m," \$(RANLIB) $ldfrom\n");
      }
      $ldfrom = "-all $ldfrom -none" if $Is{OSF};

@@ -951,16 +1019,14 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPO
      # is using them. This is painful if one for instance tries to restart
      # a failed build because the link command will fail unnecessarily 'cos
      # the shared object/library is 'busy'.
- push(@m,' $(RM_F) $@
-');
+ push(@m," \$(RM_F) \$\@\n");

      my $libs = '$(LDLOADLIBS)';
-
**** PATCH TRUNCATED AT 2000 LINES -- 7782 NOT SHOWN ****

--
Perl5 Master Repository

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupperl5-changes @
categoriesperl
postedMay 24, '16 at 11:05a
activeMay 24, '16 at 11:05a
posts1
users1
websiteperl.org

1 user in discussion

Chris 'Bingos' Williams: 1 post

People

Translate

site design / logo © 2018 Grokbase