| 1 |
root |
1.1 |
NAME |
| 2 |
|
|
staticperl - perl, libc, 50 modules all in one 500kb file |
| 3 |
|
|
|
| 4 |
|
|
SYNOPSIS |
| 5 |
|
|
staticperl help # print the embedded documentation |
| 6 |
|
|
staticperl fetch # fetch and unpack perl sources |
| 7 |
|
|
staticperl configure # fetch and then configure perl |
| 8 |
|
|
staticperl build # configure and then build perl |
| 9 |
|
|
staticperl install # build and then install perl |
| 10 |
|
|
staticperl clean # clean most intermediate files (restart at configure) |
| 11 |
|
|
staticperl distclean # delete everything installed by this script |
| 12 |
|
|
staticperl cpan # invoke CPAN shell |
| 13 |
|
|
staticperl instmod path... # install unpacked modules |
| 14 |
|
|
staticperl instcpan modulename... # install modules from CPAN |
| 15 |
|
|
staticperl mkbundle <bundle-args...> # see documentation |
| 16 |
|
|
staticperl mkperl <bundle-args...> # see documentation |
| 17 |
|
|
|
| 18 |
|
|
Typical Examples: |
| 19 |
|
|
|
| 20 |
|
|
staticperl install # fetch, configure, build and install perl |
| 21 |
|
|
staticperl cpan # run interactive cpan shell |
| 22 |
|
|
staticperl mkperl -M '"Config_heavy.pl"' # build a perl that supports -V |
| 23 |
|
|
staticperl mkperl -MAnyEvent::Impl::Perl -MAnyEvent::HTTPD -MURI -MURI::http |
| 24 |
|
|
# build a perl with the above modules linked in |
| 25 |
|
|
|
| 26 |
|
|
DESCRIPTION |
| 27 |
root |
1.2 |
This script helps you creating single-file perl interpreters, or |
| 28 |
|
|
embedding a perl interpreter in your applications. Single-file means |
| 29 |
|
|
that it is fully self-contained - no separate shared objects, no |
| 30 |
|
|
autoload fragments, no .pm or .pl files are needed. And when linking |
| 31 |
|
|
statically, you can create (or embed) a single file that contains perl |
| 32 |
|
|
interpreter, libc, all the modules you need and all the libraries you |
| 33 |
|
|
need. |
| 34 |
|
|
|
| 35 |
|
|
With uClibc and upx on x86, you can create a single 500kb binary that |
| 36 |
|
|
contains perl and 50 modules such as AnyEvent, EV, IO::AIO, Coro and so |
| 37 |
|
|
on. Or any other choice of modules. |
| 38 |
|
|
|
| 39 |
|
|
The created files do not need write access to the file system (like PAR |
| 40 |
|
|
does). In fact, since this script is in many ways similar to |
| 41 |
|
|
PAR::Packer, here are the differences: |
| 42 |
|
|
|
| 43 |
|
|
* The generated executables are much smaller than PAR created ones. |
| 44 |
|
|
|
| 45 |
|
|
Shared objects and the perl binary contain a lot of extra info, |
| 46 |
|
|
while the static nature of staticperl allows the linker to remove |
| 47 |
|
|
all functionality and meta-info not required by the final |
| 48 |
|
|
executable. Even extensions statically compiled into perl at build |
| 49 |
|
|
time will only be present in the final executable when needed. |
| 50 |
|
|
|
| 51 |
|
|
In addition, staticperl can strip perl sources much more effectively |
| 52 |
|
|
than PAR. |
| 53 |
|
|
|
| 54 |
|
|
* The generated executables start much faster. |
| 55 |
|
|
|
| 56 |
|
|
There is no need to unpack files, or even to parse Zip archives |
| 57 |
|
|
(which is slow and memory-consuming business). |
| 58 |
|
|
|
| 59 |
|
|
* The generated executables don't need a writable filesystem. |
| 60 |
|
|
|
| 61 |
|
|
staticperl loads all required files directly from memory. There is |
| 62 |
|
|
no need to unpack files into a temporary directory. |
| 63 |
|
|
|
| 64 |
|
|
* More control over included files. |
| 65 |
|
|
|
| 66 |
|
|
PAR tries to be maintenance and hassle-free - it tries to include |
| 67 |
|
|
more files than necessary to make sure everything works out of the |
| 68 |
|
|
box. The extra files (such as the unicode database) can take |
| 69 |
|
|
substantial amounts of memory and file size. |
| 70 |
|
|
|
| 71 |
|
|
With staticperl, the burden is mostly with the developer - only |
| 72 |
|
|
direct compile-time dependencies and AutoLoader are handled |
| 73 |
|
|
automatically. This means the modules to include often need to be |
| 74 |
|
|
tweaked manually. |
| 75 |
|
|
|
| 76 |
|
|
* PAR works out of the box, staticperl does not. |
| 77 |
|
|
|
| 78 |
|
|
Maintaining your own custom perl build can be a pain in the ass, and |
| 79 |
|
|
while staticperl tries to make this easy, it still requires a custom |
| 80 |
|
|
perl build and possibly fiddling with some modules. PAR is likely to |
| 81 |
|
|
produce results faster. |
| 82 |
|
|
|
| 83 |
|
|
HOW DOES IT WORK? |
| 84 |
|
|
Simple: staticperl downloads, compile and installs a perl version of |
| 85 |
|
|
your choice in ~/.staticperl. You can add extra modules either by |
| 86 |
|
|
letting staticperl install them for you automatically, or by using CPAN |
| 87 |
|
|
and doing it interactively. This usually takes 5-10 minutes, depending |
| 88 |
|
|
on the speed of your computer and your internet connection. |
| 89 |
|
|
|
| 90 |
|
|
It is possible to do program development at this stage, too. |
| 91 |
|
|
|
| 92 |
|
|
Afterwards, you create a list of files and modules you want to include, |
| 93 |
|
|
and then either build a new perl binary (that acts just like a normal |
| 94 |
|
|
perl except everything is compiled in), or you create bundle files |
| 95 |
|
|
(basically C sources you can use to embed all files into your project). |
| 96 |
|
|
|
| 97 |
|
|
This step is very fast (a few seconds if PPI is not used for stripping, |
| 98 |
|
|
more seconds otherwise, as PPI is very slow), and can be tweaked and |
| 99 |
|
|
repeated as often as necessary. |
| 100 |
|
|
|
| 101 |
|
|
THE STATICPERL SCRIPT |
| 102 |
|
|
This module installs a script called staticperl into your perl binary |
| 103 |
|
|
directory. The script is fully self-contained, and can be used without |
| 104 |
|
|
perl (for example, in an uClibc chroot environment). In fact, it can be |
| 105 |
|
|
extracted from the "App::Staticperl" distribution tarball as |
| 106 |
|
|
bin/staticperl, without any installation. |
| 107 |
|
|
|
| 108 |
|
|
staticperl interprets the first argument as a command to execute, |
| 109 |
|
|
optionally followed by any parameters. |
| 110 |
|
|
|
| 111 |
|
|
There are two command categories: the "phase 1" commands which deal with |
| 112 |
|
|
installing perl and perl modules, and the "phase 2" commands, which deal |
| 113 |
|
|
with creating binaries and bundle files. |
| 114 |
|
|
|
| 115 |
|
|
PHASE 1 COMMANDS: INSTALLING PERL |
| 116 |
|
|
The most important command is install, which does basically everything. |
| 117 |
|
|
The default is to download and install perl 5.12.2 and a few modules |
| 118 |
|
|
required by staticperl itself, but all this can (and should) be changed |
| 119 |
|
|
- see CONFIGURATION, below. |
| 120 |
|
|
|
| 121 |
|
|
The command |
| 122 |
|
|
|
| 123 |
|
|
staticperl install |
| 124 |
|
|
|
| 125 |
|
|
Is normally all you need: It installs the perl interpreter in |
| 126 |
|
|
~/.staticperl/perl. It downloads, configures, builds and installs the |
| 127 |
|
|
perl interpreter if required. |
| 128 |
|
|
|
| 129 |
|
|
Most of the following commands simply run one or more steps of this |
| 130 |
|
|
sequence. |
| 131 |
|
|
|
| 132 |
|
|
To force recompilation or reinstallation, you need to run staticperl |
| 133 |
|
|
distclean first. |
| 134 |
|
|
|
| 135 |
|
|
staticperl fetch |
| 136 |
|
|
Runs only the download and unpack phase, unless this has already |
| 137 |
|
|
happened. |
| 138 |
|
|
|
| 139 |
|
|
staticperl configure |
| 140 |
|
|
Configures the unpacked perl sources, potentially after downloading |
| 141 |
|
|
them first. |
| 142 |
|
|
|
| 143 |
|
|
staticperl build |
| 144 |
|
|
Builds the configured perl sources, potentially after automatically |
| 145 |
|
|
configuring them. |
| 146 |
|
|
|
| 147 |
|
|
staticperl install |
| 148 |
|
|
Wipes the perl installation directory (usually ~/.staticperl/perl) |
| 149 |
|
|
and installs the perl distribution, potentially after building it |
| 150 |
|
|
first. |
| 151 |
|
|
|
| 152 |
|
|
staticperl cpan [args...] |
| 153 |
|
|
Starts an interactive CPAN shell that you can use to install further |
| 154 |
|
|
modules. Installs the perl first if necessary, but apart from that, |
| 155 |
|
|
no magic is involved: you could just as well run it manually via |
| 156 |
|
|
~/.staticperl/perl/bin/cpan. |
| 157 |
|
|
|
| 158 |
|
|
Any additional arguments are simply passed to the cpan command. |
| 159 |
|
|
|
| 160 |
|
|
staticperl instcpan module... |
| 161 |
|
|
Tries to install all the modules given and their dependencies, using |
| 162 |
|
|
CPAN. |
| 163 |
|
|
|
| 164 |
|
|
Example: |
| 165 |
|
|
|
| 166 |
|
|
staticperl instcpan EV AnyEvent::HTTPD Coro |
| 167 |
|
|
|
| 168 |
|
|
staticperl instsrc directory... |
| 169 |
|
|
In the unlikely case that you have unpacked perl modules around and |
| 170 |
|
|
want to install from these instead of from CPAN, you can do this |
| 171 |
|
|
using this command by specifying all the directories with modules in |
| 172 |
|
|
them that you want to have built. |
| 173 |
|
|
|
| 174 |
|
|
staticperl clean |
| 175 |
|
|
Runs make distclean in the perl source directory (and potentially |
| 176 |
|
|
cleans up other intermediate files). This can be used to clean up |
| 177 |
|
|
intermediate files without removing the installed perl interpreter. |
| 178 |
|
|
|
| 179 |
|
|
staticperl distclean |
| 180 |
|
|
This wipes your complete ~/.staticperl directory. Be careful with |
| 181 |
|
|
this, it nukes your perl download, perl sources, perl distribution |
| 182 |
|
|
and any installed modules. It is useful if you wish to start over |
| 183 |
|
|
"from scratch" or when you want to uninstall staticperl. |
| 184 |
|
|
|
| 185 |
|
|
PHASE 2 COMMANDS: BUILDING PERL BUNDLES |
| 186 |
|
|
Building (linking) a new perl binary is handled by a separate script. To |
| 187 |
|
|
make it easy to use staticperl from a chroot, the script is embedded |
| 188 |
|
|
into staticperl, which will write it out and call for you with any |
| 189 |
|
|
arguments you pass: |
| 190 |
|
|
|
| 191 |
|
|
staticperl mkbundle mkbundle-args... |
| 192 |
|
|
|
| 193 |
|
|
In the oh so unlikely case of something not working here, you can run |
| 194 |
|
|
the script manually as well (by default it is written to |
| 195 |
|
|
~/.staticperl/mkbundle). |
| 196 |
|
|
|
| 197 |
|
|
mkbundle is a more conventional command and expect the argument syntax |
| 198 |
|
|
commonly used on UNIX clones. For example, this command builds a new |
| 199 |
|
|
perl binary and includes Config.pm (for perl -V), AnyEvent::HTTPD, URI |
| 200 |
|
|
and a custom httpd script (from eg/httpd in this distribution): |
| 201 |
|
|
|
| 202 |
|
|
# first make sure we have perl and the required modules |
| 203 |
|
|
staticperl instcpan AnyEvent::HTTPD |
| 204 |
|
|
|
| 205 |
|
|
# now build the perl |
| 206 |
|
|
staticperl mkperl -M'"Config_heavy.pl"' -MAnyEvent::Impl::Perl \ |
| 207 |
|
|
-MAnyEvent::HTTPD -MURI::http \ |
| 208 |
|
|
--add 'eg/httpd httpd.pm' |
| 209 |
|
|
|
| 210 |
|
|
# finally, invoke it |
| 211 |
|
|
./perl -Mhttpd |
| 212 |
|
|
|
| 213 |
|
|
As you can see, things are not quite as trivial: the Config module has a |
| 214 |
|
|
hidden dependency which is not even a perl module (Config_heavy.pl), |
| 215 |
|
|
AnyEvent needs at least one event loop backend that we have to specify |
| 216 |
|
|
manually (here AnyEvent::Impl::Perl), and the URI module (required by |
| 217 |
|
|
AnyEvent::HTTPD) implements various URI schemes as extra modules - since |
| 218 |
|
|
AnyEvent::HTTPD only needs "http" URIs, we only need to include that |
| 219 |
|
|
module. I found out about these dependencies by carefully watching any |
| 220 |
|
|
error messages about missing modules... |
| 221 |
|
|
|
| 222 |
|
|
OPTION PROCESSING |
| 223 |
|
|
All options can be given as arguments on the command line (typically |
| 224 |
|
|
using long (e.g. "--verbose") or short option (e.g. "-v") style). Since |
| 225 |
|
|
specifying a lot of modules can make the command line very cumbersome, |
| 226 |
|
|
you can put all long options into a "bundle specification file" (with or |
| 227 |
|
|
without "--" prefix) and specify this bundle file instead. |
| 228 |
|
|
|
| 229 |
|
|
For example, the command given earlier could also look like this: |
| 230 |
|
|
|
| 231 |
|
|
staticperl mkperl httpd.bundle |
| 232 |
|
|
|
| 233 |
|
|
And all options could be in httpd.bundle: |
| 234 |
|
|
|
| 235 |
|
|
use "Config_heavy.pl" |
| 236 |
|
|
use AnyEvent::Impl::Perl |
| 237 |
|
|
use AnyEvent::HTTPD |
| 238 |
|
|
use URI::http |
| 239 |
|
|
add eg/httpd httpd.pm |
| 240 |
|
|
|
| 241 |
|
|
All options that specify modules or files to be added are processed in |
| 242 |
|
|
the order given on the command line (that affects the "--use" and |
| 243 |
|
|
"--eval" options at the moment). |
| 244 |
|
|
|
| 245 |
|
|
MKBUNDLE OPTIONS |
| 246 |
|
|
--verbose | -v |
| 247 |
|
|
Increases the verbosity level by one (the default is 1). |
| 248 |
|
|
|
| 249 |
|
|
--quiet | -q |
| 250 |
|
|
Decreases the verbosity level by one. |
| 251 |
|
|
|
| 252 |
|
|
--strip none|pod|ppi |
| 253 |
|
|
Specify the stripping method applied to reduce the file of the perl |
| 254 |
|
|
sources included. |
| 255 |
|
|
|
| 256 |
|
|
The default is "pod", which uses the Pod::Strip module to remove all |
| 257 |
|
|
pod documentation, which is very fast and reduces file size a lot. |
| 258 |
|
|
|
| 259 |
|
|
The "ppi" method uses PPI to parse and condense the perl sources. |
| 260 |
|
|
This saves a lot more than just Pod::Strip, and is generally safer, |
| 261 |
|
|
but is also a lot slower, so is best used for production builds. |
| 262 |
|
|
Note that this method doesn't optimise for raw file size, but for |
| 263 |
|
|
best compression (that means that the uncompressed file size is a |
| 264 |
|
|
bit larger, but the files compress better, e.g. with upx). |
| 265 |
|
|
|
| 266 |
|
|
Last not least, in the unlikely case where "pod" is too slow, or |
| 267 |
|
|
some module gets mistreated, you can specify "none" to not mangle |
| 268 |
|
|
included perl sources in any way. |
| 269 |
|
|
|
| 270 |
|
|
--perl |
| 271 |
|
|
After writing out the bundle files, try to link a new perl |
| 272 |
|
|
interpreter. It will be called perl and will be left in the current |
| 273 |
|
|
working directory. The bundle files will be removed. |
| 274 |
|
|
|
| 275 |
|
|
This switch is automatically used when staticperl is invoked with |
| 276 |
|
|
the "mkperl" command (instead of "mkbundle"): |
| 277 |
|
|
|
| 278 |
|
|
# build a new ./perl with only common::sense in it - very small :) |
| 279 |
|
|
staticperl mkperl -Mcommon::sense |
| 280 |
|
|
|
| 281 |
|
|
--use module | -Mmodule |
| 282 |
|
|
Include the named module and all direct dependencies. This is done |
| 283 |
|
|
by "require"'ing the module in a subprocess and tracing which other |
| 284 |
|
|
modules and files it actually loads. If the module uses AutoLoader, |
| 285 |
|
|
then all splitfiles will be included as well. |
| 286 |
|
|
|
| 287 |
|
|
Example: include AnyEvent and AnyEvent::Impl::Perl. |
| 288 |
|
|
|
| 289 |
|
|
staticperl mkbundle --use AnyEvent --use AnyEvent::Impl::Perl |
| 290 |
|
|
|
| 291 |
|
|
Sometimes you want to load old-style "perl libraries" (.pl files), |
| 292 |
|
|
or maybe other weirdly named files. To do that, you need to quote |
| 293 |
|
|
the name in single or double quotes. When given on the command line, |
| 294 |
|
|
you probably need to quote once more to avoid your shell |
| 295 |
|
|
interpreting it. Common cases that need this are Config_heavy.pl and |
| 296 |
|
|
utf8_heavy.pl. |
| 297 |
|
|
|
| 298 |
|
|
Example: include the required files for perl -V to work in all its |
| 299 |
|
|
glory (Config.pm is included automatically by this). |
| 300 |
|
|
|
| 301 |
|
|
# bourne shell |
| 302 |
|
|
staticperl mkbundle --use '"Config_heavy.pl"' |
| 303 |
|
|
|
| 304 |
|
|
# bundle specification file |
| 305 |
|
|
use "Config_heavy.pl" |
| 306 |
|
|
|
| 307 |
|
|
The "-Mmodule" syntax is included as an alias that might be easier |
| 308 |
|
|
to remember than "use". Or maybe it confuses people. Time will tell. |
| 309 |
|
|
Or maybe not. Argh. |
| 310 |
|
|
|
| 311 |
|
|
--eval "perl code" | -e "perl code" |
| 312 |
|
|
Sometimes it is easier (or necessary) to specify dependencies using |
| 313 |
|
|
perl code, or maybe one of the modules you use need a special use |
| 314 |
|
|
statement. In that case, you can use "eval" to execute some perl |
| 315 |
|
|
snippet or set some variables or whatever you need. All files |
| 316 |
|
|
"require"'d or "use"'d in the script are included in the final |
| 317 |
|
|
bundle. |
| 318 |
|
|
|
| 319 |
|
|
Keep in mind that mkbundle will only "require" the modules named by |
| 320 |
|
|
the "--use" option, so do not expect the symbols from modules you |
| 321 |
|
|
"--use"'d earlier on the command line to be available. |
| 322 |
|
|
|
| 323 |
|
|
Example: force AnyEvent to detect a backend and therefore include it |
| 324 |
|
|
in the final bundle. |
| 325 |
|
|
|
| 326 |
|
|
staticperl mkbundle --eval 'use AnyEvent; AnyEvent::detect' |
| 327 |
|
|
|
| 328 |
|
|
# or like this |
| 329 |
|
|
staticperl mkbundle -MAnyEvent --eval 'use AnyEvent; AnyEvent::detect' |
| 330 |
|
|
|
| 331 |
|
|
Example: use a separate "bootstrap" script that "use"'s lots of |
| 332 |
|
|
modules and include this in the final bundle, to be executed |
| 333 |
|
|
automatically. |
| 334 |
|
|
|
| 335 |
|
|
staticperl mkbundle --eval 'do "bootstrap"' --boot bootstrap |
| 336 |
|
|
|
| 337 |
|
|
--boot filename |
| 338 |
|
|
Include the given file in the bundle and arrange for it to be |
| 339 |
|
|
executed (using a "require") before anything else when the new perl |
| 340 |
|
|
is initialised. This can be used to modify @INC or anything else |
| 341 |
|
|
before the perl interpreter executes scripts given on the command |
| 342 |
|
|
line (or via "-e"). This works even in an embedded interpreter. |
| 343 |
|
|
|
| 344 |
|
|
--add "file" | --add "file alias" |
| 345 |
|
|
Adds the given (perl) file into the bundle (and optionally call it |
| 346 |
|
|
"alias"). This is useful to include any custom files into the |
| 347 |
|
|
bundle. |
| 348 |
|
|
|
| 349 |
|
|
Example: embed the file httpd as httpd.pm when creating the bundle. |
| 350 |
|
|
|
| 351 |
|
|
staticperl mkperl --add "httpd httpd.pm" |
| 352 |
|
|
|
| 353 |
|
|
It is also a great way to add any custom modules: |
| 354 |
|
|
|
| 355 |
|
|
# specification file |
| 356 |
|
|
add file1 myfiles/file1 |
| 357 |
|
|
add file2 myfiles/file2 |
| 358 |
|
|
add file3 myfiles/file3 |
| 359 |
|
|
|
| 360 |
|
|
--static |
| 361 |
|
|
When "--perl" is also given, link statically instead of dynamically. |
| 362 |
|
|
The default is to link the new perl interpreter fully dynamic (that |
| 363 |
|
|
means all perl modules are linked statically, but all external |
| 364 |
|
|
libraries are still referenced dynamically). |
| 365 |
|
|
|
| 366 |
|
|
Keep in mind that Solaris doesn't support static linking at all, and |
| 367 |
|
|
systems based on GNU libc don't really support it in a usable |
| 368 |
|
|
fashion either. Try uClibc if you want to create fully statically |
| 369 |
|
|
linked executables, or try the "--staticlibs" option to link only |
| 370 |
|
|
some libraries statically. |
| 371 |
|
|
|
| 372 |
|
|
any other argument |
| 373 |
|
|
Any other argument is interpreted as a bundle specification file, |
| 374 |
|
|
which supports most long options (without extra quoting), one option |
| 375 |
|
|
per line. |
| 376 |
|
|
|
| 377 |
|
|
STATCPERL CONFIGURATION AND HOOKS |
| 378 |
|
|
During (each) startup, staticperl tries to source the following shell |
| 379 |
|
|
files in order: |
| 380 |
|
|
|
| 381 |
|
|
/etc/staticperlrc |
| 382 |
|
|
~/.staticperlrc |
| 383 |
|
|
$STATICPERL/rc |
| 384 |
|
|
|
| 385 |
|
|
They can be used to override shell variables, or define functions to be |
| 386 |
|
|
called at specific phases. |
| 387 |
|
|
|
| 388 |
|
|
Note that the last file is erased during staticperl distclean, so |
| 389 |
|
|
generally should not be used. |
| 390 |
|
|
|
| 391 |
|
|
CONFIGURATION VARIABLES |
| 392 |
|
|
Variables you *should* override |
| 393 |
|
|
"EMAIL" |
| 394 |
|
|
The e-mail address of the person who built this binary. Has no good |
| 395 |
|
|
default, so should be specified by you. |
| 396 |
|
|
|
| 397 |
root |
1.3 |
Variables you might *want* to override |
| 398 |
root |
1.2 |
"PERLVER" |
| 399 |
|
|
The perl version to install - default is currently 5.12.2, but 5.8.9 |
| 400 |
|
|
is also a good choice (5.8.9 is much smaller than 5.12.2, while |
| 401 |
|
|
5.10.1 is about as big as 5.12.2). |
| 402 |
|
|
|
| 403 |
|
|
"CPAN" |
| 404 |
|
|
The URL of the CPAN mirror to use (e.g. |
| 405 |
|
|
<http://mirror.netcologne.de/cpan/>). |
| 406 |
|
|
|
| 407 |
root |
1.4 |
"EXTRA_MODULES" |
| 408 |
|
|
Additional modules installed during staticperl install. Here you can |
| 409 |
|
|
set which modules you want have to installed from CPAN. |
| 410 |
|
|
|
| 411 |
|
|
Example: I really really need EV, AnyEvent, Coro and IO::AIO. |
| 412 |
root |
1.2 |
|
| 413 |
root |
1.4 |
EXTRA_MODULES="EV AnyEvent Coro IO::AIO" |
| 414 |
root |
1.2 |
|
| 415 |
root |
1.4 |
Note that you can also use a "postinstall" hook to achieve this, and |
| 416 |
|
|
more. |
| 417 |
root |
1.2 |
|
| 418 |
root |
1.4 |
"PERL_MM_USE_DEFAULT", "EV_EXTRA_DEFS", ... |
| 419 |
root |
1.2 |
Usually set to 1 to make modules "less inquisitive" during their |
| 420 |
|
|
installation, you can set any environment variable you want - some |
| 421 |
|
|
modules (such as Coro or EV) use environment variables for further |
| 422 |
|
|
tweaking. |
| 423 |
|
|
|
| 424 |
root |
1.4 |
"STATICPERL" |
| 425 |
|
|
The directory where staticperl stores all its files (default: |
| 426 |
|
|
~/.staticperl). |
| 427 |
root |
1.2 |
|
| 428 |
root |
1.4 |
"PREFIX" |
| 429 |
|
|
The prefix where perl gets installed (default: $STATICPERL/perl), |
| 430 |
|
|
i.e. where the bin and lib subdirectories will end up. |
| 431 |
root |
1.2 |
|
| 432 |
root |
1.4 |
"PERL_CPPFLAGS", "PERL_OPTIMIZE", "PERL_LDFLAGS", "PERL_LIBS" |
| 433 |
|
|
These flags are passed to perl's Configure script, and are generally |
| 434 |
|
|
optimised for small size (at the cost of performance). Since they |
| 435 |
|
|
also contain subtle workarounds around various build issues, |
| 436 |
|
|
changing these usually requires understanding their default values - |
| 437 |
|
|
best look at the top of the staticperl script for more info on |
| 438 |
|
|
these. |
| 439 |
root |
1.2 |
|
| 440 |
root |
1.3 |
Variables you probably *do not want* to override |
| 441 |
root |
1.2 |
"MKBUNDLE" |
| 442 |
|
|
Where staticperl writes the "mkbundle" command to (default: |
| 443 |
|
|
$STATICPERL/mkbundle). |
| 444 |
|
|
|
| 445 |
|
|
"STATICPERL_MODULES" |
| 446 |
|
|
Additional modules needed by "mkbundle" - should therefore not be |
| 447 |
|
|
changed unless you know what you are doing. |
| 448 |
|
|
|
| 449 |
|
|
OVERRIDABLE HOOKS |
| 450 |
|
|
In addition to environment variables, it is possible to provide some |
| 451 |
|
|
shell functions that are called at specific times. To provide your own |
| 452 |
|
|
commands, just define the corresponding function. |
| 453 |
|
|
|
| 454 |
|
|
Example: install extra modules from CPAN and from some directories at |
| 455 |
|
|
staticperl install time. |
| 456 |
|
|
|
| 457 |
|
|
postinstall() { |
| 458 |
root |
1.3 |
rm -rf lib/threads* # weg mit Schaden |
| 459 |
root |
1.2 |
instcpan IO::AIO EV |
| 460 |
|
|
instsrc ~/src/AnyEvent |
| 461 |
|
|
instsrc ~/src/XML-Sablotron-1.0100001 |
| 462 |
root |
1.3 |
instcpan Anyevent::AIO AnyEvent::HTTPD |
| 463 |
root |
1.2 |
} |
| 464 |
|
|
|
| 465 |
|
|
postconfigure |
| 466 |
|
|
Called after configuring, but before building perl. Current working |
| 467 |
|
|
directory is the perl source directory. |
| 468 |
|
|
|
| 469 |
|
|
Could be used to tailor/patch config.sh (followed by ./Configure -S) |
| 470 |
|
|
or do any other modifications. |
| 471 |
|
|
|
| 472 |
|
|
postbuild |
| 473 |
|
|
Called after building, but before installing perl. Current working |
| 474 |
|
|
directory is the perl source directory. |
| 475 |
|
|
|
| 476 |
|
|
I have no clue what this could be used for - tell me. |
| 477 |
|
|
|
| 478 |
|
|
postinstall |
| 479 |
|
|
Called after perl and any extra modules have been installed in |
| 480 |
|
|
$PREFIX, but before setting the "installation O.K." flag. |
| 481 |
|
|
|
| 482 |
|
|
The current working directory is $PREFIX, but maybe you should not |
| 483 |
|
|
rely on that. |
| 484 |
|
|
|
| 485 |
|
|
This hook is most useful to customise the installation, by deleting |
| 486 |
|
|
files, or installing extra modules using the "instcpan" or "instsrc" |
| 487 |
|
|
functions. |
| 488 |
|
|
|
| 489 |
|
|
The script must return with a zero exit status, or the installation |
| 490 |
|
|
will fail. |
| 491 |
|
|
|
| 492 |
root |
1.1 |
AUTHOR |
| 493 |
|
|
Marc Lehmann <schmorp@schmorp.de> |
| 494 |
|
|
http://software.schmorp.de/pkg/staticperl.html |
| 495 |
|
|
|