ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/App-Staticperl/staticperl.pod
(Generate patch)

Comparing App-Staticperl/staticperl.pod (file contents):
Revision 1.37 by root, Thu Feb 24 07:01:46 2011 UTC vs.
Revision 1.50 by root, Wed Jul 13 17:47:40 2011 UTC

9 staticperl configure # fetch and then configure perl 9 staticperl configure # fetch and then configure perl
10 staticperl build # configure and then build perl 10 staticperl build # configure and then build perl
11 staticperl install # build and then install perl 11 staticperl install # build and then install perl
12 staticperl clean # clean most intermediate files (restart at configure) 12 staticperl clean # clean most intermediate files (restart at configure)
13 staticperl distclean # delete everything installed by this script 13 staticperl distclean # delete everything installed by this script
14 staticperl perl ... # invoke the perlinterpreter
14 staticperl cpan # invoke CPAN shell 15 staticperl cpan # invoke CPAN shell
15 staticperl instmod path... # install unpacked modules 16 staticperl instsrc path... # install unpacked modules
16 staticperl instcpan modulename... # install modules from CPAN 17 staticperl instcpan modulename... # install modules from CPAN
17 staticperl mkbundle <bundle-args...> # see documentation 18 staticperl mkbundle <bundle-args...> # see documentation
18 staticperl mkperl <bundle-args...> # see documentation 19 staticperl mkperl <bundle-args...> # see documentation
19 staticperl mkapp appname <bundle-args...> # see documentation 20 staticperl mkapp appname <bundle-args...> # see documentation
20 21
38file that contains perl interpreter, libc, all the modules you need, all 39file that contains perl interpreter, libc, all the modules you need, all
39the libraries you need and of course your actual program. 40the libraries you need and of course your actual program.
40 41
41With F<uClibc> and F<upx> on x86, you can create a single 500kb binary 42With F<uClibc> and F<upx> on x86, you can create a single 500kb binary
42that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO, 43that contains perl and 100 modules such as POSIX, AnyEvent, EV, IO::AIO,
43Coro and so on. Or any other choice of modules. 44Coro and so on. Or any other choice of modules (and some other size :).
44 45
45To see how this turns out, you can try out smallperl and bigperl, two 46To see how this turns out, you can try out smallperl and bigperl, two
46pre-built static and compressed perl binaries with many and even more 47pre-built static and compressed perl binaries with many and even more
47modules: just follow the links at L<http://staticperl.schmorp.de/>. 48modules: just follow the links at L<http://staticperl.schmorp.de/>.
48 49
83With F<staticperl>, the burden is mostly with the developer - only direct 84With F<staticperl>, the burden is mostly with the developer - only direct
84compile-time dependencies and L<AutoLoader> are handled automatically. 85compile-time dependencies and L<AutoLoader> are handled automatically.
85This means the modules to include often need to be tweaked manually. 86This means the modules to include often need to be tweaked manually.
86 87
87All this does not preclude more permissive modes to be implemented in 88All this does not preclude more permissive modes to be implemented in
88the future, but right now, you have to resolve state hidden dependencies 89the future, but right now, you have to resolve hidden dependencies
89manually. 90manually.
90 91
91=item * PAR works out of the box, F<staticperl> does not. 92=item * PAR works out of the box, F<staticperl> does not.
92 93
93Maintaining your own custom perl build can be a pain in the ass, and while 94Maintaining your own custom perl build can be a pain in the ass, and while
186=item F<staticperl install> 187=item F<staticperl install>
187 188
188Wipes the perl installation directory (usually F<~/.staticperl/perl>) and 189Wipes the perl installation directory (usually F<~/.staticperl/perl>) and
189installs the perl distribution, potentially after building it first. 190installs the perl distribution, potentially after building it first.
190 191
192=item F<staticperl perl> [args...]
193
194Invokes the compiled perl interpreter with the given args. Basically the
195same as starting perl directly (usually via F<~/.staticperl/bin/perl>),
196but beats typing the path sometimes.
197
198Example: check that the Gtk2 module is installed and loadable.
199
200 staticperl perl -MGtk2 -e0
201
191=item F<staticperl cpan> [args...] 202=item F<staticperl cpan> [args...]
192 203
193Starts an interactive CPAN shell that you can use to install further 204Starts an interactive CPAN shell that you can use to install further
194modules. Installs the perl first if necessary, but apart from that, 205modules. Installs the perl first if necessary, but apart from that,
195no magic is involved: you could just as well run it manually via 206no magic is involved: you could just as well run it manually via
196F<~/.staticperl/perl/bin/cpan>. 207F<~/.staticperl/perl/bin/cpan>, except that F<staticperl> additionally
208sets the environment variable C<$PERL> to the path of the perl
209interpreter, which is handy in subshells.
197 210
198Any additional arguments are simply passed to the F<cpan> command. 211Any additional arguments are simply passed to the F<cpan> command.
199 212
200=item F<staticperl instcpan> module... 213=item F<staticperl instcpan> module...
201 214
536 549
537Just like C<--add>, except that it treats the file as binary and adds it 550Just like C<--add>, except that it treats the file as binary and adds it
538without any postprocessing (perl files might get stripped to reduce their 551without any postprocessing (perl files might get stripped to reduce their
539size). 552size).
540 553
541If you specify an alias you should probably add a C<&> prefix to avoid 554If you specify an alias you should probably add a C</> prefix to avoid
542clashing with embedded perl files (whose paths never start with C<&>), 555clashing with embedded perl files (whose paths never start with C</>),
543and/or use a special directory prefix, such as C<&res/name>. 556and/or use a special directory prefix, such as C</res/name>.
544 557
545You can later get a copy of these files by calling C<staticperl::find 558You can later get a copy of these files by calling C<static::find
546"alias">. 559"alias">.
547 560
548An alternative way to embed binary files is to convert them to perl and 561An alternative way to embed binary files is to convert them to perl and
549use C<do> to get the contents - this method is a bit cumbersome, but works 562use C<do> to get the contents - this method is a bit cumbersome, but works
550both inside and outside of a staticperl bundle: 563both inside and outside of a staticperl bundle, without extra ado:
551 564
552 # a "binary" file, call it "bindata.pl" 565 # a "binary" file, call it "bindata.pl"
553 <<'SOME_MARKER' 566 <<'SOME_MARKER'
554 binary data NOT containing SOME_MARKER 567 binary data NOT containing SOME_MARKER
555 SOME_MARKER 568 SOME_MARKER
556 569
557 # load the binary 570 # load the binary
558 chomp (my $data = do "bindata.pl"); 571 chomp (my $data = do "bindata.pl");
572
573=item C<--allow-dynamic>
574
575By default, when F<mkbundle> hits a dynamic perl extension (e.g. a F<.so>
576or F<.dll> file), it will stop with a fatal error.
577
578When this option is enabled, F<mkbundle> packages the shared
579object into the bundle instead, with a prefix of F<!>
580(e.g. F<!auto/List/Util/Util.so>). What you do with that is currently up
581to you, F<staticperl> has no special support for this at the moment, apart
582from working around the lack of availability of F<PerlIO::scalar> while
583bootstrapping, at a speed cost.
584
585One way to deal with this is to write all files starting with F<!> into
586some directory and then C<unshift> that path onto C<@INC>.
587
588#TODO: example
559 589
560=back 590=back
561 591
562=item Step 2: filter all files using C<--include> and C<--exclude> options. 592=item Step 2: filter all files using C<--include> and C<--exclude> options.
563 593
871=item C<STATICPERL> 901=item C<STATICPERL>
872 902
873The directory where staticperl stores all its files 903The directory where staticperl stores all its files
874(default: F<~/.staticperl>). 904(default: F<~/.staticperl>).
875 905
876=item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ... 906=item C<DLCACHE>
877 907
878Usually set to C<1> to make modules "less inquisitive" during their 908The path to a directory (will be created if it doesn't exist) where
879installation, you can set any environment variable you want - some modules 909downloaded perl sources are being cached, to avoid downloading them
880(such as L<Coro> or L<EV>) use environment variables for further tweaking. 910again. The default is empty, which means there is no cache.
881 911
882=item C<PERL_VERSION> 912=item C<PERL_VERSION>
883 913
884The perl version to install - default is currently C<5.12.3>, but C<5.8.9> 914The perl version to install - default is currently C<5.12.3>, but C<5.8.9>
885is also a good choice (5.8.9 is much smaller than 5.12.3, while 5.10.1 is 915is also a good choice (5.8.9 is much smaller than 5.12.3, while 5.10.1 is
886about as big as 5.12.3). 916about as big as 5.12.3).
917
918=item C<PERL_MM_USE_DEFAULT>, C<EV_EXTRA_DEFS>, ...
919
920Usually set to C<1> to make modules "less inquisitive" during their
921installation. You can set (and export!) any environment variable you want
922- some modules (such as L<Coro> or L<EV>) use environment variables for
923further tweaking.
887 924
888=item C<PERL_PREFIX> 925=item C<PERL_PREFIX>
889 926
890The prefix where perl gets installed (default: F<$STATICPERL/perl>), 927The prefix where perl gets installed (default: F<$STATICPERL/perl>),
891i.e. where the F<bin> and F<lib> subdirectories will end up. 928i.e. where the F<bin> and F<lib> subdirectories will end up.
912F<~/.staticperlrc> to override them. 949F<~/.staticperlrc> to override them.
913 950
914Most of the variables override (or modify) the corresponding F<Configure> 951Most of the variables override (or modify) the corresponding F<Configure>
915variable, except C<PERL_CCFLAGS>, which gets appended. 952variable, except C<PERL_CCFLAGS>, which gets appended.
916 953
954You should have a look near the beginning of the F<staticperl> script -
955staticperl tries to default C<PERL_OPTIMIZE> to some psace-saving options
956suitable for newer gcc versions. For other compilers or older versions you
957need to adjust these, for example, in your F<~/.staticperlrc>.
958
917=back 959=back
918 960
919=head4 Variables you probably I<do not want> to override 961=head4 Variables you probably I<do not want> to override
920 962
921=over 4 963=over 4
939=head3 OVERRIDABLE HOOKS 981=head3 OVERRIDABLE HOOKS
940 982
941In addition to environment variables, it is possible to provide some 983In addition to environment variables, it is possible to provide some
942shell functions that are called at specific times. To provide your own 984shell functions that are called at specific times. To provide your own
943commands, just define the corresponding function. 985commands, just define the corresponding function.
986
987The actual order in which hooks are invoked during a full install
988from scratch is C<preconfigure>, C<patchconfig>, C<postconfigure>,
989C<postbuild>, C<postinstall>.
944 990
945Example: install extra modules from CPAN and from some directories 991Example: install extra modules from CPAN and from some directories
946at F<staticperl install> time. 992at F<staticperl install> time.
947 993
948 postinstall() { 994 postinstall() {
955 1001
956=over 4 1002=over 4
957 1003
958=item preconfigure 1004=item preconfigure
959 1005
960Called just before running F<./Configur> in the perl source 1006Called just before running F<./Configure> in the perl source
961directory. Current working directory is the perl source directory. 1007directory. Current working directory is the perl source directory.
962 1008
963This can be used to set any C<PERL_xxx> variables, which might be costly 1009This can be used to set any C<PERL_xxx> variables, which might be costly
964to compute. 1010to compute.
965 1011
1012=item patchconfig
1013
1014Called after running F<./Configure> in the perl source directory to create
1015F<./config.sh>, but before running F<./Configure -S> to actually apply the
1016config. Current working directory is the perl source directory.
1017
1018Can be used to tailor/patch F<config.sh> or do any other modifications.
1019
966=item postconfigure 1020=item postconfigure
967 1021
968Called after configuring, but before building perl. Current working 1022Called after configuring, but before building perl. Current working
969directory is the perl source directory. 1023directory is the perl source directory.
970
971Could be used to tailor/patch config.sh (followed by F<sh Configure -S>)
972or do any other modifications.
973 1024
974=item postbuild 1025=item postbuild
975 1026
976Called after building, but before installing perl. Current working 1027Called after building, but before installing perl. Current working
977directory is the perl source directory. 1028directory is the perl source directory.
1090 1141
1091=back 1142=back
1092 1143
1093=head1 RUNTIME FUNCTIONALITY 1144=head1 RUNTIME FUNCTIONALITY
1094 1145
1095Binaries created with C<mkbundle>/C<mkperl> contain extra functions, which 1146Binaries created with C<mkbundle>/C<mkperl> contain extra functionality,
1096are required to access the bundled perl sources, but might be useful for 1147mostly related to the extra files bundled in the binary (the virtual
1097other purposes. 1148filesystem). All of this data is statically compiled into the binary, and
1149accessing means copying it from a read-only section of your binary. Data
1150pages in this way is usually freed by the operating system, as it isn't
1151use more the onace.
1152
1153=head2 VIRTUAL FILESYSTEM
1154
1155Every bundle has a virtual filesystem. The only information stored in it
1156is the path and contents of each file that was bundled.
1157
1158=head3 LAYOUT
1159
1160Any path starting with an ampersand (F<&>) or exclamation mark (F<!>) are
1161reserved by F<staticperl>. They must only be used as described in this
1162section.
1163
1164=over 4
1165
1166=item !
1167
1168All files that typically cannot be loaded from memory (such as dynamic
1169objects or shared libraries), but have to reside in the filesystem, are
1170prefixed with F<!>. Typically these files get written out to some
1171(semi-)temporary directory shortly after program startup, or before being
1172used.
1173
1174=item !boot
1175
1176The bootstrap file, if specified during bundling.
1177
1178=item !auto/
1179
1180Shared objects or dlls corresponding to dynamically-linked perl extensions
1181are stored with an F<!auto/> prefix.
1182
1183=item !lib/
1184
1185External shared libraries are stored in this directory.
1186
1187=item any letter
1188
1189Any path starting with a letter is a perl library file. For example,
1190F<Coro/AIO.pm> corresponds to the file loaded by C<use Coro::AIO>, and
1191F<Coro/jit.pl> corresponds to C<require "Coro/jit.pl">.
1192
1193Obviously, module names shouldn't start with any other characters than
1194letters :)
1195
1196=back
1197
1198=head3 FUNCTIONS
1199
1200=over 4
1201
1202=item $file = static::find $path
1203
1204Returns the data associated with the given C<$path>
1205(e.g. C<Digest/MD5.pm>, C<auto/POSIX/autosplit.ix>).
1206
1207Returns C<undef> if the file isn't embedded.
1208
1209=item @paths = static::list
1210
1211Returns the list of all paths embedded in this binary.
1212
1213=back
1214
1215=head2 EXTRA FEATURES
1098 1216
1099In addition, for the embedded loading of perl files to work, F<staticperl> 1217In addition, for the embedded loading of perl files to work, F<staticperl>
1100overrides the C<@INC> array. 1218overrides the C<@INC> array.
1101
1102=over 4
1103
1104=item $file = staticperl::find $path
1105
1106Returns the data associated with the given C<$path>
1107(e.g. C<Digest/MD5.pm>, C<auto/POSIX/autosplit.ix>), which is basically
1108the UNIX path relative to the perl library directory.
1109
1110Returns C<undef> if the file isn't embedded.
1111
1112=item @paths = staticperl::list
1113
1114Returns the list of all paths embedded in this binary.
1115
1116=back
1117 1219
1118=head1 FULLY STATIC BINARIES - UCLIBC AND BUILDROOT 1220=head1 FULLY STATIC BINARIES - UCLIBC AND BUILDROOT
1119 1221
1120To make truly static (Linux-) libraries, you might want to have a look at 1222To make truly static (Linux-) libraries, you might want to have a look at
1121buildroot (L<http://buildroot.uclibc.org/>). 1223buildroot (L<http://buildroot.uclibc.org/>).
1130good experiences with GCC 4.4.x but not GCC 4.5. 1232good experiences with GCC 4.4.x but not GCC 4.5.
1131 1233
1132To minimise code size, I used C<-pipe -ffunction-sections -fdata-sections 1234To minimise code size, I used C<-pipe -ffunction-sections -fdata-sections
1133-finline-limit=8 -fno-builtin-strlen -mtune=i386>. The C<-mtune=i386> 1235-finline-limit=8 -fno-builtin-strlen -mtune=i386>. The C<-mtune=i386>
1134doesn't decrease codesize much, but it makes the file much more 1236doesn't decrease codesize much, but it makes the file much more
1135compressible. 1237compressible (and the execution a lot slower...).
1136 1238
1137If you don't need Coro or threads, you can go with "linuxthreads.old" (or 1239If you don't need Coro or threads, you can go with "linuxthreads.old" (or
1138no thread support). For Coro, it is highly recommended to switch to a 1240no thread support). For Coro, it is highly recommended to switch to a
1139uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201 1241uClibc newer than 0.9.31 (at the time of this writing, I used the 20101201
1140snapshot) and enable NPTL, otherwise Coro needs to be configured with the 1242snapshot) and enable NPTL, otherwise Coro needs to be configured with the
1142twice the address space needed for stacks). 1244twice the address space needed for stacks).
1143 1245
1144If you use C<linuxthreads.old>, then you should also be aware that 1246If you use C<linuxthreads.old>, then you should also be aware that
1145uClibc shares C<errno> between all threads when statically linking. See 1247uClibc shares C<errno> between all threads when statically linking. See
1146L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a 1248L<http://lists.uclibc.org/pipermail/uclibc/2010-June/044157.html> for a
1147workaround (And L<https://bugs.uclibc.org/2089> for discussion). 1249workaround (and L<https://bugs.uclibc.org/2089> for discussion).
1148 1250
1149C<ccache> support is also recommended, especially if you want 1251C<ccache> support is also recommended, especially if you want
1150to play around with buildroot options. Enabling the C<miniperl> 1252to play around with buildroot options. Enabling the C<miniperl>
1151package will probably enable all options required for a successful 1253package will probably enable all options required for a successful
1152perl build. F<staticperl> itself additionally needs either C<wget> 1254perl build. F<staticperl> itself additionally needs either C<wget>
1160it from working properly in a chroot - either use dash (and link it to 1262it from working properly in a chroot - either use dash (and link it to
1161F</bin/sh> inside the chroot) or link busybox to F</bin/sh>, using it's 1263F</bin/sh> inside the chroot) or link busybox to F</bin/sh>, using it's
1162built-in ash shell. 1264built-in ash shell.
1163 1265
1164Finally, you need F</dev/null> inside the chroot for many scripts to work 1266Finally, you need F</dev/null> inside the chroot for many scripts to work
1165- F<cp /dev/null output/target/dev> or bind-mounting your F</dev> will 1267- either F<cp /dev/null output/target/dev> or bind-mounting your F</dev>
1166both provide this. 1268will provide this.
1167 1269
1168After you have compiled and set up your buildroot target, you can copy 1270After you have compiled and set up your buildroot target, you can copy
1169F<staticperl> from the C<App::Staticperl> distribution or from your 1271F<staticperl> from the C<App::Staticperl> distribution or from your
1170perl f<bin> directory (if you installed it) into the F<output/target> 1272perl F<bin> directory (if you installed it) into the F<output/target>
1171filesystem, chroot inside and run it. 1273filesystem, chroot inside and run it.
1172 1274
1173=head1 RECIPES / SPECIFIC MODULES 1275=head1 RECIPES / SPECIFIC MODULES
1174 1276
1175This section contains some common(?) recipes and information about 1277This section contains some common(?) recipes and information about
1213C<"AnyEvent/Util/uts46data.pl">. 1315C<"AnyEvent/Util/uts46data.pl">.
1214 1316
1215Or you can use C<--usepacklists> and specify C<-MAnyEvent> to include 1317Or you can use C<--usepacklists> and specify C<-MAnyEvent> to include
1216everything. 1318everything.
1217 1319
1320=item Cairo
1321
1322See Glib, same problem, same solution.
1323
1218=item Carp 1324=item Carp
1219 1325
1220Carp had (in older versions of perl) a dependency on L<Carp::Heavy>. As of 1326Carp had (in older versions of perl) a dependency on L<Carp::Heavy>. As of
1221perl 5.12.2 (maybe earlier), this dependency no longer exists. 1327perl 5.12.2 (maybe earlier), this dependency no longer exists.
1222 1328
1223=item Config 1329=item Config
1224 1330
1225The F<perl -V> switch (as well as many modules) needs L<Config>, which in 1331The F<perl -V> switch (as well as many modules) needs L<Config>, which in
1226turn might need L<"Config_heavy.pl">. Including the latter gives you 1332turn might need L<"Config_heavy.pl">. Including the latter gives you
1227both. 1333both.
1334
1335=item Glib
1336
1337Glib literally requires Glib to be installed already to build - it tries
1338to fake this by running Glib out of the build directory before being
1339built. F<staticperl> tries to work around this by forcing C<MAN1PODS> and
1340C<MAN3PODS> to be empty via the C<PERL_MM_OPT> environment variable.
1341
1342=item Gtk2
1343
1344See Pango, same problems, same solution.
1345
1346=item Pango
1347
1348In addition to the C<MAN3PODS> problem in Glib, Pango also routes around
1349L<ExtUtils::MakeMaker> by compiling its files on its own. F<staticperl>
1350tries to patch L<ExtUtils::MM_Unix> to route around Pango.
1228 1351
1229=item Term::ReadLine::Perl 1352=item Term::ReadLine::Perl
1230 1353
1231Also needs L<Term::ReadLine::readline>, or C<--usepacklists>. 1354Also needs L<Term::ReadLine::readline>, or C<--usepacklists>.
1232 1355

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines