Update Module::Build to CPAN version 0.37_04
authorDavid Golden <dagolden@cpan.org>
Wed, 16 Feb 2011 20:39:06 +0000 (15:39 -0500)
committerDavid Golden <dagolden@cpan.org>
Wed, 16 Feb 2011 20:43:09 +0000 (15:43 -0500)
[DELTA]

0.37_04 - Wed Feb 16 15:27:21 EST 2011

  [OTHER]

  - moved scripts/ to bin/ for less confusing porting to bleadperl

0.37_03 - Wed Feb 16 09:54:05 EST 2011

  [BUG FIXES]

  - removed an irrelevant test in t/actions/installdeps.t that was causing
    failures on some Cygwin platforms

  [OTHER]

  - dropped configure_requires as some CPAN clients apparently get
    confused by having things in both configure_requires and requires

  - bumped Parse::CPAN::Meta build prereq to 1.4401

  - bumped CPAN::Meta prereq to 2.110420

0.37_02 - Mon Feb  7 21:05:30 EST 2011

  [BUG FIXES]

  - bumped CPAN::Meta prereq to 2.110390 to avoid a regression in 2.110360

0.37_01 - Thu Feb  3 03:44:38 EST 2011

  [ENHANCEMENTS]

  - Generates META.json and MYMETA.json consistent with version 2 of the
    CPAN Meta Spec. [David Golden]

  [BUG FIXES]

  - t/signature.t now uses a mocked Module::Signature; this should be
    more robust across platforms as it only needs to confirm that
    Module::Build is calling Module::Signature when expected

  [OTHER]

  - Added CPAN::Meta and Parse::CPAN::Meta to prerequisites and dropped
    CPAN::Meta::YAML

0.3624 - Thu Jan 27 11:38:39 EST 2011

  - Fixed pod2html directory bugs and fixed creation of spurious blib
    directory in core perl directory when running install.t (RT#63003)
    [Chris Williams]

0.3623 - Wed Jan 26 17:45:30 EST 2011

  - Fixed bugs involving bootstrapping configure_requires prerequisites
    on older CPANPLUS clients or for either CPAN/CPANPLUS when using
    the compatibility Makefile.PL

  - Added diagnostic output when configure_requires are missing for
    the benefit of users doing manual installation

38 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/Module-Build/Changes
cpan/Module-Build/bin/config_data [moved from cpan/Module-Build/scripts/config_data with 100% similarity]
cpan/Module-Build/lib/Module/Build.pm
cpan/Module-Build/lib/Module/Build/API.pod
cpan/Module-Build/lib/Module/Build/Authoring.pod
cpan/Module-Build/lib/Module/Build/Base.pm
cpan/Module-Build/lib/Module/Build/Compat.pm
cpan/Module-Build/lib/Module/Build/Config.pm
cpan/Module-Build/lib/Module/Build/Cookbook.pm
cpan/Module-Build/lib/Module/Build/Dumper.pm
cpan/Module-Build/lib/Module/Build/ModuleInfo.pm
cpan/Module-Build/lib/Module/Build/Notes.pm
cpan/Module-Build/lib/Module/Build/PPMMaker.pm
cpan/Module-Build/lib/Module/Build/Platform/Amiga.pm
cpan/Module-Build/lib/Module/Build/Platform/Default.pm
cpan/Module-Build/lib/Module/Build/Platform/EBCDIC.pm
cpan/Module-Build/lib/Module/Build/Platform/MPEiX.pm
cpan/Module-Build/lib/Module/Build/Platform/MacOS.pm
cpan/Module-Build/lib/Module/Build/Platform/RiscOS.pm
cpan/Module-Build/lib/Module/Build/Platform/Unix.pm
cpan/Module-Build/lib/Module/Build/Platform/VMS.pm
cpan/Module-Build/lib/Module/Build/Platform/VOS.pm
cpan/Module-Build/lib/Module/Build/Platform/Windows.pm
cpan/Module-Build/lib/Module/Build/Platform/aix.pm
cpan/Module-Build/lib/Module/Build/Platform/cygwin.pm
cpan/Module-Build/lib/Module/Build/Platform/darwin.pm
cpan/Module-Build/lib/Module/Build/Platform/os2.pm
cpan/Module-Build/lib/Module/Build/PodParser.pm
cpan/Module-Build/lib/inc/latest.pm
cpan/Module-Build/lib/inc/latest/private.pm
cpan/Module-Build/t/actions/installdeps.t
cpan/Module-Build/t/lib/Module/Signature.pm [new file with mode: 0644]
cpan/Module-Build/t/mymeta.t
cpan/Module-Build/t/script_dist.t
pod/perldelta.pod
utils/config_data.PL

index f4ea501..d9c350d 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1543,91 +1543,92 @@ cpan/MIME-Base64/t/base64.t             See whether MIME::Base64 works
 cpan/MIME-Base64/t/length.t    See whether MIME::QuotedPrint works
 cpan/MIME-Base64/t/quoted-print.t      See whether MIME::QuotedPrint works
 cpan/MIME-Base64/t/unicode.t           See whether MIME::Base64 works
-cpan/Module-Build/Changes                              Module::Build
-cpan/Module-Build/lib/inc/latest.pm                    Module::Build
-cpan/Module-Build/lib/inc/latest/private.pm            Module::Build
-cpan/Module-Build/lib/Module/Build/API.pod             Module::Build
-cpan/Module-Build/lib/Module/Build/Authoring.pod       Module::Build
-cpan/Module-Build/lib/Module/Build/Base.pm             Module::Build
-cpan/Module-Build/lib/Module/Build/Bundling.pod                Module::Build
-cpan/Module-Build/lib/Module/Build/Compat.pm           Module::Build
-cpan/Module-Build/lib/Module/Build/ConfigData.pm               Module::Build
-cpan/Module-Build/lib/Module/Build/Config.pm           Module::Build
-cpan/Module-Build/lib/Module/Build/Cookbook.pm         Module::Build
-cpan/Module-Build/lib/Module/Build/Dumper.pm           Module::Build
-cpan/Module-Build/lib/Module/Build/ModuleInfo.pm       Module::Build
-cpan/Module-Build/lib/Module/Build/Notes.pm            Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/aix.pm     Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/Amiga.pm   Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/cygwin.pm  Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/darwin.pm  Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/Default.pm Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/EBCDIC.pm  Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/MacOS.pm   Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/MPEiX.pm   Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/os2.pm     Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/RiscOS.pm  Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/Unix.pm    Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/VMS.pm     Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/VOS.pm     Module::Build
-cpan/Module-Build/lib/Module/Build/Platform/Windows.pm Module::Build
-cpan/Module-Build/lib/Module/Build.pm                  Module::Build
-cpan/Module-Build/lib/Module/Build/PodParser.pm                Module::Build
-cpan/Module-Build/lib/Module/Build/PPMMaker.pm         Module::Build
-cpan/Module-Build/lib/Module/Build/Version.pm          Module::Build
-cpan/Module-Build/lib/Module/Build/YAML.pm             Module::Build
-cpan/Module-Build/scripts/config_data                  Module::Build
-cpan/Module-Build/t/00-compile.t                       Module::Build
-cpan/Module-Build/t/actions/installdeps.t              Module::Build
+cpan/Module-Build/bin/config_data
+cpan/Module-Build/Changes
+cpan/Module-Build/lib/inc/latest.pm
+cpan/Module-Build/lib/inc/latest/private.pm
+cpan/Module-Build/lib/Module/Build/API.pod
+cpan/Module-Build/lib/Module/Build/Authoring.pod
+cpan/Module-Build/lib/Module/Build/Base.pm
+cpan/Module-Build/lib/Module/Build/Bundling.pod
+cpan/Module-Build/lib/Module/Build/Compat.pm
+cpan/Module-Build/lib/Module/Build/ConfigData.pm
+cpan/Module-Build/lib/Module/Build/Config.pm
+cpan/Module-Build/lib/Module/Build/Cookbook.pm
+cpan/Module-Build/lib/Module/Build/Dumper.pm
+cpan/Module-Build/lib/Module/Build/ModuleInfo.pm
+cpan/Module-Build/lib/Module/Build/Notes.pm
+cpan/Module-Build/lib/Module/Build/Platform/aix.pm
+cpan/Module-Build/lib/Module/Build/Platform/Amiga.pm
+cpan/Module-Build/lib/Module/Build/Platform/cygwin.pm
+cpan/Module-Build/lib/Module/Build/Platform/darwin.pm
+cpan/Module-Build/lib/Module/Build/Platform/Default.pm
+cpan/Module-Build/lib/Module/Build/Platform/EBCDIC.pm
+cpan/Module-Build/lib/Module/Build/Platform/MacOS.pm
+cpan/Module-Build/lib/Module/Build/Platform/MPEiX.pm
+cpan/Module-Build/lib/Module/Build/Platform/os2.pm
+cpan/Module-Build/lib/Module/Build/Platform/RiscOS.pm
+cpan/Module-Build/lib/Module/Build/Platform/Unix.pm
+cpan/Module-Build/lib/Module/Build/Platform/VMS.pm
+cpan/Module-Build/lib/Module/Build/Platform/VOS.pm
+cpan/Module-Build/lib/Module/Build/Platform/Windows.pm
+cpan/Module-Build/lib/Module/Build.pm
+cpan/Module-Build/lib/Module/Build/PodParser.pm
+cpan/Module-Build/lib/Module/Build/PPMMaker.pm
+cpan/Module-Build/lib/Module/Build/Version.pm
+cpan/Module-Build/lib/Module/Build/YAML.pm
+cpan/Module-Build/t/00-compile.t
+cpan/Module-Build/t/actions/installdeps.t
 cpan/Module-Build/t/actions/manifest_skip.t
-cpan/Module-Build/t/add_property.t                     Module::Build
-cpan/Module-Build/t/basic.t                            Module::Build
+cpan/Module-Build/t/add_property.t
+cpan/Module-Build/t/basic.t
 cpan/Module-Build/t/bundled/Software/License.pm
-cpan/Module-Build/t/bundled/Tie/CPHash.pm              Module::Build
-cpan/Module-Build/t/bundle_inc.t                       Module::Build
-cpan/Module-Build/t/compat/exit.t                      Module::Build
-cpan/Module-Build/t/compat.t                           Module::Build
-cpan/Module-Build/t/debug.t                            Module::Build
-cpan/Module-Build/t/destinations.t                     Module::Build
-cpan/Module-Build/t/extend.t                           Module::Build
-cpan/Module-Build/t/ext.t                              Module::Build
-cpan/Module-Build/t/files.t                            Module::Build
-cpan/Module-Build/t/help.t                             Module::Build
-cpan/Module-Build/t/install_extra_target.t             Module::Build
-cpan/Module-Build/t/install.t                          Module::Build
-cpan/Module-Build/t/lib/DistGen.pm                     Module::Build
-cpan/Module-Build/t/lib/MBTest.pm                      Module::Build
+cpan/Module-Build/t/bundled/Tie/CPHash.pm
+cpan/Module-Build/t/bundle_inc.t
+cpan/Module-Build/t/compat/exit.t
+cpan/Module-Build/t/compat.t
+cpan/Module-Build/t/debug.t
+cpan/Module-Build/t/destinations.t
+cpan/Module-Build/t/extend.t
+cpan/Module-Build/t/ext.t
+cpan/Module-Build/t/files.t
+cpan/Module-Build/t/help.t
+cpan/Module-Build/t/install_extra_target.t
+cpan/Module-Build/t/install.t
+cpan/Module-Build/t/lib/DistGen.pm
+cpan/Module-Build/t/lib/MBTest.pm
+cpan/Module-Build/t/lib/Module/Signature.pm
 cpan/Module-Build/t/lib/Software/License/VaporWare.pm
-cpan/Module-Build/t/manifypods.t                       Module::Build
-cpan/Module-Build/t/metadata2.t                                Module::Build
-cpan/Module-Build/t/metadata.t                         Module::Build
-cpan/Module-Build/t/mymeta.t                           Module::Build
-cpan/Module-Build/t/new_from_context.t                 Module::Build
-cpan/Module-Build/t/notes.t                            Module::Build
-cpan/Module-Build/t/parents.t                          Module::Build
-cpan/Module-Build/t/perl_mb_opt.t                      Module::Build
-cpan/Module-Build/t/PL_files.t                         Module::Build
-cpan/Module-Build/t/pod_parser.t                       Module::Build
-cpan/Module-Build/t/ppm.t                              Module::Build
+cpan/Module-Build/t/manifypods.t
+cpan/Module-Build/t/metadata2.t
+cpan/Module-Build/t/metadata.t
+cpan/Module-Build/t/mymeta.t
+cpan/Module-Build/t/new_from_context.t
+cpan/Module-Build/t/notes.t
+cpan/Module-Build/t/parents.t
+cpan/Module-Build/t/perl_mb_opt.t
+cpan/Module-Build/t/PL_files.t
+cpan/Module-Build/t/pod_parser.t
+cpan/Module-Build/t/ppm.t
 cpan/Module-Build/t/properties/dist_suffix.t
 cpan/Module-Build/t/properties/license.t
-cpan/Module-Build/t/properties/module_name.t           Module::Build
-cpan/Module-Build/t/properties/needs_compiler.t                Module::Build
+cpan/Module-Build/t/properties/module_name.t
+cpan/Module-Build/t/properties/needs_compiler.t
 cpan/Module-Build/t/properties/release_status.t
-cpan/Module-Build/t/properties/share_dir.t             Module::Build
-cpan/Module-Build/t/README.pod                         Module::Build
-cpan/Module-Build/t/resume.t                           Module::Build
-cpan/Module-Build/t/runthrough.t                       Module::Build
-cpan/Module-Build/t/sample.t                           Module::Build
-cpan/Module-Build/t/script_dist.t                      Module::Build
-cpan/Module-Build/t/test_file_exts.t                   Module::Build
-cpan/Module-Build/t/test_types.t                       Module::Build
-cpan/Module-Build/t/test_type.t                                Module::Build
-cpan/Module-Build/t/tilde.t                            Module::Build
-cpan/Module-Build/t/use_tap_harness.t                  Module::Build
-cpan/Module-Build/t/versions.t                         Module::Build
-cpan/Module-Build/t/write_default_maniskip.t           Module::Build
-cpan/Module-Build/t/xs.t                               Module::Build
+cpan/Module-Build/t/properties/share_dir.t
+cpan/Module-Build/t/README.pod
+cpan/Module-Build/t/resume.t
+cpan/Module-Build/t/runthrough.t
+cpan/Module-Build/t/sample.t
+cpan/Module-Build/t/script_dist.t
+cpan/Module-Build/t/test_file_exts.t
+cpan/Module-Build/t/test_types.t
+cpan/Module-Build/t/test_type.t
+cpan/Module-Build/t/tilde.t
+cpan/Module-Build/t/use_tap_harness.t
+cpan/Module-Build/t/versions.t
+cpan/Module-Build/t/write_default_maniskip.t
+cpan/Module-Build/t/xs.t
 cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm    Module::Conditional
 cpan/Module-Load-Conditional/t/01_Module_Load_Conditional.t    Module::Conditional tests
 cpan/Module-Load-Conditional/t/02_Parse_Version.t              Module::Load::Conditional tests
index 4d744c1..d887a4c 100755 (executable)
@@ -1032,10 +1032,15 @@ use File::Glob qw(:case);
     'Module::Build' =>
        {
        'MAINTAINER'    => 'kwilliams',
-       'DISTRIBUTION'  => 'DAGOLDEN/Module-Build-0.3622.tar.gz',
+       'DISTRIBUTION'  => 'DAGOLDEN/Module-Build-0.37_04.tar.gz',
        'FILES'         => q[cpan/Module-Build],
-       'EXCLUDED'      => [ qw{ t/par.t t/signature.t },
-                            qr!^contrib/!,  qr!^devtools! ],
+       'EXCLUDED'      => [
+               qw{ t/par.t t/signature.t },
+               qr!^contrib/!,
+               qr!^devtools!,
+               qr!^inc!,
+       ],
+       'CUSTOMIZED'    => [ 'lib/Module/Build/ConfigData.pm' ],
        'UPSTREAM'      => 'cpan',
        },
 
index e77367e..414fb36 100644 (file)
@@ -1,5 +1,66 @@
 Revision history for Perl extension Module::Build.
 
+0.37_04 - Wed Feb 16 15:27:21 EST 2011
+
+  [OTHER]
+
+  - moved scripts/ to bin/ for less confusing porting to bleadperl
+
+0.37_03 - Wed Feb 16 09:54:05 EST 2011
+
+  [BUG FIXES]
+
+  - removed an irrelevant test in t/actions/installdeps.t that was causing
+    failures on some Cygwin platforms
+
+  [OTHER]
+
+  - dropped configure_requires as some CPAN clients apparently get
+    confused by having things in both configure_requires and requires
+
+  - bumped Parse::CPAN::Meta build prereq to 1.4401
+
+  - bumped CPAN::Meta prereq to 2.110420
+
+0.37_02 - Mon Feb  7 21:05:30 EST 2011
+
+  [BUG FIXES]
+
+  - bumped CPAN::Meta prereq to 2.110390 to avoid a regression in 2.110360
+
+0.37_01 - Thu Feb  3 03:44:38 EST 2011
+
+  [ENHANCEMENTS]
+
+  - Generates META.json and MYMETA.json consistent with version 2 of the
+    CPAN Meta Spec. [David Golden]
+
+  [BUG FIXES]
+
+  - t/signature.t now uses a mocked Module::Signature; this should be
+    more robust across platforms as it only needs to confirm that
+    Module::Build is calling Module::Signature when expected
+
+  [OTHER]
+
+  - Added CPAN::Meta and Parse::CPAN::Meta to prerequisites and dropped
+    CPAN::Meta::YAML
+
+0.3624 - Thu Jan 27 11:38:39 EST 2011
+
+  - Fixed pod2html directory bugs and fixed creation of spurious blib
+    directory in core perl directory when running install.t (RT#63003)
+    [Chris Williams]
+
+0.3623 - Wed Jan 26 17:45:30 EST 2011
+
+  - Fixed bugs involving bootstrapping configure_requires prerequisites
+    on older CPANPLUS clients or for either CPAN/CPANPLUS when using
+    the compatibility Makefile.PL
+
+  - Added diagnostic output when configure_requires are missing for
+    the benefit of users doing manual installation
+
 0.3622 - Mon Jan 24 21:06:50 EST 2011
 
   - No changes from 0.36_21
index e23375e..28aaf1e 100644 (file)
@@ -16,7 +16,7 @@ use Module::Build::Base;
 
 use vars qw($VERSION @ISA);
 @ISA = qw(Module::Build::Base);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 
@@ -682,7 +682,7 @@ specify the C<versionlib> parameter when you run the C<Build.PL> script:
   perl Build.PL --versionlib /my/version/place/
 
 To override which version the module is installed as, specify the
-C<versionlib> parameter when you run the C<Build.PL> script:
+C<version> parameter when you run the C<Build.PL> script:
 
   perl Build.PL --version 0.50
 
@@ -858,7 +858,7 @@ This is the same as C<bindoc> above, but applies to HTML documents.
 
 =item libhtml
 
-This is the same as C<bindoc> above, but applies to HTML documents.
+This is the same as C<libdoc> above, but applies to HTML documents.
 
 =back
 
@@ -1085,8 +1085,8 @@ Module-Build mailing list at <module-build@perl.org>.
 Bug reports are also welcome at
 <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build>.
 
-The latest development version is available from the Subversion
-repository at <https://svn.perl.org/modules/Module-Build/trunk/>
+The latest development version is available from the Git
+repository at <https://github.com/dagolden/module-build/>
 
 
 =head1 COPYRIGHT
index 1106bc8..3494cb9 100644 (file)
@@ -1930,6 +1930,8 @@ accessor methods for the following properties:
 
 =item destdir()
 
+=item dynamic_config()
+
 =item get_options()
 
 =item html_css()
@@ -1954,10 +1956,14 @@ accessor methods for the following properties:
 
 =item metafile()
 
+=item metafile2()
+
 =item module_name()
 
 =item mymetafile()
 
+=item mymetafile2()
+
 =item needs_compiler()
 
 =item orig_dir()
@@ -2004,7 +2010,6 @@ accessor methods for the following properties:
 
 =back
 
-
 =head1 MODULE METADATA
 
 If you would like to add other useful metadata, C<Module::Build>
index 38fb3f0..f8a5d14 100644 (file)
@@ -2,7 +2,6 @@
 
 Module::Build::Authoring - Authoring Module::Build modules
 
-
 =head1 DESCRIPTION
 
 When creating a C<Build.PL> script for a module, something like the
index d42c8af..a448aa7 100644 (file)
@@ -4,7 +4,7 @@ package Module::Build::Base;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 BEGIN { require 5.00503 }
 
@@ -902,10 +902,13 @@ __PACKAGE__->add_property(build_bat => 0);
 __PACKAGE__->add_property(bundle_inc => []);
 __PACKAGE__->add_property(bundle_inc_preload => []);
 __PACKAGE__->add_property(config_dir => '_build');
+__PACKAGE__->add_property(dynamic_config => 1);
 __PACKAGE__->add_property(include_dirs => []);
 __PACKAGE__->add_property(license => 'unknown');
 __PACKAGE__->add_property(metafile => 'META.yml');
 __PACKAGE__->add_property(mymetafile => 'MYMETA.yml');
+__PACKAGE__->add_property(metafile2 => 'META.json');
+__PACKAGE__->add_property(mymetafile2 => 'MYMETA.json');
 __PACKAGE__->add_property(recurse_into => []);
 __PACKAGE__->add_property(use_rcfile => 1);
 __PACKAGE__->add_property(create_packlist => 1);
@@ -1876,39 +1879,72 @@ EOF
 
 sub create_mymeta {
   my ($self) = @_;
-  my $mymetafile = $self->mymetafile;
-  my $metafile = $self->metafile;
 
-  # cleanup
-  if ( $self->delete_filetree($mymetafile) ) {
-    $self->log_verbose("Removed previous '$mymetafile'\n");
+  my ($meta_obj, $mymeta);
+  my @metafiles = ( $self->metafile, $self->metafile2 );
+  my @mymetafiles = ( $self->mymetafile, $self->mymetafile2 );
+
+  # cleanup old MYMETA
+  for my $f ( @mymetafiles ) {
+    if ( $self->delete_filetree($f) ) {
+      $self->log_verbose("Removed previous '$f'\n");
+    }
   }
-  $self->log_info("Creating new '$mymetafile' with configuration results\n");
 
-  # use old meta and update prereqs, if possible
-  my $mymeta;
-  if ( -f $metafile ) {
-    $mymeta = eval { $self->read_metafile( $self->metafile ) };
+  # Try loading META.json or META.yml
+  if ( $self->try_require("CPAN::Meta", "2.110420") ) {
+    for my $file ( @metafiles ) {
+      next unless -f $file;
+      $meta_obj = eval { CPAN::Meta->load_file($file) };
+      last if $meta_obj;
+    }
   }
-  # if we read META OK, just update it
+
+  # maybe get a copy in spec v2 format (regardless of original source)
+  $mymeta = $meta_obj->as_struct
+    if $meta_obj;
+
+  # if we have metadata, just update it
   if ( defined $mymeta ) {
     my $prereqs = $self->_normalize_prereqs;
-    for my $t ( 'configure_requires', @{$self->prereq_action_types} ) {
-        $mymeta->{$t} = $prereqs->{$t} if $prereqs->{$t};
+    # XXX refactor this mapping somewhere
+    $mymeta->{prereqs}{runtime}{requires} = $prereqs->{requires};
+    $mymeta->{prereqs}{build}{requires} = $prereqs->{build_requires};
+    $mymeta->{prereqs}{runtime}{recommends} = $prereqs->{recommends};
+    $mymeta->{prereqs}{runtime}{conflicts} = $prereqs->{conflicts};
+    # delete empty entries
+    for my $phase ( keys %{$mymeta->{prereqs}} ) {
+      if ( ref $mymeta->{prereqs}{$phase} eq 'HASH' ) {
+        for my $type ( keys %{$mymeta->{prereqs}{$phase}} ) {
+          if ( ! defined $mymeta->{prereqs}{$phase}{$type}
+            || ! keys %{$mymeta->{prereqs}{$phase}{$type}}
+          ) {
+            delete $mymeta->{prereqs}{$phase}{$type};
+          }
+        }
+      }
+      if ( ! defined $mymeta->{prereqs}{$phase}
+        || ! keys %{$mymeta->{prereqs}{$phase}}
+      ) {
+        delete $mymeta->{prereqs}{$phase};
+      }
     }
+    $mymeta->{dynamic_config} = 0;
+    $mymeta->{generated_by} = "Module::Build version $Module::Build::VERSION";
+    $meta_obj = CPAN::Meta->new( $mymeta );
   }
-  # but generate from scratch, ignoring errors if META doesn't exist
+  # or generate from scratch, ignoring errors if META doesn't exist
   else {
-    $mymeta = $self->get_metadata( fatal => 0 );
+    $meta_obj = $self->_get_meta_object(
+      quiet => 0, dynamic => 0, fatal => 0, auto => 0
+    );
   }
 
-  # MYMETA is always static
-  $mymeta->{dynamic_config} = 0;
-  # Note which M::B created it
-  $mymeta->{generated_by} = "Module::Build version $Module::Build::VERSION";
+  my @created = $self->_write_meta_files( $meta_obj, 'MYMETA' );
+
+  $self->log_warn("Could not create MYMETA files\n")
+    unless @created;
 
-  $self->write_metafile( $mymetafile, $mymeta ) or
-    $self->log_warn("Could not create MYMETA.yml\n");
   return 1;
 }
 
@@ -2977,9 +3013,9 @@ sub find_PL_files {
   }
 
   return unless -d 'lib';
-  return { 
-    map {$_, [/^(.*)\.PL$/i ]} 
-    @{ $self->rscan_dir('lib', $self->file_qr('\.PL$')) } 
+  return {
+    map {$_, [/^(.*)\.PL$/i ]}
+    @{ $self->rscan_dir('lib', $self->file_qr('\.PL$')) }
   };
 }
 
@@ -3317,8 +3353,7 @@ sub htmlify_pods {
     ( $self->install_sets('core', 'lib'), # lib
       $self->install_sets('core', 'bin'), # bin
       $self->install_sets('site', 'lib'), # site/lib
-    ),File::Spec->rel2abs($self->blib)
-  );
+    ) ), File::Spec->rel2abs($self->blib);
 
   my $podpath = join(":", map { tr,:\\,|/,; $_ } @podpath);
 
@@ -3403,9 +3438,13 @@ sub htmlify_pods {
       }
 
       $self->log_verbose("P::H::pod2html @opts\n");
-      eval { Pod::Html::pod2html(@opts); 1 }
-        or $self->log_warn("[$htmltool] pod2html( " .
-        join(", ", map { "q{$_}" } @opts) . ") failed: $@");
+      {
+        my $orig = Cwd::getcwd();
+        eval { Pod::Html::pod2html(@opts); 1 }
+          or $self->log_warn("[$htmltool] pod2html( " .
+          join(", ", map { "q{$_}" } @opts) . ") failed: $@");
+        chdir($orig);
+      }
     }
     # We now have to cleanup the resulting html file
     if ( ! -r $tmpfile ) {
@@ -3650,7 +3689,7 @@ sub ACTION_realclean {
   $self->depends_on('clean');
   $self->log_info("Cleaning up configuration files\n");
   $self->delete_filetree(
-    $self->config_dir, $self->mymetafile, $self->build_script
+    $self->config_dir, $self->mymetafile, $self->mymetafile2, $self->build_script
   );
 }
 
@@ -3782,9 +3821,12 @@ sub _check_mymeta_skip {
 
   my $mymetafile = $self->mymetafile;
   # we can't check it, just add it anyway to be safe
-  unless ( $skip_factory && $skip_factory->($maniskip)->($mymetafile) ) {
-    $self->log_warn("File '$maniskip' does not include '$mymetafile'. Adding it now.\n");
-    $self->_append_maniskip("^$mymetafile\$", $maniskip);
+  for my $file ( $self->mymetafile, $self->mymetafile2 ) {
+    unless ( $skip_factory && $skip_factory->($maniskip)->($file) ) {
+      $self->log_warn("File '$maniskip' does not include '$file'. Adding it now.\n");
+      my $safe = quotemeta($file);
+      $self->_append_maniskip("^$safe\$", $maniskip);
+    }
   }
 }
 
@@ -3902,7 +3944,6 @@ HERE
 
   $self->delete_filetree('LICENSE');
 
-  my $author = join " & ", @{ $self->dist_author };
   my $fh = IO::File->new('> LICENSE')
     or die "Can't write LICENSE file: $!";
   print $fh $license->fulltext;
@@ -4420,7 +4461,8 @@ sub _software_license_object {
   return unless defined $class;
 
   # Software::License requires a 'holder' argument
-  my $sl = eval { $class->new({holder=>"nobody"}) };
+  my $author = join( " & ", @{ $self->dist_author }) || 'unknown';
+  my $sl = eval { $class->new({holder=>$author}) };
   if ( $@ ) {
     $self->log_warn( "Error getting '$class' object: $@" );
   }
@@ -4452,16 +4494,15 @@ sub do_create_metafile {
   return if $self->{wrote_metadata};
 
   my $p = $self->{properties};
-  my $metafile = $self->metafile;
 
   unless ($p->{license}) {
     $self->log_warn("No license specified, setting license = 'unknown'\n");
     $p->{license} = 'unknown';
   }
 
+  my @metafiles = ( $self->metafile, $self->metafile2 );
   # If we're in the distdir, the metafile may exist and be non-writable.
-  $self->delete_filetree($metafile);
-  $self->log_info("Creating $metafile\n");
+  $self->delete_filetree($_) for @metafiles;
 
   # Since we're building ourself, we have to do some special stuff
   # here: the ConfigData module is found in blib/lib.
@@ -4471,46 +4512,85 @@ sub do_create_metafile {
     push @INC, File::Spec->catdir($self->blib, 'lib');
   }
 
-  if (
-    $self->write_metafile(
-      $self->metafile,$self->get_metadata(fatal=>1, auto => 1)
-    )
-  ){
+  my $meta_obj = $self->_get_meta_object(
+    quiet => 1, fatal => 1, auto => 1
+  );
+  my @created = $self->_write_meta_files( $meta_obj, 'META' );
+  if ( @created ) {
     $self->{wrote_metadata} = 1;
-    $self->_add_to_manifest('MANIFEST', $metafile);
+    $self->_add_to_manifest('MANIFEST', $_) for @created;
   }
-
   return 1;
 }
 
-# We handle slurping from the metafile to ensure proper utf8 if possible
-sub read_metafile {
+sub _write_meta_files {
   my $self = shift;
-  my ($metafile) = @_;
+  my ($meta, $file) = @_;
+  $file =~ s{\.(?:yml|json)$}{};
 
-  return unless $self->try_require("CPAN::Meta::YAML", "0.002");
+  my @created;
+  push @created, "$file\.yml"
+    if $meta && $meta->save( "$file\.yml", {version => "1.4"} );
+  push @created, "$file\.json"
+    if $meta && $meta->save( "$file\.json" );
 
-  my $string = $self->_slurp($metafile, $] < 5.8 ? "" : ":utf8");
-  my $meta = CPAN::Meta::YAML->read_string($string)
-    or $self->log_warn( "Error parsing '$metafile': " . CPAN::Meta::YAML->errstr . "\n");
+  if ( @created ) {
+    $self->log_info("Created " . join(" and ", @created) . "\n");
+  }
+  return @created;
+}
+
+sub _get_meta_object {
+  my $self = shift;
+  my %args = @_;
+  return unless $self->try_require("CPAN::Meta", "2.110420");
+
+  my $meta;
+  eval {
+    my $data = $self->get_metadata(
+      fatal => $args{fatal},
+      auto => $args{auto},
+    );
+    $data->{dynamic_config} = $args{dynamic} if defined $args{dynamic};
+    $meta = CPAN::Meta->create( $data );
+  };
+  if ($@ && ! $args{quiet}) {
+    $self->log_warn(
+      "Could not get valid metadata. Error is: $@\n"
+    );
+  }
 
-  return $meta->[0] || {};
+  return $meta;
 }
 
-# We handle spewing to the metafile to ensure proper utf8 if possible
+# We return a version 1.4 structure for backwards compatibility
+sub read_metafile {
+  my $self = shift;
+  my ($metafile) = @_;
+
+  return unless $self->try_require("CPAN::Meta", "2.110420");
+  my $meta = CPAN::Meta->load_file($metafile);
+  return $meta->as_struct( {version => "1.4"} );
+}
+
+# For legacy compatibility, we upconvert a 1.4 data structure, ensuring
+# validity, and then downconvert it back to save it.
+#
+# generally, this code should no longer be used
 sub write_metafile {
   my $self = shift;
-  my ($metafile, $node) = @_;
+  my ($metafile, $struct) = @_;
 
-  return unless $self->try_require("CPAN::Meta::YAML", "0.002");
+  return unless $self->try_require("CPAN::Meta", "2.110420");
 
-  my $yaml = CPAN::Meta::YAML->new($node);
-  my $string = $yaml->write_string;
-  return $self->_spew($metafile, $string, $] < 5.8 ? "" : ":utf8")
+  my $meta = CPAN::Meta->new( $struct );
+  return $meta->save( $metafile, { version => "1.4" } );
 }
 
 sub normalize_version {
   my ($self, $version) = @_;
+  $version = 0 unless defined $version;
+
   if ( $version =~ /[=<>!,]/ ) { # logic, not just version
     # take as is without modification
   }
@@ -4545,7 +4625,6 @@ sub _normalize_prereqs {
   return \%prereq_types;
 }
 
-
 # wrapper around old prepare_metadata API;
 sub get_metadata {
   my ($self, %args) = @_;
index fa92296..eee856e 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Compat;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 
 use File::Basename ();
 use File::Spec;
index b9e1ceb..e73bad4 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Config;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Config;
 
index 4ab5714..43ec37b 100644 (file)
@@ -1,7 +1,7 @@
 package Module::Build::Cookbook;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 
 
 =head1 NAME
index b89f21d..7a32de2 100644 (file)
@@ -1,7 +1,7 @@
 package Module::Build::Dumper;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 
 # This is just a split-out of a wrapper function to do Data::Dumper
 # stuff "the right way".  See:
index 2ee9fae..9c2dae1 100644 (file)
@@ -4,7 +4,7 @@ package Module::Build::ModuleInfo;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 require Module::Metadata;
index 3d9e56c..d66e438 100644 (file)
@@ -4,7 +4,7 @@ package Module::Build::Notes;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Data::Dumper;
 use IO::File;
index a683b56..6769201 100644 (file)
@@ -5,7 +5,7 @@ use Config;
 use vars qw($VERSION);
 use IO::File;
 
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 # This code is mostly borrowed from ExtUtils::MM_Unix 6.10_03, with a
index d4fed10..f47f8a1 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::Amiga;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index b19f2ed..845e34e 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::Default;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index 0bd5a70..65ee003 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::EBCDIC;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index cb0a42b..9171182 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::MPEiX;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index 9af367a..ca7bb7e 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::MacOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 use vars qw(@ISA);
index fc746ba..c8a8fe4 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::RiscOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index 2db3adf..3897c7c 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::Unix;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index 5f6d3e8..24087c5 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::VMS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 use Config;
index 98f1151..29e8ea3 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::VOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
index 3e13e72..3daf4f1 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::Windows;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 use Config;
index 03dfb1e..692dbc7 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::aix;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
index 6e06b7b..8ddd242 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::cygwin;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
index 3b6b482..465701d 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::darwin;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
index 310900a..e21be6a 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::Platform::os2;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
index 2684401..5d402ad 100644 (file)
@@ -2,7 +2,7 @@ package Module::Build::PodParser;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 use vars qw(@ISA);
 
index 16c21d3..bca9b50 100644 (file)
@@ -1,7 +1,7 @@
 package inc::latest;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 use Carp;
index 44c8833..08752b6 100644 (file)
@@ -1,7 +1,7 @@
 package inc::latest::private;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.3622';
+$VERSION = '0.37_04';
 $VERSION = eval $VERSION;
 
 use File::Spec;
index 95e221d..5df9833 100644 (file)
@@ -3,7 +3,7 @@ use lib 't/lib';
 use MBTest;
 use DistGen;
 
-plan tests => 7;
+plan tests => 6;
 
 # Ensure any Module::Build modules are loaded from correct directory
 blib_load('Module::Build');
@@ -33,8 +33,6 @@ my $out = stdout_of( sub {
     $dist->run_build('installdeps')
 });
 ok( length($out), "ran mocked Build installdeps");
-my $expected = quotemeta(Module::Build->find_command($^X));
-like( $out, qr/$expected/i, "relative cpan_client resolved relative to \$^X" );
 like( $out, qr/File::Spec/, "saw File::Spec prereq" );
 like( $out, qr/Getopt::Long/, "saw Getopt::Long prereq" );
 
diff --git a/cpan/Module-Build/t/lib/Module/Signature.pm b/cpan/Module-Build/t/lib/Module/Signature.pm
new file mode 100644 (file)
index 0000000..2d58f7d
--- /dev/null
@@ -0,0 +1,11 @@
+package Module::Signature; # mocked
+use strict;
+use warnings;
+our $VERSION = 999;
+
+sub sign {
+  open my $fh, ">", "SIGNATURE";
+  print {$fh} "SIGNATURE";
+}
+
+1;
index 78c4f6d..86a67f7 100644 (file)
@@ -3,8 +3,9 @@
 use strict;
 use lib 't/lib';
 use MBTest;
-use CPAN::Meta::YAML;
-plan tests => 25;
+use CPAN::Meta 2.110420;
+use Parse::CPAN::Meta 1.4401;
+plan tests => 39;
 
 blib_load('Module::Build');
 
@@ -35,12 +36,15 @@ $dist->chdir_in;
 {
   ok( ! -e "META.yml", "META.yml doesn't exist before Build.PL runs" );
   ok( ! -e "MYMETA.yml", "MYMETA.yml doesn't exist before Build.PL runs" );
+  ok( ! -e "META.json", "META.json doesn't exist before Build.PL runs" );
+  ok( ! -e "MYMETA.json", "MYMETA.json doesn't exist before Build.PL runs" );
   my $output;
   $output = stdout_of sub { $dist->run_build_pl };
-  like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+  like($output, qr/Created MYMETA\.yml and MYMETA\.json/,
     "Ran Build.PL and saw MYMETA.yml creation message"
   );
   ok( -e "MYMETA.yml", "MYMETA.yml exists" );
+  ok( -e "MYMETA.json", "MYMETA.json exists" );
 }
 
 #########################
@@ -48,58 +52,84 @@ $dist->chdir_in;
 # Test interactions between META/MYMETA
 {
   my $output = stdout_stderr_of sub { $dist->run_build('distmeta') };
-  like($output, qr/Creating META.yml/,
+  like($output, qr/Created META\.yml and META\.json/,
     "Ran Build distmeta to create META.yml");
   # regenerate MYMETA to pick up from META instead of creating from scratch
   $output = stdout_of sub { $dist->run_build_pl };
-  like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+  like($output, qr/Created MYMETA\.yml and MYMETA\.json/,
     "Re-ran Build.PL and regenerated MYMETA.yml based on META.yml"
   );
 
-  my $meta = CPAN::Meta::YAML->read('META.yml')->[0];
-  my $mymeta = CPAN::Meta::YAML->read('MYMETA.yml')->[0];
-  is( delete $mymeta->{dynamic_config}, 0,
-    "MYMETA 'dynamic_config' is 0"
-  );
-  is_deeply( $mymeta, $meta, "Other generated MYMETA matches generated META" );
+  for my $suffix ( qw/.yml .json/ ) {
+    my $meta = Parse::CPAN::Meta->load_file("META$suffix");
+    my $mymeta = Parse::CPAN::Meta->load_file("MYMETA$suffix");
+    is( delete $meta->{dynamic_config}, 1,
+      "META$suffix 'dynamic_config' is 1"
+    );
+    is( delete $mymeta->{dynamic_config}, 0,
+      "MYMETA$suffix 'dynamic_config' is 0"
+    );
+    is_deeply( $mymeta, $meta, "Other generated MYMETA$suffix matches generated META$suffix" )
+      or do {
+        require Data::Dumper;
+        diag "MYMETA:\n" . Data::Dumper::Dumper($mymeta)
+          .  "META:\n" . Data::Dumper::Dumper($meta);
+      };
+  }
+
   $output = stdout_stderr_of sub { $dist->run_build('realclean') };
   like( $output, qr/Cleaning up/, "Ran realclean");
   ok( ! -e 'Build', "Build file removed" );
-  ok( ! -e 'MYMETA.yml', "MYMETA file removed" );
+  ok( ! -e 'MYMETA.yml', "MYMETA.yml file removed" );
+  ok( ! -e 'MYMETA.json', "MYMETA.json file removed" );
 
   # test that dynamic prereq is picked up
+  my $meta = Parse::CPAN::Meta->load_file("META.yml");
+  my $meta2 = Parse::CPAN::Meta->load_file("META.json");
   local $ENV{BUMP_PREREQ} = 1;
   $output = stdout_of sub { $dist->run_build_pl };
-  like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+  like($output, qr/Created MYMETA\.yml and MYMETA\.json/,
     "Ran Build.PL with dynamic config"
   );
   ok( -e "MYMETA.yml", "MYMETA.yml exists" );
-  $mymeta = CPAN::Meta::YAML->read('MYMETA.yml')->[0];
+  ok( -e "MYMETA.json", "MYMETA.json exists" );
+  my $mymeta = Parse::CPAN::Meta->load_file('MYMETA.yml');
+  my $mymeta2 = Parse::CPAN::Meta->load_file('MYMETA.json');
   isnt(   $meta->{requires}{'File::Spec'},
         $mymeta->{requires}{'File::Spec'},
-        "MYMETA requires differs from META"
+        "MYMETA.yml requires differs from META.yml"
+  );
+  isnt(   $meta2->{prereqs}{runtime}{requires}{'File::Spec'},
+        $mymeta2->{prereqs}{runtime}{requires}{'File::Spec'},
+        "MYMETA.json requires differs from META.json"
   );
   $output = stdout_stderr_of sub { $dist->run_build('realclean') };
   like( $output, qr/Cleaning up/, "Ran realclean");
   ok( ! -e 'Build', "Build file removed" );
   ok( ! -e 'MYMETA.yml', "MYMETA file removed" );
+  ok( ! -e 'MYMETA.json', "MYMETA file removed" );
 
   # manually change META and check that changes are preserved
   $meta->{author} = ['John Gault'];
+  $meta2->{author} = ['John Gault'];
   ok( CPAN::Meta::YAML->new($meta)->write('META.yml'),
     "Wrote manually modified META.yml" );
+  ok( CPAN::Meta->new( $meta2 )->save('META.json'),
+    "Wrote manually modified META.json" );
 
   $output = stdout_of sub { $dist->run_build_pl };
-  like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+  like($output, qr/Created MYMETA\.yml and MYMETA\.json/,
     "Ran Build.PL"
   );
-  my $mymeta2 = CPAN::Meta::YAML->read('MYMETA.yml')->[0];
+  $mymeta = Parse::CPAN::Meta->load_file('MYMETA.yml');
+  $mymeta2 = Parse::CPAN::Meta->load_file('MYMETA.json');
+  is_deeply( $mymeta->{author}, [ 'John Gault' ],
+    "MYMETA.yml preserved META.yml modifications"
+  );
   is_deeply( $mymeta2->{author}, [ 'John Gault' ],
-    "MYMETA preserved META modifications"
+    "MYMETA.json preserved META.json modifications"
   );
 
-
-
 }
 
 #########################
@@ -118,11 +148,12 @@ $dist->chdir_in;
 
 {
   my $output = stdout_of sub { $dist->run_build_pl };
-  like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+  like($output, qr/Created MYMETA\.yml and MYMETA\.json/,
     "Ran Build.PL and saw MYMETA.yml creation message"
   );
   $output = stdout_stderr_of sub { $dist->run_build('distclean') };
   ok( ! -f 'MYMETA.yml', "No MYMETA.yml after distclean" );
+  ok( ! -f 'MYMETA.json', "No MYMETA.json after distclean" );
   ok( ! -f 'MANIFEST.SKIP', "No MANIFEST.SKIP after distclean" );
 }
 
index 26720b2..fa02b49 100644 (file)
@@ -40,7 +40,7 @@ my %details = (
   dist_version => '0.01',
 );
 my %meta_provides = (
-  'bin-foo' => {
+  'foo' => {
     file => 'bin/foo',
     version => '0.01',
   }
index 5f02c0f..3ecd7b6 100644 (file)
@@ -249,7 +249,7 @@ C<Math::BigInt> has been upgraded from version 1.99_04 to 1.991.
 
 =item *
 
-C<Module::Build> has been upgraded from version 0.3607 to 0.3622.
+C<Module::Build> has been upgraded from version 0.3607 to 0.37_04.
 
 A notable change is the deprecation of several modules.
 Module::Build::Version has been deprecated and Module::Build now relies
@@ -257,6 +257,11 @@ directly upon L<version>.  Module::Build::ModuleInfo has been deprecated in
 favor of a standalone copy of it called L<Module::Metadata>.
 Module::Build::YAML has been deprecated in favor of L<CPAN::Meta::YAML>.
 
+Module::Build now also generates META.json and MYMETA.json files
+in accordance with version 2 of the CPAN distribution metadata specification,
+L<CPAN::Meta::Spec>.  The older format META.yml and MYMETA.yml files are
+still generated, as well.
+
 =item *
 
 C<Module::Load::Conditional> has been upgraded from version 0.40 to 0.44
index a7bc90f..a167de8 100644 (file)
@@ -35,7 +35,7 @@ use File::Spec;
 
 my $script = File::Spec->catfile(
             File::Spec->catdir(
-                File::Spec->updir, qw[cpan Module-Build scripts]
+                File::Spec->updir, qw[cpan Module-Build bin]
             ), "config_data");
 
 if (open(IN, $script)) {