This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / INSTALL
... / ...
CommitLineData
1# vim: syntax=pod
2
3If you read this file _as_is_, just ignore the funny characters you see.
4It is written in the POD format (see F<pod/perlpod.pod>) which is specially
5designed to be readable as is.
6
7=head1 NAME
8
9INSTALL - Build and Installation guide for perl 5.
10
11=head1 SYNOPSIS
12
13First, make sure you have an up-to-date version of Perl. If you
14didn't get your Perl source from CPAN, check the latest version at
15L<https://www.cpan.org/src/>. Perl uses a version scheme where even-numbered
16subreleases (like 5.8.x and 5.10.x) are stable maintenance releases and
17odd-numbered subreleases (like 5.7.x and 5.9.x) are unstable
18development releases. Development releases should not be used in
19production environments. Fixes and new features are first carefully
20tested in development releases and only if they prove themselves to be
21worthy will they be migrated to the maintenance releases.
22
23The basic steps to build and install perl 5 on a Unix system with all
24the defaults are to run, from a freshly unpacked source tree:
25
26 sh Configure -de
27 make
28 make test
29 make install
30
31Each of these is explained in further detail below.
32
33The above commands will install Perl to F</usr/local> (or some other
34platform-specific directory -- see the appropriate file in F<hints/>.)
35If that's not okay with you, you can run Configure interactively, by
36just typing "sh Configure" (without the -de args). You can also specify
37any prefix location by adding C<"-Dprefix='/some/dir'"> to Configure's args.
38To explicitly name the perl binary, use the command
39"make install PERLNAME=myperl".
40
41Building perl from source requires an ANSI compliant C compiler.
42C89 with a minimal subset of C99 features is required. Some other
43features available in C99 will be probed for and used when found.
44
45These options, and many more, are explained in further detail below.
46
47If you're building perl from a git repository, you should also consult
48the documentation in F<pod/perlgit.pod> for information on that special
49circumstance.
50
51If you have problems, corrections, or questions, please see
52L<"Reporting Problems"> below.
53
54For information on what's new in this release, see the
55F<pod/perldelta.pod> file. For more information about how to find more
56specific detail about changes, see the Changes file.
57
58=head1 DESCRIPTION
59
60This document is written in pod format as an easy way to indicate its
61structure. The pod format is described in F<pod/perlpod.pod>, but you can
62read it as is with any pager or editor. Headings and items are marked
63by lines beginning with '='. The other mark-up used is
64
65 B<text> embolden text, used for switches, programs or commands
66 C<code> literal code
67 L<name> A link (cross reference) to name
68 F<file> A filename
69
70Although most of the defaults are probably fine for most users,
71you should probably at least skim through this document before
72proceeding.
73
74In addition to this file, check if there is a README file specific to
75your operating system, since it may provide additional or different
76instructions for building Perl. If there is a hint file for your
77system (in the F<hints/> directory) you might also want to read it
78for even more information.
79
80For additional information about porting Perl, see the section on
81L<"Porting information"> below, and look at the files in the F<Porting/>
82directory.
83
84=head1 PRELIMINARIES
85
86=head2 Changes and Incompatibilities
87
88Please see F<pod/perldelta.pod> for a description of the changes and
89potential incompatibilities introduced with this release. A few of
90the most important issues are listed below, but you should refer
91to F<pod/perldelta.pod> for more detailed information.
92
93=head3 Compatibility with earlier versions
94
95B<WARNING:> This version is not binary compatible with earlier versions
96of Perl. If you have built extensions (i.e. modules that include C code)
97using an earlier version of Perl, you will need to rebuild and reinstall
98those extensions.
99
100Pure perl modules without XS or C code should continue to work fine
101without reinstallation. See the discussion below on
102L<"Coexistence with earlier versions of perl 5"> for more details.
103
104The standard extensions supplied with Perl will be handled automatically.
105
106On a related issue, old modules may possibly be affected by the changes in the
107Perl language in the current release. We try hard to make new features
108"opt-in", such that existing code will work unchanged, and attempt to identify
109where bug fixes might expose code which was relying on incorrect interpreter
110behaviour. Please see F<pod/perldelta.pod> for a description of what's
111changed between this and the previous release. If you are upgrading from an
112earlier release, please also check the perldeltas describing changes for the
113intermediate releases, to get a full picture of what changes might affect your
114installation.
115
116See your installed copy of the perllocal.pod file for a (possibly
117incomplete) list of locally installed modules. Also see the L<CPAN> module's
118C<autobundle> function for one way to make a "bundle" of your currently
119installed modules.
120
121=head3 C99
122
123With 5.36 we changed our C compiler baseline requirement from "ANSI C89" to
124"C89 plus some specific C99 features". We have been using C99 features
125optionally for some time - we now additionally B<rely> on a few in the core C
126code and installed headers, which we know work on all supported compilers on
127all platforms we target. Because earlier versions of Perl still compile with
128strictly ANSI C89 compilers and there are still a few installations in the
129wild which use these very old compilers, XS code that targets earlier versions
130of Perl must not B<rely> on C99 features - that includes XS code in this
131distribution that is dual life on CPAN. To test that XS code can build on
132such compilers, some authors configure their perl builds with compiler flags
133to warn or raise errors on C99 specific features, most often for mixed
134declarations and code. This obviously will not work if you attempt it for
135this release - it will not build. However, XS authors should be aware that
136this means
137
138=over 4
139
140=item *
141
142If you change the C compiler flags in your F<Makefile.PL> or similar to add
143such warnings or errors, you must now only do it for 5.35.4 or earlier.
144
145=item *
146
147Do not rely on now being able to use C99 features in your XS code, even for
148platforms with C99 compilers - some installations of earlier versions of perl
149are deliberately configured to enforce C89 standards so that locally authored
150extension code conforms to them. If you choose to require C99 for your code,
151that's fine, but do so knowing that if you distribute it, some installations
152of perl are configured to fault C99.
153
154=back
155
156=head1 Run Configure
157
158Configure will figure out various things about your system. Some
159things Configure will figure out for itself, other things it will ask
160you about. To accept the default, just press RETURN. The default is
161almost always okay. It is normal for some things to be "NOT found",
162since Configure often searches for many different ways of performing
163the same function.
164
165At any Configure prompt, you can type &-d and Configure will use the
166defaults from then on.
167
168After it runs, Configure will perform variable substitution on all the
169*.SH files and offer to run make depend.
170
171The results of a Configure run are stored in the config.sh and Policy.sh
172files.
173
174=head2 Common Configure options
175
176Configure supports a number of useful options. Run
177
178 Configure -h
179
180to get a listing.
181
182Many Configure switches are expressed as C<key=value> pairs, for example:
183
184 -Dcc=clang
185
186Sometimes the value to be supplied for a switch is a string which contains
187spaces. In that case, the value needs to be quoted so as to delimit that
188"shell word" from any following switch. Example:
189
190 sh ./Configure -des \
191 -Doptimize="-O2 -pipe -fstack-protector -fno-strict-aliasing" \
192 -Dusedevel
193
194Once Configure has run, you will be able to access configuration data via
195entries in the file F<config.sh>.
196
197 config_arg0='./Configure'
198 config_args='-des -Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing -Dusedevel'
199 config_argc=3
200 config_arg1='-des'
201 config_arg2='-Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing'
202 config_arg3='-Dusedevel'
203
204See the F<Porting/Glossary> file for a complete list of
205Configure variables you can set and their definitions.
206
207=over 4
208
209=item C compiler
210
211To compile with gcc, if it's not the default compiler on your
212system, you should run
213
214 sh Configure -Dcc=gcc
215
216This is the preferred way to specify gcc (or any another alternative
217compiler) so that the hints files can set appropriate defaults.
218
219=item Installation prefix
220
221By default, for most systems, perl will be installed in
222F</usr/local/>{F<bin>, F<lib>, F<man>}. (See L<"Installation Directories">
223and L<"Coexistence with earlier versions of perl 5"> below for
224further details.)
225
226You can specify a different 'prefix' for the default installation
227directory when Configure prompts you, or by using the Configure command
228line option C<-Dprefix='/some/directory'>, e.g.
229
230 sh Configure -Dprefix=/opt/perl
231
232If your prefix contains the string "perl", then the suggested
233directory structure is simplified. For example, if you use
234C<prefix=/opt/perl>, then Configure will suggest F</opt/perl/lib> instead of
235F</opt/perl/lib/perl5/>. Again, see L<"Installation Directories"> below
236for more details. Do not include a trailing slash, (i.e. F</opt/perl/>)
237or you may experience odd test failures.
238
239NOTE: You must not specify an installation directory that is the same
240as or below your perl source directory. If you do, installperl will
241attempt infinite recursion.
242
243=item F</usr/bin/perl>
244
245It may seem obvious, but Perl is useful only when users can easily
246find it. It's often a good idea to have both F</usr/bin/perl> and
247F</usr/local/bin/perl> be symlinks to the actual binary. Be especially
248careful, however, not to overwrite a version of perl supplied by your
249vendor unless you are sure you know what you are doing. If you insist
250on replacing your vendor's perl, useful information on how it was
251configured may be found with
252
253 perl -V:config_args
254
255(Check the output carefully, however, since this doesn't preserve
256spaces in arguments to Configure. For that, you have to look carefully
257at config_arg1, config_arg2, etc.)
258
259By default, Configure will not try to link F</usr/bin/perl> to the current
260version of perl. You can turn on that behavior by running
261
262 Configure -Dinstallusrbinperl
263
264or by answering 'yes' to the appropriate Configure prompt.
265
266In any case, system administrators are strongly encouraged to put
267(symlinks to) perl and its accompanying utilities, such as perldoc,
268into a directory typically found along a user's PATH, or in another
269obvious and convenient place.
270
271=item Building a development release
272
273For development releases (odd subreleases, like 5.9.x) if you want to
274use Configure -d, you will also need to supply -Dusedevel to Configure,
275because the default answer to the question "do you really want to
276Configure a development version?" is "no". The -Dusedevel skips that
277sanity check.
278
279=back
280
281If you are willing to accept all the defaults, and you want terse
282output, you can run
283
284 sh Configure -des
285
286=head2 Altering Configure variables for C compiler switches etc.
287
288For most users, most of the Configure defaults are fine, or can easily
289be set on the Configure command line. However, if Configure doesn't
290have an option to do what you want, you can change Configure variables
291after the platform hints have been run by using Configure's -A switch.
292For example, here's how to add a couple of extra flags to C compiler
293invocations:
294
295 sh Configure -Accflags="-DPERL_EXTERNAL_GLOB -DNO_HASH_SEED"
296
297To clarify, those ccflags values are not Configure options; if passed to
298Configure directly, they won't do anything useful (they will define a
299variable in config.sh, but without taking any action based upon it).
300But when passed to the compiler, those flags will activate #ifdefd code.
301
302For more help on Configure switches, run
303
304 sh Configure -h
305
306=head2 Major Configure-time Build Options
307
308There are several different ways to Configure and build perl for your
309system. For most users, the defaults are sensible and will work.
310Some users, however, may wish to further customize perl. Here are
311some of the main things you can change.
312
313=head3 Threads
314
315On some platforms, perl can be compiled with support for threads. To
316enable this, run
317
318 sh Configure -Dusethreads
319
320The default is to compile without thread support.
321
322Perl used to have two different internal threads implementations. The
323current model (available internally since 5.6, and as a user-level module
324since 5.8) is called interpreter-based implementation (ithreads), with
325one interpreter per thread, and explicit sharing of data. The (deprecated)
3265.005 version (5005threads) was removed for release 5.10.
327
328The 'threads' module is for use with the ithreads implementation. The
329'Thread' module emulates the old 5005threads interface on top of the
330current ithreads model.
331
332When using threads, perl uses a dynamically-sized buffer for some of
333the thread-safe library calls, such as those in the getpw*() family.
334This buffer starts small, but it will keep growing until the result
335fits. To get a fixed upper limit, you should compile Perl with
336PERL_REENTRANT_MAXSIZE defined to be the number of bytes you want. One
337way to do this is to run Configure with
338C<-Accflags=-DPERL_REENTRANT_MAXSIZE=65536>.
339
340=head3 Large file support
341
342Since Perl 5.6.0, Perl has supported large files (files larger than
3432 gigabytes), and in many common platforms like Linux or Solaris this
344support is on by default.
345
346This is both good and bad. It is good in that you can use large files,
347seek(), stat(), and -s them. It is bad in that if you are interfacing
348Perl using some extension, the components you are connecting to must also
349be large file aware: if Perl thinks files can be large but the other
350parts of the software puzzle do not understand the concept, bad things
351will happen.
352
353There's also one known limitation with the current large files
354implementation: unless you also have 64-bit integers (see the next
355section), you cannot use the printf/sprintf non-decimal integer formats
356like C<%x> to print filesizes. You can use C<%d>, though.
357
358If you want to compile perl without large file support, use
359
360 sh Configure -Uuselargefiles
361
362=head3 64 bit support
363
364If your platform does not run natively at 64 bits, but can simulate
365them with compiler flags and/or C<long long> or C<int64_t>,
366you can build a perl that uses 64 bits.
367
368There are actually two modes of 64-bitness: the first one is achieved
369using Configure -Duse64bitint and the second one using Configure
370-Duse64bitall. The difference is that the first one is minimal and
371the second one maximal. The first works in more places than the second.
372
373The C<use64bitint> option does only as much as is required to get
37464-bit integers into Perl (this may mean, for example, using "long
375longs") while your memory may still be limited to 2 gigabytes (because
376your pointers could still be 32-bit). Note that the name C<64bitint>
377does not imply that your C compiler will be using 64-bit C<int>s (it
378might, but it doesn't have to). The C<use64bitint> simply means that
379you will be able to have 64 bit-wide scalar values.
380
381The C<use64bitall> option goes all the way by attempting to switch
382integers (if it can), longs (and pointers) to being 64-bit. This may
383create an even more binary incompatible Perl than -Duse64bitint: the
384resulting executable may not run at all in a 32-bit box, or you may
385have to reboot/reconfigure/rebuild your operating system to be 64-bit
386aware.
387
388Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
389On these systems, it might be the default compilation mode, and there
390is currently no guarantee that passing no use64bitall option to the
391Configure process will build a 32bit perl. Implementing -Duse32bit*
392options is planned for a future release of perl.
393
394=head3 Long doubles
395
396In some systems you may be able to use long doubles to enhance the
397range and precision of your double precision floating point numbers
398(that is, Perl's numbers). Use Configure -Duselongdouble to enable
399this support (if it is available).
400
401Note that the exact format and range of long doubles varies:
402the most common is the x86 80-bit (64 bits of mantissa) format,
403but there are others, with different mantissa and exponent ranges.
404
405=head3 "more bits"
406
407You can "Configure -Dusemorebits" to turn on both the 64-bit support
408and the long double support.
409
410=head3 quadmath
411
412One option for more precision is that gcc 4.6 and later have a library
413called quadmath, which implements the IEEE 754 quadruple precision
414(128-bit, 113 bits of mantissa) floating point numbers. The library
415works at least on x86 and ia64 platforms. It may be part of your gcc
416installation, or you may need to install it separately.
417
418With "Configure -Dusequadmath" you can try enabling its use, but note
419the compiler dependency, you may need to also add "-Dcc=...".
420At C level the type is called C<__float128> (note, not "long double"),
421but Perl source knows it as NV. (This is not "long doubles".)
422
423=head3 Taint Support
424
425Traditional perl has provided a security mechanism based on marking
426input data as untrusted unless it has been validated by a regex. This
427mechanism is called tainting and is enabled with the -T or -t options on
428the command line. This support has a performance cost on all code
429executed. It is possible to disable this support by providing the
430setting C<-Accflags=-DNO_TAINT_SUPPORT> or the setting
431C<-Accflags=-DSILENT_NO_TAINT_SUPPORT> to Configure.
432
433The former option C<NO_TAINT_SUPPORT> is more secure and disables taint
434support while making the use of the C<-T> or C<-t> options which
435normally enable taint support into an untrappable exception to ensure
436that no-one uses them while expecting taint checks to run. With this
437build mode there can be no confusion if a script supports taint or not.
438
439The latter option, C<SILENT_NO_TAINT_SUPPORT> is less secure but more
440flexible in that it silently disables taint support while ignoring the
441C<-T> and C<-t> command line options entirely. In this build mode it is
442possible to run a script with the C<-T> or C<-t> option and expect taint
443support but not get it, so this mode is only recommended to people who
444really know what they are doing.
445
446Both modes improve performance although the amount depends on your
447workload. It is not unreasonable to expect a 5%-10% improvement in
448performance by using one of these options. At this time this build mode
449is supported but not recommended, and if you chose to use such a perl
450you do so at your own risk. It is possible that there may be
451interoperability issues with CPAN distributions as many distributions
452are unaware of this build mode and will expect test scripts to pass or
453to detect unvalidated data when run under the C<-T> or C<-t>.
454
455=head3 Algorithmic Complexity Attacks on Hashes
456
457Perl 5.18 reworked the measures used to secure its hash function
458from algorithmic complexity attacks. By default it will build with
459all of these measures enabled along with support for controlling and
460disabling them via environment variables.
461
462You can override various aspects of this feature by defining various
463symbols during configure. An example might be:
464
465 sh Configure -Accflags=-DPERL_HASH_FUNC_SIPHASH
466
467B<Unless stated otherwise these options are considered experimental or
468insecure and are not recommended for production use.>
469
470Since Perl 5.18 we have included support for multiple hash functions,
471although from time to time we change which functions we support,
472and which function is default (currently SBOX+SIPHASH13 on 64 bit builds
473and SBOX+ZAPHOD32 for 32 bit builds). You can choose a different
474algorithm by defining one of the following symbols during configure.
475Note that there are security implications regarding which hash function you choose
476to use. The functions are listed roughly by how secure they are believed
477to be, with the one believed to be most secure at release time being PERL_HASH_FUNC_SIPHASH.
478
479 PERL_HASH_FUNC_SIPHASH
480 PERL_HASH_FUNC_SIPHASH13
481 PERL_HASH_FUNC_ZAPHOD32
482
483In addition, these, (or custom hash functions), may be "fronted" by the
484SBOX32 hash function for keys under a chosen size. This hash function is
485special in that it has proven theoretical security properties, and is very
486fast to hash, but which by nature is restricted to a maximum key length,
487and which has rather expensive setup costs (relatively speaking), both in
488terms of performance and more importantly in terms of memory. SBOX32
489requires 1k of storage per character it can hash, and it must populate that
490storage with 256 32-bit random values as well. In practice the RNG we use
491for seeding the SBOX32 storage is very efficient, and populating the table
492required for hashing even fairly long keys is negligible as we only do it
493during startup. By default we build with SBOX32 enabled, but you can change
494that by setting the C<PERL_HASH_USE_SBOX32_ALSO> in the Configure process,
495with something like this
496
497 -Accflags='-DPERL_HASH_USE_SBOX32_ALSO=0'
498
499or alternatively you can use the simple define C<PERL_HASH_NO_SBOX32> like this:
500
501 -Accflags='-DPERL_HASH_NO_SBOX32'
502
503By default Perl will use SBOX32 to hash strings 24 bytes
504or shorter, you can change this length by setting C<SBOX32_MAX_LEN>
505to the desired length, with the maximum length being 256. For example with
506this:
507
508 -Accflags='-DSBOX_MAX_LEN=128'
509
510As of Perl 5.18 the order returned by keys(), values(), and each() is
511non-deterministic and distinct per hash, and the insert order for
512colliding keys is randomized as well, and perl allows for controlling this
513by the PERL_PERTURB_KEYS environment setting. You can disable this behavior
514entirely with the define C<PERL_PERTURB_KEYS_DISABLED> with
515
516 -Accflags='-DPERL_PERTURB_KEYS_DISABLED'
517
518You can disable the environment variable checks and compile time specify
519the type of key traversal randomization to be used by defining either
520C<PERL_PERTURB_KEYS_RANDOM> or C<PERL_PERTURB_KEYS_DETERMINISTIC> with
521
522 -Accflags='-DPERL_PERTURB_KEYS_RANDOM'
523
524or
525
526 -Accflags='-DPERL_PERTURB_KEYS_DETERMINISTIC'
527
528Since Perl 5.18 the seed used for the hash function is randomly selected
529at process start, which can be overridden by specifying a seed by setting
530the PERL_HASH_SEED environment variable. Be aware that
531PERL_PERTURB_KEYS_DETERMINISTIC and the equivalent environment variable
532setting will produce the same results if and only if the code does not
533put non-deterministic data into a hash, and the code is executed in exactly
534the same context in terms of the environment. If the code populates a hash
535with random data, or builds a hash using the address of its items, or
536if the code is run in a different environment context with a different
537number or selection of environment variables then the result may differ.
538DETERMINISTIC in this context means "if everything else is kept the same
539the same results should be observed".
540
541You can change this behavior so that your perl is built with a hard coded
542seed with the define C<NO_HASH_SEED> by providing to Configure
543
544 -Accflags='-DNO_HASH_SEED'
545
546Note that if you do this you should modify the code in hv_func.h to specify
547your own key. In the future this define may be renamed and replaced with one
548that requires you to specify the key to use.
549
550B<NOTE WELL: Perl has never guaranteed any ordering of the hash keys>, and the
551ordering has already changed several times during the lifetime of Perl
5525. Also, the ordering of hash keys has always been, and continues to
553be, affected by the insertion order regardless of whether you build with
554or without the randomization features. Note that because of this
555and especially with randomization that the key order of a hash is *undefined*
556and that things like Data::Dumper, for example, may produce different output
557between different runs of Perl, since Data::Dumper serializes the key in the
558native order for the hash. The use of the Data::Dumper C<Sortkeys> option is
559recommended if you are comparing dumps between different invocations of perl.
560
561See L<perlrun/PERL_HASH_SEED> and L<perlrun/PERL_PERTURB_KEYS> for
562details on the environment variables, and L<perlsec/Algorithmic
563Complexity Attacks> for further security details.
564
565The C<PERL_HASH_SEED> and C<PERL_PERTURB_KEYS> environment variables can
566be disabled by building configuring perl with
567C<-Accflags=-DNO_PERL_HASH_ENV>.
568
569The C<PERL_HASH_SEED_DEBUG> environment variable can be disabled by
570configuring perl with C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>.
571
572=head3 MISCELLANEOUS CONFIG
573
574Perl uses various defines to control defaults for its behavior. These
575values are chosen to represent "sane" config, but users can override
576these values in their builds if they wish. This is a list of such
577settings.
578
579=over 2
580
581=item PERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT
582
583This define is used to control the default maximum number of nested
584eval/BEGIN statements, and in this context require should be
585understood to be a special form of eval so this means require/BEGIN
586and "use" statements as well.
587
588Currently each C<BEGIN> block inside of an C<eval EXPR> or C<require>
589operation will use a fairly high number of frames of the perl internal
590C stack, and this value is used to prevent stack overflows. Normally
591it is defaulted to 1000 but the default can be configured to another
592value, for instance 100, like this
593
594 -Accflags='-DPERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT=100'
595
596
597If you don't know what this is then it is safe to ignore it. Do not
598configure this to 0 or another very low value, it will break a lot of
599code. If you want to set it to a low value use the run time variable
600C<${^MAX_NESTED_EVAL_BEGIN_BLOCKS}> instead.
601
602=back
603
604=head3 SOCKS
605
606Perl can be configured to be 'socksified', that is, to use the SOCKS
607TCP/IP proxy protocol library. SOCKS is used to give applications
608access to transport layer network proxies. Perl supports only SOCKS
609Version 5. The corresponding Configure option is -Dusesocks.
610You can find more about SOCKS from wikipedia at
611L<https://en.wikipedia.org/wiki/SOCKS>.
612
613=head3 Dynamic Loading
614
615By default, Configure will compile perl to use dynamic loading.
616If you want to force perl to be compiled completely
617statically, you can either choose this when Configure prompts you or
618you can use the Configure command line option -Uusedl.
619With this option, you won't be able to use any new extension
620(XS) module without recompiling perl itself.
621
622=head3 Building a shared Perl library
623
624Currently, for most systems, the main perl executable is built by
625linking the "perl library" libperl.a with perlmain.o, your static
626extensions, and various extra libraries, such as -lm.
627
628On systems that support dynamic loading, it may be possible to
629replace libperl.a with a shared libperl.so. If you anticipate building
630several different perl binaries (e.g. by embedding libperl into
631different programs, or by using the optional compiler extension), then
632you might wish to build a shared libperl.so so that all your binaries
633can share the same library.
634
635The disadvantages are that there may be a significant performance
636penalty associated with the shared libperl.so, and that the overall
637mechanism is still rather fragile with respect to different versions
638and upgrades.
639
640In terms of performance, on my test system (Solaris 2.5_x86) the perl
641test suite took roughly 15% longer to run with the shared libperl.so.
642Your system and typical applications may well give quite different
643results.
644
645The default name for the shared library is typically something like
646libperl.so.5.8.8 (for Perl 5.8.8), or libperl.so.588, or simply
647libperl.so. Configure tries to guess a sensible naming convention
648based on your C library name. Since the library gets installed in a
649version-specific architecture-dependent directory, the exact name
650isn't very important anyway, as long as your linker is happy.
651
652You can elect to build a shared libperl by
653
654 sh Configure -Duseshrplib
655
656To build a shared libperl, the environment variable controlling shared
657library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for
658Darwin, LD_LIBRARY_PATH/SHLIB_PATH
659for HP-UX, LIBPATH for AIX and z/OS, PATH for Cygwin) must be set up to include
660the Perl build directory because that's where the shared libperl will
661be created. Configure arranges makefile to have the correct shared
662library search settings. You can find the name of the environment
663variable Perl thinks works in your your system by
664
665 grep ldlibpthname config.sh
666
667However, there are some special cases where manually setting the
668shared library path might be required. For example, if you want to run
669something like the following with the newly-built but not-yet-installed
670./perl:
671
672 ./perl -I. -MTestInit t/misc/failing_test.t
673
674or
675
676 ./perl -Ilib ~/my_mission_critical_test
677
678then you need to set up the shared library path explicitly.
679You can do this with
680
681 LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
682
683for Bourne-style shells, or
684
685 setenv LD_LIBRARY_PATH `pwd`
686
687for Csh-style shells. (This procedure may also be needed if for some
688unexpected reason Configure fails to set up makefile correctly.) (And
689again, it may be something other than LD_LIBRARY_PATH for you, see above.)
690
691You can often recognize failures to build/use a shared libperl from error
692messages complaining about a missing libperl.so (or libperl.sl in HP-UX),
693for example:
694
695 18126:./miniperl: /sbin/loader: Fatal Error: cannot map libperl.so
696
697There is also a potential problem with the shared perl library if you
698want to have more than one "flavor" of the same version of perl (e.g.
699with and without -DDEBUGGING). For example, suppose you build and
700install a standard Perl 5.10.0 with a shared library. Then, suppose you
701try to build Perl 5.10.0 with -DDEBUGGING enabled, but everything else
702the same, including all the installation directories. How can you
703ensure that your newly built perl will link with your newly built
704libperl.so.8 rather with the installed libperl.so.8? The answer is
705that you might not be able to. The installation directory is encoded
706in the perl binary with the LD_RUN_PATH environment variable (or
707equivalent ld command-line option). On Solaris, you can override that
708with LD_LIBRARY_PATH; on Linux, you can only override at runtime via
709LD_PRELOAD, specifying the exact filename you wish to be used; and on
710Digital Unix, you can override LD_LIBRARY_PATH by setting the
711_RLD_ROOT environment variable to point to the perl build directory.
712
713In other words, it is generally not a good idea to try to build a perl
714with a shared library if $archlib/CORE/$libperl already exists from a
715previous build.
716
717A good workaround is to specify a different directory for the
718architecture-dependent library for your -DDEBUGGING version of perl.
719You can do this by changing all the *archlib* variables in config.sh to
720point to your new architecture-dependent library.
721
722=head3 External glob
723
724Before File::Glob entered core in 5.6.0 globbing was implemented by shelling
725out. If the environmental variable PERL_EXTERNAL_GLOB is defined and if the
726F<csh> shell is available, perl will still do this the old way.
727
728=head2 Installation Directories
729
730The installation directories can all be changed by answering the
731appropriate questions in Configure. For convenience, all the installation
732questions are near the beginning of Configure. Do not include trailing
733slashes on directory names. At any point during the Configure process,
734you can answer a question with &-d and Configure will use the defaults
735from then on. Alternatively, you can
736
737 grep '^install' config.sh
738
739after Configure has run to verify the installation paths.
740
741The defaults are intended to be reasonable and sensible for most
742people building from sources. Those who build and distribute binary
743distributions or who export perl to a range of systems will probably
744need to alter them. If you are content to just accept the defaults,
745you can safely skip the next section.
746
747The directories set up by Configure fall into three broad categories.
748
749=over 4
750
751=item Directories for the perl distribution
752
753By default, Configure will use the following directories for 5.39.8.
754$version is the full perl version number, including subversion, e.g.
7555.12.3, and $archname is a string like sun4-sunos,
756determined by Configure. The full definitions of all Configure
757variables are in the file Porting/Glossary.
758
759 Configure variable Default value
760 $prefixexp /usr/local
761 $binexp $prefixexp/bin
762 $scriptdirexp $prefixexp/bin
763 $privlibexp $prefixexp/lib/perl5/$version
764 $archlibexp $prefixexp/lib/perl5/$version/$archname
765 $man1direxp $prefixexp/man/man1
766 $man3direxp $prefixexp/man/man3
767 $html1direxp (none)
768 $html3direxp (none)
769
770$prefixexp is generated from $prefix, with ~ expansion done to convert
771home directories into absolute paths. Similarly for the other variables
772listed. As file system calls do not do this, you should always reference
773the ...exp variables, to support users who build perl in their home
774directory.
775
776Actually, Configure recognizes the SVR3-style
777/usr/local/man/l_man/man1 directories, if present, and uses those
778instead. Also, if $prefix contains the string "perl", the library
779directories are simplified as described below. For simplicity, only
780the common style is shown here.
781
782=item Directories for site-specific add-on files
783
784After perl is installed, you may later wish to add modules (e.g. from
785CPAN) or scripts. Configure will set up the following directories to
786be used for installing those add-on modules and scripts.
787
788 Configure Default
789 variable value
790 $siteprefixexp $prefixexp
791 $sitebinexp $siteprefixexp/bin
792 $sitescriptexp $siteprefixexp/bin
793 $sitelibexp $siteprefixexp/lib/perl5/site_perl/$version
794 $sitearchexp
795 $siteprefixexp/lib/perl5/site_perl/$version/$archname
796 $siteman1direxp $siteprefixexp/man/man1
797 $siteman3direxp $siteprefixexp/man/man3
798 $sitehtml1direxp (none)
799 $sitehtml3direxp (none)
800
801By default, ExtUtils::MakeMaker will install architecture-independent
802modules into $sitelib and architecture-dependent modules into $sitearch.
803
804=item Directories for vendor-supplied add-on files
805
806Lastly, if you are building a binary distribution of perl for
807distribution, Configure can optionally set up the following directories
808for you to use to distribute add-on modules.
809
810 Configure Default
811 variable value
812 $vendorprefixexp (none)
813
814 (The next ones are set only if vendorprefix is set.)
815
816 $vendorbinexp $vendorprefixexp/bin
817 $vendorscriptexp $vendorprefixexp/bin
818 $vendorlibexp $vendorprefixexp/lib/perl5/vendor_perl/$version
819 $vendorarchexp
820 $vendorprefixexp/lib/perl5/vendor_perl/$version/$archname
821 $vendorman1direxp $vendorprefixexp/man/man1
822 $vendorman3direxp $vendorprefixexp/man/man3
823 $vendorhtml1direxp (none)
824 $vendorhtml3direxp (none)
825
826These are normally empty, but may be set as needed. For example,
827a vendor might choose the following settings:
828
829 $prefix /usr
830 $siteprefix /usr/local
831 $vendorprefix /usr
832
833This would have the effect of setting the following:
834
835 $binexp /usr/bin
836 $scriptdirexp /usr/bin
837 $privlibexp /usr/lib/perl5/$version
838 $archlibexp /usr/lib/perl5/$version/$archname
839 $man1direxp /usr/man/man1
840 $man3direxp /usr/man/man3
841
842 $sitebinexp /usr/local/bin
843 $sitescriptexp /usr/local/bin
844 $sitelibexp /usr/local/lib/perl5/site_perl/$version
845 $sitearchexp /usr/local/lib/perl5/site_perl/$version/$archname
846 $siteman1direxp /usr/local/man/man1
847 $siteman3direxp /usr/local/man/man3
848
849 $vendorbinexp /usr/bin
850 $vendorscriptexp /usr/bin
851 $vendorlibexp /usr/lib/perl5/vendor_perl/$version
852 $vendorarchexp /usr/lib/perl5/vendor_perl/$version/$archname
853 $vendorman1direxp /usr/man/man1
854 $vendorman3direxp /usr/man/man3
855
856Note how in this example, the vendor-supplied directories are in the
857/usr hierarchy, while the directories reserved for the end user are in
858the /usr/local hierarchy.
859
860The entire installed library hierarchy is installed in locations with
861version numbers, keeping the installations of different versions distinct.
862However, later installations of Perl can still be configured to search
863the installed libraries corresponding to compatible earlier versions.
864See L<"Coexistence with earlier versions of perl 5"> below for more
865details on how Perl can be made to search older version directories.
866
867Of course you may use these directories however you see fit. For
868example, you may wish to use $siteprefix for site-specific files that
869are stored locally on your own disk and use $vendorprefix for
870site-specific files that are stored elsewhere on your organization's
871network. One way to do that would be something like
872
873 sh Configure -Dsiteprefix=/usr/local -Dvendorprefix=/usr/share/perl
874
875=item otherlibdirs
876
877As a final catch-all, Configure also offers an $otherlibdirs
878variable. This variable contains a colon-separated list of additional
879directories to add to @INC. By default, it will be empty.
880Perl will search these directories (including architecture and
881version-specific subdirectories) for add-on modules and extensions.
882
883For example, if you have a bundle of perl libraries from a previous
884installation, perhaps in a strange place:
885
886 sh Configure -Dotherlibdirs=/usr/lib/perl5/site_perl/5.8.1
887
888=item APPLLIB_EXP
889
890There is one other way of adding paths to @INC at perl build time, and
891that is by setting the APPLLIB_EXP C pre-processor token to a colon-
892separated list of directories, like this
893
894 sh Configure -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"'
895
896The directories defined by APPLLIB_EXP get added to @INC B<first>,
897ahead of any others, and so provide a way to override the standard perl
898modules should you, for example, want to distribute fixes without
899touching the perl distribution proper. And, like otherlib dirs,
900version and architecture specific subdirectories are also searched, if
901present, at run time. Of course, you can still search other @INC
902directories ahead of those in APPLLIB_EXP by using any of the standard
903run-time methods: $PERLLIB, $PERL5LIB, -I, use lib, etc.
904
905=item default_inc_excludes_dot
906
907Since version 5.26.0, default perl builds no longer includes C<'.'> as the
908last element of @INC. The old behaviour can restored using
909
910 sh Configure -Udefault_inc_excludes_dot
911
912Note that this is likely to make programs run under such a perl
913interpreter less secure.
914
915=item usesitecustomize
916
917Run-time customization of @INC can be enabled with:
918
919 sh Configure -Dusesitecustomize
920
921which will define USE_SITECUSTOMIZE and $Config{usesitecustomize}.
922When enabled, this makes perl run F<$sitelibexp/sitecustomize.pl> before
923anything else. This script can then be set up to add additional
924entries to @INC.
925
926=item Man Pages
927
928By default, man pages will be installed in $man1dir and $man3dir, which
929are normally /usr/local/man/man1 and /usr/local/man/man3. If you
930want to use a .3pm suffix for perl man pages, you can do that with
931
932 sh Configure -Dman3ext=3pm
933
934You can disable installation of man pages completely using
935
936 sh Configure -Dman1dir=none -Dman3dir=none
937
938=item HTML pages
939
940Currently, the standard perl installation does not do anything with
941HTML documentation, but that may change in the future. Further, some
942add-on modules may wish to install HTML documents. The html Configure
943variables listed above are provided if you wish to specify where such
944documents should be placed. The default is "none", but will likely
945eventually change to something useful based on user feedback.
946
947=back
948
949Some users prefer to append a "/share" to $privlib and $sitelib
950to emphasize that those directories can be shared among different
951architectures.
952
953Note that these are just the defaults. You can actually structure the
954directories any way you like. They don't even have to be on the same
955filesystem.
956
957Further details about the installation directories, maintenance and
958development subversions, and about supporting multiple versions are
959discussed in L<"Coexistence with earlier versions of perl 5"> below.
960
961If you specify a prefix that contains the string "perl", then the
962library directory structure is slightly simplified. Instead of
963suggesting $prefix/lib/perl5/, Configure will suggest $prefix/lib.
964
965Thus, for example, if you Configure with
966-Dprefix=/opt/perl, then the default library directories for 5.9.0 are
967
968 Configure variable Default value
969 $privlib /opt/perl/lib/5.9.0
970 $archlib /opt/perl/lib/5.9.0/$archname
971 $sitelib /opt/perl/lib/site_perl/5.9.0
972 $sitearch /opt/perl/lib/site_perl/5.9.0/$archname
973
974=head2 Changing the installation directory
975
976Configure distinguishes between the directory in which perl (and its
977associated files) should be installed, and the directory in which it
978will eventually reside. For most sites, these two are the same; for
979sites that use AFS, this distinction is handled automatically.
980However, sites that use package management software such as rpm or
981dpkg, or users building binary packages for distribution may also
982wish to install perl into a different directory before moving perl
983to its final destination. There are two ways to do that:
984
985=over 4
986
987=item installprefix
988
989To install perl under the /tmp/perl5 directory, use the following
990command line:
991
992 sh Configure -Dinstallprefix=/tmp/perl5
993
994(replace /tmp/perl5 by a directory of your choice).
995
996Beware, though, that if you go to try to install new add-on
997modules, they too will get installed in under '/tmp/perl5' if you
998follow this example. That's why it's usually better to use DESTDIR,
999as shown in the next section.
1000
1001=item DESTDIR
1002
1003If you need to install perl on many identical systems, it is convenient
1004to compile it once and create an archive that can be installed on
1005multiple systems. Suppose, for example, that you want to create an
1006archive that can be installed in /opt/perl. One way to do that is by
1007using the DESTDIR variable during C<make install>. The DESTDIR is
1008automatically prepended to all the installation paths. Thus you
1009simply do:
1010
1011 sh Configure -Dprefix=/opt/perl -des
1012 make
1013 make test
1014 make install DESTDIR=/tmp/perl5
1015 cd /tmp/perl5/opt/perl
1016 tar cvf /tmp/perl5-archive.tar .
1017
1018=back
1019
1020=head2 Relocatable @INC
1021
1022To create a relocatable perl tree, use the following command line:
1023
1024 sh Configure -Duserelocatableinc
1025
1026Then the paths in @INC (and everything else in %Config) can be
1027optionally located via the path of the perl executable.
1028
1029That means that, if the string ".../" is found at the start of any
1030path, it's substituted with the directory of $^X. So, the relocation
1031can be configured on a per-directory basis, although the default with
1032"-Duserelocatableinc" is that everything is relocated. The initial
1033install is done to the original configured prefix.
1034
1035This option is not compatible with the building of a shared libperl
1036("-Duseshrplib"), because in that case perl is linked with an hard-coded
1037rpath that points at the libperl.so, that cannot be relocated.
1038
1039=head2 Site-wide Policy settings
1040
1041After Configure runs, it stores a number of common site-wide "policy"
1042answers (such as installation directories) in the Policy.sh file.
1043If you want to build perl on another system using the same policy
1044defaults, simply copy the Policy.sh file to the new system's perl build
1045directory, and Configure will use it. This will work even if Policy.sh was
1046generated for another version of Perl, or on a system with a
1047different architecture and/or operating system. However, in such cases,
1048you should review the contents of the file before using it: for
1049example, your new target may not keep its man pages in the same place
1050as the system on which the file was generated.
1051
1052Alternatively, if you wish to change some or all of those policy
1053answers, you should
1054
1055 rm -f Policy.sh
1056
1057to ensure that Configure doesn't re-use them.
1058
1059Further information is in the Policy_sh.SH file itself.
1060
1061If the generated Policy.sh file is unsuitable, you may freely edit it
1062to contain any valid shell commands. It will be run just after the
1063platform-specific hints files.
1064
1065=head2 Disabling older versions of Perl
1066
1067Configure will search for binary compatible versions of previously
1068installed perl binaries in the tree that is specified as target tree,
1069and these will be used as locations to search for modules by the perl
1070being built. The list of perl versions found will be put in the Configure
1071variable inc_version_list.
1072
1073To disable this use of older perl modules, even completely valid pure
1074perl modules, you can specify to not include the paths found:
1075
1076 sh Configure -Dinc_version_list=none ...
1077
1078If you do want to use modules from some previous perl versions, the
1079variable must contain a space separated list of directories under the
1080site_perl directory, and has to include architecture-dependent
1081directories separately, eg.
1082
1083 sh Configure -Dinc_version_list="5.16.0/x86_64-linux 5.16.0" ...
1084
1085When using the newer perl, you can add these paths again in the
1086PERL5LIB environment variable or with perl's -I runtime option.
1087
1088=head2 Building Perl outside of the source directory
1089
1090Sometimes it is desirable to build Perl in a directory different from
1091where the sources are, for example if you want to keep your sources
1092read-only, or if you want to share the sources between different binary
1093architectures. You can do this (if your file system supports symbolic
1094links) by
1095
1096 mkdir /tmp/perl/build/directory
1097 cd /tmp/perl/build/directory
1098 sh /path/to/perl/source/Configure -Dmksymlinks ...
1099
1100This will create in /tmp/perl/build/directory a tree of symbolic links
1101pointing to files in /path/to/perl/source. The original files are left
1102unaffected. After Configure has finished you can just say
1103
1104 make
1105 make test
1106 make install
1107
1108as usual, and Perl will be built in /tmp/perl/build/directory.
1109
1110=head2 Building a debugging perl
1111
1112You can run perl scripts under the perl debugger at any time with
1113B<perl -d your_script>. If, however, you want to debug perl itself,
1114you probably want to have support for perl internal debugging code
1115(activated by adding -DDEBUGGING to ccflags), and/or support for the
1116system debugger by adding -g to the optimisation flags.
1117
1118A perl compiled with the DEBUGGING C preprocessor macro will support the
1119C<-D> perl command-line switch, have assertions enabled, and have many
1120extra checks compiled into the code; but will execute much more slowly
1121(typically 2-3x) and the binary will be much larger (typically 2-3x).
1122
1123As a convenience, debugging code (-DDEBUGGING) and debugging symbols (-g)
1124can be enabled jointly or separately using a Configure switch, also
1125(somewhat confusingly) named -DDEBUGGING. For a more eye appealing call,
1126-DEBUGGING is defined to be an alias for -DDEBUGGING. For both, the -U
1127calls are also supported, in order to be able to overrule the hints or
1128Policy.sh settings.
1129
1130Here are the DEBUGGING modes:
1131
1132=over 4
1133
1134=item Configure -DDEBUGGING
1135
1136=item Configure -DEBUGGING
1137
1138=item Configure -DEBUGGING=both
1139
1140Sets both -DDEBUGGING in the ccflags, and adds -g to optimize.
1141
1142You can actually specify -g and -DDEBUGGING independently (see below),
1143but usually it's convenient to have both.
1144
1145=item Configure -DEBUGGING=-g
1146
1147=item Configure -Doptimize=-g
1148
1149Adds -g to optimize, but does not set -DDEBUGGING.
1150
1151(Note: Your system may actually require something like cc -g2.
1152Check your man pages for cc(1) and also any hint file for your system.)
1153
1154=item Configure -DEBUGGING=none
1155
1156=item Configure -UDEBUGGING
1157
1158Removes -g from optimize, and -DDEBUGGING from ccflags.
1159
1160=back
1161
1162If you are using a shared libperl, see the warnings about multiple
1163versions of perl under L</Building a shared Perl library>.
1164
1165Note that a perl built with -DDEBUGGING will be much bigger and will run
1166much, much more slowly than a standard perl.
1167
1168=head2 DTrace support
1169
1170On platforms where DTrace is available, it may be enabled by
1171using the -Dusedtrace option to Configure. DTrace probes are available
1172for subroutine entry (sub-entry) and subroutine exit (sub-exit). Here's a
1173simple D script that uses them:
1174
1175 perl$target:::sub-entry, perl$target:::sub-return {
1176 printf("%s %s (%s:%d)\n", probename == "sub-entry" ? "->" : "<-",
1177 copyinstr(arg0), copyinstr(arg1), arg2);
1178 }
1179
1180
1181=head2 Extensions
1182
1183Perl ships with a number of standard extensions. These are contained
1184in the F<ext/> subdirectory.
1185
1186By default, Configure will offer to build every extension which appears
1187to be supported. For example, Configure will offer to build GDBM_File
1188only if it is able to find the gdbm library.
1189
1190To disable certain extensions so that they are not built, use the
1191-Dnoextensions=... and -Donlyextensions=... options. They both accept
1192a space-separated list of extensions, such as C<IPC/SysV>. The extensions
1193listed in
1194C<noextensions> are removed from the list of extensions to build, while
1195the C<onlyextensions> is rather more severe and builds only the listed
1196extensions. The latter should be used with extreme caution since
1197certain extensions are used by many other extensions and modules:
1198examples of such modules include Fcntl and IO. The order of processing
1199these options is first C<only> (if present), then C<no> (if present).
1200
1201Of course, you may always run Configure interactively and select only
1202the extensions you want.
1203
1204If you unpack any additional extensions in the ext/ directory before
1205running Configure, then Configure will offer to build those additional
1206extensions as well. Most users probably shouldn't have to do this --
1207it is usually easier to build additional extensions later after perl
1208has been installed. However, if you wish to have those additional
1209extensions statically linked into the perl binary, then this offers a
1210convenient way to do that in one step. (It is not necessary, however;
1211you can build and install extensions just fine even if you don't have
1212dynamic loading. See lib/ExtUtils/MakeMaker.pm for more details.)
1213Another way of specifying extra modules is described in
1214L<"Adding extra modules to the build"> below.
1215
1216If you re-use an old config.sh but change your system (e.g. by
1217adding libgdbm) Configure will still offer your old choices of extensions
1218for the default answer, but it will also point out the discrepancy to
1219you.
1220
1221=head2 Including locally-installed libraries
1222
1223Perl comes with interfaces to number of libraries, including threads,
1224dbm, ndbm, gdbm, and Berkeley db. For the *db* extension, if
1225Configure can find the appropriate header files and libraries, it will
1226automatically include that extension. The threading extension needs
1227to be specified explicitly (see L</Threads>).
1228
1229Those libraries are not distributed with perl. If your header (.h) files
1230for those libraries are not in a directory normally searched by your C
1231compiler, then you will need to include the appropriate -I/your/directory
1232option when prompted by Configure. If your libraries are not in a
1233directory normally searched by your C compiler and linker, then you will
1234need to include the appropriate -L/your/directory option when prompted
1235by Configure. See the examples below.
1236
1237=head3 Examples
1238
1239=over 4
1240
1241=item gdbm in /usr/local
1242
1243Suppose you have gdbm and want Configure to find it and build the
1244GDBM_File extension. This example assumes you have gdbm.h
1245installed in /usr/local/include/gdbm.h and libgdbm.a installed in
1246/usr/local/lib/libgdbm.a. Configure should figure all the
1247necessary steps out automatically.
1248
1249Specifically, when Configure prompts you for flags for
1250your C compiler, you should include -I/usr/local/include, if it's
1251not here yet. Similarly, when Configure prompts you for linker flags,
1252you should include -L/usr/local/lib.
1253
1254If you are using dynamic loading, then when Configure prompts you for
1255linker flags for dynamic loading, you should again include
1256-L/usr/local/lib.
1257
1258Again, this should all happen automatically. This should also work if
1259you have gdbm installed in any of (/usr/local, /opt/local, /usr/gnu,
1260/opt/gnu, /usr/GNU, or /opt/GNU).
1261
1262=item BerkeleyDB in /usr/local/BerkeleyDB
1263
1264The version of BerkeleyDB distributed by Oracle installs in a
1265version-specific directory by default, typically something like
1266/usr/local/BerkeleyDB.4.7. To have Configure find that, you need to add
1267-I/usr/local/BerkeleyDB.4.7/include to cc flags, as in the previous
1268example, and you will also have to take extra steps to help Configure
1269find -ldb. Specifically, when Configure prompts you for library
1270directories, add /usr/local/BerkeleyDB.4.7/lib to the list. Also, you
1271will need to add appropriate linker flags to tell the runtime linker
1272where to find the BerkeleyDB shared libraries.
1273
1274It is possible to specify this from the command line (all on one
1275line):
1276
1277 sh Configure -de \
1278 -Dlocincpth='/usr/local/BerkeleyDB.4.7/include \
1279 /usr/local/include' \
1280 -Dloclibpth='/usr/local/BerkeleyDB.4.7/lib /usr/local/lib' \
1281 -Aldflags='-R/usr/local/BerkeleyDB.4.7/lib'
1282
1283locincpth is a space-separated list of include directories to search.
1284Configure will automatically add the appropriate -I directives.
1285
1286loclibpth is a space-separated list of library directories to search.
1287Configure will automatically add the appropriate -L directives.
1288
1289The addition to ldflags is so that the dynamic linker knows where to find
1290the BerkeleyDB libraries. For Linux and Solaris, the -R option does that.
1291Other systems may use different flags. Use the appropriate flag for your
1292system.
1293
1294=back
1295
1296=head2 Specifying a logical root directory
1297
1298If you are cross-compiling, or are using a compiler which has it's own
1299headers and libraries in a nonstandard location, and your compiler
1300understands the C<--sysroot> option, you can use the C<-Dsysroot> option
1301to specify the logical root directory under which all libraries and
1302headers are searched for. This patch adjusts Configure to search under
1303$sysroot, instead of /.
1304
1305--sysroot is added to ccflags and friends so that make in
1306ExtUtils::MakeMaker, and other extensions, will use it.
1307
1308=head2 Overriding an old config.sh
1309
1310If you want to use an old config.sh produced by a previous run of
1311Configure, but override some of the items with command line options, you
1312need to use B<Configure -O>.
1313
1314=head2 GNU-style configure
1315
1316If you prefer the GNU-style configure command line interface, you can
1317use the supplied configure.gnu command, e.g.
1318
1319 CC=gcc ./configure.gnu
1320
1321The configure.gnu script emulates a few of the more common configure
1322options. Try
1323
1324 ./configure.gnu --help
1325
1326for a listing.
1327
1328Unrecognized arguments with a double dash prefix produce an error.
1329
1330Any other arguments are passed through to C<Configure>, so you could
1331build a threaded perl with:
1332
1333 CC=gcc ./configure.gnu -Dusethreads
1334
1335(The file is called configure.gnu to avoid problems on systems
1336that would not distinguish the files "Configure" and "configure".)
1337
1338=head2 Malloc Issues
1339
1340Perl relies heavily on malloc(3) to grow data structures as needed,
1341so perl's performance can be noticeably affected by the performance of
1342the malloc function on your system. The perl source is shipped with a
1343version of malloc that has been optimized for the typical requests from
1344perl, so there's a chance that it may be both faster and use less memory
1345than your system malloc.
1346
1347However, if your system already has an excellent malloc, or if you are
1348experiencing difficulties with extensions that use third-party libraries
1349that call malloc, then you should probably use your system's malloc.
1350(Or, you might wish to explore the malloc flags discussed below.)
1351
1352=over 4
1353
1354=item Using the system malloc
1355
1356To build without perl's malloc, you can use the Configure command
1357
1358 sh Configure -Uusemymalloc
1359
1360or you can answer 'n' at the appropriate interactive Configure prompt.
1361
1362Note that Perl's malloc isn't always used by default; that actually
1363depends on your system. For example, on Linux and FreeBSD (and many more
1364systems), Configure chooses to use the system's malloc by default.
1365See the appropriate file in the F<hints/> directory to see how the
1366default is set.
1367
1368=item -DPERL_POLLUTE_MALLOC
1369
1370NOTE: This flag is enabled automatically on some platforms if you just
1371run Configure to accept all the defaults.
1372
1373Perl's malloc family of functions are normally called Perl_malloc(),
1374Perl_realloc(), Perl_calloc() and Perl_mfree().
1375These names do not clash with the system versions of these functions.
1376
1377If this flag is enabled, however, Perl's malloc family of functions
1378will have the same names as the system versions. This may be required
1379sometimes if you have libraries that like to free() data that may have
1380been allocated by Perl_malloc() and vice versa.
1381
1382Note that enabling this option may sometimes lead to duplicate symbols
1383from the linker for malloc et al. In such cases, the system probably
1384does not allow its malloc functions to be fully replaced with custom
1385versions.
1386
1387=item -DPERL_DEBUGGING_MSTATS
1388
1389This flag enables debugging mstats, which is required to use the
1390Devel::Peek::mstat() function. You cannot enable this unless you are
1391using Perl's malloc, so a typical Configure command would be
1392
1393 sh Configure -Accflags=-DPERL_DEBUGGING_MSTATS -Dusemymalloc
1394
1395to enable this option.
1396
1397=back
1398
1399=head2 What if it doesn't work?
1400
1401If you run into problems, try some of the following ideas.
1402If none of them help, then see L<"Reporting Problems"> below.
1403
1404=over 4
1405
1406=item Running Configure Interactively
1407
1408If Configure runs into trouble, remember that you can always run
1409Configure interactively so that you can check (and correct) its
1410guesses.
1411
1412All the installation questions have been moved to the top, so you don't
1413have to wait for them. Once you've handled them (and your C compiler and
1414flags) you can type &-d at the next Configure prompt and Configure
1415will use the defaults from then on.
1416
1417If you find yourself trying obscure command line incantations and
1418config.over tricks, I recommend you run Configure interactively
1419instead. You'll probably save yourself time in the long run.
1420
1421=item Hint files
1422
1423Hint files tell Configure about a number of things:
1424
1425=over 4
1426
1427=item o
1428
1429The peculiarities or conventions of particular platforms -- non-standard
1430library locations and names, default installation locations for binaries,
1431and so on.
1432
1433=item o
1434
1435The deficiencies of the platform -- for example, library functions that,
1436although present, are too badly broken to be usable; or limits on
1437resources that are generously available on most platforms.
1438
1439=item o
1440
1441How best to optimize for the platform, both in terms of binary size
1442and/or speed, and for Perl feature support. Because of wide variations in
1443the implementation of shared libraries and of threading, for example,
1444Configure often needs hints in order to be able to use these features.
1445
1446=back
1447
1448The perl distribution includes many system-specific hints files
1449in the hints/ directory. If one of them matches your system, Configure
1450will offer to use that hint file. Unless you have a very good reason
1451not to, you should accept its offer.
1452
1453Several of the hint files contain additional important information.
1454If you have any problems, it is a good idea to read the relevant hint
1455file for further information. See hints/solaris_2.sh for an extensive
1456example. More information about writing good hints is in the
1457hints/README.hints file, which also explains hint files known as
1458callback-units.
1459
1460Note that any hint file is read before any Policy file, meaning that
1461Policy overrides hints -- see L</Site-wide Policy settings>.
1462
1463=item WHOA THERE!!!
1464
1465If you are re-using an old config.sh, it's possible that Configure
1466detects different values from the ones specified in this file. You will
1467almost always want to keep the previous value, unless you have changed
1468something on your system.
1469
1470For example, suppose you have added libgdbm.a to your system
1471and you decide to reconfigure perl to use GDBM_File. When you run
1472Configure again, you will need to add -lgdbm to the list of libraries.
1473Now, Configure will find your gdbm include file and library and will
1474issue a message:
1475
1476 *** WHOA THERE!!! ***
1477 The previous value for $i_gdbm on this machine was "undef"!
1478 Keep the previous value? [y]
1479
1480In this case, you do not want to keep the previous value, so you
1481should answer 'n'. (You'll also have to manually add GDBM_File to
1482the list of dynamic extensions to build.)
1483
1484=item Changing Compilers
1485
1486If you change compilers or make other significant changes, you should
1487probably not re-use your old config.sh. Simply remove it or
1488rename it, then rerun Configure with the options you want to use.
1489
1490=item Propagating your changes to config.sh
1491
1492If you make any changes to config.sh, you should propagate
1493them to all the .SH files by running
1494
1495 sh Configure -S
1496
1497You will then have to rebuild by running
1498
1499 make depend
1500 make
1501
1502=item config.over and config.arch
1503
1504You can also supply a shell script config.over to override
1505Configure's guesses. It will get loaded up at the very end, just
1506before config.sh is created. You have to be careful with this,
1507however, as Configure does no checking that your changes make sense.
1508This file is usually good for site-specific customizations.
1509
1510There is also another file that, if it exists, is loaded before the
1511config.over, called config.arch. This file is intended to be per
1512architecture, not per site, and usually it's the architecture-specific
1513hints file that creates the config.arch.
1514
1515=item config.h
1516
1517Many of the system dependencies are contained in config.h.
1518Configure builds config.h by running the config_h.SH script.
1519The values for the variables are taken from config.sh.
1520
1521If there are any problems, you can edit config.h directly. Beware,
1522though, that the next time you run Configure, your changes will be
1523lost.
1524
1525=item cflags
1526
1527If you have any additional changes to make to the C compiler command
1528line, they can be made in cflags.SH. For instance, to turn off the
1529optimizer on toke.c, find the switch structure marked 'or customize here',
1530and add a line for toke.c ahead of the catch-all *) so that it now reads:
1531
1532 : or customize here
1533
1534 case "$file" in
1535 toke) optimize='-g' ;;
1536 *) ;;
1537
1538You should not edit the generated file cflags directly, as your changes
1539will be lost the next time you run Configure, or if you edit config.sh.
1540
1541To explore various ways of changing ccflags from within a hint file,
1542see the file hints/README.hints.
1543
1544To change the C flags for all the files, edit config.sh and change either
1545$ccflags or $optimize, and then re-run
1546
1547 sh Configure -S
1548 make depend
1549
1550=item No sh
1551
1552If you don't have sh, you'll have to copy the sample file
1553Porting/config.sh to config.sh and edit your config.sh to reflect your
1554system's peculiarities. See Porting/pumpkin.pod for more information.
1555You'll probably also have to extensively modify the extension building
1556mechanism.
1557
1558=item Porting information
1559
1560Specific information for the OS/2, Plan 9, VMS and Win32 ports is in the
1561corresponding README files and subdirectories. Additional information,
1562including a glossary of all those config.sh variables, is in the Porting
1563subdirectory. Porting/Glossary should especially come in handy.
1564
1565Ports for other systems may also be available. You should check out
1566L<https://www.cpan.org/ports> for current information on ports to
1567various other operating systems.
1568
1569If you plan to port Perl to a new architecture, study carefully the
1570section titled "Philosophical Issues in Patching and Porting Perl"
1571in the file Porting/pumpkin.pod and the file pod/perlgit.pod.
1572Study also how other non-UNIX ports have solved problems.
1573
1574=back
1575
1576=head2 Adding extra modules to the build
1577
1578You can specify extra modules or module bundles to be fetched from the
1579CPAN and installed as part of the Perl build. Either use the -Dextras=...
1580command line parameter to Configure, for example like this:
1581
1582 Configure -Dextras="Bundle::LWP DBI"
1583
1584or answer first 'y' to the question 'Install any extra modules?' and
1585then answer "Bundle::LWP DBI" to the 'Extras?' question.
1586The module or the bundle names are as for the CPAN module 'install'
1587command. This will only work if those modules are to be built as dynamic
1588extensions. If you wish to include those extra modules as static
1589extensions, see L<"Extensions"> above.
1590
1591Notice that because the CPAN module will be used to fetch the extra
1592modules, you will need access to the CPAN, either via the Internet,
1593or via a local copy such as a CD-ROM or a local CPAN mirror. If you
1594do not, using the extra modules option will die horribly.
1595
1596Also notice that you yourself are responsible for satisfying any extra
1597dependencies such as external headers or libraries BEFORE trying the
1598build. For example: you will need to have the Foo database specific
1599headers and libraries installed for the DBD::Foo module. The Configure
1600process or the Perl build process will not help you with these.
1601
1602=head2 suidperl
1603
1604suidperl was an optional component of earlier releases of perl. It is no
1605longer available. Instead, use a tool specifically designed to handle
1606changes in privileges, such as B<sudo>.
1607
1608=head1 make depend
1609
1610This will look for all the includes. The output is stored in makefile.
1611The only difference between Makefile and makefile is the dependencies at
1612the bottom of makefile. If you have to make any changes, you should edit
1613makefile, not Makefile, since the Unix make command reads makefile first.
1614(On non-Unix systems, the output may be stored in a different file.
1615Check the value of $firstmakefile in your config.sh if in doubt.)
1616
1617Configure will offer to do this step for you, so it isn't listed
1618explicitly above.
1619
1620=head1 make
1621
1622This will attempt to make perl in the current directory.
1623
1624=head2 Expected errors
1625
1626These error reports are normal, and can be ignored:
1627
1628 ...
1629 make: [extra.pods] Error 1 (ignored)
1630 ...
1631 make: [extras.make] Error 1 (ignored)
1632
1633=head2 What if it doesn't work?
1634
1635If you can't compile successfully, try some of the following ideas.
1636If none of them help, and careful reading of the error message and
1637the relevant manual pages on your system doesn't help,
1638then see L<"Reporting Problems"> below.
1639
1640=over 4
1641
1642=item hints
1643
1644If you used a hint file, try reading the comments in the hint file
1645for further tips and information.
1646
1647=item extensions
1648
1649If you can successfully build miniperl, but the process crashes
1650during the building of extensions, run
1651
1652 make minitest
1653
1654to test your version of miniperl.
1655
1656=item locale
1657
1658If you have any locale-related environment variables set, try unsetting
1659them. I have some reports that some versions of IRIX hang while
1660running B<./miniperl configpm> with locales other than the C locale.
1661See the discussion under L<"make test"> below about locales and the
1662whole L<perllocale/"LOCALE PROBLEMS"> section in the file
1663pod/perllocale.pod. The latter is especially useful if you see something
1664like this
1665
1666 perl: warning: Setting locale failed.
1667 perl: warning: Please check that your locale settings:
1668 LC_ALL = "En_US",
1669 LANG = (unset)
1670 are supported and installed on your system.
1671 perl: warning: Falling back to the standard locale ("C").
1672
1673at Perl startup.
1674
1675=item other environment variables
1676
1677Configure does not check for environment variables that can sometimes
1678have a major influence on how perl is built or tested. For example,
1679OBJECT_MODE on AIX determines the way the compiler and linker deal with
1680their objects, but this is a variable that only influences build-time
1681behaviour, and should not affect the perl scripts that are eventually
1682executed by the perl binary. Other variables, like PERL_UNICODE,
1683PERL5LIB, and PERL5OPT will influence the behaviour of the test suite.
1684So if you are getting strange test failures, you may want to try
1685retesting with the various PERL variables unset.
1686
1687=item LD_LIBRARY_PATH
1688
1689If you run into dynamic loading problems, check your setting of
1690the LD_LIBRARY_PATH environment variable (or on some systems the equivalent
1691with a different name, see L</Building a shared Perl library>). If you're
1692creating a static Perl library (libperl.a rather than libperl.so) it should
1693build fine with LD_LIBRARY_PATH unset, though that may depend on details of
1694your local setup.
1695
1696=item nm extraction
1697
1698If Configure seems to be having trouble finding library functions,
1699try not using nm extraction. You can do this from the command line
1700with
1701
1702 sh Configure -Uusenm
1703
1704or by answering the nm extraction question interactively.
1705If you have previously run Configure, you should not reuse your old
1706config.sh.
1707
1708=item umask not found
1709
1710If the build processes encounters errors relating to umask(), the problem
1711is probably that Configure couldn't find your umask() system call.
1712Check your config.sh. You should have d_umask='define'. If you don't,
1713this is probably the L<"nm extraction"> problem discussed above. Also,
1714try reading the hints file for your system for further information.
1715
1716=item do_aspawn
1717
1718If you run into problems relating to do_aspawn or do_spawn, the
1719problem is probably that Configure failed to detect your system's
1720fork() function. Follow the procedure in the previous item
1721on L<"nm extraction">.
1722
1723=item __inet_* errors
1724
1725If you receive unresolved symbol errors during Perl build and/or test
1726referring to __inet_* symbols, check to see whether BIND 8.1 is
1727installed. It installs a /usr/local/include/arpa/inet.h that refers to
1728these symbols. Versions of BIND later than 8.1 do not install inet.h
1729in that location and avoid the errors. You should probably update to a
1730newer version of BIND (and remove the files the old one left behind).
1731If you can't, you can either link with the updated resolver library
1732provided with BIND 8.1 or rename /usr/local/bin/arpa/inet.h during the
1733Perl build and test process to avoid the problem.
1734
1735=item .*_r() prototype NOT found
1736
1737On a related note, if you see a bunch of complaints like the above about
1738reentrant functions -- specifically networking-related ones -- being
1739present but without prototypes available, check to see if BIND 8.1 (or
1740possibly other BIND 8 versions) is (or has been) installed. They install
1741header files such as netdb.h into places such as /usr/local/include (or
1742into another directory as specified at build/install time), at least
1743optionally. Remove them or put them in someplace that isn't in the C
1744preprocessor's header file include search path (determined by -I options
1745plus defaults, normally /usr/include).
1746
1747=item #error "No DATAMODEL_NATIVE specified"
1748
1749This is a common error when trying to build perl on Solaris 2.6 with a
1750gcc installation from Solaris 2.5 or 2.5.1. The Solaris header files
1751changed, so you need to update your gcc installation. You can either
1752rerun the fixincludes script from gcc or take the opportunity to
1753update your gcc installation.
1754
1755=item Optimizer
1756
1757If you can't compile successfully, try turning off your compiler's
1758optimizer. Edit config.sh and change the line
1759
1760 optimize='-O'
1761
1762to
1763
1764 optimize=' '
1765
1766then propagate your changes with B<sh Configure -S> and rebuild
1767with B<make depend; make>.
1768
1769=item Missing functions and Undefined symbols
1770
1771If the build of miniperl fails with a long list of missing functions or
1772undefined symbols, check the libs variable in the config.sh file. It
1773should look something like
1774
1775 libs='-lsocket -lnsl -ldl -lm -lc'
1776
1777The exact libraries will vary from system to system, but you typically
1778need to include at least the math library -lm. Normally, Configure
1779will suggest the correct defaults. If the libs variable is empty, you
1780need to start all over again. Run
1781
1782 make distclean
1783
1784and start from the very beginning. This time, unless you are sure of
1785what you are doing, accept the default list of libraries suggested by
1786Configure.
1787
1788If the libs variable is missing -lm, there is a chance that libm.so.1
1789is available, but the required (symbolic) link to libm.so is missing.
1790(same could be the case for other libraries like libcrypt.so). You
1791should check your installation for packages that create that link, and
1792if no package is installed that supplies that link or you cannot install
1793them, make the symbolic link yourself e.g.:
1794
1795 $ rpm -qf /usr/lib64/libm.so
1796 glibc-devel-2.15-22.17.1.x86_64
1797 $ ls -lgo /usr/lib64/libm.so
1798 lrwxrwxrwx 1 16 Jan 7 2013 /usr/lib64/libm.so -> /lib64/libm.so.6
1799
1800 or
1801
1802 $ sudo ln -s /lib64/libm.so.6 /lib64/libm.so
1803
1804If the libs variable looks correct, you might have the
1805L<"nm extraction"> problem discussed above.
1806
1807If you still have missing routines or undefined symbols, you probably
1808need to add some library or other, make a symbolic link like described
1809above, or you need to undefine some feature that Configure thought was
1810there but is defective or incomplete. If you used a hint file, see if
1811it has any relevant advice. You can also look through config.h
1812for likely suspects.
1813
1814=item toke.c
1815
1816Some compilers will not compile or optimize the larger files (such as
1817toke.c) without some extra switches to use larger jump offsets or
1818allocate larger internal tables. You can customize the switches for
1819each file in cflags.SH. It's okay to insert rules for specific files
1820into makefile since a default rule only takes effect in the absence of a
1821specific rule.
1822
1823=item Missing dbmclose
1824
1825SCO prior to 3.2.4 may be missing dbmclose(). An upgrade to 3.2.4
1826that includes libdbm.nfs (which includes dbmclose()) may be available.
1827
1828=item error: too few arguments to function 'dbmclose'
1829
1830Building ODBM_File on some (Open)SUSE distributions might run into this
1831error, as the header file is broken. There are two ways to deal with this
1832
1833 1. Disable the use of ODBM_FILE
1834
1835 sh Configure ... -Dnoextensions=ODBM_File
1836
1837 2. Fix the header file, somewhat like this:
1838
1839 --- a/usr/include/dbm.h 2010-03-24 08:54:59.000000000 +0100
1840 +++ b/usr/include/dbm.h 2010-03-24 08:55:15.000000000 +0100
1841 @@ -59,4 +59,4 @@ extern datum firstkey __P((void));
1842
1843 extern datum nextkey __P((datum key));
1844
1845 -extern int dbmclose __P((DBM *));
1846 +extern int dbmclose __P((void));
1847
1848=item Warning (mostly harmless): No library found for -lsomething
1849
1850If you see such a message during the building of an extension, but
1851the extension passes its tests anyway (see L<"make test"> below),
1852then don't worry about the warning message. The extension
1853Makefile.PL goes looking for various libraries needed on various
1854systems; few systems will need all the possible libraries listed.
1855Most users will see warnings for the ones they don't have. The
1856phrase 'mostly harmless' is intended to reassure you that nothing
1857unusual is happening, and the build process is continuing.
1858
1859On the other hand, if you are building GDBM_File and you get the
1860message
1861
1862 Warning (mostly harmless): No library found for -lgdbm
1863
1864then it's likely you're going to run into trouble somewhere along
1865the line, since it's hard to see how you can use the GDBM_File
1866extension without the -lgdbm library.
1867
1868It is true that, in principle, Configure could have figured all of
1869this out, but Configure and the extension building process are not
1870quite that tightly coordinated.
1871
1872=item sh: ar: not found
1873
1874This is a message from your shell telling you that the command 'ar'
1875was not found. You need to check your PATH environment variable to
1876make sure that it includes the directory with the 'ar' command. This
1877is a common problem on Solaris, where 'ar' is in the /usr/ccs/bin
1878directory.
1879
1880=item db-recno failure on tests 51, 53 and 55
1881
1882Old versions of the DB library (including the DB library which comes
1883with FreeBSD 2.1) had broken handling of recno databases with modified
1884bval settings. Upgrade your DB library or OS.
1885
1886=item Bad arg length for semctl, is XX, should be ZZZ
1887
1888If you get this error message from the F<cpan/IPC-SysV/t/sem.t> test, your
1889System V IPC may be broken. The XX typically is 20, and that is what ZZZ
1890also should be. Consider upgrading your OS, or reconfiguring your OS
1891to include the System V semaphores.
1892
1893=item cpan/IPC-SysV/t/sem........semget: No space left on device
1894
1895Either your account or the whole system has run out of semaphores. Or
1896both. Either list the semaphores with "ipcs" and remove the unneeded
1897ones (which ones these are depends on your system and applications)
1898with "ipcrm -s SEMAPHORE_ID_HERE" or configure more semaphores to your
1899system.
1900
1901=item GNU binutils
1902
1903If you mix GNU binutils (nm, ld, ar) with equivalent vendor-supplied
1904tools you may be in for some trouble. For example creating archives
1905with an old GNU 'ar' and then using a new current vendor-supplied 'ld'
1906may lead into linking problems. Either recompile your GNU binutils
1907under your current operating system release, or modify your PATH not
1908to include the GNU utils before running Configure, or specify the
1909vendor-supplied utilities explicitly to Configure, for example by
1910Configure -Dar=/bin/ar.
1911
1912=item THIS PACKAGE SEEMS TO BE INCOMPLETE
1913
1914The F<Configure> program has not been able to find all the files which
1915make up the complete Perl distribution. You may have a damaged source
1916archive file (in which case you may also have seen messages such as
1917C<gzip: stdin: unexpected end of file> and C<tar: Unexpected EOF on
1918archive file>), or you may have obtained a structurally-sound but
1919incomplete archive. In either case, try downloading again from the
1920official site named at the start of this document. If you do find
1921that any site is carrying a corrupted or incomplete source code
1922archive, please report it to the site's maintainer.
1923
1924=item invalid token: ##
1925
1926You are using a non-ANSI-compliant C compiler. To compile Perl, you
1927need to use a compiler that supports ANSI C. If there is a README
1928file for your system, it may have further details on your compiler
1929options.
1930
1931=item Miscellaneous
1932
1933Some additional things that have been reported:
1934
1935Genix may need to use libc rather than libc_s, or #undef VARARGS.
1936
1937NCR Tower 32 (OS 2.01.01) may need -W2,-Sl,2000 and #undef MKDIR.
1938
1939UTS may need one or more of -K or -g, and #undef LSTAT.
1940
1941FreeBSD can fail the F<cpan/IPC-SysV/t/sem.t> test if SysV IPC has not been
1942configured in the kernel. Perl tries to detect this, though, and
1943you will get a message telling you what to do.
1944
1945Building Perl on a system that has also BIND (headers and libraries)
1946installed may run into troubles because BIND installs its own netdb.h
1947and socket.h, which may not agree with the operating system's ideas of
1948the same files. Similarly, including -lbind may conflict with libc's
1949view of the world. You may have to tweak -Dlocincpth and -Dloclibpth
1950to avoid the BIND.
1951
1952=back
1953
1954=head2 Cross-compilation
1955
1956Perl can be cross-compiled. It is just not trivial, cross-compilation
1957rarely is. Perl is routinely cross-compiled for several platforms: as of
1958June 2019, these include Android, Blackberry 10,
1959ARM Linux, and Solaris. Previous versions of
1960Perl also provided support for Open Zaurus, Symbian, and
1961the IBM OS/400, but it's unknown if those ports are still functional.
1962These platforms are known as the B<target> platforms, while the systems
1963where the compilation takes place are the B<host> platforms.
1964
1965What makes the situation difficult is that first of all,
1966cross-compilation environments vary significantly in how they are set
1967up and used, and secondly because the primary way of configuring Perl
1968(using the rather large Unix-tool-dependent Configure script) is not
1969awfully well suited for cross-compilation. However, starting from
1970version 5.18.0, the Configure script also knows two ways of supporting
1971cross-compilation, so please keep reading.
1972
1973See the following files for more information about compiling Perl for
1974the particular platforms:
1975
1976=over 4
1977
1978=item Android
1979
1980L<"Cross-compilation" in README.android or
1981perlandroid|perlandroid/Cross-compilation>
1982
1983=item Blackberry
1984
1985L<"Cross-compilation" in README.qnx or perlqnx|perlqnx/Cross-compilation>
1986
1987=item Solaris
1988
1989L<"CROSS-COMPILATION" in README.solaris or
1990perlsolaris|perlsolaris/CROSS-COMPILATION>
1991
1992=item Linux
1993
1994This document; See below.
1995
1996=back
1997
1998Packaging and transferring either the core Perl modules or CPAN
1999modules to the target platform is also left up to the each
2000cross-compilation environment. Often the cross-compilation target
2001platforms are somewhat limited in diskspace: see the section
2002L</Minimizing the Perl installation> to learn more of the minimal set
2003of files required for a functional Perl installation.
2004
2005For some cross-compilation environments the Configure option
2006C<-Dinstallprefix=...> might be handy, see L</Changing the installation
2007directory>.
2008
2009About the cross-compilation support of Configure: There's two forms.
2010The more common one requires some way of transferring and running
2011executables in the target system, such as an ssh connection; this is the
2012C<./Configure -Dusecrosscompile -Dtargethost=...> route. The second
2013method doesn't need access to the target system, but requires you to
2014provide a config.sh, and a canned Makefile; the rest of this section
2015describes the former.
2016
2017This cross-compilation setup of Configure has successfully been used in
2018a wide variety of setups, such as a 64-bit OS X host for an Android ARM
2019target, or an amd64 Linux host targeting x86 Solaris, or even Windows.
2020
2021To run Configure in cross-compilation mode the basic switch that
2022has to be used is C<-Dusecrosscompile>:
2023
2024 sh ./Configure -des -Dusecrosscompile -D...
2025
2026This will make the cpp symbol USE_CROSS_COMPILE and the %Config
2027symbol C<usecrosscompile> available.
2028
2029During the Configure and build, certain helper scripts will be created
2030into the Cross/ subdirectory. The scripts are used to execute a
2031cross-compiled executable, and to transfer files to and from the
2032target host. The execution scripts are named F<run-*> and the
2033transfer scripts F<to-*> and F<from-*>. The part after the dash is
2034the method to use for remote execution and transfer: by default the
2035methods are B<ssh> and B<scp>, thus making the scripts F<run-ssh>,
2036F<to-scp>, and F<from-scp>.
2037
2038To configure the scripts for a target host and a directory (in which
2039the execution will happen and which is to and from where the transfer
2040happens), supply Configure with
2041
2042 -Dtargethost=so.me.ho.st -Dtargetdir=/tar/get/dir
2043
2044The targethost is what e.g. ssh will use as the hostname, the targetdir
2045must exist (the scripts won't create it), the targetdir defaults to /tmp.
2046You can also specify a username to use for ssh/rsh logins
2047
2048 -Dtargetuser=luser
2049
2050but in case you don't, "root" will be used. Similarly, you can specify
2051a non-standard (i.e. not 22) port for the connection, if applicable,
2052through
2053
2054 -Dtargetport=2222
2055
2056If the name of C<cc> has the usual GNU C semantics for cross
2057compilers, that is, CPU-OS-gcc, the target architecture (C<targetarch>),
2058plus names of the C<ar>, C<nm>, and C<ranlib> will also be automatically
2059chosen to be CPU-OS-ar and so on.
2060(The C<ld> requires more thought and will be chosen later by Configure
2061as appropriate). This will also aid in guessing the proper
2062operating system name for the target, which has other repercussions, like
2063better defaults and possibly critical fixes for the platform. If
2064Configure isn't guessing the OS name properly, you may need to either add
2065a hint file redirecting Configure's guess, or modify Configure to make
2066the correct choice.
2067
2068If your compiler doesn't follow that convention, you will also need to
2069specify which target environment to use, as well as C<ar> and friends:
2070
2071 -Dtargetarch=arm-linux
2072 -Dcc=mycrossgcc
2073 -Dar=...
2074
2075Additionally, a cross-compilation toolchain will usually install it's own
2076logical system root somewhere -- that is, it'll create a directory
2077somewhere which includes subdirectories like C<'include'> or C<'lib'>. For
2078example, you may end up with F</skiff/local/arm-linux>, where
2079F</skiff/local/arm-linux/bin> holds the binaries for cross-compilation,
2080F</skiff/local/arm-linux/include> has the headers, and
2081F</skiff/local/arm-linux/lib> has the library files.
2082If this is the case, and you are using a compiler that understands
2083C<--sysroot>, like gcc or clang, you'll want to specify the
2084C<-Dsysroot> option for Configure:
2085
2086 -Dsysroot=/skiff/local/arm-linux
2087
2088However, if your don't have a suitable directory to pass to C<-Dsysroot>,
2089you will also need to specify which target environment to use:
2090
2091 -Dusrinc=/skiff/local/arm-linux/include
2092 -Dincpth=/skiff/local/arm-linux/include
2093 -Dlibpth=/skiff/local/arm-linux/lib
2094
2095In addition to the default execution/transfer methods you can also
2096choose B<rsh> for execution, and B<rcp> or B<cp> for transfer,
2097for example:
2098
2099 -Dtargetrun=rsh -Dtargetto=rcp -Dtargetfrom=cp
2100
2101Putting it all together:
2102
2103 sh ./Configure -des -Dusecrosscompile \
2104 -Dtargethost=so.me.ho.st \
2105 -Dtargetdir=/tar/get/dir \
2106 -Dtargetuser=root \
2107 -Dtargetarch=arm-linux \
2108 -Dcc=arm-linux-gcc \
2109 -Dsysroot=/skiff/local/arm-linux \
2110 -D...
2111
2112or if you are happy with the defaults:
2113
2114 sh ./Configure -des -Dusecrosscompile \
2115 -Dtargethost=so.me.ho.st \
2116 -Dcc=arm-linux-gcc \
2117 -D...
2118
2119Another example where the cross-compiler has been installed under
2120F</usr/local/arm/2.95.5>:
2121
2122 sh ./Configure -des -Dusecrosscompile \
2123 -Dtargethost=so.me.ho.st \
2124 -Dcc=/usr/local/arm/2.95.5/bin/arm-linux-gcc \
2125 -Dsysroot=/usr/local/arm/2.95.5
2126
2127There is also a C<targetenv> option for Configure which can be used
2128to modify the environment of the target just before testing begins
2129during 'make test'. For example, if the target system has a nonstandard
2130/tmp location, you could do this:
2131
2132 -Dtargetenv="export TMPDIR=/other/tmp;"
2133
2134If you are planning on cross-compiling to several platforms, or some
2135other thing that would involve running Configure several times, there are
2136two options that can be used to speed things up considerably.
2137As a bit of background, when you
2138call Configure with C<-Dusecrosscompile>, it begins by actually partially
2139building a miniperl on the host machine, as well as the generate_uudmap
2140binary, and we end up using that during the build.
2141So instead of building that new perl every single time, you can build it
2142just once in a separate directory, and then pass the resulting binaries
2143to Configure like this:
2144
2145 -Dhostperl=/path/to/second/build/dir/miniperl
2146 -Dhostgenerate=/path/to/second/build/dir/generate_uudmap
2147
2148Much less commonly, if you are cross-compiling from an ASCII host to an
2149EBCDIC target, or vise versa, you'll have to pass C<-Uhostgenerate> to
2150Configure, to signify that you want to build a generate_uudmap binary
2151that, during make, will be run on the target system.
2152
2153=head1 make test
2154
2155This will run the regression tests on the perl you just made. If
2156'make test' doesn't say "All tests successful" then something went
2157wrong.
2158
2159Note that you can't run the tests in background if this disables
2160opening of /dev/tty. You can use 'make test-notty' in that case but
2161a few tty tests will be skipped.
2162
2163=head2 What if make test doesn't work?
2164
2165If make test bombs out, just cd to the t directory and run ./TEST
2166by hand to see if it makes any difference.
2167
2168One way to get more detailed information about failed tests and
2169individual subtests is to run the harness from the t directory:
2170
2171 cd t ; ./perl harness <list of tests>
2172
2173(this assumes that most basic tests succeed, since harness uses
2174complicated constructs). If no list of tests is provided, harness
2175will run all tests.
2176
2177If individual tests fail, you can often run them by hand (from the main
2178perl directory), e.g.,
2179
2180 ./perl -I. -MTestInit t/op/groups.t
2181
2182You should also read the individual tests to see if there are any helpful
2183comments that apply to your system. You may also need to setup your
2184shared library path if you get errors like:
2185
2186 /sbin/loader: Fatal Error: cannot map libperl.so
2187
2188The file t/README in the t subdirectory contains more information about
2189running and modifying tests.
2190
2191See L</"Building a shared Perl library"> earlier in this document.
2192
2193=over 4
2194
2195=item locale
2196
2197Note: One possible reason for errors is that some external programs
2198may be broken due to the combination of your environment and the way
2199'make test' exercises them. For example, this may happen if you have
2200one or more of these environment variables set: LC_ALL LC_CTYPE
2201LC_COLLATE LANG. In some versions of UNIX, the non-English locales
2202are known to cause programs to exhibit mysterious errors.
2203
2204If you have any of the above environment variables set, please try
2205
2206 setenv LC_ALL C
2207
2208(for C shell) or
2209
2210 LC_ALL=C;export LC_ALL
2211
2212for Bourne or Korn shell) from the command line and then retry
2213make test. If the tests then succeed, you may have a broken program that
2214is confusing the testing. Please run the troublesome test by hand as
2215shown above and see whether you can locate the program. Look for
2216things like: exec, `backquoted command`, system, open("|...") or
2217open("...|"). All these mean that Perl is trying to run some
2218external program.
2219
2220=item Timing problems
2221
2222Several tests in the test suite check timing functions, such as
2223sleep(), and see if they return in a reasonable amount of time.
2224If your system is quite busy and doesn't respond quickly enough,
2225these tests might fail. If possible, try running the tests again
2226with the system under a lighter load. These timing-sensitive
2227and load-sensitive tests include F<t/op/alarm.t>,
2228F<dist/Time-HiRes/t/alarm.t>, F<dist/Time-HiRes/t/clock.t>,
2229F<dist/Time-HiRes/t/itimer.t>, F<dist/Time-HiRes/t/usleep.t>,
2230F<dist/threads-shared/t/waithires.t>,
2231F<dist/threads-shared/t/stress.t>, F<lib/Benchmark.t>,
2232F<lib/Memoize/t/expmod_t.t>, and F<lib/Memoize/t/speed.t>.
2233
2234You might also experience some failures in F<t/op/stat.t> if you build
2235perl on an NFS filesystem, if the remote clock and the system clock are
2236different.
2237
2238=item Out of memory
2239
2240On some systems, particularly those with smaller amounts of RAM, some
2241of the tests in t/op/pat.t may fail with an "Out of memory" message.
2242For example, on my SparcStation IPC with 12 MB of RAM, in perl5.5.670,
2243test 85 will fail if run under either t/TEST or t/harness.
2244
2245Try stopping other jobs on the system and then running the test by itself:
2246
2247 ./perl -I. -MTestInit t/op/pat.t
2248
2249to see if you have any better luck. If your perl still fails this
2250test, it does not necessarily mean you have a broken perl. This test
2251tries to exercise the regular expression subsystem quite thoroughly,
2252and may well be far more demanding than your normal usage.
2253
2254=item libgcc_s.so.1: cannot open shared object file
2255
2256This message has been reported on gcc-3.2.3 and earlier installed with
2257a non-standard prefix. Setting the LD_LIBRARY_PATH environment variable
2258(or equivalent) to include gcc's lib/ directory with the libgcc_s.so.1
2259shared library should fix the problem.
2260
2261=item Failures from lib/File/Temp/t/security saying "system possibly insecure"
2262
2263First, such warnings are not necessarily serious or indicative of a
2264real security threat. That being said, they bear investigating.
2265
2266Note that each of the tests is run twice. The first time is in the
2267directory returned by File::Spec->tmpdir() (often /tmp on Unix
2268systems), and the second time in the directory from which the test was
2269run (usually the 't' directory, if the test was run as part of 'make
2270test').
2271
2272The tests may fail for the following reasons:
2273
2274(1) If the directory the tests are being run in is owned by somebody
2275other than the user running the tests, or by root (uid 0).
2276
2277This failure can happen if the Perl source code distribution is
2278unpacked in such a way that the user IDs in the distribution package
2279are used as-is. Some tar programs do this.
2280
2281(2) If the directory the tests are being run in is writable by group or
2282by others, and there is no sticky bit set for the directory. (With
2283UNIX/POSIX semantics, write access to a directory means the right to
2284add or remove files in that directory. The 'sticky bit' is a feature
2285used in some UNIXes to give extra protection to files: if the bit is
2286set for a directory, no one but the owner (or root) can remove that
2287file even if the permissions would otherwise allow file removal by
2288others.)
2289
2290This failure may or may not be a real problem: it depends on the
2291permissions policy used on this particular system. This failure can
2292also happen if the system either doesn't support the sticky bit (this
2293is the case with many non-UNIX platforms: in principle File::Temp
2294should know about these platforms and skip the tests), or if the system
2295supports the sticky bit but for some reason or reasons it is not being
2296used. This is, for example, the case with HP-UX: as of HP-UX release
229711.00, the sticky bit is very much supported, but HP-UX doesn't use it
2298on its /tmp directory as shipped. Also, as with the permissions, some
2299local policy might dictate that the stickiness is not used.
2300
2301(3) If the system supports the POSIX 'chown giveaway' feature and if
2302any of the parent directories of the temporary file back to the root
2303directory are 'unsafe', using the definitions given above in (1) and
2304(2). For Unix systems, this is usually not an issue if you are
2305building on a local disk. See the documentation for the File::Temp
2306module for more information about 'chown giveaway'.
2307
2308See the documentation for the File::Temp module for more information
2309about the various security aspects of temporary files.
2310
2311=back
2312
2313The core distribution can now run its regression tests in parallel on
2314Unix-like platforms. Instead of running C<make test>, set C<TEST_JOBS>
2315in your environment to the number of tests to run in parallel, and run
2316C<make test_harness>. On a Bourne-like shell, this can be done as
2317
2318 TEST_JOBS=3 make test_harness # Run 3 tests in parallel
2319
2320An environment variable is used, rather than parallel make itself,
2321because L<TAP::Harness> needs to be able to schedule individual
2322non-conflicting test scripts itself, and there is no standard interface
2323to C<make> utilities to interact with their job schedulers.
2324
2325=head1 make install
2326
2327This will put perl into the public directory you specified to
2328Configure; by default this is /usr/local/bin. It will also try to put
2329the man pages in a reasonable place. It will not nroff the man pages,
2330however. You may need to be root to run B<make install>. If you are not
2331root, you must still have permission to install into the directories
2332in question and you should ignore any messages about chown not working.
2333
2334If "make install" just says "'install' is up to date" or something
2335similar, you may be on a case-insensitive filesystems such as Mac's HFS+,
2336and you should say "make install-all". (This confusion is brought to you
2337by the Perl distribution having a file called INSTALL.)
2338
2339=head2 Installing perl under different names
2340
2341If you want to install perl under a name other than "perl" (for example,
2342when installing perl with special features enabled, such as debugging),
2343indicate the alternate name on the "make install" line, such as:
2344
2345 make install PERLNAME=myperl
2346
2347You can separately change the base used for versioned names (like
2348"perl5.8.9") by setting PERLNAME_VERBASE, like
2349
2350 make install PERLNAME=perl5 PERLNAME_VERBASE=perl
2351
2352This can be useful if you have to install perl as "perl5" (e.g. to avoid
2353conflicts with an ancient version in /usr/bin supplied by your vendor).
2354Without this the versioned binary would be called "perl55.8.8".
2355
2356=head2 Installing perl under a different directory
2357
2358You can install perl under a different destination directory by using
2359the DESTDIR variable during C<make install>, with a command like
2360
2361 make install DESTDIR=/tmp/perl5
2362
2363DESTDIR is automatically prepended to all the installation paths. See
2364the example in L<"DESTDIR"> above.
2365
2366=head2 Installed files
2367
2368If you want to see exactly what will happen without installing
2369anything, you can run
2370
2371 ./perl installperl -n
2372 ./perl installman -n
2373
2374make install will install the following:
2375
2376 binaries
2377
2378 perl,
2379 perl5.n.n where 5.n.n is the current release number. This
2380 will be a link to perl.
2381
2382 scripts
2383
2384 cppstdin This is used by the deprecated switch perl -P,
2385 if your cc -E can't read from stdin.
2386 corelist Shows versions of modules that come with
2387 different
2388 versions of perl.
2389 cpan The CPAN shell.
2390 enc2xs Encoding module generator.
2391 h2ph Extract constants and simple macros from C
2392 headers.
2393 h2xs Converts C .h header files to Perl extensions.
2394 instmodsh A shell to examine installed modules.
2395 libnetcfg Configure libnet.
2396 perlbug Tool to report bugs in Perl.
2397 perldoc Tool to read perl's pod documentation.
2398 perlivp Perl Installation Verification Procedure.
2399 piconv A Perl implementation of the encoding conversion
2400 utility iconv.
2401 pl2pm Convert Perl 4 .pl files to Perl 5 .pm modules.
2402 pod2html, Converters from perl's pod documentation format
2403 pod2man,
2404 pod2text,
2405 pod2usage
2406 podchecker POD syntax checker.
2407 podselect Prints sections of POD documentation.
2408 prove A command-line tool for running tests.
2409 psed A Perl implementation of sed.
2410 ptar A Perl implementation of tar.
2411 ptardiff A diff for tar archives.
2412 ptargrep A grep for tar archives.
2413 shasum A tool to print or check SHA checksums.
2414 splain Describe Perl warnings and errors.
2415 xsubpp Compiler to convert Perl XS code into C code.
2416 zipdetails display the internal structure of zip files
2417
2418 library files
2419
2420 in $privlib and $archlib specified to
2421 Configure, usually under /usr/local/lib/perl5/.
2422
2423 documentation
2424
2425 man pages in $man1dir, usually /usr/local/man/man1.
2426 module man
2427 pages in $man3dir, usually /usr/local/man/man3.
2428 pod/*.pod in $privlib/pod/.
2429
2430installperl will also create the directories listed above
2431in L<"Installation Directories">.
2432
2433Perl's *.h header files and the libperl library are also installed
2434under $archlib so that any user may later build new modules, run the
2435optional Perl compiler, or embed the perl interpreter into another
2436program even if the Perl source is no longer available.
2437
2438=head2 Installing with a version-specific suffix
2439
2440Sometimes you only want to install the perl distribution with a
2441version-specific suffix. For example, you may wish to install a newer
2442version of perl alongside an already installed production version.
2443To only install the version-specific parts of the perl installation, run
2444
2445 Configure -Dversiononly
2446
2447or answer 'y' to the appropriate Configure prompt. Alternatively,
2448you can just manually run
2449
2450 ./perl installperl -v
2451
2452and skip installman altogether.
2453
2454See also L<"Maintaining completely separate versions"> for another
2455approach.
2456
2457=head1 cd /usr/include; h2ph *.h sys/*.h
2458
2459Some perl scripts need to be able to obtain information from the
2460system header files. This command will convert the most commonly used
2461header files in /usr/include into files that can be easily interpreted
2462by perl. These files will be placed in the architecture-dependent
2463library ($archlib) directory you specified to Configure.
2464
2465Note: Due to differences in the C and perl languages, the conversion
2466of the header files is not perfect. You will probably have to
2467hand-edit some of the converted files to get them to parse correctly.
2468For example, h2ph breaks spectacularly on type casting and certain
2469structures.
2470
2471=head1 installhtml --help
2472
2473Some sites may wish to make perl documentation available in HTML
2474format. The installhtml utility can be used to convert pod
2475documentation into linked HTML files and install them.
2476
2477Currently, the supplied ./installhtml script does not make use of the
2478html Configure variables. This should be fixed in a future release.
2479
2480The following command-line is an example of one used to convert
2481perl documentation:
2482
2483 ./installhtml \
2484 --podroot=. \
2485 --podpath=lib:ext:pod:vms \
2486 --recurse \
2487 --htmldir=/perl/nmanual \
2488 --htmlroot=/perl/nmanual \
2489 --splithead=pod/perlipc \
2490 --splititem=pod/perlfunc \
2491 --verbose
2492
2493See the documentation in installhtml for more details. It can take
2494many minutes to execute a large installation and you should expect to
2495see warnings like "no title", "unexpected directive" and "cannot
2496resolve" as the files are processed. We are aware of these problems
2497(and would welcome patches for them).
2498
2499You may find it helpful to run installhtml twice. That should reduce
2500the number of "cannot resolve" warnings.
2501
2502=head1 cd pod && make tex && (process the latex files)
2503
2504Some sites may also wish to make the documentation in the pod/ directory
2505available in TeX format. Type
2506
2507 (cd pod && make tex && <process the latex files>)
2508
2509=head1 Starting all over again
2510
2511If you wish to rebuild perl from the same build directory, you should
2512clean it out with the command
2513
2514 make distclean
2515
2516or
2517
2518 make realclean
2519
2520The only difference between the two is that make distclean also removes
2521your old config.sh and Policy.sh files. (A plain 'make clean' is now
2522equivalent to 'make realclean'.)
2523
2524If you are upgrading from a previous version of perl, or if you
2525change systems or compilers or make other significant changes, or if
2526you are experiencing difficulties building perl, you should not reuse
2527your old config.sh.
2528
2529If your reason to reuse your old config.sh is to save your particular
2530installation choices, then you can probably achieve the same effect by
2531using the Policy.sh file. See the section on L<"Site-wide Policy
2532settings"> above.
2533
2534=head1 Reporting Problems
2535
2536Please report problems to the GitHub issue tracker at
2537https://github.com/Perl/perl5/issues, which will ask for the
2538appropriate summary configuration information about your perl, which
2539may help us track down problems far more quickly. But first you should
2540read the advice in this file, carefully re-read the error message and
2541check the relevant manual pages on your system, as these may help you
2542find an immediate solution. Once you've exhausted the documentation,
2543please report bugs to us using the GitHub tracker.
2544
2545The summary configuration information can be printed with C<perl -V>.
2546If the install fails, or you want to report problems with C<make test>
2547without installing perl, then you can run it by hand from this source
2548directory with C<./perl -V>.
2549
2550If the build fails too early to run perl, then please
2551B<run> the C<./myconfig> shell script, and include its output along
2552with an accurate description of your problem.
2553
2554If Configure itself fails, and does not generate a config.sh file
2555(needed to run C<./myconfig>), then please open an issue with the
2556description of how Configure fails along with details of your system
2557-- for example the output from running C<uname -a>.
2558
2559Please try to make your message brief but clear. Brief, clear bug
2560reports tend to get answered more quickly. Please don't worry if your
2561written English is not great -- what matters is how well you describe
2562the important technical details of the problem you have encountered,
2563not whether your grammar and spelling is flawless.
2564
2565Trim out unnecessary information. Do not include large files (such as
2566config.sh or a complete Configure or make log) unless absolutely
2567necessary. Do not include a complete transcript of your build
2568session. Just include the failing commands, the relevant error
2569messages, and whatever preceding commands are necessary to give the
2570appropriate context.
2571
2572If the bug you are reporting has security implications which make it
2573inappropriate to send to a public issue tracker, then see
2574L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
2575for details of how to report the issue.
2576
2577If you are unsure what makes a good bug report please read "How to
2578report Bugs Effectively" by Simon Tatham:
2579L<https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
2580
2581=head1 Coexistence with earlier versions of perl 5
2582
2583Perl 5.39.8 is not binary compatible with earlier versions of Perl.
2584In other words, you will have to recompile your XS modules.
2585
2586In general, you can usually safely upgrade from one stable version of Perl
2587(e.g. 5.30.0) to another similar minor version (e.g. 5.30.1) without
2588re-compiling all of your extensions. You can also safely leave the old
2589version around in case the new version causes you problems for some
2590reason.
2591
2592Usually, most extensions will probably not need to be recompiled to be
2593used with a newer version of Perl. Here is how it is supposed to work.
2594(These examples assume you accept all the Configure defaults.)
2595
2596Suppose you already have version 5.8.7 installed. The directories
2597searched by 5.8.7 are typically like:
2598
2599 /usr/local/lib/perl5/5.8.7/$archname
2600 /usr/local/lib/perl5/5.8.7
2601 /usr/local/lib/perl5/site_perl/5.8.7/$archname
2602 /usr/local/lib/perl5/site_perl/5.8.7
2603
2604Now, suppose you install version 5.8.8. The directories
2605searched by version 5.8.8 will be:
2606
2607 /usr/local/lib/perl5/5.8.8/$archname
2608 /usr/local/lib/perl5/5.8.8
2609 /usr/local/lib/perl5/site_perl/5.8.8/$archname
2610 /usr/local/lib/perl5/site_perl/5.8.8
2611
2612 /usr/local/lib/perl5/site_perl/5.8.7/$archname
2613 /usr/local/lib/perl5/site_perl/5.8.7
2614 /usr/local/lib/perl5/site_perl/
2615
2616Notice the last three entries -- Perl understands the default structure
2617of the $sitelib directories and will look back in older, compatible
2618directories. This way, modules installed under 5.8.7 will continue
2619to be usable by 5.8.7 but will also accessible to 5.8.8. Further,
2620suppose that you upgrade a module to one which requires features
2621present only in 5.8.8. That new module will get installed into
2622/usr/local/lib/perl5/site_perl/5.8.8 and will be available to 5.8.8,
2623but will not interfere with the 5.8.7 version.
2624
2625The last entry, /usr/local/lib/perl5/site_perl/, is there so that
26265.6.0 and above will look for 5.004-era pure perl modules.
2627
2628Lastly, suppose you now install 5.10.0, which is not binary compatible
2629with 5.8.x. The directories searched by 5.10.0 (if you don't change the
2630Configure defaults) will be:
2631
2632 /usr/local/lib/perl5/5.10.0/$archname
2633 /usr/local/lib/perl5/5.10.0
2634 /usr/local/lib/perl5/site_perl/5.10.0/$archname
2635 /usr/local/lib/perl5/site_perl/5.10.0
2636
2637 /usr/local/lib/perl5/site_perl/5.8.8
2638
2639 /usr/local/lib/perl5/site_perl/5.8.7
2640
2641 /usr/local/lib/perl5/site_perl/
2642
2643Note that the earlier $archname entries are now gone, but pure perl
2644modules from earlier versions will still be found.
2645
2646This way, you can choose to share compatible extensions, but also upgrade
2647to a newer version of an extension that may be incompatible with earlier
2648versions, without breaking the earlier versions' installations.
2649
2650=head2 Maintaining completely separate versions
2651
2652Many users prefer to keep all versions of perl in completely
2653separate directories. This guarantees that an update to one version
2654won't interfere with another version. (The defaults guarantee this for
2655libraries after 5.6.0, but not for executables. TODO?) One convenient
2656way to do this is by using a separate prefix for each version, such as
2657
2658 sh Configure -Dprefix=/opt/perl5.39.8
2659
2660and adding /opt/perl5.39.8/bin to the shell PATH variable. Such users
2661may also wish to add a symbolic link /usr/local/bin/perl so that
2662scripts can still start with #!/usr/local/bin/perl.
2663
2664Others might share a common directory for maintenance sub-versions
2665(e.g. 5.10 for all 5.10.x versions), but change directory with
2666each major version.
2667
2668If you are installing a development subversion, you probably ought to
2669seriously consider using a separate directory, since development
2670subversions may not have all the compatibility wrinkles ironed out
2671yet.
2672
2673=head2 Upgrading from 5.39.6 or earlier
2674
2675B<Perl 5.39.8 may not be binary compatible with Perl 5.39.6 or
2676earlier Perl releases.> Perl modules having binary parts
2677(meaning that a C compiler is used) will have to be recompiled to be
2678used with 5.39.8. If you find you do need to rebuild an extension with
26795.39.8, you may safely do so without disturbing the older
2680installations. (See L<"Coexistence with earlier versions of perl 5">
2681above.)
2682
2683See your installed copy of the perllocal.pod file for a (possibly
2684incomplete) list of locally installed modules. Note that you want
2685perllocal.pod, not perllocale.pod, for installed module information.
2686
2687=head1 Minimizing the Perl installation
2688
2689The following section is meant for people worrying about squeezing the
2690Perl installation into minimal systems (for example when installing
2691operating systems, or in really small filesystems).
2692
2693Leaving out as many extensions as possible is an obvious way:
2694Encode, with its big conversion tables, consumes a lot of
2695space. On the other hand, you cannot throw away everything. The
2696Fcntl module is pretty essential. If you need to do network
2697programming, you'll appreciate the Socket module, and so forth: it all
2698depends on what do you need to do.
2699
2700In the following we offer two different slimmed down installation
2701recipes. They are informative, not normative: the choice of files
2702depends on what you need.
2703
2704Firstly, the bare minimum to run this script
2705
2706 use strict;
2707 use warnings;
2708 foreach my $f (</*>) {
2709 print("$f\n");
2710 }
2711
2712in Linux with perl-5.39.8 is as follows (under $Config{prefix}):
2713
2714 ./bin/perl
2715 ./lib/perl5/5.39.8/strict.pm
2716 ./lib/perl5/5.39.8/warnings.pm
2717 ./lib/perl5/5.39.8/i686-linux/File/Glob.pm
2718 ./lib/perl5/5.39.8/feature.pm
2719 ./lib/perl5/5.39.8/XSLoader.pm
2720 ./lib/perl5/5.39.8/i686-linux/auto/File/Glob/Glob.so
2721
2722Secondly, for perl-5.10.1, the Debian perl-base package contains 591
2723files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
2724i386 version. Omitting the lib/unicore/* files for brevity, the
2725remaining files are:
2726
2727 /usr/bin/perl
2728 /usr/bin/perl5.10.1
2729 /usr/lib/perl/5.10.1/Config.pm
2730 /usr/lib/perl/5.10.1/Config_git.pl
2731 /usr/lib/perl/5.10.1/Config_heavy.pl
2732 /usr/lib/perl/5.10.1/Cwd.pm
2733 /usr/lib/perl/5.10.1/DynaLoader.pm
2734 /usr/lib/perl/5.10.1/Errno.pm
2735 /usr/lib/perl/5.10.1/Fcntl.pm
2736 /usr/lib/perl/5.10.1/File/Glob.pm
2737 /usr/lib/perl/5.10.1/Hash/Util.pm
2738 /usr/lib/perl/5.10.1/IO.pm
2739 /usr/lib/perl/5.10.1/IO/File.pm
2740 /usr/lib/perl/5.10.1/IO/Handle.pm
2741 /usr/lib/perl/5.10.1/IO/Pipe.pm
2742 /usr/lib/perl/5.10.1/IO/Seekable.pm
2743 /usr/lib/perl/5.10.1/IO/Select.pm
2744 /usr/lib/perl/5.10.1/IO/Socket.pm
2745 /usr/lib/perl/5.10.1/IO/Socket/INET.pm
2746 /usr/lib/perl/5.10.1/IO/Socket/UNIX.pm
2747 /usr/lib/perl/5.10.1/List/Util.pm
2748 /usr/lib/perl/5.10.1/POSIX.pm
2749 /usr/lib/perl/5.10.1/Scalar/Util.pm
2750 /usr/lib/perl/5.10.1/Socket.pm
2751 /usr/lib/perl/5.10.1/XSLoader.pm
2752 /usr/lib/perl/5.10.1/auto/Cwd/Cwd.so
2753 /usr/lib/perl/5.10.1/auto/DynaLoader/autosplit.ix
2754 /usr/lib/perl/5.10.1/auto/DynaLoader/dl_expandspec.al
2755 /usr/lib/perl/5.10.1/auto/DynaLoader/dl_find_symbol_anywhere.al
2756 /usr/lib/perl/5.10.1/auto/DynaLoader/dl_findfile.al
2757 /usr/lib/perl/5.10.1/auto/Fcntl/Fcntl.so
2758 /usr/lib/perl/5.10.1/auto/File/Glob/Glob.so
2759 /usr/lib/perl/5.10.1/auto/Hash/Util/Util.so
2760 /usr/lib/perl/5.10.1/auto/IO/IO.so
2761 /usr/lib/perl/5.10.1/auto/List/Util/Util.so
2762 /usr/lib/perl/5.10.1/auto/POSIX/POSIX.so
2763 /usr/lib/perl/5.10.1/auto/POSIX/autosplit.ix
2764 /usr/lib/perl/5.10.1/auto/POSIX/load_imports.al
2765 /usr/lib/perl/5.10.1/auto/Socket/Socket.so
2766 /usr/lib/perl/5.10.1/lib.pm
2767 /usr/lib/perl/5.10.1/re.pm
2768 /usr/share/doc/perl/AUTHORS.gz
2769 /usr/share/doc/perl/Documentation
2770 /usr/share/doc/perl/README.Debian
2771 /usr/share/doc/perl/changelog.Debian.gz
2772 /usr/share/doc/perl/copyright
2773 /usr/share/lintian/overrides/perl-base
2774 /usr/share/man/man1/perl.1.gz
2775 /usr/share/man/man1/perl5.10.1.1.gz
2776 /usr/share/perl/5.10.1/AutoLoader.pm
2777 /usr/share/perl/5.10.1/Carp.pm
2778 /usr/share/perl/5.10.1/Carp/Heavy.pm
2779 /usr/share/perl/5.10.1/Exporter.pm
2780 /usr/share/perl/5.10.1/Exporter/Heavy.pm
2781 /usr/share/perl/5.10.1/File/Spec.pm
2782 /usr/share/perl/5.10.1/File/Spec/Unix.pm
2783 /usr/share/perl/5.10.1/FileHandle.pm
2784 /usr/share/perl/5.10.1/Getopt/Long.pm
2785 /usr/share/perl/5.10.1/IPC/Open2.pm
2786 /usr/share/perl/5.10.1/IPC/Open3.pm
2787 /usr/share/perl/5.10.1/SelectSaver.pm
2788 /usr/share/perl/5.10.1/Symbol.pm
2789 /usr/share/perl/5.10.1/Text/ParseWords.pm
2790 /usr/share/perl/5.10.1/Text/Tabs.pm
2791 /usr/share/perl/5.10.1/Text/Wrap.pm
2792 /usr/share/perl/5.10.1/Tie/Hash.pm
2793 /usr/share/perl/5.10.1/attributes.pm
2794 /usr/share/perl/5.10.1/base.pm
2795 /usr/share/perl/5.10.1/bytes.pm
2796 /usr/share/perl/5.10.1/bytes_heavy.pl
2797 /usr/share/perl/5.10.1/constant.pm
2798 /usr/share/perl/5.10.1/fields.pm
2799 /usr/share/perl/5.10.1/integer.pm
2800 /usr/share/perl/5.10.1/locale.pm
2801 /usr/share/perl/5.10.1/overload.pm
2802 /usr/share/perl/5.10.1/strict.pm
2803 /usr/share/perl/5.10.1/unicore/*
2804 /usr/share/perl/5.10.1/utf8.pm
2805 /usr/share/perl/5.10.1/utf8_heavy.pl
2806 /usr/share/perl/5.10.1/vars.pm
2807 /usr/share/perl/5.10.1/warnings.pm
2808 /usr/share/perl/5.10.1/warnings/register.pm
2809
2810A nice trick to find out the minimal set of Perl library files you will
2811need to run a Perl program is
2812
2813 perl -e 'do "prog.pl"; END { print "$_\n" for sort keys %INC }'
2814
2815(this will not find libraries required in runtime, unfortunately, but
2816it's a minimal set) and if you want to find out all the files you can
2817use something like the below
2818
2819 strace perl -le 'do "x.pl"' 2>&1 \
2820 | perl -nle '/^open\(\"(.+?)"/ && print $1'
2821
2822(The 'strace' is Linux-specific, other similar utilities include 'truss'
2823and 'ktrace'.)
2824
2825=head2 C<-DNO_MATHOMS>
2826
2827If you configure perl with C<-Accflags=-DNO_MATHOMS>, the functions from
2828F<mathoms.c> will not be compiled in. Those functions are no longer used
2829by perl itself; for source compatibility reasons, though, they weren't
2830completely removed.
2831
2832=head2 C<-DNO_PERL_INTERNAL_RAND_SEED>
2833
2834If you configure perl with C<-Accflags=-DNO_PERL_INTERNAL_RAND_SEED>,
2835perl will ignore the C<PERL_INTERNAL_RAND_SEED> environment variable.
2836
2837=head2 C<-DNO_PERL_RAND_SEED>
2838X<PERL_RAND_SEED>
2839
2840If you configure perl with C<-Accflags=-DNO_PERL_RAND_SEED>,
2841perl will ignore the C<PERL_RAND_SEED> environment variable.
2842
2843=head1 DOCUMENTATION
2844
2845Read the manual entries before running perl. The main documentation
2846is in the F<pod/> subdirectory and should have been installed during the
2847build process. Type B<man perl> to get started. Alternatively, you
2848can type B<perldoc perl> to use the supplied perldoc script. This is
2849sometimes useful for finding things in the library modules.
2850
2851=head1 AUTHOR
2852
2853Original author: Andy Dougherty doughera@lafayette.edu , borrowing very
2854heavily from the original README by Larry Wall, with lots of helpful
2855feedback and additions from the perl5-porters@perl.org folks.
2856
2857If you have problems, corrections, or questions, please see
2858L<"Reporting Problems"> above.
2859
2860=head1 REDISTRIBUTION
2861
2862This document is part of the Perl package and may be distributed under
2863the same terms as perl itself, with the following additional request:
2864If you are distributing a modified version of perl (perhaps as part of
2865a larger package) please B<do> modify these installation instructions
2866and the contact information to match your distribution. Additional
2867information for packagers is in F<PACKAGING>.