home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / perl / 5.10.0 / Module / Build / Authoring.pod < prev    next >
Encoding:
Text File  |  2009-06-26  |  10.4 KB  |  320 lines

  1. =head1 NAME
  2.  
  3. Module::Build::Authoring - Authoring Module::Build modules
  4.  
  5.  
  6. =head1 DESCRIPTION
  7.  
  8. When creating a C<Build.PL> script for a module, something like the
  9. following code will typically be used:
  10.  
  11.   use Module::Build;
  12.   my $build = Module::Build->new
  13.     (
  14.      module_name => 'Foo::Bar',
  15.      license  => 'perl',
  16.      requires => {
  17.                   'perl'          => '5.6.1',
  18.                   'Some::Module'  => '1.23',
  19.                   'Other::Module' => '>= 1.2, != 1.5, < 2.0',
  20.                  },
  21.     );
  22.   $build->create_build_script;
  23.  
  24. A simple module could get away with something as short as this for its
  25. C<Build.PL> script:
  26.  
  27.   use Module::Build;
  28.   Module::Build->new(
  29.     module_name => 'Foo::Bar',
  30.     license     => 'perl',
  31.   )->create_build_script;
  32.  
  33. The model used by C<Module::Build> is a lot like the C<MakeMaker>
  34. metaphor, with the following correspondences:
  35.  
  36.    In Module::Build                 In ExtUtils::MakeMaker
  37.   ---------------------------      ------------------------
  38.    Build.PL (initial script)        Makefile.PL (initial script)
  39.    Build (a short perl script)      Makefile (a long Makefile)
  40.    _build/ (saved state info)       various config text in the Makefile
  41.  
  42. Any customization can be done simply by subclassing C<Module::Build>
  43. and adding a method called (for example) C<ACTION_test>, overriding
  44. the default 'test' action.  You could also add a method called
  45. C<ACTION_whatever>, and then you could perform the action C<Build
  46. whatever>.
  47.  
  48. For information on providing compatibility with
  49. C<ExtUtils::MakeMaker>, see L<Module::Build::Compat> and
  50. L<http://www.makemaker.org/wiki/index.cgi?ModuleBuildConversionGuide>.
  51.  
  52.  
  53. =head1 STRUCTURE
  54.  
  55. Module::Build creates a class hierarchy conducive to customization.
  56. Here is the parent-child class hierarchy in classy ASCII art:
  57.  
  58.    /--------------------\
  59.    |   Your::Parent     |  (If you subclass Module::Build)
  60.    \--------------------/
  61.             |
  62.             |
  63.    /--------------------\  (Doesn't define any functionality
  64.    |   Module::Build    |   of its own - just figures out what
  65.    \--------------------/   other modules to load.)
  66.             |
  67.             |
  68.    /-----------------------------------\  (Some values of $^O may
  69.    |   Module::Build::Platform::$^O    |   define specialized functionality.
  70.    \-----------------------------------/   Otherwise it's ...::Default, a
  71.             |                              pass-through class.)
  72.             |
  73.    /--------------------------\
  74.    |   Module::Build::Base    |  (Most of the functionality of 
  75.    \--------------------------/   Module::Build is defined here.)
  76.  
  77.  
  78. =head1 SUBCLASSING
  79.  
  80. Right now, there are two ways to subclass Module::Build.  The first
  81. way is to create a regular module (in a C<.pm> file) that inherits
  82. from Module::Build, and use that module's class instead of using
  83. Module::Build directly:
  84.  
  85.   ------ in Build.PL: ----------
  86.   #!/usr/bin/perl
  87.  
  88.   use lib q(/nonstandard/library/path);
  89.   use My::Builder;  # Or whatever you want to call it
  90.  
  91.   my $build = My::Builder->new
  92.     (
  93.      module_name => 'Foo::Bar',  # All the regular args...
  94.      license     => 'perl',
  95.      dist_author => 'A N Other <me@here.net.au>',
  96.      requires    => { Carp => 0 }
  97.     );
  98.   $build->create_build_script;
  99.  
  100. This is relatively straightforward, and is the best way to do things
  101. if your My::Builder class contains lots of code.  The
  102. C<create_build_script()> method will ensure that the current value of
  103. C<@INC> (including the C</nonstandard/library/path>) is propogated to
  104. the Build script, so that My::Builder can be found when running build
  105. actions.
  106.  
  107. For very small additions, Module::Build provides a C<subclass()>
  108. method that lets you subclass Module::Build more conveniently, without
  109. creating a separate file for your module:
  110.  
  111.   ------ in Build.PL: ----------
  112.   #!/usr/bin/perl
  113.  
  114.   use Module::Build;
  115.   my $class = Module::Build->subclass
  116.     (
  117.      class => 'My::Builder',
  118.      code => q{
  119.        sub ACTION_foo {
  120.          print "I'm fooing to death!\n";
  121.        }
  122.      },
  123.     );
  124.  
  125.   my $build = $class->new
  126.     (
  127.      module_name => 'Foo::Bar',  # All the regular args...
  128.      license     => 'perl',
  129.      dist_author => 'A N Other <me@here.net.au>',
  130.      requires    => { Carp => 0 }
  131.     );
  132.   $build->create_build_script;
  133.  
  134. Behind the scenes, this actually does create a C<.pm> file, since the
  135. code you provide must persist after Build.PL is run if it is to be
  136. very useful.
  137.  
  138. See also the documentation for the L<Module::Build::API/"subclass()">
  139. method.
  140.  
  141.  
  142. =head1 PREREQUISITES
  143.  
  144. =head2 Types of prerequisites
  145.  
  146. To specify what versions of other modules are used by this
  147. distribution, several types of prerequisites can be defined with the
  148. following parameters:
  149.  
  150. =over 3
  151.  
  152. =item configure_requires
  153.  
  154. Items that must be installed I<before> configuring this distribution
  155. (i.e. before running the F<Build.PL> script).  This might be a
  156. specific minimum version of C<Module::Build> or any other module the
  157. F<Build.PL> needs in order to do its stuff.  Clients like C<CPAN.pm>
  158. or C<CPANPLUS> will be expected to pick C<configure_requires> out of the
  159. F<META.yml> file and install these items before running the
  160. C<Build.PL>.
  161.  
  162. *TODO* auto-add M::B?  In what circumstances?
  163.  
  164. =item build_requires
  165.  
  166. Items that are necessary for building and testing this distribution,
  167. but aren't necessary after installation.  This can help users who only
  168. want to install these items temporarily.  It also helps reduce the
  169. size of the CPAN dependency graph if everything isn't smooshed into
  170. C<requires>.
  171.  
  172. =item requires
  173.  
  174. Items that are necessary for basic functioning.
  175.  
  176. =item recommends
  177.  
  178. Items that are recommended for enhanced functionality, but there are
  179. ways to use this distribution without having them installed.  You
  180. might also think of this as "can use" or "is aware of" or "changes
  181. behavior in the presence of".
  182.  
  183. =item conflicts
  184.  
  185. Items that can cause problems with this distribution when installed.
  186. This is pretty rare.
  187.  
  188. =back
  189.  
  190. =head2 Format of prerequisites
  191.  
  192. The prerequisites are given in a hash reference, where the keys are
  193. the module names and the values are version specifiers:
  194.  
  195.   requires => {
  196.                Foo::Module => '2.4',
  197.                Bar::Module => 0,
  198.                Ken::Module => '>= 1.2, != 1.5, < 2.0',
  199.                perl => '5.6.0'
  200.               },
  201.  
  202. The above four version specifiers have different effects.  The value
  203. C<'2.4'> means that B<at least> version 2.4 of C<Foo::Module> must be
  204. installed.  The value C<0> means that B<any> version of C<Bar::Module>
  205. is acceptable, even if C<Bar::Module> doesn't define a version.  The
  206. more verbose value C<'E<gt>= 1.2, != 1.5, E<lt> 2.0'> means that
  207. C<Ken::Module>'s version must be B<at least> 1.2, B<less than> 2.0,
  208. and B<not equal to> 1.5.  The list of criteria is separated by commas,
  209. and all criteria must be satisfied.
  210.  
  211. A special C<perl> entry lets you specify the versions of the Perl
  212. interpreter that are supported by your module.  The same version
  213. dependency-checking semantics are available, except that we also
  214. understand perl's new double-dotted version numbers.
  215.  
  216. =head2 XS Extensions
  217.  
  218. Modules which need to compile XS code should list C<ExtUtils::CBuilder>
  219. as a C<build_requires> element.
  220.  
  221.  
  222. =head1 SAVING CONFIGURATION INFORMATION
  223.  
  224. Module::Build provides a very convenient way to save configuration
  225. information that your installed modules (or your regression tests) can
  226. access.  If your Build process calls the C<feature()> or
  227. C<config_data()> methods, then a C<Foo::Bar::ConfigData> module will
  228. automatically be created for you, where C<Foo::Bar> is the
  229. C<module_name> parameter as passed to C<new()>.  This module provides
  230. access to the data saved by these methods, and a way to update the
  231. values.  There is also a utility script called C<config_data>
  232. distributed with Module::Build that provides a command line interface
  233. to this same functionality.  See also the generated
  234. C<Foo::Bar::ConfigData> documentation, and the C<config_data>
  235. script's documentation, for more information.
  236.  
  237.  
  238. =head1 STARTING MODULE DEVELOPMENT
  239.  
  240. When starting development on a new module, it's rarely worth your time
  241. to create a tree of all the files by hand.  Some automatic
  242. module-creators are available: the oldest is C<h2xs>, which has
  243. shipped with perl itself for a long time.  Its name reflects the fact
  244. that modules were originally conceived of as a way to wrap up a C
  245. library (thus the C<h> part) into perl extensions (thus the C<xs>
  246. part).
  247.  
  248. These days, C<h2xs> has largely been superseded by modules like
  249. C<ExtUtils::ModuleMaker>, and C<Module::Starter>.  They have varying
  250. degrees of support for C<Module::Build>.
  251.  
  252.  
  253. =head1 AUTOMATION
  254.  
  255. One advantage of Module::Build is that since it's implemented as Perl
  256. methods, you can invoke these methods directly if you want to install
  257. a module non-interactively.  For instance, the following Perl script
  258. will invoke the entire build/install procedure:
  259.  
  260.   my $build = Module::Build->new(module_name => 'MyModule');
  261.   $build->dispatch('build');
  262.   $build->dispatch('test');
  263.   $build->dispatch('install');
  264.  
  265. If any of these steps encounters an error, it will throw a fatal
  266. exception.
  267.  
  268. You can also pass arguments as part of the build process:
  269.  
  270.   my $build = Module::Build->new(module_name => 'MyModule');
  271.   $build->dispatch('build');
  272.   $build->dispatch('test', verbose => 1);
  273.   $build->dispatch('install', sitelib => '/my/secret/place/');
  274.  
  275. Building and installing modules in this way skips creating the
  276. C<Build> script.
  277.  
  278.  
  279. =head1 MIGRATION
  280.  
  281. Note that if you want to provide both a F<Makefile.PL> and a
  282. F<Build.PL> for your distribution, you probably want to add the
  283. following to C<WriteMakefile> in your F<Makefile.PL> so that MakeMaker
  284. doesn't try to run your F<Build.PL> as a normal F<.PL> file:
  285.  
  286.   PL_FILES => {},
  287.  
  288. You may also be interested in looking at the C<Module::Build::Compat>
  289. module, which can automatically create various kinds of F<Makefile.PL>
  290. compatibility layers.
  291.  
  292.  
  293. =head1 AUTHOR
  294.  
  295. Ken Williams <kwilliams@cpan.org>
  296.  
  297. Development questions, bug reports, and patches should be sent to the
  298. Module-Build mailing list at <module-build@perl.org>.
  299.  
  300. Bug reports are also welcome at
  301. <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build>.
  302.  
  303. The latest development version is available from the Subversion
  304. repository at <https://svn.perl.org/modules/Module-Build/trunk/>
  305.  
  306.  
  307. =head1 SEE ALSO
  308.  
  309. perl(1), L<Module::Build>(3), L<Module::Build::API>(3),
  310. L<Module::Build::Cookbook>(3), L<ExtUtils::MakeMaker>(3), L<YAML>(3)
  311.  
  312. F<META.yml> Specification:
  313. L<http://module-build.sourceforge.net/META-spec-current.html>
  314.  
  315. L<http://www.dsmit.com/cons/>
  316.  
  317. L<http://search.cpan.org/dist/PerlBuildSystem/>
  318.  
  319. =cut
  320.