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