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, 3 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

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.52 staticperl - perl, libc, 100 modules, all in one standalone 500kb file
4 root 1.1
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 root 1.39 staticperl perl ... # invoke the perlinterpreter
15 root 1.1 staticperl cpan # invoke CPAN shell
16 root 1.50 staticperl instsrc path... # install unpacked modules
17 root 1.1 staticperl instcpan modulename... # install modules from CPAN
18 root 1.70 staticperl instdist archive... # install distribution archive
19     staticperl insturl url... # install distribution from url
20 root 1.1 staticperl mkbundle <bundle-args...> # see documentation
21     staticperl mkperl <bundle-args...> # see documentation
22 root 1.14 staticperl mkapp appname <bundle-args...> # see documentation
23 root 1.1
24     Typical Examples:
25    
26     staticperl install # fetch, configure, build and install perl
27     staticperl cpan # run interactive cpan shell
28 root 1.37 staticperl mkperl -MConfig_heavy.pl # build a perl that supports -V
29 root 1.1 staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http
30     # build a perl with the above modules linked in
31 root 1.14 staticperl mkapp myapp --boot mainprog mymodules
32     # build a binary "myapp" from mainprog and mymodules
33 root 1.1
34     =head1 DESCRIPTION
35    
36 root 1.16 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 root 1.1
44 root 1.8 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 root 1.41 Coro and so on. Or any other choice of modules (and some other size :).
47 root 1.1
48 root 1.20 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 root 1.3 The created files do not need write access to the file system (like PAR
53 root 1.1 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 root 1.17 =item * More control over included files, more burden.
80 root 1.1
81 root 1.3 PAR tries to be maintenance and hassle-free - it tries to include more
82 root 1.17 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 root 1.1
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 root 1.17 All this does not preclude more permissive modes to be implemented in
91 root 1.46 the future, but right now, you have to resolve hidden dependencies
92 root 1.17 manually.
93    
94 root 1.1 =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 root 1.13 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 root 1.1 =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 root 1.3 the speed of your computer and your internet connection.
115 root 1.1
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 root 1.3 and then either build a new perl binary (that acts just like a normal perl
120 root 1.1 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 root 1.18 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 root 1.1
127     =head1 THE F<STATICPERL> SCRIPT
128    
129     This module installs a script called F<staticperl> into your perl
130 root 1.21 binary directory. The script is fully self-contained, and can be
131 root 1.67 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 root 1.21 newest (possibly alpha) version can also be downloaded from
135     L<http://staticperl.schmorp.de/staticperl>.
136 root 1.1
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 root 1.36 everything. The default is to download and install perl 5.12.3 and a few
148 root 1.1 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 root 1.24 is normally all you need: It installs the perl interpreter in
156 root 1.1 F<~/.staticperl/perl>. It downloads, configures, builds and installs the
157     perl interpreter if required.
158    
159 root 1.24 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 root 1.1
167 root 1.3 To force recompilation or reinstallation, you need to run F<staticperl
168 root 1.1 distclean> first.
169    
170     =over 4
171    
172 root 1.20 =item F<staticperl version>
173    
174     Prints some info about the version of the F<staticperl> script you are using.
175    
176 root 1.1 =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 root 1.3 Wipes the perl installation directory (usually F<~/.staticperl/perl>) and
192     installs the perl distribution, potentially after building it first.
193 root 1.1
194 root 1.39 =item F<staticperl perl> [args...]
195    
196 root 1.67 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 root 1.39
200     Example: check that the Gtk2 module is installed and loadable.
201    
202     staticperl perl -MGtk2 -e0
203    
204 root 1.1 =item F<staticperl cpan> [args...]
205    
206 root 1.3 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 root 1.1 no magic is involved: you could just as well run it manually via
209 root 1.47 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 root 1.1
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 root 1.3 to install from these instead of from CPAN, you can do this using this
227 root 1.1 command by specifying all the directories with modules in them that you
228     want to have built.
229    
230 root 1.70 =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 root 1.1 =item F<staticperl clean>
250    
251 root 1.12 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 root 1.24 building perl, without removing the installed perl interpreter.
254 root 1.12
255     At the moment, it doesn't delete downloaded tarballs.
256 root 1.1
257 root 1.24 The exact semantics of this command will probably change.
258    
259 root 1.1 =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 root 1.2 can run the script manually as well (by default it is written to
279 root 1.1 F<~/.staticperl/mkbundle>).
280    
281     F<mkbundle> is a more conventional command and expect the argument
282 root 1.3 syntax commonly used on UNIX clones. For example, this command builds
283 root 1.1 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 root 1.37 staticperl mkperl -MConfig_heavy.pl -MAnyEvent::Impl::Perl \
292 root 1.1 -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 root 1.3 specify manually (here L<AnyEvent::Impl::Perl>), and the F<URI> module
302 root 1.1 (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 root 1.3 to include that module. I found out about these dependencies by carefully
305     watching any error messages about missing modules...
306 root 1.1
307 root 1.14 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 root 1.25 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 root 1.1 =head3 OPTION PROCESSING
349    
350 root 1.3 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 root 1.27 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 root 1.1
357 root 1.27 For example, the command given earlier to link a new F<perl> could also
358     look like this:
359 root 1.1
360     staticperl mkperl httpd.bundle
361    
362 root 1.27 With all options stored in the F<httpd.bundle> file (one option per line,
363     everything after the option is an argument):
364    
365 root 1.1 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 root 1.2 All options that specify modules or files to be added are processed in the
372 root 1.25 order given on the command line.
373 root 1.2
374 root 1.54 =head3 BUNDLE CREATION WORKFLOW / STATICPERL MKBUNDLE OPTIONS
375 root 1.19
376 root 1.26 F<staticperl mkbundle> works by first assembling a list of candidate
377     files and modules to include, then filtering them by include/exclude
378 root 1.27 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 root 1.19
383     =over 4
384    
385 root 1.26 =item Step 0: Generic argument processing.
386 root 1.19
387 root 1.26 The following options influence F<staticperl mkbundle> itself.
388 root 1.1
389     =over 4
390    
391 root 1.27 =item C<--verbose> | C<-v>
392 root 1.2
393     Increases the verbosity level by one (the default is C<1>).
394    
395 root 1.27 =item C<--quiet> | C<-q>
396 root 1.2
397     Decreases the verbosity level by one.
398    
399 root 1.26 =item any other argument
400 root 1.2
401 root 1.26 Any other argument is interpreted as a bundle specification file, which
402 root 1.27 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 root 1.2
407 root 1.26 =back
408 root 1.2
409 root 1.26 =item Step 1: gather candidate files and modules
410 root 1.2
411 root 1.26 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 root 1.2
416 root 1.26 =over 4
417 root 1.2
418 root 1.26 =item C<--use> F<module> | C<-M>F<module>
419 root 1.14
420 root 1.37 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 root 1.2
424     Example: include AnyEvent and AnyEvent::Impl::Perl.
425    
426     staticperl mkbundle --use AnyEvent --use AnyEvent::Impl::Perl
427    
428 root 1.37 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 root 1.2
468     Example: include the required files for F<perl -V> to work in all its
469 root 1.37 glory (F<Config.pm> is included automatically by the dependency tracker).
470 root 1.2
471 root 1.37 # shell command
472     staticperl mkbundle -MConfig_heavy.pl
473 root 1.2
474     # bundle specification file
475 root 1.37 use Config_heavy.pl
476 root 1.2
477 root 1.28 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 root 1.2
482 root 1.26 =item C<--eval> "perl code" | C<-e> "perl code"
483 root 1.2
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 root 1.26 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 root 1.2
490 root 1.32 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 root 1.2
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 root 1.26 staticperl mkbundle -MAnyEvent --eval 'AnyEvent::detect'
501 root 1.2
502     Example: use a separate "bootstrap" script that C<use>'s lots of modules
503 root 1.26 and also include this in the final bundle, to be executed automatically
504     when the interpreter is initialised.
505 root 1.2
506     staticperl mkbundle --eval 'do "bootstrap"' --boot bootstrap
507    
508 root 1.26 =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 root 1.28 the unicode database files needed by some perl built-ins, the regex engine
530 root 1.26 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 root 1.34 "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 root 1.35 use for C<@INC> searches, otherwise the path F<file> will be used as the
540 root 1.26 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 root 1.34 # can be accessed via "use httpd"
550    
551     Example: add a file F<initcode> from the current directory.
552    
553 root 1.35 staticperl mkperl --add 'initcode &initcode'
554 root 1.34
555     # can be accessed via "do '&initcode'"
556    
557 root 1.26 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 root 1.58 =item C<--addbin> F<file> | C<--addbin> "F<file> alias"
570 root 1.26
571     Just like C<--add>, except that it treats the file as binary and adds it
572 root 1.67 without any post-processing (perl files might get stripped to reduce their
573 root 1.26 size).
574    
575 root 1.48 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 root 1.26
579 root 1.49 You can later get a copy of these files by calling C<static::find
580 root 1.26 "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 root 1.48 both inside and outside of a staticperl bundle, without extra ado:
585 root 1.2
586 root 1.26 # a "binary" file, call it "bindata.pl"
587     <<'SOME_MARKER'
588     binary data NOT containing SOME_MARKER
589     SOME_MARKER
590 root 1.2
591 root 1.26 # load the binary
592     chomp (my $data = do "bindata.pl");
593    
594 root 1.48 =item C<--allow-dynamic>
595 root 1.47
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 root 1.48 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 root 1.47
609 root 1.67 (TODO for future self: write and insert a suitable example here, if
610     somebody requests it).
611 root 1.47
612 root 1.26 =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 root 1.28 implicit C<--include *> at the end, so if no filters are specified, all
619 root 1.26 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 root 1.29 =item C<--usepacklists>
654 root 1.20
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 root 1.26 =item L<AutoLoader> splitfiles
671 root 1.18
672 root 1.26 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 root 1.18
676 root 1.26 Both F<.ix> and F<.al> files will be detected automatically and added to
677     the bundle.
678 root 1.18
679 root 1.26 =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 root 1.18
710 root 1.26 =item C<--strip> C<none>|C<pod>|C<ppi>
711 root 1.18
712 root 1.26 Specify the stripping method applied to reduce the file of the perl
713     sources included.
714 root 1.18
715 root 1.26 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 root 1.2
718 root 1.26 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 root 1.2
731 root 1.66 =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 root 1.67 you are using another compression solution such as C<UPX>, so it can be
737 root 1.66 disabled.
738    
739 root 1.28 =item C<--perl>
740 root 1.2
741 root 1.26 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 root 1.2
745 root 1.26 This switch is automatically used when F<staticperl> is invoked with the
746     C<mkperl> command instead of C<mkbundle>.
747 root 1.2
748 root 1.26 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 root 1.2
752 root 1.26 staticperl mkperl -Mcommon::sense
753 root 1.10
754 root 1.28 =item C<--app> F<name>
755 root 1.10
756 root 1.26 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 root 1.10
760 root 1.26 This switch is automatically used when F<staticperl> is invoked with the
761     C<mkapp> command instead of C<mkbundle>.
762 root 1.10
763 root 1.26 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 root 1.18
768 root 1.34 This means that, by default, it will do nothing but burn a few CPU cycles
769 root 1.26 - for it to do something useful you I<must> add some boot code, e.g. with
770     the C<--boot> option.
771 root 1.18
772 root 1.26 Example: create a standalone perl binary called F<./myexe> that will
773     execute F<appfile> when it is started.
774 root 1.18
775 root 1.26 staticperl mkbundle --app myexe --boot appfile
776 root 1.18
777 root 1.37 =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 root 1.67 that might alter execution in ways that might be undesirable for
782 root 1.37 standalone applications, and this option removes those known to cause
783     trouble.
784    
785     Specifically, these are removed:
786    
787 root 1.53 C<PERL_HASH_SEED_DEBUG> and C<PERL_DEBUG_MSTATS> can cause undesirable
788 root 1.37 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 root 1.28 =item C<--static>
801 root 1.2
802 root 1.26 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 root 1.2 referenced dynamically).
810    
811     Keep in mind that Solaris doesn't support static linking at all, and
812 root 1.67 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 root 1.26 executables, or try the C<--staticlib> option to link only some libraries
815 root 1.2 statically.
816    
817 root 1.28 =item C<--staticlib> libname
818 root 1.18
819     When not linking fully statically, this option allows you to link specific
820 root 1.28 libraries statically. What it does is simply replace all occurrences of
821 root 1.18 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 root 1.28 Example: link libcrypt statically into the final binary.
829 root 1.18
830     staticperl mkperl -MIO::AIO --staticlib crypt
831    
832 root 1.26 # ldopts might now contain:
833 root 1.18 # -lm -Wl,-Bstatic -lcrypt -Wl,-Bdynamic -lpthread
834    
835 root 1.63 =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 root 1.26 =back
852 root 1.1
853     =back
854    
855 root 1.18 =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 root 1.29 =item A F<*> matches anything within a single path component.
876 root 1.18
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 root 1.15 =head2 F<STATICPERL> CONFIGURATION AND HOOKS
894 root 1.1
895 root 1.20 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 root 1.67 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 root 1.2
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 root 1.6 =item C<EXTRA_MODULES>
930 root 1.2
931 root 1.6 Additional modules installed during F<staticperl install>. Here you can
932     set which modules you want have to installed from CPAN.
933 root 1.2
934 root 1.11 Example: I really really need EV, AnyEvent, Coro and AnyEvent::AIO.
935 root 1.2
936 root 1.11 EXTRA_MODULES="EV AnyEvent Coro AnyEvent::AIO"
937 root 1.2
938 root 1.6 Note that you can also use a C<postinstall> hook to achieve this, and
939     more.
940 root 1.2
941 root 1.11 =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 root 1.43 =item C<DLCACHE>
953 root 1.2
954 root 1.43 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 root 1.2
958 root 1.11 =item C<PERL_VERSION>
959 root 1.6
960 root 1.60 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 root 1.61 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 root 1.60
968     The default is currently
969     F<http://stableperl.schmorp.de/dist/latest.tar.gz>, i.e. the latest
970     stableperl release.
971 root 1.2
972 root 1.43 =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 root 1.45 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 root 1.43
979 root 1.11 =item C<PERL_PREFIX>
980 root 1.2
981 root 1.57 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 root 1.2
985 root 1.10 =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 root 1.67 insanity? Don't! Use L<Coro> or L<forks> instead!) you would pass
991     C<-Duseithreads> and so on.
992 root 1.10
993     More commonly, you would either activate 64 bit integer support
994 root 1.67 (C<-Duse64bitint>), or disable large files support (C<-Uuselargefiles>),
995     to reduce file size further.
996 root 1.10
997 root 1.24 =item C<PERL_CC>, C<PERL_CCFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS>
998 root 1.2
999 root 1.6 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 root 1.24 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 root 1.2
1009 root 1.67 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 root 1.51
1013     For other compilers or more customised optimisation settings, you need to
1014     adjust these, e.g. in your F<~/.staticperlrc>.
1015    
1016 root 1.67 With gcc on x86 and amd64, you can often get more space-savings by using:
1017 root 1.51
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 root 1.67 C<-mtune=core2> or something newer for much faster code, too):
1024 root 1.51
1025     -fomit-frame-pointer -march=pentium3 -mtune=i386
1026 root 1.40
1027 root 1.2 =back
1028    
1029 root 1.5 =head4 Variables you probably I<do not want> to override
1030 root 1.2
1031     =over 4
1032    
1033 root 1.23 =item C<MAKE>
1034    
1035     The make command to use - default is C<make>.
1036    
1037 root 1.2 =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 root 1.3 commands, just define the corresponding function.
1054 root 1.2
1055 root 1.38 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 root 1.2 Example: install extra modules from CPAN and from some directories
1060     at F<staticperl install> time.
1061    
1062     postinstall() {
1063 root 1.4 rm -rf lib/threads* # weg mit Schaden
1064 root 1.2 instcpan IO::AIO EV
1065     instsrc ~/src/AnyEvent
1066     instsrc ~/src/XML-Sablotron-1.0100001
1067 root 1.4 instcpan Anyevent::AIO AnyEvent::HTTPD
1068 root 1.2 }
1069    
1070     =over 4
1071    
1072 root 1.12 =item preconfigure
1073    
1074 root 1.38 Called just before running F<./Configure> in the perl source
1075 root 1.12 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 root 1.38 =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 root 1.2 =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 root 1.65 =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 root 1.2 =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 root 1.1
1125 root 1.9 =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 root 1.33 =item staticperl_init (xs_init = 0)
1149 root 1.9
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 root 1.33 staticperl_init (0);
1166 root 1.9 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$");
1167     eval_pv ("require myapp::main", 1); // executes "myapp/main.pm"
1168     }
1169    
1170 root 1.67 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 root 1.33
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 root 1.9 =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 root 1.33 function to C<perl_parse>, or call it as one of the first things from your
1200     own C<xs_init> function.
1201 root 1.9
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 root 1.48 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 root 1.62 pages in this way are usually freed by the operating system, as they aren't
1228     used more then once.
1229 root 1.48
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 root 1.64 Any paths starting with an ampersand (F<&>) or exclamation mark (F<!>) are
1238 root 1.48 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 root 1.9
1260 root 1.48 =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 root 1.67 F<Coro/jit.pl> corresponds to C<require "Coro/jit.pl">.
1269 root 1.48
1270     Obviously, module names shouldn't start with any other characters than
1271     letters :)
1272    
1273 root 1.69 =item +
1274 root 1.68
1275     Paths starting with C<+> are customarily used to add custom data files
1276 root 1.69 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 root 1.68
1279 root 1.48 =back
1280    
1281     =head3 FUNCTIONS
1282 root 1.9
1283     =over 4
1284    
1285 root 1.49 =item $file = static::find $path
1286 root 1.9
1287     Returns the data associated with the given C<$path>
1288 root 1.48 (e.g. C<Digest/MD5.pm>, C<auto/POSIX/autosplit.ix>).
1289 root 1.9
1290     Returns C<undef> if the file isn't embedded.
1291    
1292 root 1.49 =item @paths = static::list
1293 root 1.9
1294     Returns the list of all paths embedded in this binary.
1295    
1296     =back
1297    
1298 root 1.48 =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 root 1.59 =head1 FULLY STATIC BINARIES - ALPINE LINUX
1304 root 1.9
1305 root 1.59 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 root 1.9
1317 root 1.17 =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 root 1.67 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 root 1.18
1333 root 1.37 -Mutf8_heavy.pl
1334 root 1.17
1335     Many Unicode properties in turn are defined in separate modules,
1336 root 1.67 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 root 1.18 are big (7MB uncompressed, although F<staticperl> contains special
1339 root 1.64 handling for those files), so including them only on demand in your
1340     application might pay off.
1341 root 1.17
1342 root 1.18 To simply include the whole unicode database, use:
1343 root 1.17
1344 root 1.30 --incglob '/unicore/**.pl'
1345 root 1.17
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 root 1.29 Or you can use C<--usepacklists> and specify C<-MAnyEvent> to include
1360 root 1.20 everything.
1361    
1362 root 1.39 =item Cairo
1363    
1364     See Glib, same problem, same solution.
1365    
1366 root 1.18 =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 root 1.39 =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 root 1.56 =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 root 1.67 commonly, it forgets to specify C<-ldl> when linking.
1393 root 1.56
1394     On GNU/Linux systems this usually goes undetected, as perl usually links
1395 root 1.67 against C<-ldl> itself and OpenSSL just happens to pick it up that way, by
1396 root 1.56 chance.
1397    
1398 root 1.67 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 root 1.56 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 root 1.39 =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 root 1.18 =item Term::ReadLine::Perl
1417    
1418 root 1.29 Also needs L<Term::ReadLine::readline>, or C<--usepacklists>.
1419 root 1.18
1420 root 1.17 =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 root 1.20 you need to use any of these schemes, you should include these manually,
1425 root 1.29 or use C<--usepacklists>.
1426 root 1.17
1427     =back
1428    
1429     =head2 RECIPES
1430    
1431     =over 4
1432    
1433 root 1.29 =item Just link everything in
1434 root 1.18
1435     To link just about everything installed in the perl library into a new
1436 root 1.29 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 root 1.18
1439 root 1.29 staticperl mkperl -v --strip ppi --incglob '*'
1440 root 1.18
1441 root 1.29 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 root 1.17
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 root 1.31 This mostly gains space when linking statically, as the functions will
1476 root 1.21 likely not be linked in. The gain for dynamically-linked binaries is
1477 root 1.17 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 root 1.59 =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 root 1.1 =head1 AUTHOR
1493    
1494     Marc Lehmann <schmorp@schmorp.de>
1495     http://software.schmorp.de/pkg/staticperl.html
1496 root 1.59