--- App-Staticperl/staticperl.pod 2010/12/15 00:17:47 1.24 +++ App-Staticperl/staticperl.pod 2010/12/23 14:16:25 1.31 @@ -280,20 +280,54 @@ # run it ./app +Here are the three phase 2 commands: + +=over 4 + +=item F args... + +The "default" bundle command - it interprets the given bundle options and +writes out F, F, F and F +files, useful for embedding. + +=item F args... + +Creates a bundle just like F (in fact, it's the same +as invoking F args...), but then compiles and +links a new perl interpreter that embeds the created bundle, then deletes +all intermediate files. + +=item F filename args... + +Does the same as F (in fact, it's the same as +invoking F filename args...), but then compiles +and links a new standalone application that simply initialises the perl +interpreter. + +The difference to F is that the standalone application +does not act like a perl interpreter would - in fact, by default it would +just do nothing and exit immediately, so you should specify some code to +be executed via the F<--boot> option. + +=back + =head3 OPTION PROCESSING All options can be given as arguments on the command line (typically using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since -specifying a lot of modules can make the command line very cumbersome, -you can put all long options into a "bundle specification file" (with or -without C<--> prefix) and specify this bundle file instead. +specifying a lot of options can make the command line very long and +unwieldy, you can put all long options into a "bundle specification file" +(one option per line, with or without C<--> prefix) and specify this +bundle file instead. -For example, the command given earlier could also look like this: +For example, the command given earlier to link a new F could also +look like this: staticperl mkperl httpd.bundle -And all options could be in F: - +With all options stored in the F file (one option per line, +everything after the option is an argument): + use "Config_heavy.pl" use AnyEvent::Impl::Perl use AnyEvent::HTTPD @@ -301,130 +335,70 @@ add eg/httpd httpd.pm All options that specify modules or files to be added are processed in the -order given on the command line (that affects the C<--use> and C<--eval> -options at the moment). - -=head3 PACKAGE SELECTION WORKFLOW +order given on the command line. -F has a number of options to control package -selection. This section describes how they interact with each other. Also, -since I am still a newbie w.r.t. these issues, maybe future versions of -F will change this, so watch out :) +=head3 BUNDLE CREATION WORKFLOW / STATICPELR MKBUNDLE OPTIONS -The idiom "in order" means "in order that they are specified on the -commandline". If you use a bundle specification file, then the options -will be processed as if they were given in place of the bundle file name. +F works by first assembling a list of candidate +files and modules to include, then filtering them by include/exclude +patterns. The remaining modules (together with their direct dependencies, +such as link libraries and L files) are then converted into +bundle files suitable for embedding. F can then +optionally build a new perl interpreter or a standalone application. =over 4 -=item 1. apply all C<--use>, C<--eval>, C<--add>, C<--addbin> and -C<--incglob> options, in order. - -In addition, C<--use> and C<--eval> dependencies will be added when the -options are processed. - -=item 2. apply all C<--include> and C<--exclude> options, in order. - -All this step does is potentially reduce the number of files already -selected or found in phase 1. - -=item 3. find all modules (== F<.pm> files), gather their static archives -(F<.a>) and AutoLoader splitfiles (F<.ix> and F<.al> files), find any -extra libraries they need for linking (F) and optionally -evaluate any F<.packlist> files. - -This step is required to link against XS extensions and also adds files -required for L to do it's job. - -=back - -After this, all the files selected for bundling will be read and processed -(stripped), the bundle files will be written, and optionally a new F -or application binary will be linked. +=item Step 0: Generic argument processing. -=head3 MKBUNDLE OPTIONS +The following options influence F itself. =over 4 -=item --verbose | -v +=item C<--verbose> | C<-v> Increases the verbosity level by one (the default is C<1>). -=item --quiet | -q +=item C<--quiet> | C<-q> Decreases the verbosity level by one. -=item --strip none|pod|ppi - -Specify the stripping method applied to reduce the file of the perl -sources included. - -The default is C, which uses the L module to remove all -pod documentation, which is very fast and reduces file size a lot. - -The C method uses L to parse and condense the perl sources. This -saves a lot more than just L, and is generally safer, -but is also a lot slower (some files take almost a minute to strip - -F maintains a cache of stripped files to speed up subsequent -runs for this reason). Note that this method doesn't optimise for raw file -size, but for best compression (that means that the uncompressed file size -is a bit larger, but the files compress better, e.g. with F). - -Last not least, if you need accurate line numbers in error messages, -or in the unlikely case where C is too slow, or some module gets -mistreated, you can specify C to not mangle included perl sources in -any way. - -=item --perl - -After writing out the bundle files, try to link a new perl interpreter. It -will be called F and will be left in the current working -directory. The bundle files will be removed. - -This switch is automatically used when F is invoked with the -C command (instead of C): - - # build a new ./perl with only common::sense in it - very small :) - staticperl mkperl -Mcommon::sense - -=item --app name - -After writing out the bundle files, try to link a new standalone -program. It will be called C, and the bundle files get removed after -linking it. +=item any other argument -The difference to the (mutually exclusive) C<--perl> option is that the -binary created by this option will not try to act as a perl interpreter - -instead it will simply initialise the perl interpreter, clean it up and -exit. +Any other argument is interpreted as a bundle specification file, which +supports all options (without extra quoting), one option per line, in the +format C