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.64 by root, Thu Mar 21 16:41:36 2019 UTC vs.
Revision 1.67 by root, Fri Aug 4 03:58:52 2023 UTC

124 124
125=head1 THE F<STATICPERL> SCRIPT 125=head1 THE F<STATICPERL> SCRIPT
126 126
127This module installs a script called F<staticperl> into your perl 127This module installs a script called F<staticperl> into your perl
128binary directory. The script is fully self-contained, and can be 128binary directory. The script is fully self-contained, and can be
129used without perl (for example, in an uClibc chroot environment). In 129used without perl (for example, in an uClibc/dietlibc/musl chroot
130fact, it can be extracted from the C<App::Staticperl> distribution 130environment). In fact, it can be extracted from the C<App::Staticperl>
131tarball as F<bin/staticperl>, without any installation. The 131distribution tarball as F<bin/staticperl>, without any installation. The
132newest (possibly alpha) version can also be downloaded from 132newest (possibly alpha) version can also be downloaded from
133L<http://staticperl.schmorp.de/staticperl>. 133L<http://staticperl.schmorp.de/staticperl>.
134 134
135F<staticperl> interprets the first argument as a command to execute, 135F<staticperl> interprets the first argument as a command to execute,
136optionally followed by any parameters. 136optionally followed by any parameters.
189Wipes the perl installation directory (usually F<~/.staticperl/perl>) and 189Wipes the perl installation directory (usually F<~/.staticperl/perl>) and
190installs the perl distribution, potentially after building it first. 190installs the perl distribution, potentially after building it first.
191 191
192=item F<staticperl perl> [args...] 192=item F<staticperl perl> [args...]
193 193
194Invokes the compiled perl interpreter with the given args. Basically the 194Invokes the compiled perl interpreter with the given
195same as starting perl directly (usually via F<~/.staticperl/bin/perl>), 195arguments. Basically the same as starting perl directly (usually via
196but beats typing the path sometimes. 196F<~/.staticperl/bin/perl>), but beats typing the path sometimes.
197 197
198Example: check that the Gtk2 module is installed and loadable. 198Example: check that the Gtk2 module is installed and loadable.
199 199
200 staticperl perl -MGtk2 -e0 200 staticperl perl -MGtk2 -e0
201 201
546 my $res = do "myfiles/file3.pl"; 546 my $res = do "myfiles/file3.pl";
547 547
548=item C<--addbin> F<file> | C<--addbin> "F<file> alias" 548=item C<--addbin> F<file> | C<--addbin> "F<file> alias"
549 549
550Just 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
551without any postprocessing (perl files might get stripped to reduce their 551without any post-processing (perl files might get stripped to reduce their
552size). 552size).
553 553
554If 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
555clashing with embedded perl files (whose paths never start with C</>), 555clashing with embedded perl files (whose paths never start with C</>),
556and/or use a special directory prefix, such as C</res/name>. 556and/or use a special directory prefix, such as C</res/name>.
583bootstrapping, at a speed cost. 583bootstrapping, at a speed cost.
584 584
585One way to deal with this is to write all files starting with F<!> into 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>. 586some directory and then C<unshift> that path onto C<@INC>.
587 587
588#TODO: example 588(TODO for future self: write and insert a suitable example here, if
589somebody requests it).
589 590
590=back 591=back
591 592
592=item Step 2: filter all files using C<--include> and C<--exclude> options. 593=item Step 2: filter all files using C<--include> and C<--exclude> options.
593 594
704Last not least, if you need accurate line numbers in error messages, 705Last not least, if you need accurate line numbers in error messages,
705or in the unlikely case where C<pod> is too slow, or some module gets 706or in the unlikely case where C<pod> is too slow, or some module gets
706mistreated, you can specify C<none> to not mangle included perl sources in 707mistreated, you can specify C<none> to not mangle included perl sources in
707any way. 708any way.
708 709
710=item C<--compress> C<none>|C<lzf>
711
712Compress each included library file with C<lzf> (default), or do not
713compress (C<none>). LZF compression typically halves the size of the
714included library data at almost no overhead, but is counterproductive if
715you are using another compression solution such as C<UPX>, so it can be
716disabled.
717
709=item C<--perl> 718=item C<--perl>
710 719
711After writing out the bundle files, try to link a new perl interpreter. It 720After writing out the bundle files, try to link a new perl interpreter. It
712will be called F<perl> and will be left in the current working 721will be called F<perl> and will be left in the current working
713directory. The bundle files will be removed. 722directory. The bundle files will be removed.
746 755
747=item C<--ignore-env> 756=item C<--ignore-env>
748 757
749Generates extra code to unset some environment variables before 758Generates extra code to unset some environment variables before
750initialising/running perl. Perl supports a lot of environment variables 759initialising/running perl. Perl supports a lot of environment variables
751that might alter execution in ways that might be undesirablre for 760that might alter execution in ways that might be undesirable for
752standalone applications, and this option removes those known to cause 761standalone applications, and this option removes those known to cause
753trouble. 762trouble.
754 763
755Specifically, these are removed: 764Specifically, these are removed:
756 765
777The default is to link the new binary dynamically (that means all perl 786The default is to link the new binary dynamically (that means all perl
778modules are linked statically, but all external libraries are still 787modules are linked statically, but all external libraries are still
779referenced dynamically). 788referenced dynamically).
780 789
781Keep in mind that Solaris doesn't support static linking at all, and 790Keep in mind that Solaris doesn't support static linking at all, and
782systems based on GNU libc don't really support it in a very usable 791systems based on GNU libc don't really support it in a very usable fashion
783fashion either. Try uClibc if you want to create fully statically linked 792either. Try dietlibc or musl if you want to create fully statically linked
784executables, or try the C<--staticlib> option to link only some libraries 793executables, or try the C<--staticlib> option to link only some libraries
785statically. 794statically.
786 795
787=item C<--staticlib> libname 796=item C<--staticlib> libname
788 797
868In them you can override shell variables, or define shell functions 877In them you can override shell variables, or define shell functions
869("hooks") to be called at specific phases during installation. For 878("hooks") to be called at specific phases during installation. For
870example, you could define a C<postinstall> hook to install additional 879example, you could define a C<postinstall> hook to install additional
871modules from CPAN each time you start from scratch. 880modules from CPAN each time you start from scratch.
872 881
873If the env variable C<$STATICPERLRC> is set, then F<staticperl> will try 882If the environment variable C<$STATICPERLRC> is set, then F<staticperl>
874to source the file named with it only. Otherwise, it tries the following 883will try to source the file named with it only. Otherwise, it tries the
875shell files in order: 884following shell files in order:
876 885
877 /etc/staticperlrc 886 /etc/staticperlrc
878 ~/.staticperlrc 887 ~/.staticperlrc
879 $STATICPERL/rc 888 $STATICPERL/rc
880 889
955=item C<PERL_CONFIGURE> 964=item C<PERL_CONFIGURE>
956 965
957Additional Configure options - these are simply passed to the perl 966Additional Configure options - these are simply passed to the perl
958Configure script. For example, if you wanted to enable dynamic loading, 967Configure script. For example, if you wanted to enable dynamic loading,
959you could pass C<-Dusedl>. To enable ithreads (Why would you want that 968you could pass C<-Dusedl>. To enable ithreads (Why would you want that
960insanity? Don't! Use L<forks> instead!) you would pass C<-Duseithreads> 969insanity? Don't! Use L<Coro> or L<forks> instead!) you would pass
961and so on. 970C<-Duseithreads> and so on.
962 971
963More commonly, you would either activate 64 bit integer support 972More commonly, you would either activate 64 bit integer support
964(C<-Duse64bitint>), or disable large files support (-Uuselargefiles), to 973(C<-Duse64bitint>), or disable large files support (C<-Uuselargefiles>),
965reduce filesize further. 974to reduce file size further.
966 975
967=item C<PERL_CC>, C<PERL_CCFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS> 976=item C<PERL_CC>, C<PERL_CCFLAGS>, C<PERL_OPTIMIZE>, C<PERL_LDFLAGS>, C<PERL_LIBS>
968 977
969These flags are passed to perl's F<Configure> script, and are generally 978These flags are passed to perl's F<Configure> script, and are generally
970optimised for small size (at the cost of performance). Since they also 979optimised for small size (at the cost of performance). Since they also
974F<~/.staticperlrc> to override them. 983F<~/.staticperlrc> to override them.
975 984
976Most of the variables override (or modify) the corresponding F<Configure> 985Most of the variables override (or modify) the corresponding F<Configure>
977variable, except C<PERL_CCFLAGS>, which gets appended. 986variable, except C<PERL_CCFLAGS>, which gets appended.
978 987
979The default for C<PERL_OPTIMIZE> is C<-Os> (assuming gcc), and for 988The default for C<PERL_OPTIMIZE> is C<-Os> (assuming gcc or compatible
980C<PERL_LIBS> is C<-lm -lcrypt>, which should be good for most (but not 989compilers), and for C<PERL_LIBS> is C<-lm -lcrypt>, which should be good
981all) systems. 990for most (but not all) systems.
982 991
983For other compilers or more customised optimisation settings, you need to 992For other compilers or more customised optimisation settings, you need to
984adjust these, e.g. in your F<~/.staticperlrc>. 993adjust these, e.g. in your F<~/.staticperlrc>.
985 994
986With gcc on x86 and amd64, you can get more space-savings by using: 995With gcc on x86 and amd64, you can often get more space-savings by using:
987 996
988 -Os -ffunction-sections -fdata-sections -finline-limit=8 -mpush-args 997 -Os -ffunction-sections -fdata-sections -finline-limit=8 -mpush-args
989 -mno-inline-stringops-dynamically -mno-align-stringops 998 -mno-inline-stringops-dynamically -mno-align-stringops
990 999
991And on x86 and pentium3 and newer (basically everything you might ever 1000And on x86 and pentium3 and newer (basically everything you might ever
992want to run on), adding these is even better for space-savings (use 1001want to run on), adding these is even better for space-savings (use
993-mtune=core2 or something newer for much faster code, too): 1002C<-mtune=core2> or something newer for much faster code, too):
994 1003
995 -fomit-frame-pointer -march=pentium3 -mtune=i386 1004 -fomit-frame-pointer -march=pentium3 -mtune=i386
996 1005
997=back 1006=back
998 1007
1065Called after building, but before installing perl. Current working 1074Called after building, but before installing perl. Current working
1066directory is the perl source directory. 1075directory is the perl source directory.
1067 1076
1068I have no clue what this could be used for - tell me. 1077I have no clue what this could be used for - tell me.
1069 1078
1079=item postcpanconfig
1080
1081Called just after CPAN has been configured, but before it has been used to
1082install anything. You can further change the configuration like this:
1083
1084 "$PERL_PREFIX"/bin/perl -MCPAN::MyConfig -MCPAN -e '
1085 CPAN::Shell->o (conf => urllist => push => "'"$CPAN"'");
1086 ' || fatal "error while initialising CPAN in postcpanconfig"
1087
1070=item postinstall 1088=item postinstall
1071 1089
1072Called after perl and any extra modules have been installed in C<$PREFIX>, 1090Called after perl and any extra modules have been installed in C<$PREFIX>,
1073but before setting the "installation O.K." flag. 1091but before setting the "installation O.K." flag.
1074 1092
1126 staticperl_init (0); 1144 staticperl_init (0);
1127 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$"); 1145 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$");
1128 eval_pv ("require myapp::main", 1); // executes "myapp/main.pm" 1146 eval_pv ("require myapp::main", 1); // executes "myapp/main.pm"
1129 } 1147 }
1130 1148
1131When your bootcode already wants to access some XS functions at 1149When your boot code already wants to access some XS functions at compile
1132compiletime, then you need to supply an C<xs_init> function pointer that 1150time, then you need to supply an C<xs_init> function pointer that is
1133is called as soon as perl is initialised enough to define XS functions, 1151called as soon as perl is initialised enough to define XS functions, but
1134but before the preamble code is executed: 1152before the preamble code is executed:
1135 1153
1136 static void 1154 static void
1137 xs_init (pTHX) 1155 xs_init (pTHX)
1138 { 1156 {
1139 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$"); 1157 newXSproto ("myapp::xsfunction", xsfunction, __FILE__, "$$;$");
1224 1242
1225=item any letter 1243=item any letter
1226 1244
1227Any path starting with a letter is a perl library file. For example, 1245Any path starting with a letter is a perl library file. For example,
1228F<Coro/AIO.pm> corresponds to the file loaded by C<use Coro::AIO>, and 1246F<Coro/AIO.pm> corresponds to the file loaded by C<use Coro::AIO>, and
1229F<Coro/jit.pl> corresponds to C<require "Coro/jit.pl">. 1247F<Coro/jit.pl> corresponds to C<require "Coro/jit.pl">.
1230 1248
1231Obviously, module names shouldn't start with any other characters than 1249Obviously, module names shouldn't start with any other characters than
1232letters :) 1250letters :)
1233 1251
1234=back 1252=back
1279 1297
1280=over 4 1298=over 4
1281 1299
1282=item utf8 1300=item utf8
1283 1301
1284Some functionality in the utf8 module, such as swash handling (used 1302Some functionality in the C<utf8> module, such as swash handling
1285for unicode character ranges in regexes) is implemented in the 1303(used for unicode character ranges in regexes) is implemented in the
1286C<"utf8_heavy.pl"> library: 1304C<utf8_heavy.pl> library:
1287 1305
1288 -Mutf8_heavy.pl 1306 -Mutf8_heavy.pl
1289 1307
1290Many Unicode properties in turn are defined in separate modules, 1308Many Unicode properties in turn are defined in separate modules,
1291such as C<"unicore/Heavy.pl"> and more specific data tables such as 1309such as C<unicore/Heavy.pl> and more specific data tables such as
1292C<"unicore/To/Digit.pl"> or C<"unicore/lib/Perl/Word.pl">. These tables 1310C<unicore/To/Digit.pl> or C<unicore/lib/Perl/Word.pl>. These tables
1293are big (7MB uncompressed, although F<staticperl> contains special 1311are big (7MB uncompressed, although F<staticperl> contains special
1294handling for those files), so including them only on demand in your 1312handling for those files), so including them only on demand in your
1295application might pay off. 1313application might pay off.
1296 1314
1297To simply include the whole unicode database, use: 1315To simply include the whole unicode database, use:
1342 1360
1343=item Net::SSLeay 1361=item Net::SSLeay
1344 1362
1345This module hasn't been significantly updated since OpenSSL is called 1363This module hasn't been significantly updated since OpenSSL is called
1346OpenSSL, and fails to properly link against dependent libraries, most 1364OpenSSL, and fails to properly link against dependent libraries, most
1347commonly, it forgets to specify -ldl when linking. 1365commonly, it forgets to specify C<-ldl> when linking.
1348 1366
1349On GNU/Linux systems this usually goes undetected, as perl usually links 1367On GNU/Linux systems this usually goes undetected, as perl usually links
1350against -ldl itself and OpenSSL just happens to pick it up that way, by 1368against C<-ldl> itself and OpenSSL just happens to pick it up that way, by
1351chance. 1369chance.
1352 1370
1353For static builds, you either have to configure -ldl manually, or you 1371For static builds, you either have to configure C<-ldl> manually, or you
1354cna use the following snippet in your C<postinstall> hook which patches 1372can use the following snippet in your C<postinstall> hook which patches
1355Net::SSLeay after installation, which happens to work most of the time: 1373Net::SSLeay after installation, which happens to work most of the time:
1356 1374
1357 postinstall() { 1375 postinstall() {
1358 # first install it 1376 # first install it
1359 instcpan Net::SSLeay 1377 instcpan Net::SSLeay

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines