… | |
… | |
14 | staticperl cpan # invoke CPAN shell |
14 | staticperl cpan # invoke CPAN shell |
15 | staticperl instmod path... # install unpacked modules |
15 | staticperl instmod path... # install unpacked modules |
16 | staticperl instcpan modulename... # install modules from CPAN |
16 | staticperl instcpan modulename... # install modules from CPAN |
17 | staticperl mkbundle <bundle-args...> # see documentation |
17 | staticperl mkbundle <bundle-args...> # see documentation |
18 | staticperl mkperl <bundle-args...> # see documentation |
18 | staticperl mkperl <bundle-args...> # see documentation |
|
|
19 | staticperl mkapp appname <bundle-args...> # see documentation |
19 | |
20 | |
20 | Typical Examples: |
21 | Typical Examples: |
21 | |
22 | |
22 | staticperl install # fetch, configure, build and install perl |
23 | staticperl install # fetch, configure, build and install perl |
23 | staticperl cpan # run interactive cpan shell |
24 | staticperl cpan # run interactive cpan shell |
24 | staticperl mkperl -M '"Config_heavy.pl"' # build a perl that supports -V |
25 | staticperl mkperl -M '"Config_heavy.pl"' # build a perl that supports -V |
25 | staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http |
26 | staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http |
26 | # build a perl with the above modules linked in |
27 | # build a perl with the above modules linked in |
|
|
28 | staticperl mkapp myapp --boot mainprog mymodules |
|
|
29 | # build a binary "myapp" from mainprog and mymodules |
27 | |
30 | |
28 | =head1 DESCRIPTION |
31 | =head1 DESCRIPTION |
29 | |
32 | |
30 | This script helps you creating single-file perl interpreters, or embedding |
33 | This script helps you to create single-file perl interpreters |
31 | a perl interpreter in your applications. Single-file means that it is |
34 | or applications, or embedding a perl interpreter in your |
32 | fully self-contained - no separate shared objects, no autoload fragments, |
35 | applications. Single-file means that it is fully self-contained - no |
33 | no .pm or .pl files are needed. And when linking statically, you can |
36 | separate shared objects, no autoload fragments, no .pm or .pl files are |
34 | create (or embed) a single file that contains perl interpreter, libc, all |
37 | needed. And when linking statically, you can create (or embed) a single |
35 | the modules you need and all the libraries you need. |
38 | file that contains perl interpreter, libc, all the modules you need, all |
|
|
39 | the libraries you need and of course your actual program. |
36 | |
40 | |
37 | With F<uClibc> and F<upx> on x86, you can create a single 500kb binary |
41 | With F<uClibc> and F<upx> on x86, you can create a single 500kb binary |
38 | that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, |
42 | that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, |
39 | Coro and so on. Or any other choice of modules. |
43 | Coro and so on. Or any other choice of modules. |
40 | |
44 | |
… | |
… | |
63 | =item * The generated executables don't need a writable filesystem. |
67 | =item * The generated executables don't need a writable filesystem. |
64 | |
68 | |
65 | F<staticperl> loads all required files directly from memory. There is no |
69 | F<staticperl> loads all required files directly from memory. There is no |
66 | need to unpack files into a temporary directory. |
70 | need to unpack files into a temporary directory. |
67 | |
71 | |
68 | =item * More control over included files. |
72 | =item * More control over included files, more burden. |
69 | |
73 | |
70 | PAR tries to be maintenance and hassle-free - it tries to include more |
74 | PAR tries to be maintenance and hassle-free - it tries to include more |
71 | files than necessary to make sure everything works out of the box. The |
75 | files than necessary to make sure everything works out of the box. It |
72 | extra files (such as the unicode database) can take substantial amounts of |
76 | mostly succeeds at this, but he extra files (such as the unicode database) |
73 | memory and file size. |
77 | can take substantial amounts of memory and file size. |
74 | |
78 | |
75 | With F<staticperl>, the burden is mostly with the developer - only direct |
79 | With F<staticperl>, the burden is mostly with the developer - only direct |
76 | compile-time dependencies and L<AutoLoader> are handled automatically. |
80 | compile-time dependencies and L<AutoLoader> are handled automatically. |
77 | This means the modules to include often need to be tweaked manually. |
81 | This means the modules to include often need to be tweaked manually. |
|
|
82 | |
|
|
83 | All this does not preclude more permissive modes to be implemented in |
|
|
84 | the future, but right now, you have to resolve state hidden dependencies |
|
|
85 | manually. |
78 | |
86 | |
79 | =item * PAR works out of the box, F<staticperl> does not. |
87 | =item * PAR works out of the box, F<staticperl> does not. |
80 | |
88 | |
81 | Maintaining your own custom perl build can be a pain in the ass, and while |
89 | Maintaining your own custom perl build can be a pain in the ass, and while |
82 | F<staticperl> tries to make this easy, it still requires a custom perl |
90 | F<staticperl> tries to make this easy, it still requires a custom perl |
83 | build and possibly fiddling with some modules. PAR is likely to produce |
91 | build and possibly fiddling with some modules. PAR is likely to produce |
84 | results faster. |
92 | results faster. |
|
|
93 | |
|
|
94 | Ok, PAR never has worked for me out of the box, and for some people, |
|
|
95 | F<staticperl> does work out of the box, as they don't count "fiddling with |
|
|
96 | module use lists" against it, but nevertheless, F<staticperl> is certainly |
|
|
97 | a bit more difficult to use. |
85 | |
98 | |
86 | =back |
99 | =back |
87 | |
100 | |
88 | =head1 HOW DOES IT WORK? |
101 | =head1 HOW DOES IT WORK? |
89 | |
102 | |
… | |
… | |
184 | command by specifying all the directories with modules in them that you |
197 | command by specifying all the directories with modules in them that you |
185 | want to have built. |
198 | want to have built. |
186 | |
199 | |
187 | =item F<staticperl clean> |
200 | =item F<staticperl clean> |
188 | |
201 | |
189 | Runs F<make distclean> in the perl source directory (and potentially |
202 | Deletes the perl source directory (and potentially cleans up other |
190 | cleans up other intermediate files). This can be used to clean up |
203 | intermediate files). This can be used to clean up files only needed for |
191 | intermediate files without removing the installed perl interpreter. |
204 | building perl, without removing the installed perl interpreter, or to |
|
|
205 | force a re-build from scratch. |
|
|
206 | |
|
|
207 | At the moment, it doesn't delete downloaded tarballs. |
192 | |
208 | |
193 | =item F<staticperl distclean> |
209 | =item F<staticperl distclean> |
194 | |
210 | |
195 | This wipes your complete F<~/.staticperl> directory. Be careful with this, |
211 | This wipes your complete F<~/.staticperl> directory. Be careful with this, |
196 | it nukes your perl download, perl sources, perl distribution and any |
212 | it nukes your perl download, perl sources, perl distribution and any |
… | |
… | |
236 | (required by L<AnyEvent::HTTPD>) implements various URI schemes as extra |
252 | (required by L<AnyEvent::HTTPD>) implements various URI schemes as extra |
237 | modules - since L<AnyEvent::HTTPD> only needs C<http> URIs, we only need |
253 | modules - since L<AnyEvent::HTTPD> only needs C<http> URIs, we only need |
238 | to include that module. I found out about these dependencies by carefully |
254 | to include that module. I found out about these dependencies by carefully |
239 | watching any error messages about missing modules... |
255 | watching any error messages about missing modules... |
240 | |
256 | |
|
|
257 | Instead of building a new perl binary, you can also build a standalone |
|
|
258 | application: |
|
|
259 | |
|
|
260 | # build the app |
|
|
261 | staticperl mkapp app --boot eg/httpd \ |
|
|
262 | -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI::http |
|
|
263 | |
|
|
264 | # run it |
|
|
265 | ./app |
|
|
266 | |
241 | =head3 OPTION PROCESSING |
267 | =head3 OPTION PROCESSING |
242 | |
268 | |
243 | All options can be given as arguments on the command line (typically |
269 | All options can be given as arguments on the command line (typically |
244 | using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since |
270 | using long (e.g. C<--verbose>) or short option (e.g. C<-v>) style). Since |
245 | specifying a lot of modules can make the command line very cumbersome, |
271 | specifying a lot of modules can make the command line very cumbersome, |
… | |
… | |
304 | C<mkperl> command (instead of C<mkbundle>): |
330 | C<mkperl> command (instead of C<mkbundle>): |
305 | |
331 | |
306 | # build a new ./perl with only common::sense in it - very small :) |
332 | # build a new ./perl with only common::sense in it - very small :) |
307 | staticperl mkperl -Mcommon::sense |
333 | staticperl mkperl -Mcommon::sense |
308 | |
334 | |
|
|
335 | =item --app name |
|
|
336 | |
|
|
337 | After writing out the bundle files, try to link a new standalone |
|
|
338 | program. It will be called C<name>, and the bundle files get removed after |
|
|
339 | linking it. |
|
|
340 | |
|
|
341 | The difference to the (mutually exclusive) C<--perl> option is that the |
|
|
342 | binary created by this option will not try to act as a perl interpreter - |
|
|
343 | instead it will simply initialise the perl interpreter, clean it up and |
|
|
344 | exit. |
|
|
345 | |
|
|
346 | This switch is automatically used when F<staticperl> is invoked with the |
|
|
347 | C<mkapp> command (instead of C<mkbundle>): |
|
|
348 | |
|
|
349 | To let it do something useful you I<must> add some boot code, e.g. with |
|
|
350 | the C<--boot> option. |
|
|
351 | |
|
|
352 | Example: create a standalone perl binary that will execute F<appfile> when |
|
|
353 | it is started. |
|
|
354 | |
|
|
355 | staticperl mkbundle --app myexe --boot appfile |
|
|
356 | |
309 | =item --use module | -Mmodule |
357 | =item --use module | -Mmodule |
310 | |
358 | |
311 | Include the named module and all direct dependencies. This is done by |
359 | Include the named module and all direct dependencies. This is done by |
312 | C<require>'ing the module in a subprocess and tracing which other modules |
360 | C<require>'ing the module in a subprocess and tracing which other modules |
313 | and files it actually loads. If the module uses L<AutoLoader>, then all |
361 | and files it actually loads. If the module uses L<AutoLoader>, then all |
… | |
… | |
383 | # specification file |
431 | # specification file |
384 | add file1 myfiles/file1 |
432 | add file1 myfiles/file1 |
385 | add file2 myfiles/file2 |
433 | add file2 myfiles/file2 |
386 | add file3 myfiles/file3 |
434 | add file3 myfiles/file3 |
387 | |
435 | |
|
|
436 | =item --binadd "file" | --add "file alias" |
|
|
437 | |
|
|
438 | Just like C<--add>, except that it treats the file as binary and adds it |
|
|
439 | without any processing. |
|
|
440 | |
|
|
441 | You should probably add a C</> prefix to avoid clashing with embedded |
|
|
442 | perl files (whose paths do not start with C</>), and/or use a special |
|
|
443 | directory, such as C</res/name>. |
|
|
444 | |
|
|
445 | You can later get a copy of these files by calling C<staticperl::find |
|
|
446 | "alias">. |
|
|
447 | |
388 | =item --static |
448 | =item --static |
389 | |
449 | |
390 | When C<--perl> is also given, link statically instead of dynamically. The |
450 | When C<--perl> is also given, link statically instead of dynamically. The |
391 | default is to link the new perl interpreter fully dynamic (that means all |
451 | default is to link the new perl interpreter fully dynamic (that means all |
392 | perl modules are linked statically, but all external libraries are still |
452 | perl modules are linked statically, but all external libraries are still |
… | |
… | |
403 | Any other argument is interpreted as a bundle specification file, which |
463 | Any other argument is interpreted as a bundle specification file, which |
404 | supports most long options (without extra quoting), one option per line. |
464 | supports most long options (without extra quoting), one option per line. |
405 | |
465 | |
406 | =back |
466 | =back |
407 | |
467 | |
408 | =head2 F<STATCPERL> CONFIGURATION AND HOOKS |
468 | =head2 F<STATICPERL> CONFIGURATION AND HOOKS |
409 | |
469 | |
410 | During (each) startup, F<staticperl> tries to source the following shell |
470 | During (each) startup, F<staticperl> tries to source the following shell |
411 | files in order: |
471 | files in order: |
412 | |
472 | |
413 | /etc/staticperlrc |
473 | /etc/staticperlrc |
… | |
… | |
429 | =item C<EMAIL> |
489 | =item C<EMAIL> |
430 | |
490 | |
431 | The e-mail address of the person who built this binary. Has no good |
491 | The e-mail address of the person who built this binary. Has no good |
432 | default, so should be specified by you. |
492 | default, so should be specified by you. |
433 | |
493 | |
|
|
494 | =item C<CPAN> |
|
|
495 | |
|
|
496 | The URL of the CPAN mirror to use (e.g. L<http://mirror.netcologne.de/cpan/>). |
|
|
497 | |
|
|
498 | =item C<EXTRA_MODULES> |
|
|
499 | |
|
|
500 | Additional modules installed during F<staticperl install>. Here you can |
|
|
501 | set which modules you want have to installed from CPAN. |
|
|
502 | |
|
|
503 | Example: I really really need EV, AnyEvent, Coro and AnyEvent::AIO. |
|
|
504 | |
|
|
505 | EXTRA_MODULES="EV AnyEvent Coro AnyEvent::AIO" |
|
|
506 | |
|
|
507 | Note that you can also use a C<postinstall> hook to achieve this, and |
|
|
508 | more. |
|
|
509 | |
434 | =back |
510 | =back |
435 | |
511 | |
436 | =head4 Variables you might I<want> to override |
512 | =head4 Variables you might I<want> to override |
437 | |
513 | |
438 | =over 4 |
514 | =over 4 |
439 | |
515 | |
|
|
516 | =item C<STATICPERL> |
|
|
517 | |
|
|
518 | The directory where staticperl stores all its files |
|
|
519 | (default: F<~/.staticperl>). |
|
|
520 | |
|
|
521 | =item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ... |
|
|
522 | |
|
|
523 | Usually set to C<1> to make modules "less inquisitive" during their |
|
|
524 | installation, you can set any environment variable you want - some modules |
|
|
525 | (such as L<Coro> or L<EV>) use environment variables for further tweaking. |
|
|
526 | |
440 | =item C<PERLVER> |
527 | =item C<PERL_VERSION> |
441 | |
528 | |
442 | The perl version to install - default is currently C<5.12.2>, but C<5.8.9> |
529 | The perl version to install - default is currently C<5.12.2>, but C<5.8.9> |
443 | is also a good choice (5.8.9 is much smaller than 5.12.2, while 5.10.1 is |
530 | is also a good choice (5.8.9 is much smaller than 5.12.2, while 5.10.1 is |
444 | about as big as 5.12.2). |
531 | about as big as 5.12.2). |
445 | |
532 | |
446 | =item C<CPAN> |
|
|
447 | |
|
|
448 | The URL of the CPAN mirror to use (e.g. L<http://mirror.netcologne.de/cpan/>). |
|
|
449 | |
|
|
450 | =item C<EXTRA_MODULES> |
|
|
451 | |
|
|
452 | Additional modules installed during F<staticperl install>. Here you can |
|
|
453 | set which modules you want have to installed from CPAN. |
|
|
454 | |
|
|
455 | Example: I really really need EV, AnyEvent, Coro and IO::AIO. |
|
|
456 | |
|
|
457 | EXTRA_MODULES="EV AnyEvent Coro IO::AIO" |
|
|
458 | |
|
|
459 | Note that you can also use a C<postinstall> hook to achieve this, and |
|
|
460 | more. |
|
|
461 | |
|
|
462 | =item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ... |
|
|
463 | |
|
|
464 | Usually set to C<1> to make modules "less inquisitive" during their |
|
|
465 | installation, you can set any environment variable you want - some modules |
|
|
466 | (such as L<Coro> or L<EV>) use environment variables for further tweaking. |
|
|
467 | |
|
|
468 | =item C<STATICPERL> |
|
|
469 | |
|
|
470 | The directory where staticperl stores all its files |
|
|
471 | (default: F<~/.staticperl>). |
|
|
472 | |
|
|
473 | =item C<PREFIX> |
533 | =item C<PERL_PREFIX> |
474 | |
534 | |
475 | The prefix where perl gets installed (default: F<$STATICPERL/perl>), |
535 | The prefix where perl gets installed (default: F<$STATICPERL/perl>), |
476 | i.e. where the F<bin> and F<lib> subdirectories will end up. |
536 | i.e. where the F<bin> and F<lib> subdirectories will end up. |
|
|
537 | |
|
|
538 | =item C<PERL_CONFIGURE> |
|
|
539 | |
|
|
540 | Additional Configure options - these are simply passed to the perl |
|
|
541 | Configure script. For example, if you wanted to enable dynamic loading, |
|
|
542 | you could pass C<-Dusedl>. To enable ithreads (Why would you want that |
|
|
543 | insanity? Don't! Use L<forks> instead!) you would pass C<-Duseithreads> |
|
|
544 | and so on. |
|
|
545 | |
|
|
546 | More commonly, you would either activate 64 bit integer support |
|
|
547 | (C<-Duse64bitint>), or disable large files support (-Uuselargefiles), to |
|
|
548 | reduce filesize further. |
477 | |
549 | |
478 | =item C<PERL_CPPFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS> |
550 | =item C<PERL_CPPFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS> |
479 | |
551 | |
480 | These flags are passed to perl's F<Configure> script, and are generally |
552 | These flags are passed to perl's F<Configure> script, and are generally |
481 | optimised for small size (at the cost of performance). Since they also |
553 | optimised for small size (at the cost of performance). Since they also |
… | |
… | |
518 | instcpan Anyevent::AIO AnyEvent::HTTPD |
590 | instcpan Anyevent::AIO AnyEvent::HTTPD |
519 | } |
591 | } |
520 | |
592 | |
521 | =over 4 |
593 | =over 4 |
522 | |
594 | |
|
|
595 | =item preconfigure |
|
|
596 | |
|
|
597 | Called just before running F<./Configur> in the perl source |
|
|
598 | directory. Current working directory is the perl source directory. |
|
|
599 | |
|
|
600 | This can be used to set any C<PERL_xxx> variables, which might be costly |
|
|
601 | to compute. |
|
|
602 | |
523 | =item postconfigure |
603 | =item postconfigure |
524 | |
604 | |
525 | Called after configuring, but before building perl. Current working |
605 | Called after configuring, but before building perl. Current working |
526 | directory is the perl source directory. |
606 | directory is the perl source directory. |
527 | |
607 | |
528 | Could be used to tailor/patch config.sh (followed by F<./Configure -S>) or |
608 | Could be used to tailor/patch config.sh (followed by F<sh Configure -S>) |
529 | do any other modifications. |
609 | or do any other modifications. |
530 | |
610 | |
531 | =item postbuild |
611 | =item postbuild |
532 | |
612 | |
533 | Called after building, but before installing perl. Current working |
613 | Called after building, but before installing perl. Current working |
534 | directory is the perl source directory. |
614 | directory is the perl source directory. |
… | |
… | |
654 | |
734 | |
655 | =back |
735 | =back |
656 | |
736 | |
657 | =head1 FULLY STATIC BINARIES - BUILDROOT |
737 | =head1 FULLY STATIC BINARIES - BUILDROOT |
658 | |
738 | |
659 | To make truly static (linux-) libraries, you might want to have a look at |
739 | To make truly static (Linux-) libraries, you might want to have a look at |
660 | buildroot (L<http://buildroot.uclibc.org/>). |
740 | buildroot (L<http://buildroot.uclibc.org/>). |
661 | |
741 | |
662 | Buildroot is primarily meant to set up a cross-compile environment (which |
742 | Buildroot is primarily meant to set up a cross-compile environment (which |
663 | is not so useful as perl doesn't quite like cross compiles), but it can also compile |
743 | is not so useful as perl doesn't quite like cross compiles), but it can also compile |
664 | a chroot environment where you can use F<staticperl>. |
744 | a chroot environment where you can use F<staticperl>. |
… | |
… | |
678 | uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 |
758 | uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 |
679 | snapshot) and enable NPTL, otherwise Coro needs to be configured with the |
759 | snapshot) and enable NPTL, otherwise Coro needs to be configured with the |
680 | ultra-slow pthreads backend to work around linuxthreads bugs (it also uses |
760 | ultra-slow pthreads backend to work around linuxthreads bugs (it also uses |
681 | twice the address space needed for stacks). |
761 | twice the address space needed for stacks). |
682 | |
762 | |
|
|
763 | If you use C<linuxthreads.old>, then you should also be aware that |
|
|
764 | uClibc shares C<errno> between all threads when statically linking. See |
|
|
765 | L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a |
|
|
766 | workaround (And L<https://bugs.uclibc.org/2089> for discussion). |
|
|
767 | |
683 | C<ccache> support is also recommended, especially if you want to |
768 | C<ccache> support is also recommended, especially if you want |
684 | play around with buildroot options. Enabling the C<miniperl> package |
769 | to play around with buildroot options. Enabling the C<miniperl> |
685 | will probably enable all options required for a successful perl |
770 | package will probably enable all options required for a successful |
686 | build. F<staticperl> itself additionally needs either C<wget> or C<curl>. |
771 | perl build. F<staticperl> itself additionally needs either C<wget> |
|
|
772 | (recommended, for CPAN) or C<curl>. |
687 | |
773 | |
688 | As for shells, busybox should provide all that is needed, but the default |
774 | As for shells, busybox should provide all that is needed, but the default |
689 | busybox configuration doesn't include F<comm> which is needed by perl - |
775 | busybox configuration doesn't include F<comm> which is needed by perl - |
690 | either make a custom busybox config, or compile coreutils. |
776 | either make a custom busybox config, or compile coreutils. |
691 | |
777 | |
… | |
… | |
701 | After you have compiled and set up your buildroot target, you can copy |
787 | After you have compiled and set up your buildroot target, you can copy |
702 | F<staticperl> from the C<App::Staticperl> distribution or from your |
788 | F<staticperl> from the C<App::Staticperl> distribution or from your |
703 | perl f<bin> directory (if you installed it) into the F<output/target> |
789 | perl f<bin> directory (if you installed it) into the F<output/target> |
704 | filesystem, chroot inside and run it. |
790 | filesystem, chroot inside and run it. |
705 | |
791 | |
|
|
792 | =head1 RECIPES / SPECIFIC MODULES |
|
|
793 | |
|
|
794 | This section contains some common(?) recipes and information about |
|
|
795 | problems with some common modules or perl constructs that require extra |
|
|
796 | files to be included. |
|
|
797 | |
|
|
798 | =head2 MODULES |
|
|
799 | |
|
|
800 | =over 4 |
|
|
801 | |
|
|
802 | =item utf8 |
|
|
803 | |
|
|
804 | Some functionality in the utf8 module, such as swash handling (used |
|
|
805 | for unicode character ranges in regexes) is implemented in the |
|
|
806 | C<"utf8_heavy.pl"> library. |
|
|
807 | |
|
|
808 | Many Unicode properties in turn are defined in separate modules, |
|
|
809 | such as C<"unicore/Heavy.pl"> and more specific data tables such as |
|
|
810 | C<"unicore/To/Digit.pl"> or C<"unicore/lib/Perl/Word.pl">. These |
|
|
811 | tables are big (7MB uncompressed), so including them on demand by your |
|
|
812 | applciation only might pay off. |
|
|
813 | |
|
|
814 | =item Carp |
|
|
815 | |
|
|
816 | Carp had (in older versions of perl) a dependency on L<Carp::Heavy>. As of |
|
|
817 | perl 5.12.2 (maybe earlier), this dependency no longer exists. |
|
|
818 | |
|
|
819 | =item Config |
|
|
820 | |
|
|
821 | The F<perl -V> switch (as well as many modules) needs L<Config>, which in |
|
|
822 | turn might need L<"Config_heavy.pl">. Including the latter gives you |
|
|
823 | both. |
|
|
824 | |
|
|
825 | =item AnyEvent |
|
|
826 | |
|
|
827 | AnyEvent needs a backend implementation that it will load in a delayed |
|
|
828 | fashion. The L<AnyEvent::Impl::Perl> backend is the default choice |
|
|
829 | for AnyEvent if it can't find anything else, and is usually a safe |
|
|
830 | fallback. If you plan to use e.g. L<EV> (L<POE>...), then you need to |
|
|
831 | include the L<AnyEvent::Impl::EV> (L<AnyEvent::Impl::POE>...) backend as |
|
|
832 | well. |
|
|
833 | |
|
|
834 | If you want to handle IRIs or IDNs (L<AnyEvent::Util> punycode and idn |
|
|
835 | functions), you also need to include C<"AnyEvent/Util/idna.pl"> and |
|
|
836 | C<"AnyEvent/Util/uts46data.pl">. |
|
|
837 | |
|
|
838 | =item URI |
|
|
839 | |
|
|
840 | URI implements schemes as separate modules - the generic URL scheme is |
|
|
841 | implemented in L<URI::_generic>, HTTP is implemented in L<URI::http>. If |
|
|
842 | you need to use any of these schemes, you should include these manually. |
|
|
843 | |
|
|
844 | =back |
|
|
845 | |
|
|
846 | =head2 RECIPES |
|
|
847 | |
|
|
848 | =over 4 |
|
|
849 | |
|
|
850 | =item Getting rid of netdb function |
|
|
851 | |
|
|
852 | The perl core has lots of netdb functions (C<getnetbyname>, C<getgrent> |
|
|
853 | and so on) that few applications use. You can avoid compiling them in by |
|
|
854 | putting the following fragment into a C<preconfigure> hook: |
|
|
855 | |
|
|
856 | preconfigure() { |
|
|
857 | for sym in \ |
|
|
858 | d_getgrnam_r d_endgrent d_endgrent_r d_endhent \ |
|
|
859 | d_endhostent_r d_endnent d_endnetent_r d_endpent \ |
|
|
860 | d_endprotoent_r d_endpwent d_endpwent_r d_endsent \ |
|
|
861 | d_endservent_r d_getgrent d_getgrent_r d_getgrgid_r \ |
|
|
862 | d_getgrnam_r d_gethbyaddr d_gethent d_getsbyport \ |
|
|
863 | d_gethostbyaddr_r d_gethostbyname_r d_gethostent_r \ |
|
|
864 | d_getlogin_r d_getnbyaddr d_getnbyname d_getnent \ |
|
|
865 | d_getnetbyaddr_r d_getnetbyname_r d_getnetent_r \ |
|
|
866 | d_getpent d_getpbyname d_getpbynumber d_getprotobyname_r \ |
|
|
867 | d_getprotobynumber_r d_getprotoent_r d_getpwent \ |
|
|
868 | d_getpwent_r d_getpwnam_r d_getpwuid_r d_getsent \ |
|
|
869 | d_getservbyname_r d_getservbyport_r d_getservent_r \ |
|
|
870 | d_getspnam_r d_getsbyname |
|
|
871 | # d_gethbyname |
|
|
872 | do |
|
|
873 | PERL_CONFIGURE="$PERL_CONFIGURE -U$sym" |
|
|
874 | done |
|
|
875 | } |
|
|
876 | |
|
|
877 | This mostly gains space when linking staticaly, as the functions will |
|
|
878 | liekly not be linked in. The gain for dynamically-linked binaries is |
|
|
879 | smaller. |
|
|
880 | |
|
|
881 | Also, this leaves C<gethostbyname> in - not only is it actually used |
|
|
882 | often, the L<Socket> module also exposes it, so leaving it out usually |
|
|
883 | gains little. Why Socket exposes a C function that is in the core already |
|
|
884 | is anybody's guess. |
|
|
885 | |
|
|
886 | =back |
|
|
887 | |
706 | =head1 AUTHOR |
888 | =head1 AUTHOR |
707 | |
889 | |
708 | Marc Lehmann <schmorp@schmorp.de> |
890 | Marc Lehmann <schmorp@schmorp.de> |
709 | http://software.schmorp.de/pkg/staticperl.html |
891 | http://software.schmorp.de/pkg/staticperl.html |