@@ -1,5 +1,12 @@
Revision history for CPAN-Meta
+2.142690 2014-09-26 11:06:34-04:00 America/New_York
+
+ [DOCUMENTED]
+
+ - Clarified that no_index is a list of exclusions, and that indexers
+ should generally exclude 'inc', 'xt' and 't' as well.
+
2.142060 2014-07-25 13:30:06-04:00 America/New_York
[ADDED]
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.019.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.020.
CONTRIBUTING
Changes
LICENSE
@@ -19,6 +19,11 @@ lib/CPAN/Meta.pm
lib/CPAN/Meta/Converter.pm
lib/CPAN/Meta/Feature.pm
lib/CPAN/Meta/History.pm
+lib/CPAN/Meta/History/Meta_1_0.pod
+lib/CPAN/Meta/History/Meta_1_1.pod
+lib/CPAN/Meta/History/Meta_1_2.pod
+lib/CPAN/Meta/History/Meta_1_3.pod
+lib/CPAN/Meta/History/Meta_1_4.pod
lib/CPAN/Meta/Merge.pm
lib/CPAN/Meta/Prereqs.pm
lib/CPAN/Meta/Spec.pm
@@ -5,7 +5,7 @@
"Ricardo Signes <rjbs@cpan.org>"
],
"dynamic_config" : 0,
- "generated_by" : "Dist::Zilla version 5.019, CPAN::Meta::Converter version 2.141170",
+ "generated_by" : "Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.140640",
"license" : [
"perl_5"
],
@@ -35,12 +35,12 @@
"develop" : {
"requires" : {
"Dist::Zilla" : "5",
- "Dist::Zilla::Plugin::AutoVersion" : "0",
"Dist::Zilla::Plugin::MakeMaker" : "0",
"Dist::Zilla::Plugin::MakeMaker::Highlander" : "0.003",
- "Dist::Zilla::Plugin::OnlyCorePrereqs" : "0.013",
+ "Dist::Zilla::Plugin::OnlyCorePrereqs" : "0.014",
"Dist::Zilla::Plugin::Prereqs" : "0",
- "Dist::Zilla::PluginBundle::DAGOLDEN" : "0.053",
+ "Dist::Zilla::Plugin::SurgicalPodWeaver" : "0.0021",
+ "Dist::Zilla::PluginBundle::DAGOLDEN" : "0.070",
"File::Spec" : "0",
"File::Temp" : "0",
"IO::Handle" : "0",
@@ -69,59 +69,53 @@
},
"test" : {
"recommends" : {
- "CPAN::Meta" : "0",
- "CPAN::Meta::Prereqs" : "0",
- "CPAN::Meta::Requirements" : "2.120900"
+ "CPAN::Meta" : "2.120900"
},
"requires" : {
"Data::Dumper" : "0",
"ExtUtils::MakeMaker" : "0",
"File::Basename" : "0",
"File::Spec" : "0",
- "File::Spec::Functions" : "0",
"File::Temp" : "0.20",
"IO::Dir" : "0",
- "List::Util" : "0",
- "Scalar::Util" : "0",
"Test::More" : "0.88",
"overload" : "0",
- "utf8" : "0",
- "version" : "0.88"
+ "utf8" : "0"
}
}
},
"provides" : {
"CPAN::Meta" : {
"file" : "lib/CPAN/Meta.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Converter" : {
"file" : "lib/CPAN/Meta/Converter.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Feature" : {
"file" : "lib/CPAN/Meta/Feature.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::History" : {
"file" : "lib/CPAN/Meta/History.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Merge" : {
"file" : "lib/CPAN/Meta/Merge.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Prereqs" : {
"file" : "lib/CPAN/Meta/Prereqs.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Spec" : {
"file" : "lib/CPAN/Meta/Spec.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
},
"CPAN::Meta::Validator" : {
"file" : "lib/CPAN/Meta/Validator.pm",
- "version" : "2.142060"
+ "version" : "2.142690"
}
},
"release_status" : "stable",
@@ -136,7 +130,7 @@
"web" : "https://github.com/Perl-Toolchain-Gang/CPAN-Meta"
}
},
- "version" : "2.142060",
+ "version" : "2.142690",
"x_authority" : "cpan:DAGOLDEN",
"x_contributors" : [
"Ansgar Burchardt <ansgar@cpan.org>",
@@ -146,19 +140,21 @@
"Cory G Watson <gphat@cpan.org>",
"Damyan Ivanov <dam@cpan.org>",
"Eric Wilhelm <ewilhelm@cpan.org>",
+ "Graham Knop <haarg@haarg.org>",
"Gregor Hermann <gregoa@debian.org>",
"Karen Etheridge <ether@cpan.org>",
- "Ken Williams <kwilliams@cpan.org>",
"Kenichi Ishigaki <ishigaki@cpan.org>",
+ "Ken Williams <kwilliams@cpan.org>",
"Lars Dieckow <daxim@cpan.org>",
"Leon Timmermans <leont@cpan.org>",
+ "majensen <maj@fortinbras.us>",
"Mark Fowler <markf@cpan.org>",
"Matt S Trout <mst@shadowcat.co.uk>",
"Michael G. Schwern <mschwern@cpan.org>",
+ "moznion <moznion@gmail.com>",
"Olaf Alders <olaf@wundersolutions.com>",
"Olivier Mengue <dolmen@cpan.org>",
- "Randy Sims <randys@thepierianspring.org>",
- "moznion <moznion@gmail.com>"
+ "Randy Sims <randys@thepierianspring.org>"
]
}
@@ -8,19 +8,15 @@ build_requires:
ExtUtils::MakeMaker: '0'
File::Basename: '0'
File::Spec: '0'
- File::Spec::Functions: '0'
File::Temp: '0.20'
IO::Dir: '0'
- List::Util: '0'
- Scalar::Util: '0'
Test::More: '0.88'
overload: '0'
utf8: '0'
- version: '0.88'
configure_requires:
ExtUtils::MakeMaker: '6.17'
dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.019, CPAN::Meta::Converter version 2.141170'
+generated_by: 'Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.140640'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -38,28 +34,28 @@ no_index:
provides:
CPAN::Meta:
file: lib/CPAN/Meta.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Converter:
file: lib/CPAN/Meta/Converter.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Feature:
file: lib/CPAN/Meta/Feature.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::History:
file: lib/CPAN/Meta/History.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Merge:
file: lib/CPAN/Meta/Merge.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Prereqs:
file: lib/CPAN/Meta/Prereqs.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Spec:
file: lib/CPAN/Meta/Spec.pm
- version: '2.142060'
+ version: '2.142690'
CPAN::Meta::Validator:
file: lib/CPAN/Meta/Validator.pm
- version: '2.142060'
+ version: '2.142690'
requires:
CPAN::Meta::Requirements: '2.121'
CPAN::Meta::YAML: '0.008'
@@ -75,7 +71,7 @@ resources:
bugtracker: https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues
homepage: https://github.com/Perl-Toolchain-Gang/CPAN-Meta
repository: https://github.com/Perl-Toolchain-Gang/CPAN-Meta.git
-version: '2.142060'
+version: '2.142690'
x_authority: cpan:DAGOLDEN
x_contributors:
- 'Ansgar Burchardt <ansgar@cpan.org>'
@@ -85,16 +81,18 @@ x_contributors:
- 'Cory G Watson <gphat@cpan.org>'
- 'Damyan Ivanov <dam@cpan.org>'
- 'Eric Wilhelm <ewilhelm@cpan.org>'
+ - 'Graham Knop <haarg@haarg.org>'
- 'Gregor Hermann <gregoa@debian.org>'
- 'Karen Etheridge <ether@cpan.org>'
- - 'Ken Williams <kwilliams@cpan.org>'
- 'Kenichi Ishigaki <ishigaki@cpan.org>'
+ - 'Ken Williams <kwilliams@cpan.org>'
- 'Lars Dieckow <daxim@cpan.org>'
- 'Leon Timmermans <leont@cpan.org>'
+ - 'majensen <maj@fortinbras.us>'
- 'Mark Fowler <markf@cpan.org>'
- 'Matt S Trout <mst@shadowcat.co.uk>'
- 'Michael G. Schwern <mschwern@cpan.org>'
+ - 'moznion <moznion@gmail.com>'
- 'Olaf Alders <olaf@wundersolutions.com>'
- 'Olivier Mengue <dolmen@cpan.org>'
- 'Randy Sims <randys@thepierianspring.org>'
- - 'moznion <moznion@gmail.com>'
@@ -1,5 +1,5 @@
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.019.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.020.
use strict;
use warnings;
@@ -35,17 +35,13 @@ my %WriteMakefileArgs = (
"ExtUtils::MakeMaker" => 0,
"File::Basename" => 0,
"File::Spec" => 0,
- "File::Spec::Functions" => 0,
"File::Temp" => "0.20",
"IO::Dir" => 0,
- "List::Util" => 0,
- "Scalar::Util" => 0,
"Test::More" => "0.88",
"overload" => 0,
- "utf8" => 0,
- "version" => "0.88"
+ "utf8" => 0
},
- "VERSION" => "2.142060",
+ "VERSION" => "2.142690",
"test" => {
"TESTS" => "t/*.t"
}
@@ -60,11 +56,9 @@ my %FallbackPrereqs = (
"ExtUtils::MakeMaker" => 0,
"File::Basename" => 0,
"File::Spec" => 0,
- "File::Spec::Functions" => 0,
"File::Temp" => "0.20",
"IO::Dir" => 0,
"JSON::PP" => "2.27200",
- "List::Util" => 0,
"Parse::CPAN::Meta" => "1.4414",
"Scalar::Util" => 0,
"Test::More" => "0.88",
@@ -2,7 +2,7 @@ NAME
CPAN::Meta - the distribution metadata for a CPAN dist
VERSION
- version 2.142060
+ version 2.142690
SYNOPSIS
use v5.10;
@@ -300,32 +300,36 @@ CONTRIBUTORS
* Eric Wilhelm <ewilhelm@cpan.org>
+ * Graham Knop <haarg@haarg.org>
+
* Gregor Hermann <gregoa@debian.org>
* Karen Etheridge <ether@cpan.org>
- * Ken Williams <kwilliams@cpan.org>
-
* Kenichi Ishigaki <ishigaki@cpan.org>
+ * Ken Williams <kwilliams@cpan.org>
+
* Lars Dieckow <daxim@cpan.org>
* Leon Timmermans <leont@cpan.org>
+ * majensen <maj@fortinbras.us>
+
* Mark Fowler <markf@cpan.org>
* Matt S Trout <mst@shadowcat.co.uk>
* Michael G. Schwern <mschwern@cpan.org>
+ * moznion <moznion@gmail.com>
+
* Olaf Alders <olaf@wundersolutions.com>
* Olivier Mengue <dolmen@cpan.org>
* Randy Sims <randys@thepierianspring.org>
- * moznion <moznion@gmail.com>
-
COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by David Golden and Ricardo Signes.
@@ -14,21 +14,15 @@ on 'test' => sub {
requires "ExtUtils::MakeMaker" => "0";
requires "File::Basename" => "0";
requires "File::Spec" => "0";
- requires "File::Spec::Functions" => "0";
requires "File::Temp" => "0.20";
requires "IO::Dir" => "0";
- requires "List::Util" => "0";
- requires "Scalar::Util" => "0";
requires "Test::More" => "0.88";
requires "overload" => "0";
requires "utf8" => "0";
- requires "version" => "0.88";
};
on 'test' => sub {
- recommends "CPAN::Meta" => "0";
- recommends "CPAN::Meta::Prereqs" => "0";
- recommends "CPAN::Meta::Requirements" => "2.120900";
+ recommends "CPAN::Meta" => "2.120900";
};
on 'configure' => sub {
@@ -37,12 +31,12 @@ on 'configure' => sub {
on 'develop' => sub {
requires "Dist::Zilla" => "5";
- requires "Dist::Zilla::Plugin::AutoVersion" => "0";
requires "Dist::Zilla::Plugin::MakeMaker" => "0";
requires "Dist::Zilla::Plugin::MakeMaker::Highlander" => "0.003";
- requires "Dist::Zilla::Plugin::OnlyCorePrereqs" => "0.013";
+ requires "Dist::Zilla::Plugin::OnlyCorePrereqs" => "0.014";
requires "Dist::Zilla::Plugin::Prereqs" => "0";
- requires "Dist::Zilla::PluginBundle::DAGOLDEN" => "0.053";
+ requires "Dist::Zilla::Plugin::SurgicalPodWeaver" => "0.0021";
+ requires "Dist::Zilla::PluginBundle::DAGOLDEN" => "0.070";
requires "File::Spec" => "0";
requires "File::Temp" => "0";
requires "IO::Handle" => "0";
@@ -5,20 +5,20 @@ license = Perl_5
copyright_holder = David Golden and Ricardo Signes
copyright_year = 2010
-[AutoVersion]
-major = 2
-
[@DAGOLDEN]
-:version = 0.053
--remove = Git::NextVersion
+:version = 0.070
-remove = MakeMaker
+-remove = PodWeaver
+auto_version = 1
authority = cpan:DAGOLDEN
no_minimum_perl = 1
tag_format = %v
version_regex = ^(\d+\.\d{6})$ ; AutoVersion style
+AutoVersion.major = 2
GithubMeta.user = Perl-Toolchain-Gang
MetaNoIndex.directory[] = history
stopwords = distmeta
+stopwords = dists
stopwords = dir
stopwords = mailto
stopwords = metacpan
@@ -26,21 +26,29 @@ stopwords = releaser
stopwords = subkey
stopwords = subkeys
+[SurgicalPodWeaver]
+:version = 0.0021
+config_plugin = @DAGOLDEN
+replacer = replace_with_comment
+post_code_replacer = replace_with_nothing
+
; as shipped with 5.8.1
[MakeMaker]
eumm_version = 6.17
; repeat these from Parse::CPAN::Meta to ensure we don't wind up
; with P::C::M installed but the backends not installed (as seen in
-; some CPAN Testers FAILS) for some reason
+; some CPAN Testers FAILS) for some reason. Also, add in version.pm
+; as we'd like 0.88, even though we'll try to cope with older versions
+; in the code
[Prereqs]
perl = 5.006
JSON::PP = 2.27200
CPAN::Meta::YAML = 0.008
+version = 0.88
[OnlyCorePrereqs]
-:version = 0.013
-starting_version = current
+:version = 0.014
check_dual_life_versions = 0
; EU::MM bundled prereqs need this
@@ -2,8 +2,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Converter;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::Converter::VERSION = '2.142690';
#pod =head1 SYNOPSIS
#pod
#pod my $struct = decode_json_file('META.json');
@@ -24,9 +24,24 @@ our $VERSION = '2.142060'; # VERSION
use CPAN::Meta::Validator;
use CPAN::Meta::Requirements;
-use version 0.88 ();
use Parse::CPAN::Meta 1.4400 ();
+# To help ExtUtils::MakeMaker bootstrap CPAN::Meta::Requirements on perls
+# before 5.10, we fall back to the EUMM bundled compatibility version module if
+# that's the only thing available. This shouldn't ever happen in a normal CPAN
+# install of CPAN::Meta::Requirements, as version.pm will be picked up from
+# prereqs and be available at runtime.
+
+BEGIN {
+ eval "use version ()"; ## no critic
+ if ( my $err = $@ ) {
+ eval "use ExtUtils::MakeMaker::version" or die $err; ## no critic
+ }
+}
+
+# Perl 5.10.0 didn't have "is_qv" in version.pm
+*_is_qv = version->can('is_qv') ? sub { $_[0]->is_qv } : sub { exists $_[0]->{qv} };
+
sub _dclone {
my $ref = shift;
@@ -363,7 +378,7 @@ sub _clean_version {
# XXX check defined $v and not just $v because version objects leak memory
# in boolean context -- dagolden, 2012-02-03
if ( defined $v ) {
- return $v->is_qv ? $v->normal : $element;
+ return _is_qv($v) ? $v->normal : $element;
}
else {
return 0;
@@ -373,8 +388,8 @@ sub _clean_version {
sub _bad_version_hook {
my ($v) = @_;
$v =~ s{[a-z]+$}{}; # strip trailing alphabetics
- my $vobj = eval { version->parse($v) };
- return defined($vobj) ? $vobj : version->parse(0); # or give up
+ my $vobj = eval { version->new($v) };
+ return defined($vobj) ? $vobj : version->new(0); # or give up
}
sub _version_map {
@@ -1479,7 +1494,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 SYNOPSIS
@@ -2,8 +2,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Feature;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::Feature::VERSION = '2.142690';
use CPAN::Meta::Prereqs;
#pod =head1 DESCRIPTION
@@ -78,7 +78,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 DESCRIPTION
@@ -0,0 +1,185 @@
+=for :stopwords DOAP RDF
+
+=head1 NAME
+
+CPAN::Meta::History::Meta_1_0 - Version 1.0 metadata specification for META.yml
+
+=head1 PREFACE
+
+This is a historical copy of the version 1.0 specification for F<META.yml>
+files, copyright by Ken Williams.
+
+Modifications from the original:
+
+=over
+
+=item *
+
+Conversion from the original HTML to POD format
+
+=back
+
+=head1 DESCRIPTION
+
+This document describes version 1.0 of the F<META.yml> specification.
+
+The META.yml file describes important properties of contributed Perl
+distributions such as the ones found on L<CPAN|http://www.cpan.org>. It is
+typically created by tools like L<Module::Build> and L<ExtUtils::MakeMaker>.
+
+The fields in the F<META.yml> file are meant to be helpful to people
+maintaining module collections (like CPAN), for people writing
+installation tools (like L<CPAN> or L<CPANPLUS>), or just people who want to
+know some stuff about a distribution before downloading it and starting to
+install it.
+
+=head1 Format
+
+F<META.yml> files are written in the L<YAML|http://www.yaml.org/> format. The
+reasons we chose YAML instead of, say, XML or Data::Dumper are discussed in
+L<this thread|http://archive.develooper.com/makemaker@perl.org/msg00405.html>
+on the MakeMaker mailing list.
+
+The first line of a F<META.yml> file should be a valid L<YAML document header|http://www.yaml.org/spec/#.Document>
+like C<"--- #YAML:1.0">
+
+=head1 Fields
+
+The rest of the META.yml file is one big YAML
+L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->,
+whose keys are described here.
+
+=over 4
+
+=item name
+
+Example: C<Module-Build>
+
+The name of the distribution. Often created by taking the "main
+module" in the distribution and changing "::" to "-". Sometimes it's
+completely different, however, as in the case of the
+L<libwww-perl|http://search.cpan.org/author/GAAS/libwww-perl/> distribution.
+
+=item version
+
+Example: C<0.16>
+
+The version of the distribution to which the META.yml file refers.
+
+=item license
+
+Example: C<perl>
+
+The license under which this distribution may be used and
+redistributed. See L<Module::Build> for the list of valid options.
+
+
+=item distribution_type
+
+Example: C<module>
+
+What kind of stuff is contained in this distribution. Most things on
+CPAN are C<module>s (which can also mean a collection of
+modules), but some things are C<script>s.
+
+=item requires
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules this distribution requires for proper
+operation. The keys are the module names, and the values are version
+specifications as described in the L<Module::Build|documentation for Module::Build's "requires" parameter>.
+
+I<Note: the exact nature of the fancy specifications like
+C<< ">= 1.2, != 1.5, < 2.0" >> is subject to
+change. Advance notice will be given here. The simple specifications
+like C<"1.2"> will not change in format.>
+
+=item recommends
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules this distribution recommends for enhanced
+operation.
+
+=item build_requires
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules required for building and/or testing of
+this distribution. These dependencies are not required after the
+module is installed.
+
+=item conflicts
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules that cannot be installed while this
+distribution is installed. This is a pretty uncommon situation.
+
+=item dynamic_config
+
+Example: C<0>
+
+A boolean flag indicating whether a F<Build.PL> or
+F<Makefile.PL> (or similar) must be executed, or whether this
+module can be built, tested and installed solely from consulting its
+metadata file. The main reason to set this to a true value if that
+your module performs some dynamic configuration (asking questions,
+sensing the environment, etc.) as part of its build/install process.
+
+Currently L<Module::Build> doesn't actually do anything with
+this flag - it's probably going to be up to higher-level tools like
+L<CPAN|CPAN.pm> to do something useful with it. It can potentially
+bring lots of security, packaging, and convenience improvements.
+
+=item generated_by
+
+Example: C<Module::Build version 0.16>
+
+Indicates the tool that was used to create this F<META.yml> file. It's
+good form to include both the name of the tool and its version, but
+this field is essentially opaque, at least for the moment.
+
+=back
+
+=head1 Related Projects
+
+=over 4
+
+=item DOAP
+
+An RDF vocabulary to describe software projects. L<http://usefulinc.com/doap>.
+
+=back
+
+=head1 History
+
+=over 4
+
+=item *
+
+B<March 14, 2003> (Pi day) - created version 1.0 of this document.
+
+=item *
+
+B<May 8, 2003> - added the "dynamic_config" field, which was missing from the
+initial version.
+
+=back
@@ -0,0 +1,247 @@
+=for :stopwords Ingy READMEs WTF licensure
+
+=head1 NAME
+
+CPAN::Meta::History::Meta_1_1 - Version 1.1 metadata specification for META.yml
+
+=head1 PREFACE
+
+This is a historical copy of the version 1.1 specification for F<META.yml>
+files, copyright by Ken Williams.
+
+Modifications from the original:
+
+=over
+
+=item *
+
+Conversion from the original HTML to POD format
+
+=back
+
+=head1 DESCRIPTION
+
+This document describes version 1.1 of the F<META.yml> specification.
+
+The F<META.yml> file describes important properties of contributed Perl
+distributions such as the ones found on L<CPAN|http://www.cpan.org>. It is
+typically created by tools like L<Module::Build> and L<ExtUtils::MakeMaker>.
+
+The fields in the F<META.yml> file are meant to be helpful to people
+maintaining module collections (like CPAN), for people writing
+installation tools (like L<CPAN> or L<CPANPLUS>), or just people who want to
+know some stuff about a distribution before downloading it and starting to
+install it.
+
+=head1 Format
+
+F<META.yml> files are written in the L<YAML|http://www.yaml.org/> format. The
+reasons we chose YAML instead of, say, XML or Data::Dumper are discussed in
+L<this thread|http://archive.develooper.com/makemaker@perl.org/msg00405.html>
+on the MakeMaker mailing list.
+
+The first line of a F<META.yml> file should be a valid L<YAML document header|http://www.yaml.org/spec/#.Document>
+like C<"--- #YAML:1.0">
+
+=head1 Fields
+
+The rest of the META.yml file is one big YAML
+L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->,
+whose keys are described here.
+
+=over 4
+
+=item name
+
+Example: C<Module-Build>
+
+The name of the distribution. Often created by taking the "main
+module" in the distribution and changing "::" to "-". Sometimes it's
+completely different, however, as in the case of the
+L<libwww-perl|http://search.cpan.org/author/GAAS/libwww-perl/> distribution.
+
+=item version
+
+Example: C<0.16>
+
+The version of the distribution to which the META.yml file refers.
+This is a mandatory field.
+
+The version is essentially an arbitrary string, but I<must> be
+only ASCII characters, and I<strongly should> be of the format
+integer-dot-digit-digit, i.e. C<25.57>, optionally followed by
+underscore-digit-digit, i.e. C<25.57_04>.
+
+The standard tools that deal with module distribution (PAUSE, CPAN,
+etc.) form an identifier for each distribution by joining the 'name'
+and 'version' attributes with a dash (C<->) character. Tools
+who are prepared to deal with distributions that have no version
+numbers generally omit the dash as well.
+
+=item license
+
+Example: C<perl>
+
+a descriptive term for the licenses ... not authoritative, but must
+be consistent with licensure statements in the READMEs, documentation, etc.
+
+The license under which this distribution may be used and
+redistributed. See L<Module::Build>
+for the list of valid options.
+
+=item license_uri
+
+This should contain a URI where the exact terms of the license may be found.
+
+(change "unrestricted" to "redistributable"?)
+
+=item distribution_type
+
+Example: C<module>
+
+What kind of stuff is contained in this distribution. Most things on
+CPAN are C<module>s (which can also mean a collection of
+modules), but some things are C<script>s.
+
+This field is basically meaningless, and tools (like Module::Build or
+MakeMaker) will likely stop generating it in the future.
+
+=item private
+
+WTF is going on here?
+
+index_ignore: any application that indexes the contents of
+distributions (PAUSE, search.cpan.org) ought to ignore the items
+(packages, files, directories, namespace hierarchies).
+
+=item requires
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules this distribution requires for proper
+operation. The keys are the module names, and the values are version
+specifications as described in the L<Module::Build|documentation for Module::Build's "requires" parameter>.
+
+I<Note: the exact nature of the fancy specifications like
+C<< ">= 1.2, != 1.5, < 2.0" >> is subject to
+change. Advance notice will be given here. The simple specifications
+like C<"1.2"> will not change in format.>
+
+=item recommends
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules this distribution recommends for enhanced
+operation.
+
+=item build_requires
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules required for building and/or testing of
+this distribution. These dependencies are not required after the
+module is installed.
+
+=item conflicts
+
+Example:
+
+ Data::Dumper: 0
+ File::Find: 1.03
+
+A YAML L<mapping|http://www.yaml.org/spec/#.-syntax-mapping-Mapping->
+indicating the Perl modules that cannot be installed while this
+distribution is installed. This is a pretty uncommon situation.
+
+- possibly separate out test-time prereqs, complications include: can
+tests be meaningfully preserved for later running? are test-time
+prereqs in addition to build-time, or exclusive?
+
+- make official location for installed *distributions*, which can
+contain tests, etc.
+
+=item dynamic_config
+
+Example: C<0>
+
+A boolean flag indicating whether a F<Build.PL> or
+F<Makefile.PL> (or similar) must be executed, or whether this
+module can be built, tested and installed solely from consulting its
+metadata file. The main reason to set this to a true value if that
+your module performs some dynamic configuration (asking questions,
+sensing the environment, etc.) as part of its build/install process.
+
+Currently L<Module::Build> doesn't actually do anything with
+this flag - it's probably going to be up to higher-level tools like
+L<CPAN|CPAN.pm> to do something useful with it. It can potentially
+bring lots of security, packaging, and convenience improvements.
+
+=item generated_by
+
+Example: C<Module::Build version 0.16>
+
+Indicates the tool that was used to create this F<META.yml> file. It's
+good form to include both the name of the tool and its version, but
+this field is essentially opaque, at least for the moment.
+
+=back
+
+=head2 Ingy's suggestions
+
+=over 4
+
+=item short_description
+
+add as field, containing abstract, maximum 80 characters, suggested minimum 40 characters
+
+=item description
+
+long version of abstract, should add?
+
+=item maturity
+
+alpha, beta, gamma, mature, stable
+
+=item author_id, owner_id
+
+=item categorization, keyword, chapter_id
+
+=item URL for further information
+
+could default to search.cpan.org on PAUSE
+
+=item namespaces
+
+can be specified for single elements by prepending
+dotted-form, i.e. "com.example.my_application.my_property". Default
+namespace for META.yml is probably "org.cpan.meta_author" or
+something. Precedent for this is Apple's Carbon namespaces, I think.
+
+=back
+
+=head1 History
+
+=over 4
+
+=item *
+
+B<March 14, 2003> (Pi day) - created version 1.0 of this document.
+
+=item *
+
+B<May 8, 2003> - added the "dynamic_config" field, which was missing from the
+initial version.
+
+=back
@@ -0,0 +1,658 @@
+=for :stopwords MailingList RWS subcontext
+
+=head1 NAME
+
+CPAN::Meta::History::Meta_1_2 - Version 1.2 metadata specification for META.yml
+
+=head1 PREFACE
+
+This is a historical copy of the version 1.2 specification for F<META.yml>
+files, copyright by Ken Williams.
+
+Modifications from the original:
+
+=over
+
+=item *
+
+Various spelling corrections
+
+=back
+
+=head1 SYNOPSIS
+
+ --- #YAML:1.0
+ name: Module-Build
+ abstract: Build and install Perl modules
+ version: 0.20
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+ license: perl
+ distribution_type: module
+ requires:
+ Config: 0
+ Cwd: 0
+ Data::Dumper: 0
+ ExtUtils::Install: 0
+ File::Basename: 0
+ File::Compare: 0
+ File::Copy: 0
+ File::Find: 0
+ File::Path: 0
+ File::Spec: 0
+ IO::File: 0
+ perl: 5.005_03
+ recommends:
+ Archive::Tar: 1.00
+ ExtUtils::Install: 0.3
+ ExtUtils::ParseXS: 2.02
+ Pod::Text: 0
+ YAML: 0.35
+ build_requires:
+ Test: 0
+ urls:
+ license: http://dev.perl.org/licenses/
+ meta-spec:
+ version: 1.2
+ url: http://module-build.sourceforge.net/META-spec-v1.2.html
+ generated_by: Module::Build version 0.20
+
+=head1 DESCRIPTION
+
+This document describes version 1.2 of the F<META.yml> specification.
+
+The F<META.yml> file describes important properties of contributed
+Perl distributions such as the ones found on CPAN. It is typically
+created by tools like Module::Build, Module::Install, and
+ExtUtils::MakeMaker.
+
+The fields in the F<META.yml> file are meant to be helpful for people
+maintaining module collections (like CPAN), for people writing
+installation tools (like CPAN.pm or CPANPLUS), or just for people who
+want to know some stuff about a distribution before downloading it and
+starting to install it.
+
+I<Note: The latest stable version of this specification can always be
+found at L<http://module-build.sourceforge.net/META-spec-current.html>,
+and the latest development version (which may include things that
+won't make it into the stable version can always be found at
+L<http://module-build.sourceforge.net/META-spec-blead.html>.>
+
+=head1 FORMAT
+
+F<META.yml> files are written in the YAML format (see
+L<http://www.yaml.org/>).
+
+See the following links to learn why we chose YAML instead of, say,
+XML or Data::Dumper:
+
+=over 4
+
+=item *
+
+Module::Build design plans
+
+L<http://nntp.x.perl.org/group/perl.makemaker/406>
+
+=item *
+
+Not keen on YAML
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1353>
+
+=item *
+
+META Concerns
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1385>
+
+=back
+
+=head1 TERMINOLOGY
+
+=over 4
+
+=item distribution
+
+This is the primary object described by the F<META.yml>
+specification. In the context of this document it usually refers to a
+collection of modules, scripts, and/or documents that are distributed
+for other developers to use.
+
+=item module
+
+This refers to a reusable library of code typically contained in a
+single file. Currently, we primarily talk of perl modules, but this
+specification should be open enough to apply to other languages as
+well (ex. python, ruby).
+
+=back
+
+=head1 VERSION SPECIFICATIONS
+
+Some fields require a version specification (ex. L<"requires">,
+L<"recommends">, L<"build_requires">, etc.). This section details the
+version specifications that are currently supported.
+
+If a single version is listed, then that version is considered to be
+the minimum version supported.
+
+If 0 is given as the version number, then any version is supported.
+
+Additionally, for more complicated requirements, the specification
+supports a list of versions, each of which may be optionally preceded
+by a relational operator.
+
+Supported operators include E<lt> (less than), E<lt>= (less than or
+equal), E<gt> (greater than), E<gt>= (greater than or equal), == (equal), and !=
+(not equal).
+
+If a list is given then it is evaluated from left to right so that any
+specifications in the list that conflict with a previous specification
+are overridden by the later.
+
+Examples:
+
+ >= 1.2, != 1.5, < 2.0
+
+Any version from version 1.2 onward, except version 1.5, that also
+precedes version 2.0.
+
+=head1 HEADER
+
+The first line of a F<META.yml> file should be a valid YAML document
+header like C<"--- #YAML:1.0">.
+
+=head1 FIELDS
+
+The rest of the F<META.yml> file is one big YAML mapping whose keys
+are described here.
+
+=head2 meta-spec
+
+Example:
+
+ meta-spec:
+ version: 1.2
+ url: http://module-build.sourceforge.net/META-spec-v1.2.html
+
+(Spec 1.1) [required] {URL} This field indicates the location of the
+version of the META.yml specification used.
+
+=head2 name
+
+Example:
+
+ name: Module-Build
+
+(Spec 1.0) [required] {string} The name of the distribution which is often
+created by taking the "main module" in the distribution and changing
+"::" to "-". Sometimes it's completely different, however, as in the
+case of the libwww-perl distribution (see
+L<http://search.cpan.org/author/GAAS/libwww-perl/>).
+
+=head2 version
+
+Example:
+
+ version: 0.20
+
+(Spec 1.0) [required] {version} The version of the distribution to which the
+F<META.yml> file refers.
+
+=head2 abstract
+
+Example:
+
+ abstract: Build and install Perl modules.
+
+(Spec 1.1) [required] {string} A short description of the purpose of the
+distribution.
+
+=head2 author
+
+Example:
+
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+
+(Spec 1.1) [required] {list of strings} A YAML sequence indicating the author(s) of the
+distribution. The preferred form is author-name <email-address>.
+
+=head2 license
+
+Example:
+
+ license: perl
+
+(Spec 1.0) [required] {string} The license under which this distribution may be
+used and redistributed. See L<Module::Build> for the list of valid
+options.
+
+=head2 distribution_type
+
+Example:
+
+ distribution_type: module
+
+(Spec 1.0) [optional] {string} What kind of stuff is contained in this
+distribution. Most things on CPAN are C<module>s (which can also mean
+a collection of modules), but some things are C<script>s.
+
+Unfortunately this field is basically meaningless, since many
+distributions are hybrids of several kinds of things, or some new
+thing, or subjectively different in focus depending on who's using
+them. Tools like Module::Build and MakeMaker will likely stop
+generating this field.
+
+=head2 requires
+
+Example:
+
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules this
+distribution requires for proper operation. The keys are the module
+names, and the values are version specifications as described in
+L<Module::Build> for the "requires" parameter.
+
+=head2 recommends
+
+Example:
+
+ recommends:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules this
+distribution recommends for enhanced operation.
+
+I<ALTERNATIVE: It may be desirable to present to the user which
+features depend on which modules so they can make an informed
+decision about which recommended modules to install.>
+
+Example:
+
+ optional_features:
+ - foo:
+ description: Provides the ability to blah.
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+ - bar:
+ description: This feature is not available on this platform.
+ excludes_os: MSWin32
+
+I<(Spec 1.1) [optional] {map} A YAML sequence of names for optional features
+which are made available when its requirements are met. For each
+feature a description is provided along with any of L<"requires">,
+L<"build_requires">, L<"conflicts">, L<"requires_packages">,
+L<"requires_os">, and L<"excludes_os"> which have the same meaning in
+this subcontext as described elsewhere in this document.>
+
+=head2 build_requires
+
+Example:
+
+ build_requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules
+required for building and/or testing of this distribution. These
+dependencies are not required after the module is installed.
+
+=head2 conflicts
+
+Example:
+
+ conflicts:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules that
+cannot be installed while this distribution is installed. This is a
+pretty uncommon situation.
+
+=head2 dynamic_config
+
+Example:
+
+ dynamic_config: 0
+
+(Spec 1.0) [optional] {boolean} A boolean flag indicating whether a F<Build.PL>
+or F<Makefile.PL> (or similar) must be executed when building this
+distribution, or whether it can be built, tested and installed solely
+from consulting its
+metadata file. The main reason to set this to a true value if that
+your module performs some dynamic configuration (asking questions,
+sensing the environment, etc.) as part of its build/install process.
+
+Currently Module::Build doesn't actually do anything with this flag
+- it's probably going to be up to higher-level tools like CPAN
+to do something useful with it. It can potentially bring lots of
+security, packaging, and convenience improvements.
+
+If this field is omitted, it defaults to 1 (true).
+
+=head2 private
+
+I<(Deprecated)> (Spec 1.0) [optional] {map} This field has been renamed to
+L</"no_index">. See below.
+
+=head2 provides
+
+Example:
+
+ provides:
+ Foo::Bar:
+ file: lib/Foo/Bar.pm
+ version: 0.27_02
+ Foo::Bar::Blah:
+ file: lib/Foo/Bar/Blah.pm
+ Foo::Bar::Baz:
+ file: lib/Foo/Bar/Baz.pm
+ version: 0.3
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes all packages
+provided by this distribution. This information can be (and, in some
+cases, is) used by distribution and automation mechanisms like PAUSE,
+CPAN, and search.cpan.org to build indexes saying in which
+distribution various packages can be found.
+
+When using tools like C<Module::Build> that can generate the
+C<provides> mapping for your distribution automatically, make sure you
+examine what it generates to make sure it makes sense - indexers will
+usually trust the C<provides> field if it's present, rather than
+scanning through the distribution files themselves to figure out
+packages and versions. This is a good thing, because it means you can
+use the C<provides> field to tell the indexers precisely what you want
+indexed about your distribution, rather than relying on them to
+essentially guess what you want indexed.
+
+=head2 no_index
+
+Example:
+
+ no_index:
+ file:
+ - My/Module.pm
+ dir:
+ - My/Private
+ package:
+ - My::Module::Stuff
+ namespace:
+ - My::Module::Stuff
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes any files,
+directories, packages, and namespaces that are private
+(i.e. implementation artifacts) that are not of interest to searching
+and indexing tools. This is useful when no C<provides> field is
+present.
+
+I<(Note: I'm not actually sure who looks at this field, or exactly
+what they do with it. This spec could be off in some way from actual
+usage.)>
+
+=head3 file
+
+(Spec 1.1) [optional] Exclude any listed file(s).
+
+=head3 dir
+
+(Spec 1.1) [optional] Exclude anything below the listed
+directory(ies).
+
+=head3 package
+
+(Spec 1.1) [optional] Exclude the listed package(s).
+
+=head3 namespace
+
+(Spec 1.1) [optional] Excludes anything below the listed namespace(s),
+but I<not> the listed namespace(s) its self.
+
+=head2 keywords
+
+Example:
+
+ keywords:
+ - make
+ - build
+ - install
+
+(Spec 1.1) [optional] {list} A sequence of keywords/phrases that describe
+this distribution.
+
+=head2 resources
+
+Example:
+
+ resources:
+ license: http://dev.perl.org/licenses/
+ homepage: http://sourceforge.net/projects/module-build
+ bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build
+ MailingList: http://lists.sourceforge.net/lists/listinfo/module-build-general
+
+(Spec 1.1) [optional] {map} A mapping of any URL resources related to
+this distribution. All-lower-case keys, such as C<homepage>,
+C<license>, and C<bugtracker>, are reserved by this specification, as
+they have "official" meanings defined here in this specification. If
+you'd like to add your own "special" entries (like the "MailingList"
+entry above), use at least one upper-case letter.
+
+The current set of official keys is:
+
+=over 2
+
+=item homepage
+
+The official home of this project on the web.
+
+=item license
+
+An URL for an official statement of this distribution's license.
+
+=item bugtracker
+
+An URL for a bug tracker (e.g. Bugzilla or RT queue) for this project.
+
+=back
+
+
+=head2 generated_by
+
+Example:
+
+ generated_by: Module::Build version 0.20
+
+(Spec 1.0) [required] {string} Indicates the tool that was used to create this
+F<META.yml> file. It's good form to include both the name of the tool
+and its version, but this field is essentially opaque, at least for
+the moment. If F<META.yml> was generated by hand, it is suggested that
+the author be specified here.
+
+[Note: My F<meta_stats.pl> script which I use to gather statistics
+regarding F<META.yml> usage prefers the form listed above, i.e. it
+splits on /\s+version\s+/ taking the first field as the name of the
+tool that generated the file and the second field as version of that
+tool. RWS]
+
+=head1 SEE ALSO
+
+CPAN, L<http://www.cpan.org/>
+
+CPAN.pm, L<http://search.cpan.org/author/ANDK/CPAN/>
+
+CPANPLUS, L<http://search.cpan.org/author/KANE/CPANPLUS/>
+
+Data::Dumper, L<http://search.cpan.org/author/ILYAM/Data-Dumper/>
+
+ExtUtils::MakeMaker, L<http://search.cpan.org/author/MSCHWERN/ExtUtils-MakeMaker/>
+
+Module::Build, L<http://search.cpan.org/author/KWILLIAMS/Module-Build/>
+
+Module::Install, L<http://search.cpan.org/author/KWILLIAMS/Module-Install/>
+
+XML, L<http://www.w3.org/XML/>
+
+YAML, L<http://www.yaml.org/>
+
+=head1 HISTORY
+
+=over 4
+
+=item March 14, 2003 (Pi day)
+
+=over 2
+
+=item *
+
+Created version 1.0 of this document.
+
+=back
+
+=item May 8, 2003
+
+=over 2
+
+=item *
+
+Added the L</"dynamic_config"> field, which was missing from the initial
+version.
+
+=back
+
+=item November 13, 2003
+
+=over 2
+
+=item *
+
+Added more YAML rationale articles.
+
+=item *
+
+Fixed existing link to YAML discussion thread to point to new
+L<http://nntp.x.perl.org/group/> site.
+
+=item *
+
+Added and deprecated the L<"private"> field.
+
+=item *
+
+Added L<"abstract">, L<"configure">, L<"requires_packages">,
+L<"requires_os">, L<"excludes_os">, and L<"no_index"> fields.
+
+=item *
+
+Bumped version.
+
+=back
+
+=item November 16, 2003
+
+=over 2
+
+=item *
+
+Added L<"generation">, L<"authored_by"> fields.
+
+=item *
+
+Add alternative proposal to the L<"recommends"> field.
+
+=item *
+
+Add proposal for a L<"requires_build_tools"> field.
+
+=back
+
+=item December 9, 2003
+
+=over 2
+
+=item *
+
+Added link to latest version of this specification on CPAN.
+
+=item *
+
+Added section L<"VERSION SPECIFICATIONS">.
+
+=item *
+
+Chang name from Module::Build::META-spec to CPAN::META::Specification.
+
+=item *
+
+Add proposal for L<"auto_regenerate"> field.
+
+=back
+
+=item December 15, 2003
+
+=over 2
+
+=item *
+
+Add L<"index"> field as a compliment to L<"no_index">
+
+=item *
+
+Add L<"keywords"> field as a means to aid searching distributions.
+
+=item *
+
+Add L<"TERMINOLOGY"> section to explain certain terms that may be
+ambiguous.
+
+=back
+
+=item July 26, 2005
+
+=over 2
+
+=item *
+
+Removed a bunch of items (generation, requires_build_tools,
+requires_packages, configure, requires_os, excludes_os,
+auto_regenerate) that have never actually been supported, but were
+more like records of brainstorming.
+
+=item *
+
+Changed C<authored_by> to C<author>, since that's always been what
+it's actually called in actual F<META.yml> files.
+
+=item *
+
+Added the "==" operator to the list of supported version-checking
+operators.
+
+=item *
+
+Noted that the C<distribution_type> field is basically meaningless,
+and shouldn't really be used.
+
+=item *
+
+Clarified C<dynamic_config> a bit.
+
+=back
+
+=item August 23, 2005
+
+=over 2
+
+=item *
+
+Removed the name C<CPAN::META::Specification>, since that implies a
+module that doesn't actually exist.
+
+=back
+
+=back
@@ -0,0 +1,665 @@
+=for :stopwords MailingList PODs RWS subcontext
+
+=head1 NAME
+
+CPAN::Meta::History::Meta_1_3 - Version 1.3 metadata specification for META.yml
+
+=head1 PREFACE
+
+This is a historical copy of the version 1.3 specification for F<META.yml>
+files, copyright by Ken Williams.
+
+Modifications from the original:
+
+=over
+
+=item *
+
+Various spelling corrections
+
+=back
+
+=head1 SYNOPSIS
+
+ --- #YAML:1.0
+ name: Module-Build
+ abstract: Build and install Perl modules
+ version: 0.20
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+ license: perl
+ distribution_type: module
+ requires:
+ Config: 0
+ Cwd: 0
+ Data::Dumper: 0
+ ExtUtils::Install: 0
+ File::Basename: 0
+ File::Compare: 0
+ File::Copy: 0
+ File::Find: 0
+ File::Path: 0
+ File::Spec: 0
+ IO::File: 0
+ perl: 5.005_03
+ recommends:
+ Archive::Tar: 1.00
+ ExtUtils::Install: 0.3
+ ExtUtils::ParseXS: 2.02
+ Pod::Text: 0
+ YAML: 0.35
+ build_requires:
+ Test: 0
+ urls:
+ license: http://dev.perl.org/licenses/
+ meta-spec:
+ version: 1.3
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+ generated_by: Module::Build version 0.20
+
+=head1 DESCRIPTION
+
+This document describes version 1.3 of the F<META.yml> specification.
+
+The F<META.yml> file describes important properties of contributed
+Perl distributions such as the ones found on CPAN. It is typically
+created by tools like Module::Build, Module::Install, and
+ExtUtils::MakeMaker.
+
+The fields in the F<META.yml> file are meant to be helpful for people
+maintaining module collections (like CPAN), for people writing
+installation tools (like CPAN.pm or CPANPLUS), or just for people who
+want to know some stuff about a distribution before downloading it and
+starting to install it.
+
+I<Note: The latest stable version of this specification can always be
+found at L<http://module-build.sourceforge.net/META-spec-current.html>,
+and the latest development version (which may include things that
+won't make it into the stable version) can always be found at
+L<http://module-build.sourceforge.net/META-spec-blead.html>.>
+
+=head1 FORMAT
+
+F<META.yml> files are written in the YAML format (see
+L<http://www.yaml.org/>).
+
+See the following links to learn why we chose YAML instead of, say,
+XML or Data::Dumper:
+
+=over 4
+
+=item Module::Build design plans
+
+L<http://nntp.x.perl.org/group/perl.makemaker/406>
+
+=item Not keen on YAML
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1353>
+
+=item META Concerns
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1385>
+
+=back
+
+=head1 TERMINOLOGY
+
+=over 4
+
+=item distribution
+
+This is the primary object described by the F<META.yml>
+specification. In the context of this document it usually refers to a
+collection of modules, scripts, and/or documents that are distributed
+together for other developers to use. Examples of distributions are
+C<Class-Container>, C<libwww-perl>, or C<DBI>.
+
+=item module
+
+This refers to a reusable library of code typically contained in a
+single file. Currently, we primarily talk of perl modules, but this
+specification should be open enough to apply to other languages as
+well (ex. python, ruby). Examples of modules are C<Class::Container>,
+C<LWP::Simple>, or C<DBD::File>.
+
+=back
+
+=head1 HEADER
+
+The first line of a F<META.yml> file should be a valid YAML document
+header like C<"--- #YAML:1.0">.
+
+=head1 FIELDS
+
+The rest of the F<META.yml> file is one big YAML mapping whose keys
+are described here.
+
+=head2 meta-spec
+
+Example:
+
+ meta-spec:
+ version: 1.3
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+
+(Spec 1.1) [required] {URL} This field indicates the location of the
+version of the META.yml specification used.
+
+=head2 name
+
+Example:
+
+ name: Module-Build
+
+(Spec 1.0) [required] {string} The name of the distribution which is often
+created by taking the "main module" in the distribution and changing
+"::" to "-". Sometimes it's completely different, however, as in the
+case of the libwww-perl distribution (see
+L<http://search.cpan.org/dist/libwww-perl/>).
+
+=head2 version
+
+Example:
+
+ version: 0.20
+
+(Spec 1.0) [required] {version} The version of the distribution to which the
+F<META.yml> file refers.
+
+=head2 abstract
+
+Example:
+
+ abstract: Build and install Perl modules.
+
+(Spec 1.1) [required] {string} A short description of the purpose of the
+distribution.
+
+=head2 author
+
+Example:
+
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+
+(Spec 1.1) [required] {list of strings} A YAML sequence indicating the author(s) of the
+distribution. The preferred form is author-name <email-address>.
+
+=head2 license
+
+Example:
+
+ license: perl
+
+(Spec 1.0) [required] {string} The license under which this distribution may be
+used and redistributed. See L<Module::Build> for the list of valid
+options.
+
+=head2 distribution_type
+
+Example:
+
+ distribution_type: module
+
+(Spec 1.0) [optional] {string} What kind of stuff is contained in this
+distribution. Most things on CPAN are C<module>s (which can also mean
+a collection of modules), but some things are C<script>s.
+
+Unfortunately this field is basically meaningless, since many
+distributions are hybrids of several kinds of things, or some new
+thing, or subjectively different in focus depending on who's using
+them. Tools like Module::Build and MakeMaker will likely stop
+generating this field.
+
+=head2 requires
+
+Example:
+
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules this
+distribution requires for proper operation. The keys are the module
+names, and the values are version specifications as described in
+L<VERSION SPECIFICATIONS>.
+
+=head2 recommends
+
+Example:
+
+ recommends:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules
+this distribution recommends for enhanced operation. The keys are the
+module names, and the values are version specifications as described
+in L<VERSION SPECIFICATIONS>.
+
+
+
+I<ALTERNATIVE: It may be desirable to present to the user which
+features depend on which modules so they can make an informed decision
+about which recommended modules to install.>
+
+Example:
+
+ optional_features:
+ - foo:
+ description: Provides the ability to blah.
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+ - bar:
+ description: This feature is not available on this platform.
+ excludes_os: MSWin32
+
+I<(Spec 1.1) [optional] {map} A YAML sequence of names for optional features
+which are made available when its requirements are met. For each
+feature a description is provided along with any of L<"requires">,
+L<"build_requires">, L<"conflicts">, L<"requires_packages">,
+L<"requires_os">, and L<"excludes_os"> which have the same meaning in
+this subcontext as described elsewhere in this document.>
+
+=head2 build_requires
+
+Example:
+
+ build_requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules
+required for building and/or testing of this distribution. The keys
+are the module names, and the values are version specifications as
+described in L<VERSION SPECIFICATIONS>. These dependencies are not
+required after the module is installed.
+
+=head2 conflicts
+
+Example:
+
+ conflicts:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl modules that
+cannot be installed while this distribution is installed. This is a
+pretty uncommon situation. The keys for C<conflicts> are the module
+names, and the values are version specifications as described in
+L<VERSION SPECIFICATIONS>.
+
+
+=head2 dynamic_config
+
+Example:
+
+ dynamic_config: 0
+
+(Spec 1.0) [optional] {boolean} A boolean flag indicating whether a F<Build.PL>
+or F<Makefile.PL> (or similar) must be executed when building this
+distribution, or whether it can be built, tested and installed solely
+from consulting its
+metadata file. The main reason to set this to a true value is that
+your module performs some dynamic configuration (asking questions,
+sensing the environment, etc.) as part of its build/install process.
+
+Currently Module::Build doesn't actually do anything with this flag
+- it's probably going to be up to higher-level tools like CPAN
+to do something useful with it. It can potentially bring lots of
+security, packaging, and convenience improvements.
+
+If this field is omitted, it defaults to 1 (true).
+
+=head2 private
+
+I<(Deprecated)> (Spec 1.0) [optional] {map} This field has been renamed to
+L</"no_index">. See below.
+
+=head2 provides
+
+Example:
+
+ provides:
+ Foo::Bar:
+ file: lib/Foo/Bar.pm
+ version: 0.27_02
+ Foo::Bar::Blah:
+ file: lib/Foo/Bar/Blah.pm
+ Foo::Bar::Baz:
+ file: lib/Foo/Bar/Baz.pm
+ version: 0.3
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes all packages
+provided by this distribution. This information can be (and, in some
+cases, is) used by distribution and automation mechanisms like PAUSE,
+CPAN, and search.cpan.org to build indexes saying in which
+distribution various packages can be found.
+
+When using tools like C<Module::Build> that can generate the
+C<provides> mapping for your distribution automatically, make sure you
+examine what it generates to make sure it makes sense - indexers will
+usually trust the C<provides> field if it's present, rather than
+scanning through the distribution files themselves to figure out
+packages and versions. This is a good thing, because it means you can
+use the C<provides> field to tell the indexers precisely what you want
+indexed about your distribution, rather than relying on them to
+essentially guess what you want indexed.
+
+=head2 no_index
+
+Example:
+
+ no_index:
+ file:
+ - My/Module.pm
+ directory:
+ - My/Private
+ package:
+ - My::Module::Stuff
+ namespace:
+ - My::Module::Stuff
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes any files,
+directories, packages, and namespaces that are private
+(i.e. implementation artifacts) that are not of interest to searching
+and indexing tools. This is useful when no C<provides> field is
+present.
+
+For example, C<search.cpan.org> excludes items listed in C<no_index>
+when searching for POD, meaning files in these directories will not
+converted to HTML and made public - which is useful if you have
+example or test PODs that you don't want the search engine to go
+through.
+
+=head3 file
+
+(Spec 1.1) [optional] Exclude any listed file(s).
+
+=head3 directory
+
+(Spec 1.1) [optional] Exclude anything below the listed
+directory(ies).
+
+[Note: previous editions of the spec had C<dir> instead of
+C<directory>, but I think MakeMaker and various users started using
+C<directory>, so in deference we switched to that.]
+
+=head3 package
+
+(Spec 1.1) [optional] Exclude the listed package(s).
+
+=head3 namespace
+
+(Spec 1.1) [optional] Excludes anything below the listed namespace(s),
+but I<not> the listed namespace(s) its self.
+
+=head2 keywords
+
+Example:
+
+ keywords:
+ - make
+ - build
+ - install
+
+(Spec 1.1) [optional] {list} A sequence of keywords/phrases that describe
+this distribution.
+
+=head2 resources
+
+Example:
+
+ resources:
+ license: http://dev.perl.org/licenses/
+ homepage: http://sourceforge.net/projects/module-build
+ bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build
+ repository: http://sourceforge.net/cvs/?group_id=45731
+ MailingList: http://lists.sourceforge.net/lists/listinfo/module-build-general
+
+(Spec 1.1) [optional] {map} A mapping of any URL resources related to
+this distribution. All-lower-case keys, such as C<homepage>,
+C<license>, and C<bugtracker>, are reserved by this specification, as
+they have "official" meanings defined here in this specification. If
+you'd like to add your own "special" entries (like the "MailingList"
+entry above), use at least one upper-case letter.
+
+The current set of official keys is:
+
+=over 2
+
+=item homepage
+
+The official home of this project on the web.
+
+=item license
+
+An URL for an official statement of this distribution's license.
+
+=item bugtracker
+
+An URL for a bug tracker (e.g. Bugzilla or RT queue) for this project.
+
+=back
+
+
+=head2 generated_by
+
+Example:
+
+ generated_by: Module::Build version 0.20
+
+(Spec 1.0) [required] {string} Indicates the tool that was used to create this
+F<META.yml> file. It's good form to include both the name of the tool
+and its version, but this field is essentially opaque, at least for
+the moment. If F<META.yml> was generated by hand, it is suggested that
+the author be specified here.
+
+[Note: My F<meta_stats.pl> script which I use to gather statistics
+regarding F<META.yml> usage prefers the form listed above, i.e. it
+splits on /\s+version\s+/ taking the first field as the name of the
+tool that generated the file and the second field as version of that
+tool. RWS]
+
+=head1 VERSION SPECIFICATIONS
+
+Some fields require a version specification (ex. L<"requires">,
+L<"recommends">, L<"build_requires">, etc.) to indicate the particular
+versionZ<>(s) of some other module that may be required as a
+prerequisite. This section details the version specification formats
+that are currently supported.
+
+The simplest format for a version specification is just the version
+number itself, e.g. C<2.4>. This means that B<at least> version 2.4
+must be present. To indicate that B<any> version of a prerequisite is
+okay, even if the prerequisite doesn't define a version at all, use
+the version C<0>.
+
+You may also use the operators E<lt> (less than), E<lt>= (less than or
+equal), E<gt> (greater than), E<gt>= (greater than or equal), ==
+(equal), and != (not equal). For example, the specification C<E<lt>
+2.0> means that any version of the prerequisite less than 2.0 is
+suitable.
+
+For more complicated situations, version specifications may be AND-ed
+together using commas. The specification C<E<gt>= 1.2, != 1.5, E<lt>
+2.0> indicates a version that must be B<at least> 1.2, B<less than>
+2.0, and B<not equal to> 1.5.
+
+=head1 SEE ALSO
+
+CPAN, L<http://www.cpan.org/>
+
+CPAN.pm, L<http://search.cpan.org/dist/CPAN/>
+
+CPANPLUS, L<http://search.cpan.org/dist/CPANPLUS/>
+
+Data::Dumper, L<http://search.cpan.org/dist/Data-Dumper/>
+
+ExtUtils::MakeMaker, L<http://search.cpan.org/dist/ExtUtils-MakeMaker/>
+
+Module::Build, L<http://search.cpan.org/dist/Module-Build/>
+
+Module::Install, L<http://search.cpan.org/dist/Module-Install/>
+
+XML, L<http://www.w3.org/XML/>
+
+YAML, L<http://www.yaml.org/>
+
+=head1 HISTORY
+
+=over 4
+
+=item March 14, 2003 (Pi day)
+
+=over 2
+
+=item *
+
+Created version 1.0 of this document.
+
+=back
+
+=item May 8, 2003
+
+=over 2
+
+=item *
+
+Added the L</"dynamic_config"> field, which was missing from the initial
+version.
+
+=back
+
+=item November 13, 2003
+
+=over 2
+
+=item *
+
+Added more YAML rationale articles.
+
+=item *
+
+Fixed existing link to YAML discussion thread to point to new
+L<http://nntp.x.perl.org/group/> site.
+
+=item *
+
+Added and deprecated the L<"private"> field.
+
+=item *
+
+Added L<"abstract">, L<"configure">, L<"requires_packages">,
+L<"requires_os">, L<"excludes_os">, and L<"no_index"> fields.
+
+=item *
+
+Bumped version.
+
+=back
+
+=item November 16, 2003
+
+=over 2
+
+=item *
+
+Added L<"generation">, L<"authored_by"> fields.
+
+=item *
+
+Add alternative proposal to the L<"recommends"> field.
+
+=item *
+
+Add proposal for a L<"requires_build_tools"> field.
+
+=back
+
+=item December 9, 2003
+
+=over 2
+
+=item *
+
+Added link to latest version of this specification on CPAN.
+
+=item *
+
+Added section L<"VERSION SPECIFICATIONS">.
+
+=item *
+
+Chang name from Module::Build::META-spec to CPAN::META::Specification.
+
+=item *
+
+Add proposal for L<"auto_regenerate"> field.
+
+=back
+
+=item December 15, 2003
+
+=over 2
+
+=item *
+
+Add L<"index"> field as a compliment to L<"no_index">
+
+=item *
+
+Add L<"keywords"> field as a means to aid searching distributions.
+
+=item *
+
+Add L<"TERMINOLOGY"> section to explain certain terms that may be
+ambiguous.
+
+=back
+
+=item July 26, 2005
+
+=over 2
+
+=item *
+
+Removed a bunch of items (generation, requires_build_tools,
+requires_packages, configure, requires_os, excludes_os,
+auto_regenerate) that have never actually been supported, but were
+more like records of brainstorming.
+
+=item *
+
+Changed C<authored_by> to C<author>, since that's always been what
+it's actually called in actual F<META.yml> files.
+
+=item *
+
+Added the "==" operator to the list of supported version-checking
+operators.
+
+=item *
+
+Noted that the C<distribution_type> field is basically meaningless,
+and shouldn't really be used.
+
+=item *
+
+Clarified C<dynamic_config> a bit.
+
+=back
+
+=item August 23, 2005
+
+=over 2
+
+=item *
+
+Removed the name C<CPAN::META::Specification>, since that implies a
+module that doesn't actually exist.
+
+=back
+
+=back
@@ -0,0 +1,719 @@
+=for :stopwords MailingList PODs RWS subcontext
+
+=head1 NAME
+
+CPAN::Meta::History::Meta_1_4 - Version 1.4 metadata specification for META.yml
+
+=head1 PREFACE
+
+This is a historical copy of the version 1.4 specification for F<META.yml>
+files, copyright by Ken Williams.
+
+Modifications from the original:
+
+=over
+
+=item *
+
+Various spelling corrections
+
+=back
+
+=head1 SYNOPSIS
+
+ --- #YAML:1.0
+ name: Module-Build
+ abstract: Build and install Perl modules
+ version: 0.20
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+ license: perl
+ distribution_type: module
+ requires:
+ Config: 0
+ Cwd: 0
+ Data::Dumper: 0
+ ExtUtils::Install: 0
+ File::Basename: 0
+ File::Compare: 0
+ File::Copy: 0
+ File::Find: 0
+ File::Path: 0
+ File::Spec: 0
+ IO::File: 0
+ perl: 5.005_03
+ recommends:
+ Archive::Tar: 1.00
+ ExtUtils::Install: 0.3
+ ExtUtils::ParseXS: 2.02
+ Pod::Text: 0
+ YAML: 0.35
+ build_requires:
+ Test: 0
+ resources:
+ license: http://dev.perl.org/licenses/
+ meta-spec:
+ version: 1.4
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+ generated_by: Module::Build version 0.20
+
+=head1 DESCRIPTION
+
+This document describes version 1.4 of the F<META.yml> specification.
+
+The F<META.yml> file describes important properties of contributed
+Perl distributions such as the ones found on CPAN. It is typically
+created by tools like Module::Build, Module::Install, and
+ExtUtils::MakeMaker.
+
+The fields in the F<META.yml> file are meant to be helpful for people
+maintaining module collections (like CPAN), for people writing
+installation tools (like CPAN.pm or CPANPLUS), or just for people who
+want to know some stuff about a distribution before downloading it and
+starting to install it.
+
+I<Note: The latest stable version of this specification can always be
+found at L<http://module-build.sourceforge.net/META-spec-current.html>,
+and the latest development version (which may include things that
+won't make it into the stable version) can always be found at
+L<http://module-build.sourceforge.net/META-spec-blead.html>.>
+
+=begin MAINTAINER
+
+The master source for the META spec is META-spec.pod. META-spec.html
+is built (manually) from META-spec.pod whenever there are changes, and
+the two files should generally be checked in together. Ideally it
+would happen through a trigger or something, but it doesn't.
+
+Ken has a cron job that copies the latest bleeding-edge version of the
+spec (HTML version) to Sourceforge whenever his laptop is turned on:
+
+ 21 * * * * svn cat http://svn.perl.org/modules/Module-Build/trunk/website/META-spec.html \
+ | ssh kwilliams@shell.sourceforge.net \
+ 'cat > /home/groups/m/mo/module-build/htdocs/META-spec-blead.html'
+
+The numbered revisions of the spec at
+L<"http://module-build.sourceforge.net/"> are captures of the spec at
+opportune moments. A couple of symlinks also exist for convenience:
+
+ -rw-r--r-- 1 kwilliams 24585 Oct 10 17:21 META-spec-blead.html
+ lrwxrwxrwx 1 kwilliams 19 Jan 19 2007 META-spec-current.html -> META-spec-v1.3.html
+ lrwxrwxrwx 1 kwilliams 22 Jan 19 2007 META-spec.html -> META-spec-current.html
+ -rw-r--r-- 1 kwilliams 5830 Jul 25 2005 META-spec-v1.0.html
+ -rw-r--r-- 1 kwilliams 7847 Jul 25 2005 META-spec-v1.1.html
+ -rw-r--r-- 1 kwilliams 22635 Aug 23 2005 META-spec-v1.2.html
+ -rw-r--r-- 1 kwilliams 24086 Nov 4 2006 META-spec-v1.3.html
+
+=end MAINTAINER
+
+
+=head1 FORMAT
+
+F<META.yml> files are written in the YAML format (see
+L<http://www.yaml.org/>).
+
+See the following links to learn why we chose YAML instead of, say,
+XML or Data::Dumper:
+
+=over 4
+
+=item Module::Build design plans
+
+L<http://nntp.x.perl.org/group/perl.makemaker/406>
+
+=item Not keen on YAML
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1353>
+
+=item META Concerns
+
+L<http://nntp.x.perl.org/group/perl.module-authors/1385>
+
+=back
+
+=head1 TERMINOLOGY
+
+=over 4
+
+=item distribution
+
+This is the primary object described by the F<META.yml>
+specification. In the context of this document it usually refers to a
+collection of modules, scripts, and/or documents that are distributed
+together for other developers to use. Examples of distributions are
+C<Class-Container>, C<libwww-perl>, or C<DBI>.
+
+=item module
+
+This refers to a reusable library of code typically contained in a
+single file. Currently, we primarily talk of perl modules, but this
+specification should be open enough to apply to other languages as
+well (ex. python, ruby). Examples of modules are C<Class::Container>,
+C<LWP::Simple>, or C<DBD::File>.
+
+=back
+
+=head1 HEADER
+
+The first line of a F<META.yml> file should be a valid YAML document
+header like C<"--- #YAML:1.0">.
+
+=head1 FIELDS
+
+The rest of the F<META.yml> file is one big YAML mapping whose keys
+are described here.
+
+=head2 meta-spec
+
+Example:
+
+ meta-spec:
+ version: 1.4
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+
+(Spec 1.1) [required] {URL} This field indicates the location of the
+version of the META.yml specification used.
+
+=head2 name
+
+Example:
+
+ name: Module-Build
+
+(Spec 1.0) [required] {string} The name of the distribution which is often
+created by taking the "main module" in the distribution and changing
+"::" to "-". Sometimes it's completely different, however, as in the
+case of the libwww-perl distribution (see
+L<http://search.cpan.org/dist/libwww-perl/>).
+
+=head2 version
+
+Example:
+
+ version: 0.20
+
+(Spec 1.0) [required] {version} The version of the distribution to which the
+F<META.yml> file refers.
+
+=head2 abstract
+
+Example:
+
+ abstract: Build and install Perl modules.
+
+(Spec 1.1) [required] {string} A short description of the purpose of the
+distribution.
+
+=head2 author
+
+Example:
+
+ author:
+ - Ken Williams <kwilliams@cpan.org>
+
+(Spec 1.1) [required] {list of strings} A YAML sequence indicating the author(s) of the
+distribution. The preferred form is author-name <email-address>.
+
+=head2 license
+
+Example:
+
+ license: perl
+
+(Spec 1.0) [required] {string} The license under which this
+distribution may be used and redistributed. See
+L<http://search.cpan.org/dist/Module-Build/lib/Module/Build/API.pod>
+for the list of valid options.
+
+=head2 distribution_type
+
+Example:
+
+ distribution_type: module
+
+(Spec 1.0) [optional] {string} What kind of stuff is contained in this
+distribution. Most things on CPAN are C<module>s (which can also mean
+a collection of modules), but some things are C<script>s.
+
+Unfortunately this field is basically meaningless, since many
+distributions are hybrids of several kinds of things, or some new
+thing, or subjectively different in focus depending on who's using
+them. Tools like Module::Build and MakeMaker will likely stop
+generating this field.
+
+=head2 requires
+
+Example:
+
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl
+prerequisites this distribution requires for proper operation. The
+keys are the names of the prerequisites (module names or 'perl'), and
+the values are version specifications as described in L<VERSION
+SPECIFICATIONS>.
+
+=head2 recommends
+
+Example:
+
+ recommends:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl
+prerequisites this distribution recommends for enhanced operation.
+The keys are the names of the prerequisites (module names or 'perl'),
+and the values are version specifications as described in L<VERSION
+SPECIFICATIONS>.
+
+
+
+I<ALTERNATIVE: It may be desirable to present to the user which
+features depend on which modules so they can make an informed decision
+about which recommended modules to install.>
+
+Example:
+
+ optional_features:
+ foo:
+ description: Provides the ability to blah.
+ requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+I<(Spec 1.1) [optional] {map} A YAML mapping of names for optional features
+which are made available when its requirements are met. For each
+feature a description is provided along with any of L<"requires">,
+L<"build_requires">, and L<"conflicts">, which have the same meaning in
+this subcontext as described elsewhere in this document.>
+
+=head2 build_requires
+
+Example:
+
+ build_requires:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating the Perl
+prerequisites required for building and/or testing of this
+distribution. The keys are the names of the prerequisites (module
+names or 'perl'), and the values are version specifications as
+described in L<VERSION SPECIFICATIONS>. These dependencies are not
+required after the distribution is installed.
+
+=head2 configure_requires
+
+Example:
+
+ configure_requires:
+ Module::Build: 0.2809
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.4) [optional] {map} A YAML mapping indicating the Perl prerequisites
+required before configuring this distribution. The keys are the
+names of the prerequisites (module names or 'perl'), and the values are version specifications as described
+in L<VERSION SPECIFICATIONS>. These dependencies are not required
+after the distribution is installed.
+
+=head2 conflicts
+
+Example:
+
+ conflicts:
+ Data::Dumper: 0
+ File::Find: 1.03
+
+(Spec 1.0) [optional] {map} A YAML mapping indicating any items that
+cannot be installed while this distribution is installed. This is a
+pretty uncommon situation. The keys for C<conflicts> are the item
+names (module names or 'perl'), and the values are version
+specifications as described in L<VERSION SPECIFICATIONS>.
+
+
+=head2 dynamic_config
+
+Example:
+
+ dynamic_config: 0
+
+(Spec 1.0) [optional] {boolean} A boolean flag indicating whether a F<Build.PL>
+or F<Makefile.PL> (or similar) must be executed when building this
+distribution, or whether it can be built, tested and installed solely
+from consulting its
+metadata file. The main reason to set this to a true value is that
+your module performs some dynamic configuration (asking questions,
+sensing the environment, etc.) as part of its build/install process.
+
+Currently Module::Build doesn't actually do anything with this flag
+- it's probably going to be up to higher-level tools like CPAN
+to do something useful with it. It can potentially bring lots of
+security, packaging, and convenience improvements.
+
+If this field is omitted, it defaults to 1 (true).
+
+=head2 private
+
+I<(Deprecated)> (Spec 1.0) [optional] {map} This field has been renamed to
+L</"no_index">. See below.
+
+=head2 provides
+
+Example:
+
+ provides:
+ Foo::Bar:
+ file: lib/Foo/Bar.pm
+ version: 0.27_02
+ Foo::Bar::Blah:
+ file: lib/Foo/Bar/Blah.pm
+ Foo::Bar::Baz:
+ file: lib/Foo/Bar/Baz.pm
+ version: 0.3
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes all packages
+provided by this distribution. This information can be (and, in some
+cases, is) used by distribution and automation mechanisms like PAUSE,
+CPAN, and search.cpan.org to build indexes saying in which
+distribution various packages can be found.
+
+When using tools like C<Module::Build> that can generate the
+C<provides> mapping for your distribution automatically, make sure you
+examine what it generates to make sure it makes sense - indexers will
+usually trust the C<provides> field if it's present, rather than
+scanning through the distribution files themselves to figure out
+packages and versions. This is a good thing, because it means you can
+use the C<provides> field to tell the indexers precisely what you want
+indexed about your distribution, rather than relying on them to
+essentially guess what you want indexed.
+
+=head2 no_index
+
+Example:
+
+ no_index:
+ file:
+ - My/Module.pm
+ directory:
+ - My/Private
+ package:
+ - My::Module::Stuff
+ namespace:
+ - My::Module::Stuff
+
+(Spec 1.1) [optional] {map} A YAML mapping that describes any files,
+directories, packages, and namespaces that are private
+(i.e. implementation artifacts) that are not of interest to searching
+and indexing tools. This is useful when no C<provides> field is
+present.
+
+For example, C<search.cpan.org> excludes items listed in C<no_index>
+when searching for POD, meaning files in these directories will not
+converted to HTML and made public - which is useful if you have
+example or test PODs that you don't want the search engine to go
+through.
+
+=head3 file
+
+(Spec 1.1) [optional] Exclude any listed file(s).
+
+=head3 directory
+
+(Spec 1.1) [optional] Exclude anything below the listed
+directory(ies).
+
+[Note: previous editions of the spec had C<dir> instead of
+C<directory>, but I think MakeMaker and various users started using
+C<directory>, so in deference we switched to that.]
+
+=head3 package
+
+(Spec 1.1) [optional] Exclude the listed package(s).
+
+=head3 namespace
+
+(Spec 1.1) [optional] Excludes anything below the listed namespace(s),
+but I<not> the listed namespace(s) its self.
+
+=head2 keywords
+
+Example:
+
+ keywords:
+ - make
+ - build
+ - install
+
+(Spec 1.1) [optional] {list} A sequence of keywords/phrases that describe
+this distribution.
+
+=head2 resources
+
+Example:
+
+ resources:
+ license: http://dev.perl.org/licenses/
+ homepage: http://sourceforge.net/projects/module-build
+ bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build
+ repository: http://sourceforge.net/cvs/?group_id=45731
+ MailingList: http://lists.sourceforge.net/lists/listinfo/module-build-general
+
+(Spec 1.1) [optional] {map} A mapping of any URL resources related to
+this distribution. All-lower-case keys, such as C<homepage>,
+C<license>, and C<bugtracker>, are reserved by this specification, as
+they have "official" meanings defined here in this specification. If
+you'd like to add your own "special" entries (like the "MailingList"
+entry above), use at least one upper-case letter.
+
+The current set of official keys is:
+
+=over 2
+
+=item homepage
+
+The official home of this project on the web.
+
+=item license
+
+An URL for an official statement of this distribution's license.
+
+=item bugtracker
+
+An URL for a bug tracker (e.g. Bugzilla or RT queue) for this project.
+
+=back
+
+
+=head2 generated_by
+
+Example:
+
+ generated_by: Module::Build version 0.20
+
+(Spec 1.0) [required] {string} Indicates the tool that was used to create this
+F<META.yml> file. It's good form to include both the name of the tool
+and its version, but this field is essentially opaque, at least for
+the moment. If F<META.yml> was generated by hand, it is suggested that
+the author be specified here.
+
+[Note: My F<meta_stats.pl> script which I use to gather statistics
+regarding F<META.yml> usage prefers the form listed above, i.e. it
+splits on /\s+version\s+/ taking the first field as the name of the
+tool that generated the file and the second field as version of that
+tool. RWS]
+
+=head1 VERSION SPECIFICATIONS
+
+Some fields require a version specification (ex. L<"requires">,
+L<"recommends">, L<"build_requires">, etc.) to indicate the particular
+versionZ<>(s) of some other module that may be required as a
+prerequisite. This section details the version specification formats
+that are currently supported.
+
+The simplest format for a version specification is just the version
+number itself, e.g. C<2.4>. This means that B<at least> version 2.4
+must be present. To indicate that B<any> version of a prerequisite is
+okay, even if the prerequisite doesn't define a version at all, use
+the version C<0>.
+
+You may also use the operators E<lt> (less than), E<lt>= (less than or
+equal), E<gt> (greater than), E<gt>= (greater than or equal), ==
+(equal), and != (not equal). For example, the specification C<E<lt>
+2.0> means that any version of the prerequisite less than 2.0 is
+suitable.
+
+For more complicated situations, version specifications may be AND-ed
+together using commas. The specification C<E<gt>= 1.2, != 1.5, E<lt>
+2.0> indicates a version that must be B<at least> 1.2, B<less than>
+2.0, and B<not equal to> 1.5.
+
+=head1 SEE ALSO
+
+CPAN, L<http://www.cpan.org/>
+
+CPAN.pm, L<http://search.cpan.org/dist/CPAN/>
+
+CPANPLUS, L<http://search.cpan.org/dist/CPANPLUS/>
+
+Data::Dumper, L<http://search.cpan.org/dist/Data-Dumper/>
+
+ExtUtils::MakeMaker, L<http://search.cpan.org/dist/ExtUtils-MakeMaker/>
+
+Module::Build, L<http://search.cpan.org/dist/Module-Build/>
+
+Module::Install, L<http://search.cpan.org/dist/Module-Install/>
+
+XML, L<http://www.w3.org/XML/>
+
+YAML, L<http://www.yaml.org/>
+
+=head1 HISTORY
+
+=over 4
+
+=item March 14, 2003 (Pi day)
+
+=over 2
+
+=item *
+
+Created version 1.0 of this document.
+
+=back
+
+=item May 8, 2003
+
+=over 2
+
+=item *
+
+Added the L</"dynamic_config"> field, which was missing from the initial
+version.
+
+=back
+
+=item November 13, 2003
+
+=over 2
+
+=item *
+
+Added more YAML rationale articles.
+
+=item *
+
+Fixed existing link to YAML discussion thread to point to new
+L<http://nntp.x.perl.org/group/> site.
+
+=item *
+
+Added and deprecated the L<"private"> field.
+
+=item *
+
+Added L<"abstract">, L<"configure">, L<"requires_packages">,
+L<"requires_os">, L<"excludes_os">, and L<"no_index"> fields.
+
+=item *
+
+Bumped version.
+
+=back
+
+=item November 16, 2003
+
+=over 2
+
+=item *
+
+Added L<"generation">, L<"authored_by"> fields.
+
+=item *
+
+Add alternative proposal to the L<"recommends"> field.
+
+=item *
+
+Add proposal for a L<"requires_build_tools"> field.
+
+=back
+
+=item December 9, 2003
+
+=over 2
+
+=item *
+
+Added link to latest version of this specification on CPAN.
+
+=item *
+
+Added section L<"VERSION SPECIFICATIONS">.
+
+=item *
+
+Chang name from Module::Build::META-spec to CPAN::META::Specification.
+
+=item *
+
+Add proposal for L<"auto_regenerate"> field.
+
+=back
+
+=item December 15, 2003
+
+=over 2
+
+=item *
+
+Add L<"index"> field as a compliment to L<"no_index">
+
+=item *
+
+Add L<"keywords"> field as a means to aid searching distributions.
+
+=item *
+
+Add L<"TERMINOLOGY"> section to explain certain terms that may be
+ambiguous.
+
+=back
+
+=item July 26, 2005
+
+=over 2
+
+=item *
+
+Removed a bunch of items (generation, requires_build_tools,
+requires_packages, configure, requires_os, excludes_os,
+auto_regenerate) that have never actually been supported, but were
+more like records of brainstorming.
+
+=item *
+
+Changed C<authored_by> to C<author>, since that's always been what
+it's actually called in actual F<META.yml> files.
+
+=item *
+
+Added the "==" operator to the list of supported version-checking
+operators.
+
+=item *
+
+Noted that the C<distribution_type> field is basically meaningless,
+and shouldn't really be used.
+
+=item *
+
+Clarified C<dynamic_config> a bit.
+
+=back
+
+=item August 23, 2005
+
+=over 2
+
+=item *
+
+Removed the name C<CPAN::META::Specification>, since that implies a
+module that doesn't actually exist.
+
+=back
+
+=item June 12, 2007
+
+=over 2
+
+=item *
+
+Added C<configure_requires>.
+
+=back
+
+=back
@@ -3,8 +3,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::History;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::History::VERSION = '2.142690';
1;
# ABSTRACT: history of CPAN Meta Spec changes
@@ -21,7 +21,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 DESCRIPTION
@@ -1,10 +1,9 @@
-package CPAN::Meta::Merge;
-
use strict;
use warnings;
-our $VERSION = '2.142060'; # VERSION
-
+package CPAN::Meta::Merge;
+# VERSION
+$CPAN::Meta::Merge::VERSION = '2.142690';
use Carp qw/croak/;
use Scalar::Util qw/blessed/;
use CPAN::Meta::Converter;
@@ -169,7 +168,7 @@ sub merge {
my $current = {};
for my $next (@items) {
if ( blessed($next) && $next->isa('CPAN::Meta') ) {
- $next = $next->as_string_hash;
+ $next = $next->as_struct;
}
elsif ( ref($next) eq 'HASH' ) {
my $cmc = CPAN::Meta::Converter->new(
@@ -201,7 +200,7 @@ CPAN::Meta::Merge - Merging CPAN Meta fragments
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 SYNOPSIS
@@ -2,8 +2,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Prereqs;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::Prereqs::VERSION = '2.142690';
#pod =head1 DESCRIPTION
#pod
#pod A CPAN::Meta::Prereqs object represents the prerequisites for a CPAN
@@ -286,7 +286,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 DESCRIPTION
@@ -7,8 +7,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Spec;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::Spec::VERSION = '2.142690';
1;
# ABSTRACT: specification for CPAN distribution metadata
@@ -28,7 +28,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 SYNOPSIS
@@ -526,7 +526,10 @@ Example:
This Map describes any files, directories, packages, and namespaces that
are private to the packaging or implementation of the distribution and
-should be ignored by indexing or search tools.
+should be ignored by indexing or search tools. Note that this is a list of
+exclusions, and the spec does not define what to I<include> - see
+L</Indexing distributions a la PAUSE> in the implementors notes for more
+information.
Valid subkeys are as follows:
@@ -1138,6 +1141,24 @@ As such, consumers may use this data for informational analysis, but
presenting it to the user as canonical or relying on it as such is
invariably the height of folly.
+=head2 Indexing distributions a la PAUSE
+
+While no_index tells you what must be ignored when indexing, this spec holds
+no opinion on how you should get your initial candidate list of things to
+possibly index. For "normal" distributions you might consider simply indexing
+the contents of lib/, but there are many fascinating oddities on CPAN and
+many dists from the days when it was normal to put the main .pm file in the
+root of the distribution archive - so PAUSE currently indexes all .pm and .PL
+files that are not either (a) specifically excluded by no_index (b) in
+C<inc>, C<xt>, or C<t> directories, or common 'mistake' directories such as
+C<perl5>.
+
+Or: If you're trying to be PAUSE-like, make sure you skip C<inc>, C<xt> and
+C<t> as well as anything marked as no_index.
+
+Also remember: If the META file contains a provides field, you shouldn't be
+indexing anything in the first place - just use that.
+
=head1 SEE ALSO
=over 4
@@ -2,8 +2,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta::Validator;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::Validator::VERSION = '2.142690';
#pod =head1 SYNOPSIS
#pod
#pod my $struct = decode_json_file('META.json');
@@ -997,7 +997,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 SYNOPSIS
@@ -2,8 +2,8 @@ use 5.006;
use strict;
use warnings;
package CPAN::Meta;
-our $VERSION = '2.142060'; # VERSION
-
+# VERSION
+$CPAN::Meta::VERSION = '2.142690';
#pod =head1 SYNOPSIS
#pod
#pod use v5.10;
@@ -641,7 +641,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist
=head1 VERSION
-version 2.142060
+version 2.142690
=head1 SYNOPSIS
@@ -1020,6 +1020,8 @@ Ricardo Signes <rjbs@cpan.org>
=head1 CONTRIBUTORS
+=for stopwords Ansgar Burchardt Avar Arnfjord Bjarmason Christopher J. Madsen Chuck Adams Cory G Watson Damyan Ivanov Eric Wilhelm Graham Knop Gregor Hermann Karen Etheridge Kenichi Ishigaki Ken Williams Lars Dieckow Leon Timmermans majensen Mark Fowler Matt S Trout Michael G. Schwern moznion Olaf Alders Olivier Mengue Randy Sims
+
=over 4
=item *
@@ -1052,6 +1054,10 @@ Eric Wilhelm <ewilhelm@cpan.org>
=item *
+Graham Knop <haarg@haarg.org>
+
+=item *
+
Gregor Hermann <gregoa@debian.org>
=item *
@@ -1060,11 +1066,11 @@ Karen Etheridge <ether@cpan.org>
=item *
-Ken Williams <kwilliams@cpan.org>
+Kenichi Ishigaki <ishigaki@cpan.org>
=item *
-Kenichi Ishigaki <ishigaki@cpan.org>
+Ken Williams <kwilliams@cpan.org>
=item *
@@ -1076,6 +1082,10 @@ Leon Timmermans <leont@cpan.org>
=item *
+majensen <maj@fortinbras.us>
+
+=item *
+
Mark Fowler <markf@cpan.org>
=item *
@@ -1088,19 +1098,19 @@ Michael G. Schwern <mschwern@cpan.org>
=item *
-Olaf Alders <olaf@wundersolutions.com>
+moznion <moznion@gmail.com>
=item *
-Olivier Mengue <dolmen@cpan.org>
+Olaf Alders <olaf@wundersolutions.com>
=item *
-Randy Sims <randys@thepierianspring.org>
+Olivier Mengue <dolmen@cpan.org>
=item *
-moznion <moznion@gmail.com>
+Randy Sims <randys@thepierianspring.org>
=back
@@ -7,12 +7,12 @@ do { my $x = {
'develop' => {
'requires' => {
'Dist::Zilla' => '5',
- 'Dist::Zilla::Plugin::AutoVersion' => '0',
'Dist::Zilla::Plugin::MakeMaker' => '0',
'Dist::Zilla::Plugin::MakeMaker::Highlander' => '0.003',
- 'Dist::Zilla::Plugin::OnlyCorePrereqs' => '0.013',
+ 'Dist::Zilla::Plugin::OnlyCorePrereqs' => '0.014',
'Dist::Zilla::Plugin::Prereqs' => '0',
- 'Dist::Zilla::PluginBundle::DAGOLDEN' => '0.053',
+ 'Dist::Zilla::Plugin::SurgicalPodWeaver' => '0.0021',
+ 'Dist::Zilla::PluginBundle::DAGOLDEN' => '0.070',
'File::Spec' => '0',
'File::Temp' => '0',
'IO::Handle' => '0',
@@ -41,24 +41,18 @@ do { my $x = {
},
'test' => {
'recommends' => {
- 'CPAN::Meta' => '0',
- 'CPAN::Meta::Prereqs' => '0',
- 'CPAN::Meta::Requirements' => '2.120900'
+ 'CPAN::Meta' => '2.120900'
},
'requires' => {
'Data::Dumper' => '0',
'ExtUtils::MakeMaker' => '0',
'File::Basename' => '0',
'File::Spec' => '0',
- 'File::Spec::Functions' => '0',
'File::Temp' => '0.20',
'IO::Dir' => '0',
- 'List::Util' => '0',
- 'Scalar::Util' => '0',
'Test::More' => '0.88',
'overload' => '0',
- 'utf8' => '0',
- 'version' => '0.88'
+ 'utf8' => '0'
}
}
};
@@ -3,32 +3,45 @@
use strict;
use warnings;
-# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.014
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.019
use Test::More tests => 1;
use ExtUtils::MakeMaker;
-use File::Spec::Functions;
-use List::Util qw/max first/;
-use Scalar::Util qw/blessed/;
-use version;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+ qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+ |
+ (?:\.[0-9]+) (?:_[0-9]+)?
+ ) | (?:
+ v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+ |
+ (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+ )
+ )/x;
# hide optional CPAN::Meta modules from prereq scanner
# and check if they are available
my $cpan_meta = "CPAN::Meta";
my $cpan_meta_pre = "CPAN::Meta::Prereqs";
-my $cpan_meta_req = "CPAN::Meta::Requirements";
-my $HAS_CPAN_META = eval "require $cpan_meta"; ## no critic
-my $HAS_CPAN_META_REQ = eval "require $cpan_meta_req; $cpan_meta_req->VERSION('2.120900')";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
# Verify requirements?
my $DO_VERIFY_PREREQS = 1;
+sub _max {
+ my $max = shift;
+ $max = ( $_ > $max ) ? $_ : $max for @_;
+ return $max;
+}
+
sub _merge_prereqs {
my ($collector, $prereqs) = @_;
# CPAN::Meta::Prereqs object
- if (blessed $collector eq $cpan_meta_pre) {
+ if (ref $collector eq $cpan_meta_pre) {
return $collector->with_merged_prereqs(
CPAN::Meta::Prereqs->new( $prereqs )
);
@@ -57,12 +70,6 @@ my @exclude = qw(
# Add static prereqs to the included modules list
my $static_prereqs = do 't/00-report-prereqs.dd';
-### XXX: Assume these are Runtime Requires
-my $static_prereqs_requires = $static_prereqs->{runtime}{requires};
-for my $mod (@include) {
- $static_prereqs_requires->{$mod} = 0 unless exists $static_prereqs_requires->{$mod};
-}
-
# Merge all prereqs (either with ::Prereqs or a hashref)
my $full_prereqs = _merge_prereqs(
( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
@@ -70,7 +77,7 @@ my $full_prereqs = _merge_prereqs(
);
# Add dynamic prereqs to the included modules list (if we can)
-my $source = first { -f } 'MYMETA.json', 'MYMETA.yml';
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
if ( $source && $HAS_CPAN_META ) {
if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
$full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
@@ -84,11 +91,16 @@ my @full_reports;
my @dep_errors;
my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
-for my $phase ( qw(configure build test runtime develop) ) {
+# Add static includes into a fake section
+for my $mod (@include) {
+ $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
next unless $req_hash->{$phase};
next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
- for my $type ( qw(requires recommends suggests conflicts) ) {
+ for my $type ( qw(requires recommends suggests conflicts modules) ) {
next unless $req_hash->{$phase}{$type};
my $title = ucfirst($phase).' '.ucfirst($type);
@@ -96,12 +108,12 @@ for my $phase ( qw(configure build test runtime develop) ) {
for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
next if $mod eq 'perl';
- next if first { $_ eq $mod } @exclude;
+ next if grep { $_ eq $mod } @exclude;
my $file = $mod;
$file =~ s{::}{/}g;
$file .= ".pm";
- my $prefix = first { -e catfile($_, $file) } @INC;
+ my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
my $want = $req_hash->{$phase}{$type}{$mod};
$want = "undef" unless defined $want;
@@ -110,12 +122,12 @@ for my $phase ( qw(configure build test runtime develop) ) {
my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
if ($prefix) {
- my $have = MM->parse_version( catfile($prefix, $file) );
+ my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
$have = "undef" unless defined $have;
push @reports, [$mod, $want, $have];
- if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
- if ( ! defined eval { version->parse($have) } ) {
+ if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+ if ( $have !~ /\A$lax_version_re\z/ ) {
push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
}
elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
@@ -135,9 +147,9 @@ for my $phase ( qw(configure build test runtime develop) ) {
if ( @reports ) {
push @full_reports, "=== $title ===\n\n";
- my $ml = max map { length $_->[0] } @reports;
- my $wl = max map { length $_->[1] } @reports;
- my $hl = max map { length $_->[2] } @reports;
+ my $ml = _max( map { length $_->[0] } @reports );
+ my $wl = _max( map { length $_->[1] } @reports );
+ my $hl = _max( map { length $_->[2] } @reports );
splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
@@ -10,7 +10,6 @@ use File::Spec;
use File::Basename qw/basename/;
use IO::Dir;
use Parse::CPAN::Meta 1.4400;
-use version;
delete $ENV{$_} for qw/PERL_JSON_BACKEND PERL_YAML_BACKEND/; # use defaults
@@ -4,6 +4,7 @@ use strict;
use warnings;
use Test::More;
+use CPAN::Meta;
use CPAN::Meta::Merge;
my %base = (
@@ -115,4 +116,9 @@ my $failure2 = eval { $merger->merge(\%base, { provides => { Baz => { file => 'B
is($failure2, undef, 'Trying to merge different author gives an exception');
like $@, qr/^Duplication of element provides\.Baz /, 'Exception looks right';
+# issue 67
+@base{qw/name version release_status/} = qw/Foo-Bar 0.01 testing/;
+my $base_obj = CPAN::Meta->create(\%base);
+ok my $first_result_obj = $merger->merge($base_obj, \%first), 'merging CPAN::Meta objects succeeds';
+
done_testing();
@@ -2,7 +2,7 @@ use 5.006;
use strict;
use warnings;
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.043
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.046
use Test::More tests => 8 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
@@ -55,6 +55,6 @@ for my $lib (@module_files)
-is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
+is(scalar(@warnings), 0, 'no warnings found') or diag 'got warnings: ', explain \@warnings if $ENV{AUTHOR_TESTING};
@@ -11,6 +11,7 @@ add_stopwords(<DATA>);
all_pod_files_spelling_ok( qw( bin lib ) );
__DATA__
distmeta
+dists
dir
mailto
metacpan
@@ -46,24 +47,29 @@ dam
Eric
Wilhelm
ewilhelm
+Graham
+Knop
+haarg
Gregor
Hermann
gregoa
Karen
Etheridge
ether
-Ken
-Williams
-kwilliams
Kenichi
Ishigaki
ishigaki
+Ken
+Williams
+kwilliams
Lars
Dieckow
daxim
Leon
Timmermans
leont
+majensen
+maj
Mark
Fowler
markf
@@ -73,6 +79,7 @@ mst
Michael
Schwern
mschwern
+moznion
Olaf
Alders
olaf
@@ -82,14 +89,18 @@ dolmen
Randy
Sims
randys
-moznion
lib
CPAN
Meta
-Spec
History
-Validator
-Converter
+Meta_1_0
+Spec
+Meta_1_1
+Meta_1_4
+Prereqs
+Meta_1_2
Feature
Merge
-Prereqs
+Validator
+Meta_1_3
+Converter