dwww Home | Manual pages | Find package

CPAN::...eta_1_2(3perl) Perl Programmers Reference GuideCPAN::...eta_1_2(3perl)

NAME
       CPAN::Meta::History::Meta_1_2 - Version 1.2 metadata specification for
       META.yml

PREFACE
       This is a historical copy of the version 1.2 specification for META.yml
       files, copyright by Ken Williams and licensed under the same terms as
       Perl itself.

       Modifications from the original:

       •   Various spelling corrections

       •   Include list of valid licenses from Module::Build 0.2611 rather than
           linking  to  the  module,  with  minor  updates to text and links to
           reflect versions at the time of publication.

       •   Fixed some dead links to point to active resources.

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

DESCRIPTION
       This document describes version 1.2 of the META.yml specification.

       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.

       Note: The latest stable version of  this  specification  can  always  be
       found  at  <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
       <http://module-build.sourceforge.net/META-spec-blead.html>.

FORMAT
       META.yml   files   are    written    in    the    YAML    format    (see
       <http://www.yaml.org/>).

       See  the following links to learn why we chose YAML instead of, say, XML
       or Data::Dumper:

       •   Module::Build                      design                      plans
           <http://www.nntp.perl.org/group/perl.makemaker/2002/04/msg407.html>

       •   Not   keen   on   YAML  <http://www.nntp.perl.org/group/perl.module-
           authors/2003/11/msg1353.html>

       •   META      Concerns      <http://www.nntp.perl.org/group/perl.module-
           authors/2003/11/msg1385.html>

TERMINOLOGY
       distribution
           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.

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

VERSION SPECIFICATIONS
       Some  fields  require   a   version   specification   (ex.   "requires",
       "recommends", "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 < (less than), <= (less than  or  equal),  >
       (greater  than),  >=  (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.

HEADER
       The first line of a META.yml file should be a valid YAML document header
       like "--- #YAML:1.0".

FIELDS
       The  rest  of  the  META.yml file is one big YAML mapping whose keys are
       described here.

   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.

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

   version
       Example:

         version: 0.20

       (Spec 1.0) [required] {version} The version of the distribution to which
       the META.yml file refers.

   abstract
       Example:

         abstract: Build and install Perl modules.

       (Spec 1.1) [required] {string} A short description of the purpose of the
       distribution.

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

   license
       Example:

         license: perl

       (Spec 1.0) [required] {string} The license under which this distribution
       may be used and redistributed.

       Must be one of the following licenses:

       perl
           The  distribution  may  be  copied  and redistributed under the same
           terms as perl itself (this is  by  far  the  most  common  licensing
           option  for  modules on CPAN).  This is a dual license, in which the
           user may choose between either the GPL version  1  or  the  Artistic
           version 1 license.

       gpl The  distribution  is distributed under the terms of the GNU General
           Public License version 2 (<http://opensource.org/licenses/GPL-2.0>).

       lgpl
           The distribution is distributed under the terms of  the  GNU  Lesser
           General          Public          License          version          2
           (<http://opensource.org/licenses/LGPL-2.1>).

       artistic
           The distribution is licensed under the Artistic License  version  1,
           as  specified by the Artistic file in the standard perl distribution
           (<http://opensource.org/licenses/Artistic-Perl-1.0>).

       bsd The  distribution  is  licensed  under  the  BSD  3-Clause   License
           (<http://opensource.org/licenses/BSD-3-Clause>).

       open_source
           The   distribution   is   licensed  under  some  other  Open  Source
           Initiative-approved           license           listed            at
           <http://www.opensource.org/licenses/>.

       unrestricted
           The distribution is licensed under a license that is not approved by
           www.opensource.org   <http://www.opensource.org/>  but  that  allows
           distribution without restrictions.

       restrictive
           The distribution may not be redistributed without special permission
           from the author and/or copyright holder.

   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 "module"s (which can also mean a
       collection of modules), but some things are "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.

   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
       Module::Build for the "requires" parameter.

   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.

       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

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

   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.

   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.

   dynamic_config
       Example:

         dynamic_config: 0

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

       If this field is omitted, it defaults to 1 (true).

   private
       (Deprecated) (Spec 1.0) [optional] {map} This field has been renamed  to
       "no_index".  See below.

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

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

       file

       (Spec 1.1) [optional] Exclude any listed file(s).

       dir

       (Spec 1.1) [optional] Exclude anything below the listed directory(ies).

       package

       (Spec 1.1) [optional] Exclude the listed package(s).

       namespace

       (Spec 1.1) [optional] Excludes anything below the  listed  namespace(s),
       but not the listed namespace(s) its self.

   keywords
       Example:

         keywords:
           - make
           - build
           - install

       (Spec  1.1)  [optional]  {list}  A  sequence  of  keywords/phrases  that
       describe this distribution.

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

       The current set of official keys is:

       homepage
         The official home of this project on the web.

       license
         An URL for an official statement of this distribution's license.

       bugtracker
         An URL for a bug tracker (e.g. Bugzilla or RT queue) for this project.

   generated_by
       Example:

         generated_by: Module::Build version 0.20

       (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]

SEE ALSO
       CPAN <http://www.cpan.org/>

       CPAN.pm

       CPANPLUS

       Data::Dumper

       ExtUtils::MakeMaker

       Module::Build

       Module::Install

       XML <http://www.w3.org/XML/>

       YAML <http://www.yaml.org/>

HISTORY
       March 14, 2003 (Pi day)
           • Created version 1.0 of this document.

       May 8, 2003
           • Added  the  "dynamic_config"  field,  which  was  missing from the
             initial version.

       November 13, 2003
           • Added more YAML rationale articles.

           • Fixed existing link to YAML discussion  thread  to  point  to  new
             <http://nntp.x.perl.org/group/> site.

           • Added and deprecated the "private" field.

           • Added "abstract", "configure", "requires_packages", "requires_os",
             "excludes_os", and "no_index" fields.

           • Bumped version.

       November 16, 2003
           • Added "generation", "authored_by" fields.

           • Add alternative proposal to the "recommends" field.

           • Add proposal for a "requires_build_tools" field.

       December 9, 2003
           • Added link to latest version of this specification on CPAN.

           • Added section "VERSION SPECIFICATIONS".

           • Chang       name       from       Module::Build::META-spec      to
             CPAN::META::Specification.

           • Add proposal for "auto_regenerate" field.

       December 15, 2003
           • Add "index" field as a compliment to "no_index"

           • Add "keywords" field as a means to aid searching distributions.

           • Add "TERMINOLOGY" section to explain certain  terms  that  may  be
             ambiguous.

       July 26, 2005
           • 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.

           • Clarified "dynamic_config" a bit.

       August 23, 2005
           • Removed the name "CPAN::META::Specification", since that implies a
             module that doesn't actually exist.

perl v5.40.1                       2026-08-30           CPAN::...eta_1_2(3perl)

Generated by dwww version 1.16 on Sat Oct 3 08:43:28 CEST 2026.