diff options
Diffstat (limited to 'lib/cpanfile.pod')
-rw-r--r-- | lib/cpanfile.pod | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/cpanfile.pod b/lib/cpanfile.pod new file mode 100644 index 0000000..a554dd6 --- /dev/null +++ b/lib/cpanfile.pod @@ -0,0 +1,128 @@ +=head1 NAME + +cpanfile - A format for describing CPAN dependencies for Perl applications + +=head1 SYNOPSIS + + requires 'Plack', '1.0'; # 1.0 or newer + requires 'JSON', '>= 2.00, < 2.80'; + + recommends 'JSON::XS', '2.0'; + conflicts 'JSON', '< 1.0'; + + on 'test' => sub { + requires 'Test::More', '>= 0.96, < 2.0'; + recommends 'Test::TCP', '1.12'; + }; + + on 'develop' => sub { + recommends 'Devel::NYTProf'; + }; + + feature 'sqlite', 'SQLite support' => sub { + recommends 'DBD::SQLite'; + }; + +=head1 VERSION + +This document describes cpanfile format version 1.0. + +=head1 DESCRIPTION + +C<cpanfile> describes CPAN dependencies required to execute associated +Perl code. + +=head1 SYNTAX + +=over 4 + +=item requires, recommends, suggests, conflicts + + requires $module, $version_requirement; + +Describes the requirement for a module. See L<CPAN::Meta::Spec> for +the meanings of each requirement type. + +When version requirement is omitted, it is assumed that C<0> is +passed, meaning any version of the module would satisfy the +requirement. + +Version requirement can either be a version number or a string that +satisfies L<CPAN::Meta::Spec/Version Ranges>, such as C<< >= 1.0, != +1.1 >>. + +Note that, per L<CPAN::Meta::Spec>, when a plain version number is +given, it means the version I<or newer> is required. If you want a +specific version for a module, use the specific range syntax, i.e. +C< == 2.1 >. + +=item on + + on $phase => sub { ... }; + +Describe requirements for a specific phase. Available phases are +C<configure>, C<build>, C<test>, C<runtime> and C<develop>. + +=item feature + + feature $identifier, $description => sub { ... }; + +Group requirements with features. Description can be omitted, when it +is assumed to be the same as identifier. See +L<CPAN::Meta::Spec/optional_features> for more details. + +=item configure_requires, build_requires, test_requires, author_requires + + configure_requires $module, $version; + # on 'configure' => sub { requires $module, $version } + + build_requires $module, $version; + # on 'build' => sub { requires $module, $version }; + + test_requires $module, $version; + # on 'test' => sub { requires $module, $version }; + + author_requires $module, $version; + # on 'develop' => sub { requires $module, $version }; + +Shortcut for C<requires> in specific phase. This is mainly provided +for compatibilities with L<Module::Install> DSL. + +=back + +=head1 USAGE + +C<cpanfile> is a format to describe dependencies. How to use this file +is dependent on the tools reading/writing it. + +Usually, you're expected to place the C<cpanfile> in the root of the +directory containing the associated code. + +Tools supporting C<cpanfile> format (e.g. L<cpanm> and L<carton>) will +automatically detect the file and install dependencies for the code to +run. + +There are also tools to support converting cpanfile to CPAN toolchain +compatible formats, such as L<Module::CPANfile>, +L<Dist::Zilla::Plugin::Prereqs::FromCPANfile>, +L<Module::Install::CPANfile>, so that C<cpanfile> can be used to +describe dependencies for a CPAN distribution as well. + +=head1 AUTHOR + +Tatsuhiko Miyagawa + +=head1 ACKNOWLEDGEMENTS + +The format (DSL syntax) is inspired by L<Module::Install> and +L<Module::Build::Functions>. + +C<cpanfile> specification (this document) is based on Ruby's +L<Gemfile|http://bundler.io/v1.3/man/gemfile.5.html> specification. + +=head1 SEE ALSO + +L<CPAN::Meta::Spec> L<Module::Install> L<Carton> + +=cut + |