File Coverage

blib/lib/smokebrew.pm
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 8 8 100.0


line stmt bran cond sub pod time code
1             package smokebrew;
2             $smokebrew::VERSION = '1.06';
3             #ABSTRACT: Automated Perl building and installation for CPAN Testers
4              
5 1     1   142987 use strict;
  1         2  
  1         41  
6 1     1   8 use warnings;
  1         3  
  1         90  
7              
8             1;
9              
10             __END__
11              
12             =pod
13              
14             =encoding UTF-8
15              
16             =head1 NAME
17              
18             smokebrew - Automated Perl building and installation for CPAN Testers
19              
20             =head1 VERSION
21              
22             version 1.06
23              
24             =head1 SYNOPSIS
25              
26             smokebrew --email tester@cpan.org --builddir /home/tester/pit/build --prefix /home/tester/pit/rel \
27             --perlargs "-Dusethreads" --perlargs "-Duse64bitint" --mirrors http://cpan.hexten.net/ \
28             --plugin App::SmokeBrew::Plugin::CPANPLUS::YACSmoke --recent --verbose
29              
30             =head1 DESCRIPTION
31              
32             smokebrew is a utility that builds, installs and configures perls for CPAN testing.
33              
34             It downloads, extracts, patches ( if applicable ), configures, builds, tests and installs
35             perl versions and runs an specified L<App::SmokeBrew::Plugin> to configure the perl installation
36             for CPAN testing.
37              
38             It accepts a number of command line switches or options options specified in a configuration file.
39              
40             =head1 COMMAND LINE SWITCHES
41              
42             =over
43              
44             =item C<--configfile FILE>
45              
46             Specify a configuration file to use. See L</CONFIGURATION FILE> for more details.
47              
48             =item C<--builddir DIRPATH>
49              
50             This is a required argument. This is the directory path that smokebrew will use for building and
51             configuration. If the path doesn't exist it will be created.
52              
53             =item C<--prefix DIRPATH>
54              
55             This is a required argument. This is the directory that will be the root for perl installations.
56             If the path doesn't exist it will be created.
57              
58             --prefix /home/cpan/pit/rel
59              
60             In C</home/cpan/pit/rel> there will be a C<perl-version> for each perl that is installed.
61              
62             /home/cpan/pit/rel/perl-5.8.9
63             /home/cpan/pit/rel/perl-5.10.0
64              
65             etc.
66              
67             =item C<--email EMAILADDRESS>
68              
69             This is a required argument. Must be a valid email address as constrained by L<MooseX::Types::Email>.
70             This will be passed to the given L<App::SmokeBrew::Plugin> when configuring the each perl for CPAN
71             Testing.
72              
73             =item C<--mx MAILEXCHANGER>
74              
75             This is an optional argument. Can be a FQDN, hostname or IP address and is a mail exchanger that should be
76             used instead of sending CPAN Test reports directly to C<perl.org> MX.
77             This will be passed to the given L<App::SmokeBrew::Plugin> when configuring the each perl for CPAN Testing
78              
79             =item C<--plugin PLUGIN>
80              
81             This is a required argument. Specify the L<App::SmokeBrew::Plugin> to use. Plugins are verified as installed
82             by using L<Module::Pluggable>. This is what will be used to configure each perl for CPAN Testing.
83             You may either specify the full plugin module name eg. L<App::SmokeBrew::Plugin::CPANPLUS::YACSmoke> or, for
84             convenience, specify the last part of the plugin without the L<App::SmokeBrew::Plugin> prefix,
85             eg. L<CPANPLUS::YACSmoke>.
86              
87             =item C<--perlargs FLAG>
88              
89             This is an optional argument. Specify a L<Configure> command line argument that should be passed through
90             when building each perl. There is no need to specify C<-Dprefix> or C<-Dusedevel> as smokebrew handles these for you.
91             This switch may be specified multiple times with different arguments.
92              
93             smokebrew --perlargs "-Dusethreads" --perlargs "-Duse64bitint"
94              
95             This would pass the flags for building a threaded 64bit perl to L<Configure>.
96              
97             If you specify C<-Dusequadmath> smokebrew will only build perls that actually support quadmath, namely
98             perls greater than or equal to v5.21.4
99              
100             =item C<--mirrors URL>
101              
102             This is an optional argument. Specify the URL of a CPAN mirror that should be used for retrieving required files
103             during the build process and what will end up as the mirror list when the given L<App::SmokeBrew::Plugin> is run.
104             This switch may be specified multiple times with different arguments.
105              
106             smokebrew --mirrors http://cpan.hexten.net/ --mirrors http://cpan.cpantesters.org/
107              
108             =item C<--verbose>
109              
110             This an optional switch. Specify if smokebrew should produce verbose output about what it is doing.
111             By default it is silent.
112              
113             =item C<--noclean>
114              
115             This is an optional switch. Specify whether smokebrew should clean up in the C<builddir> as it
116             processes. The default is to be tidy.
117              
118             =item C<--nozapman>
119              
120             This is an optional switch. smokebrew usually removes the C<man> pages that are generated by the perl installation.
121             Specify this option if you wish the C<man> pages to be retained.
122              
123             =item C<--skiptest>
124              
125             This is an optional switch. Specify whether smokebrew should skip the C<make test> phase of building a
126             perl. The default is to run C<make test>.
127              
128             =item C<--force>
129              
130             This is an optional switch. By default if a perl installation already exists for a given perl version
131             smokebrew will skip over the build and configuration for that perl. Enabling this option will make
132             smokebrew zap the existing installation and build and configure again.
133              
134             =item C<--forcecfg>
135              
136             This is an optional switch. By default if a perl installation already exists for a given perl version
137             smokebrew will skip over the build and configuration for that perl. Enabling this option will make
138             smokebrew skip the build process, but enable reconfiguration.
139              
140             =item C<--make MAKE>
141              
142             This is an optional argument. Specify the C<make> executable that should be used. The default is C<make>.
143              
144             =item C<--jobs int>
145              
146             This is an optional argument. Specify an C<integer> that should be used with C<make -j> to enable parallel builds.
147             This will be ignored for when building any perl below v5.19.4.
148              
149             =back
150              
151             There are a number of options that allow you to specify what particular perl versions are installed.
152              
153             Perls older than C<5.006> are not supported.
154              
155             Perl versions C<5.6.0> and C<5.8.0> will also be filtered out as they are considered troublesome.
156              
157             Without any of the following options, smokebrew will attempt to install all perls that are greater than or
158             equal to C<5.006> ( subject to the above filtering rules ).
159              
160             Available perl releases are determined by use of L<Module::CoreList>, if you find that you haven't got
161             what you consider to be a full list, please update L<Module::CoreList> to latest version available from
162             CPAN.
163              
164             =over
165              
166             =item C<--recent>
167              
168             This will indicate that you wish to only install C<recent> perls, which are stable perls that are greater than or
169             equal to C<5.8.9>. At the time of writing these were:
170              
171             5.8.9, 5.10.0, 5.10.1, 5.12.0, 5.12.1, 5.12.2, 5.12.3, 5.12.4, 5.12.5, 5.14.0, 5.14.1, 5.14.2,
172             5.14.3, 5.16.0, 5.16.1 and 5.16.2
173              
174             =item C<--stable>
175              
176             This will indicate that you wish to only install C<stable> perls, which are perl releases with an even version number.
177              
178             Examples:
179              
180             5.6.2
181             5.8.9
182             5.10.1
183             5.12.1
184              
185             =item C<--modern>
186              
187             This will indicate that you wish to only install C<modern> perls, which are stable perls that are greater than or
188             equal to C<5.10.0>. At the time of writing these were:
189              
190             5.10.0, 5.10.1, 5.12.0, 5.12.1, 5.12.2, 5.12.3, 5.12.4, 5.12.5, 5.14.0, 5.14.1, 5.14.2,
191             5.14.3, 5.16.0, 5.16.1 and 5.16.2
192              
193             =item C<--latest>
194              
195             This will indicate that you wish to only install the latest recent perls, which are stable perls that are greater than or
196             equal to C<5.8.9>. At the time of writing these were:
197              
198             5.8.9, 5.10.1, 5.12.5, 5.14.3, 5.16.2
199              
200             =item C<--devel>
201              
202             This will indicate that you wish to only install C<development> perls, which are perl development releases and have
203             an odd version number.
204              
205             Examples:
206              
207             5.7.3
208             5.9.5
209             5.13.0
210              
211             =item C<--install>
212              
213             Specify a particular version of perl that you wish to install. This can be of the form C<perl-version> or C<version>.
214             This overrides the C<--recent>, C<--stable> and C<--devel> switches.
215              
216             Example:
217              
218             --install perl-5.10.1
219              
220             --install 5.10.1
221              
222             =back
223              
224             =head1 CONFIGURATION FILE
225              
226             All the command line switches may also be specifed in a configuration file ( except C<configfile> for
227             obvious reasons ).
228              
229             The configuration file is C<INI> style format. L<App::SmokeBrew::IniFile> a subclass of L<Config::INI::Reader>
230             is used to read the file.
231              
232             By default smokebrew looks for a directory in your C<HOME> directory called C<.smokebrew> and for a file
233             called C<smokebrew.cfg> within that directory.
234              
235             Setting the environment variable C<PERL5_SMOKEBREW_DIR> will affect where smokebrew looks for the C<.smokebrew>
236             directory.
237              
238             Command line switches will override anything specified in the configuration file, including multi-value parameters.
239             This is a feature of L<MooseX::Getopt>.
240              
241             =head2 GLOBAL OPTIONS
242              
243             =over
244              
245             =item C<builddir=DIRPATH>
246              
247             This is a required argument. This is the directory path that smokebrew will use for building and
248             configuration. If the path doesn't exist it will be created.
249              
250             builddir=/home/cpan/pit/build
251              
252             =item C<prefix=DIRPATH>
253              
254             This is a required argument. This is the directory that will be the root for perl installations.
255             If the path doesn't exist it will be created.
256              
257             prefix=/home/cpan/pit/rel
258              
259             =item C<email=EMAILADDRESS>
260              
261             This is a required argument. Must be a valid email address as constrained by L<MooseX::Types::Email>.
262             This will be passed to the given L<App::SmokeBrew::Plugin> when configuring the each perl for CPAN
263             Testing.
264              
265             email=foo@bar.com
266              
267             =item C<mx=MAILEXCHANGER>
268              
269             This is an optional argument. Can be a FQDN, hostname or IP address and is a mail exchanger that should be
270             used instead of sending CPAN Test reports directly to C<perl.org> MX.
271             This will be passed to the given L<App::SmokeBrew::Plugin> when configuring the each perl for CPAN Testing
272              
273             mx=mx.foo.com
274              
275             =item C<plugin=PLUGIN>
276              
277             This is a required argument. Specify the L<App::SmokeBrew::Plugin> to use. Plugins are verified as installed
278             by using L<Module::Pluggable>. This is what will be used to configure each perl for CPAN Testing.
279             You may either specify the full plugin module name eg. L<App::SmokeBrew::Plugin::CPANPLUS::YACSmoke> or, for
280             convenience, specify the last part of the plugin without the L<App::SmokeBrew::Plugin> prefix,
281             eg. L<CPANPLUS::YACSmoke>.
282              
283             plugin=App::SmokeBrew::Plugin::CPANPLUS::YACSmoke
284              
285             or
286              
287             plugin=CPANPLUS::YACSmoke
288              
289             =item C<perlargs=FLAG>
290              
291             This is an optional argument. Specify a L<Configure> command line argument that should be passed through
292             when building each perl. There is no need to specify C<-Dprefix> or C<-Dusedevel> as smokebrew handles these for you.
293             This switch may be specified multiple times with different arguments.
294              
295             perlargs=-Dusethreads
296             perlargs=-Duse64bitint
297              
298             This would pass the flags for building a threaded 64bit perl to L<Configure>.
299              
300             =item C<mirrors=URL>
301              
302             This is an optional argument. Specify the URL of a CPAN mirror that should be used for retrieving required files
303             during the build process and what will end up as the mirror list when the given L<App::SmokeBrew::Plugin> is run.
304             This switch may be specified multiple times with different arguments.
305              
306             mirrors=http://cpan.hexten.net/
307             mirrors=http://cpan.cpantesters.org/
308              
309             =item C<verbose=BOOL>
310              
311             This an optional switch. Specify if smokebrew should produce verbose output about what it is doing.
312             By default it is silent.
313              
314             verbose=1
315              
316             =item C<noclean=BOOL>
317              
318             This is an optional switch. Specify whether smokebrew should clean up in the C<builddir> as it
319             processes. The default is to be tidy.
320              
321             noclean=1
322              
323             =item C<nozapman=BOOL>
324              
325             This is an optional switch. smokebrew usually removes the C<man> pages that are generated by the perl installation.
326             Specify this option if you wish the C<man> pages to be retained.
327              
328             nozapman=1
329              
330             =item C<skiptest=BOOL>
331              
332             This is an optional switch. Specify whether smokebrew should skip the C<make test> phase of building a
333             perl. The default is to run C<make test>.
334              
335             skiptest=1
336              
337             =item C<make=MAKE>
338              
339             This is an optional argument. Specify the C<make> executable that should be used. The default is C<make>.
340              
341             make=gmake
342              
343             =back
344              
345             There are a number of options that allow you to specify what particular perl versions are installed.
346              
347             Perls older than C<5.006> are not supported.
348              
349             Perl versions C<5.6.0> and C<5.8.0> will also be filtered out as they are considered troublesome.
350              
351             Without any of the following options, smokebrew will attempt to install all perls that are greater than or
352             equal to C<5.006> ( subject to the above filtering rules ).
353              
354             Available perl releases are determined by use of L<Module::CoreList>, if you find that you haven't got
355             what you consider to be a full list, please update L<Module::CoreList> to latest version available from
356             CPAN.
357              
358             =over
359              
360             =item C<recent=BOOL>
361              
362             This will indicate that you wish to only install C<recent> perls, which are stable perls that are greater than or
363             equal to C<5.8.9>. At the time of writing these were:
364              
365             5.8.9, 5.10.0, 5.10.1, 5.12.0 and 5.12.1
366              
367             =item C<stable=BOOL>
368              
369             This will indicate that you wish to only install C<stable> perls, which are perl releases with an even version number.
370              
371             Examples:
372              
373             5.6.2
374             5.8.9
375             5.10.1
376             5.12.1
377              
378             =item C<devel=BOOL>
379              
380             This will indicate that you wish to only install C<development> perls, which are perl development releases and have
381             an odd version number.
382              
383             Examples:
384              
385             5.7.3
386             5.9.5
387             5.13.0
388              
389             =back
390              
391             =head2 PLUGIN CONFIGURATION
392              
393             Options to be passed to plugins may be specified under named sections in the configuration file.
394              
395             You may either specify the full plugin module name as the section name
396             eg. L<App::SmokeBrew::Plugin::CPANPLUS::YACSmoke> or, for
397             convenience, specify the last part of the plugin without the L<App::SmokeBrew::Plugin> prefix,
398             eg. L<CPANPLUS::YACSmoke>.
399              
400             [Random::Plugin]
401              
402             someopt = foobar
403              
404             =head1 KUDOS
405              
406             GUGOD for perlbrew, which inspired this utility ( and obviously gave it its name ).
407              
408             Florian Ragwitz for assistance with coercing an arrayref of URIs.
409              
410             H.Merijn Brand for mentioning L<Devel::PPPort>'s buildperl.pl, which I stole for L<Devel::PatchPerl>
411             which smokebrew uses to patch older perls.
412              
413             L<Moose> for making this possible.
414              
415             =head1 SEE ALSO
416              
417             L<Module::CoreList>
418              
419             L<MooseX::Types::Email>
420              
421             L<App::SmokeBrew::Plugin>
422              
423             =head1 AUTHOR
424              
425             Chris Williams <chris@bingosnet.co.uk>
426              
427             =head1 COPYRIGHT AND LICENSE
428              
429             This software is copyright (c) 2023 by Chris Williams.
430              
431             This is free software; you can redistribute it and/or modify it under
432             the same terms as the Perl 5 programming language system itself.
433              
434             =cut