The 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 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.

This is the primary object described by the 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.

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).

(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 libww-perl distribution (see
http://search.cpan.org/author/GAAS/libwww-perl/).

(Spec 1.0) [optional] {string} What kind of stuff is contained in this
distribution. Most things on CPAN are modules (which can also mean
a collection of modules), but some things are scripts.

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.

(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
the Module::Build manpage for the ``requires'' parameter.

(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 requires,
build_requires, conflicts, requires_packages,
requires_os, and excludes_os which have the same meaning in
this subcontext as described elsewhere in this document.

(Spec 1.0) [optional] {boolean} A boolean flag indicating whether a Build.PL
or 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.

(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 Module::Build that can generate the
provides mapping for your distribution automatically, make sure you
examine what it generates to make sure it makes sense - indexers will
usually trust the 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 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.

(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 provides field is
present.

(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.)

(Spec 1.1) [optional] {map} A mapping of any URL resources related to
this distribution. All-lower-case keys, such as homepage,
license, and 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.

(Spec 1.0) [required] {string} Indicates the tool that was used to create this
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 META.yml was generated by hand, it is suggested that
the author be specified here.

[Note: My meta_stats.pl script which I use to gather statistics
regarding 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]

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.

Changed authored_by to author, since that's always been what
it's actually called in actual META.yml files.

Added the ``=='' operator to the list of supported version-checking
operators.

Noted that the distribution_type field is basically meaningless,
and shouldn't really be used.