ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/App-Staticperl/staticperl.pod
Revision: 1.70
Committed: Sat Apr 4 15:26:02 2026 UTC (5 months, 2 weeks ago) by root
Branch: MAIN
CVS Tags: rel-1_5, HEAD
Changes since 1.69: +21 -0 lines
Log Message:
1.5

File Contents

# Content
1 =head1 NAME
2
3 staticperl - perl, libc, 100 modules, all in one standalone 500kb file
4
5 =head1 SYNOPSIS
6
7 staticperl help # print the embedded documentation
8 staticperl fetch # fetch and unpack perl sources
9 staticperl configure # fetch and then configure perl
10 staticperl build # configure and then build perl
11 staticperl install # build and then install perl
12 staticperl clean # clean most intermediate files (restart at configure)
13 staticperl distclean # delete everything installed by this script
14 staticperl perl ... # invoke the perlinterpreter
15 staticperl cpan # invoke CPAN shell
16 staticperl instsrc path... # install unpacked modules
17 staticperl instcpan modulename... # install modules from CPAN
18 staticperl instdist archive... # install distribution archive
19 staticperl insturl url... # install distribution from url
20 staticperl mkbundle <bundle-args...> # see documentation
21 staticperl mkperl <bundle-args...> # see documentation
22 staticperl mkapp appname <bundle-args...> # see documentation
23
24 Typical Examples:
25
26 staticperl install # fetch, configure, build and install perl
27 staticperl cpan # run interactive cpan shell
28 staticperl mkperl -MConfig_heavy.pl # build a perl that supports -V
29 staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http
30 # build a perl with the above modules linked in
31 staticperl mkapp myapp --boot mainprog mymodules
32 # build a binary "myapp" from mainprog and mymodules
33
34 =head1 DESCRIPTION
35
36 This script helps you to create single-file perl interpreters
37 or applications, or embedding a perl interpreter in your
38 applications. Single-file means that it is fully self-contained - no
39 separate shared objects, no autoload fragments, no .pm or .pl files are
40 needed. And when linking statically, you can create (or embed) a single
41 file that contains perl interpreter, libc, all the modules you need, all
42 the libraries you need and of course your actual program.
43
44 With F<uClibc> and F<upx> on x86, you can create a single 500kb binary
45 that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO,
46 Coro and so on. Or any other choice of modules (and some other size :).
47
48 To see how this turns out, you can try out smallperl and bigperl, two
49 pre-built static and compressed perl binaries with many and even more
50 modules: just follow the links at L<http://staticperl.schmorp.de/>.
51
52 The created files do not need write access to the file system (like PAR
53 does). In fact, since this script is in many ways similar to PAR::Packer,
54 here are the differences:
55
56 =over 4
57
58 =item * The generated executables are much smaller than PAR created ones.
59
60 Shared objects and the perl binary contain a lot of extra info, while
61 the static nature of F<staticperl> allows the linker to remove all
62 functionality and meta-info not required by the final executable. Even
63 extensions statically compiled into perl at build time will only be
64 present in the final executable when needed.
65
66 In addition, F<staticperl> can strip perl sources much more effectively
67 than PAR.
68
69 =item * The generated executables start much faster.
70
71 There is no need to unpack files, or even to parse Zip archives (which is
72 slow and memory-consuming business).
73
74 =item * The generated executables don't need a writable filesystem.
75
76 F<staticperl> loads all required files directly from memory. There is no
77 need to unpack files into a temporary directory.
78
79 =item * More control over included files, more burden.
80
81 PAR tries to be maintenance and hassle-free - it tries to include more
82 files than necessary to make sure everything works out of the box. It
83 mostly succeeds at this, but he extra files (such as the unicode database)
84 can take substantial amounts of memory and file size.
85
86 With F<staticperl>, the burden is mostly with the developer - only direct
87 compile-time dependencies and L<AutoLoader> are handled automatically.
88 This means the modules to include often need to be tweaked manually.
89
90 All this does not preclude more permissive modes to be implemented in
91 the future, but right now, you have to resolve hidden dependencies
92 manually.
93
94 =item * PAR works out of the box, F<staticperl> does not.
95
96 Maintaining your own custom perl build can be a pain in the ass, and while
97 F<staticperl> tries to make this easy, it still requires a custom perl
98 build and possibly fiddling with some modules. PAR is likely to produce
99 results faster.
100
101 Ok, PAR never has worked for me out of the box, and for some people,
102 F<staticperl> does work out of the box, as they don't count "fiddling with
103 module use lists" against it, but nevertheless, F<staticperl> is certainly
104 a bit more difficult to use.
105
106 =back
107
108 =head1 HOW DOES IT WORK?
109
110 Simple: F<staticperl> downloads, compile and installs a perl version of
111 your choice in F<~/.staticperl>. You can add extra modules either by
112 letting F<staticperl> install them for you automatically, or by using CPAN
113 and doing it interactively. This usually takes 5-10 minutes, depending on
114 the speed of your computer and your internet connection.
115
116 It is possible to do program development at this stage, too.
117
118 Afterwards, you create a list of files and modules you want to include,
119 and then either build a new perl binary (that acts just like a normal perl
120 except everything is compiled in), or you create bundle files (basically C
121 sources you can use to embed all files into your project).
122
123 This step is very fast (a few seconds if PPI is not used for stripping, or
124 the stripped files are in the cache), and can be tweaked and repeated as
125 often as necessary.
126
127 =head1 THE F<STATICPERL> SCRIPT
128
129 This module installs a script called F<staticperl> into your perl
130 binary directory. The script is fully self-contained, and can be
131 used without perl (for example, in an uClibc/dietlibc/musl chroot
132 environment). In fact, it can be extracted from the C<App::Staticperl>
133 distribution tarball as F<bin/staticperl>, without any installation. The
134 newest (possibly alpha) version can also be downloaded from
135 L<http://staticperl.schmorp.de/staticperl>.
136
137 F<staticperl> interprets the first argument as a command to execute,
138 optionally followed by any parameters.
139
140 There are two command categories: the "phase 1" commands which deal with
141 installing perl and perl modules, and the "phase 2" commands, which deal
142 with creating binaries and bundle files.
143
144 =head2 PHASE 1 COMMANDS: INSTALLING PERL
145
146 The most important command is F<install>, which does basically
147 everything. The default is to download and install perl 5.12.3 and a few
148 modules required by F<staticperl> itself, but all this can (and should) be
149 changed - see L<CONFIGURATION>, below.
150
151 The command
152
153 staticperl install
154
155 is normally all you need: It installs the perl interpreter in
156 F<~/.staticperl/perl>. It downloads, configures, builds and installs the
157 perl interpreter if required.
158
159 Most of the following F<staticperl> subcommands simply run one or more
160 steps of this sequence.
161
162 If it fails, then most commonly because the compiler options I selected
163 are not supported by your compiler - either edit the F<staticperl> script
164 yourself or create F<~/.staticperl> shell script where your set working
165 C<PERL_CCFLAGS> etc. variables.
166
167 To force recompilation or reinstallation, you need to run F<staticperl
168 distclean> first.
169
170 =over 4
171
172 =item F<staticperl version>
173
174 Prints some info about the version of the F<staticperl> script you are using.
175
176 =item F<staticperl fetch>
177
178 Runs only the download and unpack phase, unless this has already happened.
179
180 =item F<staticperl configure>
181
182 Configures the unpacked perl sources, potentially after downloading them first.
183
184 =item F<staticperl build>
185
186 Builds the configured perl sources, potentially after automatically
187 configuring them.
188
189 =item F<staticperl install>
190
191 Wipes the perl installation directory (usually F<~/.staticperl/perl>) and
192 installs the perl distribution, potentially after building it first.
193
194 =item F<staticperl perl> [args...]
195
196 Invokes the compiled perl interpreter with the given
197 arguments. Basically the same as starting perl directly (usually via
198 F<~/.staticperl/bin/perl>), but beats typing the path sometimes.
199
200 Example: check that the Gtk2 module is installed and loadable.
201
202 staticperl perl -MGtk2 -e0
203
204 =item F<staticperl cpan> [args...]
205
206 Starts an interactive CPAN shell that you can use to install further
207 modules. Installs the perl first if necessary, but apart from that,
208 no magic is involved: you could just as well run it manually via
209 F<~/.staticperl/perl/bin/cpan>, except that F<staticperl> additionally
210 sets the environment variable C<$PERL> to the path of the perl
211 interpreter, which is handy in subshells.
212
213 Any additional arguments are simply passed to the F<cpan> command.
214
215 =item F<staticperl instcpan> module...
216
217 Tries to install all the modules given and their dependencies, using CPAN.
218
219 Example:
220
221 staticperl instcpan EV AnyEvent::HTTPD Coro
222
223 =item F<staticperl instsrc> directory...
224
225 In the unlikely case that you have unpacked perl modules around and want
226 to install from these instead of from CPAN, you can do this using this
227 command by specifying all the directories with modules in them that you
228 want to have built.
229
230 =item F<staticperl instdist> file...
231
232 Unpacks each file (using C<tar x>, which hopefully handles any
233 compression), then calls C<instsrc> on the directory inside. The archive
234 must contain a single directory at the toplevel.
235
236 Example:
237
238 staticperl instdist Compress-Stream-Zstd-0.206.tar.gz
239
240 =item F<staticperl insturl> url...
241
242 Downloads each url and calls C<instdist> on it. USed to install perl
243 distributions directly from an URL.
244
245 Example:
246
247 sttaicperl insturl https://perlmulticore.schmorp.de/pkg/Compress-Stream-Zstd-0.206.tar.gz
248
249 =item F<staticperl clean>
250
251 Deletes the perl source directory (and potentially cleans up other
252 intermediate files). This can be used to clean up files only needed for
253 building perl, without removing the installed perl interpreter.
254
255 At the moment, it doesn't delete downloaded tarballs.
256
257 The exact semantics of this command will probably change.
258
259 =item F<staticperl distclean>
260
261 This wipes your complete F<~/.staticperl> directory. Be careful with this,
262 it nukes your perl download, perl sources, perl distribution and any
263 installed modules. It is useful if you wish to start over "from scratch"
264 or when you want to uninstall F<staticperl>.
265
266 =back
267
268 =head2 PHASE 2 COMMANDS: BUILDING PERL BUNDLES
269
270 Building (linking) a new F<perl> binary is handled by a separate
271 script. To make it easy to use F<staticperl> from a F<chroot>, the script
272 is embedded into F<staticperl>, which will write it out and call for you
273 with any arguments you pass:
274
275 staticperl mkbundle mkbundle-args...
276
277 In the oh so unlikely case of something not working here, you
278 can run the script manually as well (by default it is written to
279 F<~/.staticperl/mkbundle>).
280
281 F<mkbundle> is a more conventional command and expect the argument
282 syntax commonly used on UNIX clones. For example, this command builds
283 a new F<perl> binary and includes F<Config.pm> (for F<perl -V>),
284 F<AnyEvent::HTTPD>, F<URI> and a custom F<httpd> script (from F<eg/httpd>
285 in this distribution):
286
287 # first make sure we have perl and the required modules
288 staticperl instcpan AnyEvent::HTTPD
289
290 # now build the perl
291 staticperl mkperl -MConfig_heavy.pl -MAnyEvent::Impl::Perl \
292 -MAnyEvent::HTTPD -MURI::http \
293 --add 'eg/httpd httpd.pm'
294
295 # finally, invoke it
296 ./perl -Mhttpd
297
298 As you can see, things are not quite as trivial: the L<Config> module has
299 a hidden dependency which is not even a perl module (F<Config_heavy.pl>),
300 L<AnyEvent> needs at least one event loop backend that we have to
301 specify manually (here L<AnyEvent::Impl::Perl>), and the F<URI> module
302 (required by L<AnyEvent::HTTPD>) implements various URI schemes as extra
303 modules - since L<AnyEvent::HTTPD> only needs C<http> URIs, we only need
304 to include that module. I found out about these dependencies by carefully
305 watching any error messages about missing modules...
306
307 Instead of building a new perl binary, you can also build a standalone
308 application:
309
310 # build the app
311 staticperl mkapp app --boot eg/httpd \
312 -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI::http
313
314 # run it
315 ./app
316
317 Here are the three phase 2 commands:
318
319 =over 4
320
321 =item F<staticperl mkbundle> args...
322
323 The "default" bundle command - it interprets the given bundle options and
324 writes out F<bundle.h>, F<bundle.c>, F<bundle.ccopts> and F<bundle.ldopts>
325 files, useful for embedding.
326
327 =item F<staticperl mkperl> args...
328
329 Creates a bundle just like F<staticperl mkbundle> (in fact, it's the same
330 as invoking F<staticperl mkbundle --perl> args...), but then compiles and
331 links a new perl interpreter that embeds the created bundle, then deletes
332 all intermediate files.
333
334 =item F<staticperl mkapp> filename args...
335
336 Does the same as F<staticperl mkbundle> (in fact, it's the same as
337 invoking F<staticperl mkbundle --app> filename args...), but then compiles
338 and links a new standalone application that simply initialises the perl
339 interpreter.
340
341 The difference to F<staticperl mkperl> is that the standalone application
342 does not act like a perl interpreter would - in fact, by default it would
343 just do nothing and exit immediately, so you should specify some code to
344 be executed via the F<--boot> option.
345
346 =back
347
348 =head3 OPTION PROCESSING
349
350 All options can be given as arguments on the command line (typically
351 using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since
352 specifying a lot of options can make the command line very long and
353 unwieldy, you can put all long options into a "bundle specification file"
354 (one option per line, with or without C<--> prefix) and specify this
355 bundle file instead.
356
357 For example, the command given earlier to link a new F<perl> could also
358 look like this:
359
360 staticperl mkperl httpd.bundle
361
362 With all options stored in the F<httpd.bundle> file (one option per line,
363 everything after the option is an argument):
364
365 use "Config_heavy.pl"
366 use AnyEvent::Impl::Perl
367 use AnyEvent::HTTPD
368 use URI::http
369 add eg/httpd httpd.pm
370
371 All options that specify modules or files to be added are processed in the
372 order given on the command line.
373
374 =head3 BUNDLE CREATION WORKFLOW / STATICPERL MKBUNDLE OPTIONS
375
376 F<staticperl mkbundle> works by first assembling a list of candidate
377 files and modules to include, then filtering them by include/exclude
378 patterns. The remaining modules (together with their direct dependencies,
379 such as link libraries and L<AutoLoader> files) are then converted into
380 bundle files suitable for embedding. F<staticperl mkbundle> can then
381 optionally build a new perl interpreter or a standalone application.
382
383 =over 4
384
385 =item Step 0: Generic argument processing.
386
387 The following options influence F<staticperl mkbundle> itself.
388
389 =over 4
390
391 =item C<--verbose> | C<-v>
392
393 Increases the verbosity level by one (the default is C<1>).
394
395 =item C<--quiet> | C<-q>
396
397 Decreases the verbosity level by one.
398
399 =item any other argument
400
401 Any other argument is interpreted as a bundle specification file, which
402 supports all options (without extra quoting), one option per line, in the
403 format C<option> or C<option argument>. They will effectively be expanded
404 and processed as if they were directly written on the command line, in
405 place of the file name.
406
407 =back
408
409 =item Step 1: gather candidate files and modules
410
411 In this step, modules, perl libraries (F<.pl> files) and other files are
412 selected for inclusion in the bundle. The relevant options are executed
413 in order (this makes a difference mostly for C<--eval>, which can rely on
414 earlier C<--use> options to have been executed).
415
416 =over 4
417
418 =item C<--use> F<module> | C<-M>F<module>
419
420 Include the named module or perl library and trace direct
421 dependencies. This is done by loading the module in a subprocess and
422 tracing which other modules and files it actually loads.
423
424 Example: include AnyEvent and AnyEvent::Impl::Perl.
425
426 staticperl mkbundle --use AnyEvent --use AnyEvent::Impl::Perl
427
428 Sometimes you want to load old-style "perl libraries" (F<.pl> files), or
429 maybe other weirdly named files. To support this, the C<--use> option
430 actually tries to do what you mean, depending on the string you specify:
431
432 =over 4
433
434 =item a possibly valid module name, e.g. F<common::sense>, F<Carp>,
435 F<Coro::Mysql>.
436
437 If the string contains no quotes, no F</> and no F<.>, then C<--use>
438 assumes that it is a normal module name. It will create a new package and
439 evaluate a C<use module> in it, i.e. it will load the package and do a
440 default import.
441
442 The import step is done because many modules trigger more dependencies
443 when something is imported than without.
444
445 =item anything that contains F</> or F<.> characters,
446 e.g. F<utf8_heavy.pl>, F<Module/private/data.pl>.
447
448 The string will be quoted and passed to require, as if you used C<require
449 $module>. Nothing will be imported.
450
451 =item "path" or 'path', e.g. C<"utf8_heavy.pl">.
452
453 If you enclose the name into single or double quotes, then the quotes will
454 be removed and the resulting string will be passed to require. This syntax
455 is form compatibility with older versions of staticperl and should not be
456 used anymore.
457
458 =back
459
460 Example: C<use> AnyEvent::Socket, once using C<use> (importing the
461 symbols), and once via C<require>, not importing any symbols. The first
462 form is preferred as many modules load some extra dependencies when asked
463 to export symbols.
464
465 staticperl mkbundle -MAnyEvent::Socket # use + import
466 staticperl mkbundle -MAnyEvent/Socket.pm # require only
467
468 Example: include the required files for F<perl -V> to work in all its
469 glory (F<Config.pm> is included automatically by the dependency tracker).
470
471 # shell command
472 staticperl mkbundle -MConfig_heavy.pl
473
474 # bundle specification file
475 use Config_heavy.pl
476
477 The C<-M>module syntax is included as a convenience that might be easier
478 to remember than C<--use> - it's the same switch as perl itself uses
479 to load modules. Or maybe it confuses people. Time will tell. Or maybe
480 not. Sigh.
481
482 =item C<--eval> "perl code" | C<-e> "perl code"
483
484 Sometimes it is easier (or necessary) to specify dependencies using perl
485 code, or maybe one of the modules you use need a special use statement. In
486 that case, you can use C<--eval> to execute some perl snippet or set some
487 variables or whatever you need. All files C<require>'d or C<use>'d while
488 executing the snippet are included in the final bundle.
489
490 Keep in mind that F<mkbundle> will not import any symbols from the modules
491 named by the C<--use> option, so do not expect the symbols from modules
492 you C<--use>'d earlier on the command line to be available.
493
494 Example: force L<AnyEvent> to detect a backend and therefore include it
495 in the final bundle.
496
497 staticperl mkbundle --eval 'use AnyEvent; AnyEvent::detect'
498
499 # or like this
500 staticperl mkbundle -MAnyEvent --eval 'AnyEvent::detect'
501
502 Example: use a separate "bootstrap" script that C<use>'s lots of modules
503 and also include this in the final bundle, to be executed automatically
504 when the interpreter is initialised.
505
506 staticperl mkbundle --eval 'do "bootstrap"' --boot bootstrap
507
508 =item C<--boot> F<filename>
509
510 Include the given file in the bundle and arrange for it to be
511 executed (using C<require>) before the main program when the new perl
512 is initialised. This can be used to modify C<@INC> or do similar
513 modifications before the perl interpreter executes scripts given on the
514 command line (or via C<-e>). This works even in an embedded interpreter -
515 the file will be executed during interpreter initialisation in that case.
516
517 =item C<--incglob> pattern
518
519 This goes through all standard library directories and tries to match any
520 F<.pm> and F<.pl> files against the extended glob pattern (see below). If
521 a file matches, it is added. The pattern is matched against the full path
522 of the file (sans the library directory prefix), e.g. F<Sys/Syslog.pm>.
523
524 This is very useful to include "everything":
525
526 --incglob '*'
527
528 It is also useful for including perl libraries, or trees of those, such as
529 the unicode database files needed by some perl built-ins, the regex engine
530 and other modules.
531
532 --incglob '/unicore/**.pl'
533
534 =item C<--add> F<file> | C<--add> "F<file> alias"
535
536 Adds the given (perl) file into the bundle (and optionally call it
537 "alias"). The F<file> is either an absolute path or a path relative to the
538 current directory. If an alias is specified, then this is the name it will
539 use for C<@INC> searches, otherwise the path F<file> will be used as the
540 internal name.
541
542 This switch is used to include extra files into the bundle.
543
544 Example: embed the file F<httpd> in the current directory as F<httpd.pm>
545 when creating the bundle.
546
547 staticperl mkperl --add "httpd httpd.pm"
548
549 # can be accessed via "use httpd"
550
551 Example: add a file F<initcode> from the current directory.
552
553 staticperl mkperl --add 'initcode &initcode'
554
555 # can be accessed via "do '&initcode'"
556
557 Example: add local files as extra modules in the bundle.
558
559 # specification file
560 add file1 myfiles/file1.pm
561 add file2 myfiles/file2.pm
562 add file3 myfiles/file3.pl
563
564 # then later, in perl, use
565 use myfiles::file1;
566 require myfiles::file2;
567 my $res = do "myfiles/file3.pl";
568
569 =item C<--addbin> F<file> | C<--addbin> "F<file> alias"
570
571 Just like C<--add>, except that it treats the file as binary and adds it
572 without any post-processing (perl files might get stripped to reduce their
573 size).
574
575 If you specify an alias you should probably add a C</> prefix to avoid
576 clashing with embedded perl files (whose paths never start with C</>),
577 and/or use a special directory prefix, such as C</res/name>.
578
579 You can later get a copy of these files by calling C<static::find
580 "alias">.
581
582 An alternative way to embed binary files is to convert them to perl and
583 use C<do> to get the contents - this method is a bit cumbersome, but works
584 both inside and outside of a staticperl bundle, without extra ado:
585
586 # a "binary" file, call it "bindata.pl"
587 <<'SOME_MARKER'
588 binary data NOT containing SOME_MARKER
589 SOME_MARKER
590
591 # load the binary
592 chomp (my $data = do "bindata.pl");
593
594 =item C<--allow-dynamic>
595
596 By default, when F<mkbundle> hits a dynamic perl extension (e.g. a F<.so>
597 or F<.dll> file), it will stop with a fatal error.
598
599 When this option is enabled, F<mkbundle> packages the shared
600 object into the bundle instead, with a prefix of F<!>
601 (e.g. F<!auto/List/Util/Util.so>). What you do with that is currently up
602 to you, F<staticperl> has no special support for this at the moment, apart
603 from working around the lack of availability of F<PerlIO::scalar> while
604 bootstrapping, at a speed cost.
605
606 One way to deal with this is to write all files starting with F<!> into
607 some directory and then C<unshift> that path onto C<@INC>.
608
609 (TODO for future self: write and insert a suitable example here, if
610 somebody requests it).
611
612 =back
613
614 =item Step 2: filter all files using C<--include> and C<--exclude> options.
615
616 After all candidate files and modules are added, they are I<filtered>
617 by a combination of C<--include> and C<--exclude> patterns (there is an
618 implicit C<--include *> at the end, so if no filters are specified, all
619 files are included).
620
621 All that this step does is potentially reduce the number of files that are
622 to be included - no new files are added during this step.
623
624 =over 4
625
626 =item C<--include> pattern | C<-i> pattern | C<--exclude> pattern | C<-x> pattern
627
628 These specify an include or exclude pattern to be applied to the candidate
629 file list. An include makes sure that the given files will be part of the
630 resulting file set, an exclude will exclude remaining files. The patterns
631 are "extended glob patterns" (see below).
632
633 The patterns are applied "in order" - files included via earlier
634 C<--include> specifications cannot be removed by any following
635 C<--exclude>, and likewise, and file excluded by an earlier C<--exclude>
636 cannot be added by any following C<--include>.
637
638 For example, to include everything except C<Devel> modules, but still
639 include F<Devel::PPPort>, you could use this:
640
641 --incglob '*' -i '/Devel/PPPort.pm' -x '/Devel/**'
642
643 =back
644
645 =item Step 3: add any extra or "hidden" dependencies.
646
647 F<staticperl> currently knows about three extra types of depdendencies
648 that are added automatically. Only one (F<.packlist> files) is currently
649 optional and can be influenced, the others are always included:
650
651 =over 4
652
653 =item C<--usepacklists>
654
655 Read F<.packlist> files for each distribution that happens to match a
656 module name you specified. Sounds weird, and it is, so expect semantics to
657 change somehow in the future.
658
659 The idea is that most CPAN distributions have a F<.pm> file that matches
660 the name of the distribution (which is rather reasonable after all).
661
662 If this switch is enabled, then if any of the F<.pm> files that have been
663 selected match an install distribution, then all F<.pm>, F<.pl>, F<.al>
664 and F<.ix> files installed by this distribution are also included.
665
666 For example, using this switch, when the L<URI> module is specified, then
667 all L<URI> submodules that have been installed via the CPAN distribution
668 are included as well, so you don't have to manually specify them.
669
670 =item L<AutoLoader> splitfiles
671
672 Some modules use L<AutoLoader> - less commonly (hopefully) used functions
673 are split into separate F<.al> files, and an index (F<.ix>) file contains
674 the prototypes.
675
676 Both F<.ix> and F<.al> files will be detected automatically and added to
677 the bundle.
678
679 =item link libraries (F<.a> files)
680
681 Modules using XS (or any other non-perl language extension compiled at
682 installation time) will have a static archive (typically F<.a>). These
683 will automatically be added to the linker options in F<bundle.ldopts>.
684
685 Should F<staticperl> find a dynamic link library (typically F<.so>) it
686 will warn about it - obviously this shouldn't happen unless you use
687 F<staticperl> on the wrong perl, or one (probably wrongly) configured to
688 use dynamic loading.
689
690 =item extra libraries (F<extralibs.ld>)
691
692 Some modules need linking against external libraries - these are found in
693 F<extralibs.ld> and added to F<bundle.ldopts>.
694
695 =back
696
697 =item Step 4: write bundle files and optionally link a program
698
699 At this point, the select files will be read, processed (stripped) and
700 finally the bundle files get written to disk, and F<staticperl mkbundle>
701 is normally finished. Optionally, it can go a step further and either link
702 a new F<perl> binary with all selected modules and files inside, or build
703 a standalone application.
704
705 Both the contents of the bundle files and any extra linking is controlled
706 by these options:
707
708 =over 4
709
710 =item C<--strip> C<none>|C<pod>|C<ppi>
711
712 Specify the stripping method applied to reduce the file of the perl
713 sources included.
714
715 The default is C<pod>, which uses the L<Pod::Strip> module to remove all
716 pod documentation, which is very fast and reduces file size a lot.
717
718 The C<ppi> method uses L<PPI> to parse and condense the perl sources. This
719 saves a lot more than just L<Pod::Strip>, and is generally safer,
720 but is also a lot slower (some files take almost a minute to strip -
721 F<staticperl> maintains a cache of stripped files to speed up subsequent
722 runs for this reason). Note that this method doesn't optimise for raw file
723 size, but for best compression (that means that the uncompressed file size
724 is a bit larger, but the files compress better, e.g. with F<upx>).
725
726 Last not least, if you need accurate line numbers in error messages,
727 or in the unlikely case where C<pod> is too slow, or some module gets
728 mistreated, you can specify C<none> to not mangle included perl sources in
729 any way.
730
731 =item C<--compress> C<none>|C<lzf>
732
733 Compress each included library file with C<lzf> (default), or do not
734 compress (C<none>). LZF compression typically halves the size of the
735 included library data at almost no overhead, but is counterproductive if
736 you are using another compression solution such as C<UPX>, so it can be
737 disabled.
738
739 =item C<--perl>
740
741 After writing out the bundle files, try to link a new perl interpreter. It
742 will be called F<perl> and will be left in the current working
743 directory. The bundle files will be removed.
744
745 This switch is automatically used when F<staticperl> is invoked with the
746 C<mkperl> command instead of C<mkbundle>.
747
748 Example: build a new F<./perl> binary with only L<common::sense> inside -
749 it will be even smaller than the standard perl interpreter as none of the
750 modules of the base distribution (such as L<Fcntl>) will be included.
751
752 staticperl mkperl -Mcommon::sense
753
754 =item C<--app> F<name>
755
756 After writing out the bundle files, try to link a new standalone
757 program. It will be called C<name>, and the bundle files get removed after
758 linking it.
759
760 This switch is automatically used when F<staticperl> is invoked with the
761 C<mkapp> command instead of C<mkbundle>.
762
763 The difference to the (mutually exclusive) C<--perl> option is that the
764 binary created by this option will not try to act as a perl interpreter -
765 instead it will simply initialise the perl interpreter, clean it up and
766 exit.
767
768 This means that, by default, it will do nothing but burn a few CPU cycles
769 - for it to do something useful you I<must> add some boot code, e.g. with
770 the C<--boot> option.
771
772 Example: create a standalone perl binary called F<./myexe> that will
773 execute F<appfile> when it is started.
774
775 staticperl mkbundle --app myexe --boot appfile
776
777 =item C<--ignore-env>
778
779 Generates extra code to unset some environment variables before
780 initialising/running perl. Perl supports a lot of environment variables
781 that might alter execution in ways that might be undesirable for
782 standalone applications, and this option removes those known to cause
783 trouble.
784
785 Specifically, these are removed:
786
787 C<PERL_HASH_SEED_DEBUG> and C<PERL_DEBUG_MSTATS> can cause undesirable
788 output, C<PERL5OPT>, C<PERL_DESTRUCT_LEVEL>, C<PERL_HASH_SEED> and
789 C<PERL_SIGNALS> can alter execution significantly, and C<PERL_UNICODE>,
790 C<PERLIO_DEBUG> and C<PERLIO> can affect input and output.
791
792 The variables C<PERL_LIB> and C<PERL5_LIB> are always ignored because the
793 startup code used by F<staticperl> overrides C<@INC> in all cases.
794
795 This option will not make your program more secure (unless you are
796 running with elevated privileges), but it will reduce the surprise effect
797 when a user has these environment variables set and doesn't expect your
798 standalone program to act like a perl interpreter.
799
800 =item C<--static>
801
802 Add C<-static> to F<bundle.ldopts>, which means a fully static (if
803 supported by the OS) executable will be created. This is not immensely
804 useful when just creating the bundle files, but is most useful when
805 linking a binary with the C<--perl> or C<--app> options.
806
807 The default is to link the new binary dynamically (that means all perl
808 modules are linked statically, but all external libraries are still
809 referenced dynamically).
810
811 Keep in mind that Solaris doesn't support static linking at all, and
812 systems based on GNU libc don't really support it in a very usable fashion
813 either. Try dietlibc or musl if you want to create fully statically linked
814 executables, or try the C<--staticlib> option to link only some libraries
815 statically.
816
817 =item C<--staticlib> libname
818
819 When not linking fully statically, this option allows you to link specific
820 libraries statically. What it does is simply replace all occurrences of
821 C<-llibname> with the GCC-specific C<-Wl,-Bstatic -llibname -Wl,-Bdynamic>
822 option.
823
824 This will have no effect unless the library is actually linked against,
825 specifically, C<--staticlib> will not link against the named library
826 unless it would be linked against anyway.
827
828 Example: link libcrypt statically into the final binary.
829
830 staticperl mkperl -MIO::AIO --staticlib crypt
831
832 # ldopts might now contain:
833 # -lm -Wl,-Bstatic -lcrypt -Wl,-Bdynamic -lpthread
834
835 =item C<--extra-cflags> string
836
837 Specifies extra compiler flags, used when compiling the bundle file. The
838 flags are appended to all the existing flags, so can be sued to override
839 settings.
840
841 =item C<--extra-ldflags> string
842
843 Specifies extra linker flags, used when linking the bundle.
844
845 =item C<--extra-libs> string
846
847 Extra linker flags, appended at the end when linking. The difference to
848 C<--extra-ldflags> is that the ldflags are appended to the flags, before
849 the objects and libraries, and the extra libs are added at the end.
850
851 =back
852
853 =back
854
855 =head3 EXTENDED GLOB PATTERNS
856
857 Some options of F<staticperl mkbundle> expect an I<extended glob
858 pattern>. This is neither a normal shell glob nor a regex, but something
859 in between. The idea has been copied from rsync, and there are the current
860 matching rules:
861
862 =over 4
863
864 =item Patterns starting with F</> will be a anchored at the root of the library tree.
865
866 That is, F</unicore> will match the F<unicore> directory in C<@INC>, but
867 nothing inside, and neither any other file or directory called F<unicore>
868 anywhere else in the hierarchy.
869
870 =item Patterns not starting with F</> will be anchored at the end of the path.
871
872 That is, F<idna.pl> will match any file called F<idna.pl> anywhere in the
873 hierarchy, but not any directories of the same name.
874
875 =item A F<*> matches anything within a single path component.
876
877 That is, F</unicore/*.pl> would match all F<.pl> files directly inside
878 C</unicore>, not any deeper level F<.pl> files. Or in other words, F<*>
879 will not match slashes.
880
881 =item A F<**> matches anything.
882
883 That is, F</unicore/**.pl> would match all F<.pl> files under F</unicore>,
884 no matter how deeply nested they are inside subdirectories.
885
886 =item A F<?> matches a single character within a component.
887
888 That is, F</Encode/??.pm> matches F</Encode/JP.pm>, but not the
889 hypothetical F</Encode/J/.pm>, as F<?> does not match F</>.
890
891 =back
892
893 =head2 F<STATICPERL> CONFIGURATION AND HOOKS
894
895 During (each) startup, F<staticperl> tries to source some shell files to
896 allow you to fine-tune/override configuration settings.
897
898 In them you can override shell variables, or define shell functions
899 ("hooks") to be called at specific phases during installation. For
900 example, you could define a C<postinstall> hook to install additional
901 modules from CPAN each time you start from scratch.
902
903 If the environment variable C<$STATICPERLRC> is set, then F<staticperl>
904 will try to source the file named with it only. Otherwise, it tries the
905 following shell files in order:
906
907 /etc/staticperlrc
908 ~/.staticperlrc
909 $STATICPERL/rc
910
911 Note that the last file is erased during F<staticperl distclean>, so
912 generally should not be used.
913
914 =head3 CONFIGURATION VARIABLES
915
916 =head4 Variables you I<should> override
917
918 =over 4
919
920 =item C<EMAIL>
921
922 The e-mail address of the person who built this binary. Has no good
923 default, so should be specified by you.
924
925 =item C<CPAN>
926
927 The URL of the CPAN mirror to use (e.g. L<http://mirror.netcologne.de/cpan/>).
928
929 =item C<EXTRA_MODULES>
930
931 Additional modules installed during F<staticperl install>. Here you can
932 set which modules you want have to installed from CPAN.
933
934 Example: I really really need EV, AnyEvent, Coro and AnyEvent::AIO.
935
936 EXTRA_MODULES="EV AnyEvent Coro AnyEvent::AIO"
937
938 Note that you can also use a C<postinstall> hook to achieve this, and
939 more.
940
941 =back
942
943 =head4 Variables you might I<want> to override
944
945 =over 4
946
947 =item C<STATICPERL>
948
949 The directory where staticperl stores all its files
950 (default: F<~/.staticperl>).
951
952 =item C<DLCACHE>
953
954 The path to a directory (will be created if it doesn't exist) where
955 downloaded perl sources are being cached, to avoid downloading them
956 again. The default is empty, which means there is no cache.
957
958 =item C<PERL_VERSION>
959
960 The perl version to install - C<5.12.5> is a good choice for small builds,
961 but C<5.8.9> is also a good choice (5.8.9 is much smaller than 5.12.5), if
962 it builds on your system.
963
964 You can also set this variable to the absolute URL of a tarball (F<.tar>,
965 F<.tar.gz>, F<.tar.bz2>, F<.tar.lzma> or F<.tar.xz>), or to the absolute
966 path of an unpacked perl source tree, which will be copied.
967
968 The default is currently
969 F<http://stableperl.schmorp.de/dist/latest.tar.gz>, i.e. the latest
970 stableperl release.
971
972 =item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ...
973
974 Usually set to C<1> to make modules "less inquisitive" during their
975 installation. You can set (and export!) any environment variable you want
976 - some modules (such as L<Coro> or L<EV>) use environment variables for
977 further tweaking.
978
979 =item C<PERL_PREFIX>
980
981 The directory where perl gets installed (default: F<$STATICPERL/perl>),
982 i.e. where the F<bin> and F<lib> subdirectories will end up. Previous
983 contents will be removed on installation.
984
985 =item C<PERL_CONFIGURE>
986
987 Additional Configure options - these are simply passed to the perl
988 Configure script. For example, if you wanted to enable dynamic loading,
989 you could pass C<-Dusedl>. To enable ithreads (Why would you want that
990 insanity? Don't! Use L<Coro> or L<forks> instead!) you would pass
991 C<-Duseithreads> and so on.
992
993 More commonly, you would either activate 64 bit integer support
994 (C<-Duse64bitint>), or disable large files support (C<-Uuselargefiles>),
995 to reduce file size further.
996
997 =item C<PERL_CC>, C<PERL_CCFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS>
998
999 These flags are passed to perl's F<Configure> script, and are generally
1000 optimised for small size (at the cost of performance). Since they also
1001 contain subtle workarounds around various build issues, changing these
1002 usually requires understanding their default values - best look at
1003 the top of the F<staticperl> script for more info on these, and use a
1004 F<~/.staticperlrc> to override them.
1005
1006 Most of the variables override (or modify) the corresponding F<Configure>
1007 variable, except C<PERL_CCFLAGS>, which gets appended.
1008
1009 The default for C<PERL_OPTIMIZE> is C<-Os> (assuming gcc or compatible
1010 compilers), and for C<PERL_LIBS> is C<-lm -lcrypt>, which should be good
1011 for most (but not all) systems.
1012
1013 For other compilers or more customised optimisation settings, you need to
1014 adjust these, e.g. in your F<~/.staticperlrc>.
1015
1016 With gcc on x86 and amd64, you can often get more space-savings by using:
1017
1018 -Os -ffunction-sections -fdata-sections -finline-limit=8 -mpush-args
1019 -mno-inline-stringops-dynamically -mno-align-stringops
1020
1021 And on x86 and pentium3 and newer (basically everything you might ever
1022 want to run on), adding these is even better for space-savings (use
1023 C<-mtune=core2> or something newer for much faster code, too):
1024
1025 -fomit-frame-pointer -march=pentium3 -mtune=i386
1026
1027 =back
1028
1029 =head4 Variables you probably I<do not want> to override
1030
1031 =over 4
1032
1033 =item C<MAKE>
1034
1035 The make command to use - default is C<make>.
1036
1037 =item C<MKBUNDLE>
1038
1039 Where F<staticperl> writes the C<mkbundle> command to
1040 (default: F<$STATICPERL/mkbundle>).
1041
1042 =item C<STATICPERL_MODULES>
1043
1044 Additional modules needed by C<mkbundle> - should therefore not be changed
1045 unless you know what you are doing.
1046
1047 =back
1048
1049 =head3 OVERRIDABLE HOOKS
1050
1051 In addition to environment variables, it is possible to provide some
1052 shell functions that are called at specific times. To provide your own
1053 commands, just define the corresponding function.
1054
1055 The actual order in which hooks are invoked during a full install
1056 from scratch is C<preconfigure>, C<patchconfig>, C<postconfigure>,
1057 C<postbuild>, C<postinstall>.
1058
1059 Example: install extra modules from CPAN and from some directories
1060 at F<staticperl install> time.
1061
1062 postinstall() {
1063 rm -rf lib/threads* # weg mit Schaden
1064 instcpan IO::AIO EV
1065 instsrc ~/src/AnyEvent
1066 instsrc ~/src/XML-Sablotron-1.0100001
1067 instcpan Anyevent::AIO AnyEvent::HTTPD
1068 }
1069
1070 =over 4
1071
1072 =item preconfigure
1073
1074 Called just before running F<./Configure> in the perl source
1075 directory. Current working directory is the perl source directory.
1076
1077 This can be used to set any C<PERL_xxx> variables, which might be costly
1078 to compute.
1079
1080 =item patchconfig
1081
1082 Called after running F<./Configure> in the perl source directory to create
1083 F<./config.sh>, but before running F<./Configure -S> to actually apply the
1084 config. Current working directory is the perl source directory.
1085
1086 Can be used to tailor/patch F<config.sh> or do any other modifications.
1087
1088 =item postconfigure
1089
1090 Called after configuring, but before building perl. Current working
1091 directory is the perl source directory.
1092
1093 =item postbuild
1094
1095 Called after building, but before installing perl. Current working
1096 directory is the perl source directory.
1097
1098 I have no clue what this could be used for - tell me.
1099
1100 =item postcpanconfig
1101
1102 Called just after CPAN has been configured, but before it has been used to
1103 install anything. You can further change the configuration like this:
1104
1105 "$PERL_PREFIX"/bin/perl -MCPAN::MyConfig -MCPAN -e '
1106 CPAN::Shell->o (conf => urllist => push => "'"$CPAN"'");
1107 ' || fatal "error while initialising CPAN in postcpanconfig"
1108
1109 =item postinstall
1110
1111 Called after perl and any extra modules have been installed in C<$PREFIX>,
1112 but before setting the "installation O.K." flag.
1113
1114 The current working directory is C<$PREFIX>, but maybe you should not rely
1115 on that.
1116
1117 This hook is most useful to customise the installation, by deleting files,
1118 or installing extra modules using the C<instcpan> or C<instsrc> functions.
1119
1120 The script must return with a zero exit status, or the installation will
1121 fail.
1122
1123 =back
1124
1125 =head1 ANATOMY OF A BUNDLE
1126
1127 When not building a new perl binary, C<mkbundle> will leave a number of
1128 files in the current working directory, which can be used to embed a perl
1129 interpreter in your program.
1130
1131 Intimate knowledge of L<perlembed> and preferably some experience with
1132 embedding perl is highly recommended.
1133
1134 C<mkperl> (or the C<--perl> option) basically does this to link the new
1135 interpreter (it also adds a main program to F<bundle.>):
1136
1137 $Config{cc} $(cat bundle.ccopts) -o perl bundle.c $(cat bundle.ldopts)
1138
1139 =over 4
1140
1141 =item bundle.h
1142
1143 A header file that contains the prototypes of the few symbols "exported"
1144 by bundle.c, and also exposes the perl headers to the application.
1145
1146 =over 4
1147
1148 =item staticperl_init (xs_init = 0)
1149
1150 Initialises the perl interpreter. You can use the normal perl functions
1151 after calling this function, for example, to define extra functions or
1152 to load a .pm file that contains some initialisation code, or the main
1153 program function:
1154
1155 XS (xsfunction)
1156 {
1157 dXSARGS;
1158
1159 // now we have items, ST(i) etc.
1160 }
1161
1162 static void
1163 run_myapp(void)
1164 {
1165 staticperl_init (0);
1166 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$");
1167 eval_pv ("require myapp::main", 1); // executes "myapp/main.pm"
1168 }
1169
1170 When your boot code already wants to access some XS functions at compile
1171 time, then you need to supply an C<xs_init> function pointer that is
1172 called as soon as perl is initialised enough to define XS functions, but
1173 before the preamble code is executed:
1174
1175 static void
1176 xs_init (pTHX)
1177 {
1178 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$");
1179 }
1180
1181 static void
1182 run_myapp(void)
1183 {
1184 staticperl_init (xs_init);
1185 }
1186
1187 =item staticperl_cleanup ()
1188
1189 In the unlikely case that you want to destroy the perl interpreter, here
1190 is the corresponding function.
1191
1192 =item staticperl_xs_init (pTHX)
1193
1194 Sometimes you need direct control over C<perl_parse> and C<perl_run>, in
1195 which case you do not want to use C<staticperl_init> but call them on your
1196 own.
1197
1198 Then you need this function - either pass it directly as the C<xs_init>
1199 function to C<perl_parse>, or call it as one of the first things from your
1200 own C<xs_init> function.
1201
1202 =item PerlInterpreter *staticperl
1203
1204 The perl interpreter pointer used by staticperl. Not normally so useful,
1205 but there it is.
1206
1207 =back
1208
1209 =item bundle.ccopts
1210
1211 Contains the compiler options required to compile at least F<bundle.c> and
1212 any file that includes F<bundle.h> - you should probably use it in your
1213 C<CFLAGS>.
1214
1215 =item bundle.ldopts
1216
1217 The linker options needed to link the final program.
1218
1219 =back
1220
1221 =head1 RUNTIME FUNCTIONALITY
1222
1223 Binaries created with C<mkbundle>/C<mkperl> contain extra functionality,
1224 mostly related to the extra files bundled in the binary (the virtual
1225 filesystem). All of this data is statically compiled into the binary, and
1226 accessing means copying it from a read-only section of your binary. Data
1227 pages in this way are usually freed by the operating system, as they aren't
1228 used more then once.
1229
1230 =head2 VIRTUAL FILESYSTEM
1231
1232 Every bundle has a virtual filesystem. The only information stored in it
1233 is the path and contents of each file that was bundled.
1234
1235 =head3 LAYOUT
1236
1237 Any paths starting with an ampersand (F<&>) or exclamation mark (F<!>) are
1238 reserved by F<staticperl>. They must only be used as described in this
1239 section.
1240
1241 =over 4
1242
1243 =item !
1244
1245 All files that typically cannot be loaded from memory (such as dynamic
1246 objects or shared libraries), but have to reside in the filesystem, are
1247 prefixed with F<!>. Typically these files get written out to some
1248 (semi-)temporary directory shortly after program startup, or before being
1249 used.
1250
1251 =item !boot
1252
1253 The bootstrap file, if specified during bundling.
1254
1255 =item !auto/
1256
1257 Shared objects or dlls corresponding to dynamically-linked perl extensions
1258 are stored with an F<!auto/> prefix.
1259
1260 =item !lib/
1261
1262 External shared libraries are stored in this directory.
1263
1264 =item any letter
1265
1266 Any path starting with a letter is a perl library file. For example,
1267 F<Coro/AIO.pm> corresponds to the file loaded by C<use Coro::AIO>, and
1268 F<Coro/jit.pl> corresponds to C<require "Coro/jit.pl">.
1269
1270 Obviously, module names shouldn't start with any other characters than
1271 letters :)
1272
1273 =item +
1274
1275 Paths starting with C<+> are customarily used to add custom data files
1276 that are not normally loaded by Perl, and are also not touched or reserved
1277 by staticperl (but other unreserved prefix characters are fine, too).
1278
1279 =back
1280
1281 =head3 FUNCTIONS
1282
1283 =over 4
1284
1285 =item $file = static::find $path
1286
1287 Returns the data associated with the given C<$path>
1288 (e.g. C<Digest/MD5.pm>, C<auto/POSIX/autosplit.ix>).
1289
1290 Returns C<undef> if the file isn't embedded.
1291
1292 =item @paths = static::list
1293
1294 Returns the list of all paths embedded in this binary.
1295
1296 =back
1297
1298 =head2 EXTRA FEATURES
1299
1300 In addition, for the embedded loading of perl files to work, F<staticperl>
1301 overrides the C<@INC> array.
1302
1303 =head1 FULLY STATIC BINARIES - ALPINE LINUX
1304
1305 This section once contained a way to build fully static (including
1306 uClibc) binaries with buildroot. Unfortunately, buildroot no longer
1307 supports a compiler, so I recommend using alpine linux instead
1308 (L<http://alpinelinux.org/>). Get yourself a VM (e.g. with qemu), run an
1309 older alpine linux verison in it (e.g. 2.4), copy staticperl inside and
1310 use it.
1311
1312 The reason you might want an older alpine linux is that uClibc can be
1313 quite dependent on kernel versions, so the newest version of alpine linux
1314 might need a newer kernel then you might want for, if you plan to run your
1315 binaries on on other kernels.
1316
1317 =head1 RECIPES / SPECIFIC MODULES
1318
1319 This section contains some common(?) recipes and information about
1320 problems with some common modules or perl constructs that require extra
1321 files to be included.
1322
1323 =head2 MODULES
1324
1325 =over 4
1326
1327 =item utf8
1328
1329 Some functionality in the C<utf8> module, such as swash handling
1330 (used for unicode character ranges in regexes) is implemented in the
1331 C<utf8_heavy.pl> library:
1332
1333 -Mutf8_heavy.pl
1334
1335 Many Unicode properties in turn are defined in separate modules,
1336 such as C<unicore/Heavy.pl> and more specific data tables such as
1337 C<unicore/To/Digit.pl> or C<unicore/lib/Perl/Word.pl>. These tables
1338 are big (7MB uncompressed, although F<staticperl> contains special
1339 handling for those files), so including them only on demand in your
1340 application might pay off.
1341
1342 To simply include the whole unicode database, use:
1343
1344 --incglob '/unicore/**.pl'
1345
1346 =item AnyEvent
1347
1348 AnyEvent needs a backend implementation that it will load in a delayed
1349 fashion. The L<AnyEvent::Impl::Perl> backend is the default choice
1350 for AnyEvent if it can't find anything else, and is usually a safe
1351 fallback. If you plan to use e.g. L<EV> (L<POE>...), then you need to
1352 include the L<AnyEvent::Impl::EV> (L<AnyEvent::Impl::POE>...) backend as
1353 well.
1354
1355 If you want to handle IRIs or IDNs (L<AnyEvent::Util> punycode and idn
1356 functions), you also need to include C<"AnyEvent/Util/idna.pl"> and
1357 C<"AnyEvent/Util/uts46data.pl">.
1358
1359 Or you can use C<--usepacklists> and specify C<-MAnyEvent> to include
1360 everything.
1361
1362 =item Cairo
1363
1364 See Glib, same problem, same solution.
1365
1366 =item Carp
1367
1368 Carp had (in older versions of perl) a dependency on L<Carp::Heavy>. As of
1369 perl 5.12.2 (maybe earlier), this dependency no longer exists.
1370
1371 =item Config
1372
1373 The F<perl -V> switch (as well as many modules) needs L<Config>, which in
1374 turn might need L<"Config_heavy.pl">. Including the latter gives you
1375 both.
1376
1377 =item Glib
1378
1379 Glib literally requires Glib to be installed already to build - it tries
1380 to fake this by running Glib out of the build directory before being
1381 built. F<staticperl> tries to work around this by forcing C<MAN1PODS> and
1382 C<MAN3PODS> to be empty via the C<PERL_MM_OPT> environment variable.
1383
1384 =item Gtk2
1385
1386 See Pango, same problems, same solution.
1387
1388 =item Net::SSLeay
1389
1390 This module hasn't been significantly updated since OpenSSL is called
1391 OpenSSL, and fails to properly link against dependent libraries, most
1392 commonly, it forgets to specify C<-ldl> when linking.
1393
1394 On GNU/Linux systems this usually goes undetected, as perl usually links
1395 against C<-ldl> itself and OpenSSL just happens to pick it up that way, by
1396 chance.
1397
1398 For static builds, you either have to configure C<-ldl> manually, or you
1399 can use the following snippet in your C<postinstall> hook which patches
1400 Net::SSLeay after installation, which happens to work most of the time:
1401
1402 postinstall() {
1403 # first install it
1404 instcpan Net::SSLeay
1405 # then add -ldl for future linking
1406 chmod u+w "$PERL_PREFIX"/lib/auto/Net/SSLeay/extralibs.ld
1407 echo " -ldl" >>"$PERL_PREFIX"/lib/auto/Net/SSLeay/extralibs.ld
1408 }
1409
1410 =item Pango
1411
1412 In addition to the C<MAN3PODS> problem in Glib, Pango also routes around
1413 L<ExtUtils::MakeMaker> by compiling its files on its own. F<staticperl>
1414 tries to patch L<ExtUtils::MM_Unix> to route around Pango.
1415
1416 =item Term::ReadLine::Perl
1417
1418 Also needs L<Term::ReadLine::readline>, or C<--usepacklists>.
1419
1420 =item URI
1421
1422 URI implements schemes as separate modules - the generic URL scheme is
1423 implemented in L<URI::_generic>, HTTP is implemented in L<URI::http>. If
1424 you need to use any of these schemes, you should include these manually,
1425 or use C<--usepacklists>.
1426
1427 =back
1428
1429 =head2 RECIPES
1430
1431 =over 4
1432
1433 =item Just link everything in
1434
1435 To link just about everything installed in the perl library into a new
1436 perl, try this (the first time this runs it will take a long time, as a
1437 lot of files need to be parsed):
1438
1439 staticperl mkperl -v --strip ppi --incglob '*'
1440
1441 If you don't mind the extra megabytes, this can be a very effective way of
1442 creating bundles without having to worry about forgetting any modules.
1443
1444 You get even more useful variants of this method by first selecting
1445 everything, and then excluding stuff you are reasonable sure not to need -
1446 L<bigperl|http://staticperl.schmorp.de/bigperl.html> uses this approach.
1447
1448 =item Getting rid of netdb functions
1449
1450 The perl core has lots of netdb functions (C<getnetbyname>, C<getgrent>
1451 and so on) that few applications use. You can avoid compiling them in by
1452 putting the following fragment into a C<preconfigure> hook:
1453
1454 preconfigure() {
1455 for sym in \
1456 d_getgrnam_r d_endgrent d_endgrent_r d_endhent \
1457 d_endhostent_r d_endnent d_endnetent_r d_endpent \
1458 d_endprotoent_r d_endpwent d_endpwent_r d_endsent \
1459 d_endservent_r d_getgrent d_getgrent_r d_getgrgid_r \
1460 d_getgrnam_r d_gethbyaddr d_gethent d_getsbyport \
1461 d_gethostbyaddr_r d_gethostbyname_r d_gethostent_r \
1462 d_getlogin_r d_getnbyaddr d_getnbyname d_getnent \
1463 d_getnetbyaddr_r d_getnetbyname_r d_getnetent_r \
1464 d_getpent d_getpbyname d_getpbynumber d_getprotobyname_r \
1465 d_getprotobynumber_r d_getprotoent_r d_getpwent \
1466 d_getpwent_r d_getpwnam_r d_getpwuid_r d_getsent \
1467 d_getservbyname_r d_getservbyport_r d_getservent_r \
1468 d_getspnam_r d_getsbyname
1469 # d_gethbyname
1470 do
1471 PERL_CONFIGURE="$PERL_CONFIGURE -U$sym"
1472 done
1473 }
1474
1475 This mostly gains space when linking statically, as the functions will
1476 likely not be linked in. The gain for dynamically-linked binaries is
1477 smaller.
1478
1479 Also, this leaves C<gethostbyname> in - not only is it actually used
1480 often, the L<Socket> module also exposes it, so leaving it out usually
1481 gains little. Why Socket exposes a C function that is in the core already
1482 is anybody's guess.
1483
1484 =back
1485
1486 =head1 ADDITIONAL RESOURCES
1487
1488 Some guy has made a repository on github
1489 (L<https://github.com/gh0stwizard/staticperl-modules>) with some modules
1490 patched to build with staticperl.
1491
1492 =head1 AUTHOR
1493
1494 Marc Lehmann <schmorp@schmorp.de>
1495 http://software.schmorp.de/pkg/staticperl.html
1496