This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 4c9e3bc..d7b26d8 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,7 @@
+# vim: syntax=pod
+
 If you read this file _as_is_, just ignore the funny characters you see.
-It is written in the POD format (see pod/perlpod.pod) which is specially
+It is written in the POD format (see F<pod/perlpod.pod>) which is specially
 designed to be readable as is.
 
 =head1 NAME
@@ -10,7 +12,7 @@ INSTALL - Build and Installation guide for perl 5.
 
 First, make sure you have an up-to-date version of Perl.  If you
 didn't get your Perl source from CPAN, check the latest version at
-http://www.cpan.org/src/.  Perl uses a version scheme where even-numbered
+L<https://www.cpan.org/src/>.  Perl uses a version scheme where even-numbered
 subreleases (like 5.8.x and 5.10.x) are stable maintenance releases and
 odd-numbered subreleases (like 5.7.x and 5.9.x) are unstable
 development releases.  Development releases should not be used in
@@ -28,36 +30,35 @@ the defaults are to run, from a freshly unpacked source tree:
 
 Each of these is explained in further detail below.
 
-The above commands will install Perl to /usr/local (or some other
-platform-specific directory -- see the appropriate file in hints/.)
+The above commands will install Perl to F</usr/local> (or some other
+platform-specific directory -- see the appropriate file in F<hints/>.)
 If that's not okay with you, you can run Configure interactively, by
 just typing "sh Configure" (without the -de args). You can also specify
-any prefix location by adding "-Dprefix='/some/dir'" to Configure's args.
+any prefix location by adding C<"-Dprefix='/some/dir'"> to Configure's args.
 To explicitly name the perl binary, use the command
 "make install PERLNAME=myperl".
 
 Building perl from source requires an ANSI compliant C compiler.
-A minimum of C89 is required. Some features available in C99 will
-be probed for and used when found. The perl build process does not
-rely on anything more than C89.
+C89 with a minimal subset of C99 features is required. Some other
+features available in C99 will be probed for and used when found.
 
 These options, and many more, are explained in further detail below.
 
 If you're building perl from a git repository, you should also consult
-the documentation in pod/perlgit.pod for information on that special
+the documentation in F<pod/perlgit.pod> for information on that special
 circumstance.
 
 If you have problems, corrections, or questions, please see
 L<"Reporting Problems"> below.
 
 For information on what's new in this release, see the
-pod/perldelta.pod file.  For more information about how to find more
+F<pod/perldelta.pod> file.  For more information about how to find more
 specific detail about changes, see the Changes file.
 
 =head1 DESCRIPTION
 
 This document is written in pod format as an easy way to indicate its
-structure.  The pod format is described in pod/perlpod.pod, but you can
+structure.  The pod format is described in F<pod/perlpod.pod>, but you can
 read it as is with any pager or editor.  Headings and items are marked
 by lines beginning with '='.  The other mark-up used is
 
@@ -73,21 +74,23 @@ proceeding.
 In addition to this file, check if there is a README file specific to
 your operating system, since it may provide additional or different
 instructions for building Perl.  If there is a hint file for your
-system (in the hints/ directory) you might also want to read it
+system (in the F<hints/> directory) you might also want to read it
 for even more information.
 
 For additional information about porting Perl, see the section on
-L<"Porting information"> below, and look at the files in the Porting/
+L<"Porting information"> below, and look at the files in the F<Porting/>
 directory.
 
 =head1 PRELIMINARIES
 
 =head2 Changes and Incompatibilities
 
-Please see pod/perldelta.pod for a description of the changes and
+Please see F<pod/perldelta.pod> for a description of the changes and
 potential incompatibilities introduced with this release.  A few of
 the most important issues are listed below, but you should refer
-to pod/perldelta.pod for more detailed information.
+to F<pod/perldelta.pod> for more detailed information.
+
+=head3 Compatibility with earlier versions
 
 B<WARNING:> This version is not binary compatible with earlier versions
 of Perl.  If you have built extensions (i.e. modules that include C code)
@@ -100,14 +103,56 @@ L<"Coexistence with earlier versions of perl 5"> for more details.
 
 The standard extensions supplied with Perl will be handled automatically.
 
-On a related issue, old modules may possibly be affected by the changes
-in the Perl language in the current release.  Please see
-pod/perldelta.pod for a description of what's changed.  See your
-installed copy of the perllocal.pod file for a (possibly incomplete)
-list of locally installed modules.  Also see the L<CPAN> module's
+On a related issue, old modules may possibly be affected by the changes in the
+Perl language in the current release.  We try hard to make new features
+"opt-in", such that existing code will work unchanged, and attempt to identify
+where bug fixes might expose code which was relying on incorrect interpreter
+behaviour.  Please see F<pod/perldelta.pod> for a description of what's
+changed between this and the previous release.  If you are upgrading from an
+earlier release, please also check the perldeltas describing changes for the
+intermediate releases, to get a full picture of what changes might affect your
+installation.
+
+See your installed copy of the perllocal.pod file for a (possibly
+incomplete) list of locally installed modules. Also see the L<CPAN> module's
 C<autobundle> function for one way to make a "bundle" of your currently
 installed modules.
 
+=head3 C99
+
+With 5.36 we changed our C compiler baseline requirement from "ANSI C89" to
+"C89 plus some specific C99 features".  We have been using C99 features
+optionally for some time - we now additionally B<rely> on a few in the core C
+code and installed headers, which we know work on all supported compilers on
+all platforms we target.  Because earlier versions of Perl still compile with
+strictly ANSI C89 compilers and there are still a few installations in the
+wild which use these very old compilers, XS code that targets earlier versions
+of Perl must not B<rely> on C99 features - that includes XS code in this
+distribution that is dual life on CPAN.  To test that XS code can build on
+such compilers, some authors configure their perl builds with compiler flags
+to warn or raise errors on C99 specific features, most often for mixed
+declarations and code.  This obviously will not work if you attempt it for
+this release - it will not build.  However, XS authors should be aware that
+this means
+
+=over 4
+
+=item *
+
+If you change the C compiler flags in your F<Makefile.PL> or similar to add
+such warnings or errors, you must now only do it for 5.35.4 or earlier.
+
+=item *
+
+Do not rely on now being able to use C99 features in your XS code, even for
+platforms with C99 compilers - some installations of earlier versions of perl
+are deliberately configured to enforce C89 standards so that locally authored
+extension code conforms to them.  If you choose to require C99 for your code,
+that's fine, but do so knowing that if you distribute it, some installations
+of perl are configured to fault C99.
+
+=back
+
 =head1 Run Configure
 
 Configure will figure out various things about your system.  Some
@@ -132,7 +177,31 @@ Configure supports a number of useful options.  Run
 
        Configure -h
 
-to get a listing.  See the Porting/Glossary file for a complete list of
+to get a listing.
+
+Many Configure switches are expressed as C<key=value> pairs, for example:
+
+    -Dcc=clang
+
+Sometimes the value to be supplied for a switch is a string which contains
+spaces.  In that case, the value needs to be quoted so as to delimit that
+"shell word" from any following switch.  Example:
+
+    sh ./Configure -des \
+        -Doptimize="-O2 -pipe -fstack-protector -fno-strict-aliasing" \
+        -Dusedevel
+
+Once Configure has run, you will be able to access configuration data via
+entries in the file F<config.sh>.
+
+    config_arg0='./Configure'
+    config_args='-des -Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing -Dusedevel'
+    config_argc=3
+    config_arg1='-des'
+    config_arg2='-Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing'
+    config_arg3='-Dusedevel'
+
+See the F<Porting/Glossary> file for a complete list of
 Configure variables you can set and their definitions.
 
 =over 4
@@ -150,32 +219,32 @@ compiler) so that the hints files can set appropriate defaults.
 =item Installation prefix
 
 By default, for most systems, perl will be installed in
-/usr/local/{bin, lib, man}.  (See L<"Installation Directories">
+F</usr/local/>{F<bin>, F<lib>, F<man>}.  (See L<"Installation Directories">
 and L<"Coexistence with earlier versions of perl 5"> below for
 further details.)
 
 You can specify a different 'prefix' for the default installation
 directory when Configure prompts you, or by using the Configure command
-line option -Dprefix='/some/directory', e.g.
+line option C<-Dprefix='/some/directory'>, e.g.
 
        sh Configure -Dprefix=/opt/perl
 
 If your prefix contains the string "perl", then the suggested
 directory structure is simplified.  For example, if you use
-prefix=/opt/perl, then Configure will suggest /opt/perl/lib instead of
-/opt/perl/lib/perl5/.  Again, see L<"Installation Directories"> below
-for more details.  Do not include a trailing slash, (i.e. /opt/perl/)
+C<prefix=/opt/perl>, then Configure will suggest F</opt/perl/lib> instead of
+F</opt/perl/lib/perl5/>.  Again, see L<"Installation Directories"> below
+for more details.  Do not include a trailing slash, (i.e. F</opt/perl/>)
 or you may experience odd test failures.
 
 NOTE:  You must not specify an installation directory that is the same
 as or below your perl source directory.  If you do, installperl will
 attempt infinite recursion.
 
-=item /usr/bin/perl
+=item F</usr/bin/perl>
 
 It may seem obvious, but Perl is useful only when users can easily
-find it.  It's often a good idea to have both /usr/bin/perl and
-/usr/local/bin/perl be symlinks to the actual binary.  Be especially
+find it.  It's often a good idea to have both F</usr/bin/perl> and
+F</usr/local/bin/perl> be symlinks to the actual binary.  Be especially
 careful, however, not to overwrite a version of perl supplied by your
 vendor unless you are sure you know what you are doing.  If you insist
 on replacing your vendor's perl, useful information on how it was
@@ -187,7 +256,7 @@ configured may be found with
 spaces in arguments to Configure.  For that, you have to look carefully
 at config_arg1, config_arg2, etc.)
 
-By default, Configure will not try to link /usr/bin/perl to the current
+By default, Configure will not try to link F</usr/bin/perl> to the current
 version of perl.  You can turn on that behavior by running
 
        Configure -Dinstallusrbinperl
@@ -351,6 +420,38 @@ the compiler dependency, you may need to also add "-Dcc=...".
 At C level the type is called C<__float128> (note, not "long double"),
 but Perl source knows it as NV.  (This is not "long doubles".)
 
+=head3 Taint Support
+
+Traditional perl has provided a security mechanism based on marking
+input data as untrusted unless it has been validated by a regex. This
+mechanism is called tainting and is enabled with the -T or -t options on
+the command line. This support has a performance cost on all code
+executed. It is possible to disable this support by providing the
+setting C<-Accflags=-DNO_TAINT_SUPPORT> or the setting
+C<-Accflags=-DSILENT_NO_TAINT_SUPPORT> to Configure.
+
+The former option C<NO_TAINT_SUPPORT> is more secure and disables taint
+support while making the use of the C<-T> or C<-t> options which
+normally enable taint support into an untrappable exception to ensure
+that no-one uses them while expecting taint checks to run. With this
+build mode there can be no confusion if a script supports taint or not.
+
+The latter option, C<SILENT_NO_TAINT_SUPPORT> is less secure but more
+flexible in that it silently disables taint support while ignoring the
+C<-T> and C<-t> command line options entirely. In this build mode it is
+possible to run a script with the C<-T> or C<-t> option and expect taint
+support but not get it, so this mode is only recommended to people who
+really know what they are doing.
+
+Both modes improve performance although the amount depends on your
+workload. It is not unreasonable to expect a 5%-10% improvement in
+performance by using one of these options. At this time this build mode
+is supported but not recommended, and if you chose to use such a perl
+you do so at your own risk. It is possible that there may be
+interoperability issues with CPAN distributions as many distributions
+are unaware of this build mode and will expect test scripts to pass or
+to detect unvalidated data when run under the C<-T> or C<-t>.
+
 =head3 Algorithmic Complexity Attacks on Hashes
 
 Perl 5.18 reworked the measures used to secure its hash function
@@ -368,17 +469,16 @@ insecure and are not recommended for production use.>
 
 Since Perl 5.18 we have included support for multiple hash functions,
 although from time to time we change which functions we support,
-and which function is default (currently SBOX+STADTX on 64 bit builds
+and which function is default (currently SBOX+SIPHASH13 on 64 bit builds
 and SBOX+ZAPHOD32 for 32 bit builds). You can choose a different
 algorithm by defining one of the following symbols during configure.
-Note that there security implications of which hash function you choose
+Note that there are security implications regarding which hash function you choose
 to use. The functions are listed roughly by how secure they are believed
 to be, with the one believed to be most secure at release time being PERL_HASH_FUNC_SIPHASH.
 
     PERL_HASH_FUNC_SIPHASH
     PERL_HASH_FUNC_SIPHASH13
     PERL_HASH_FUNC_ZAPHOD32
-    PERL_HASH_FUNC_STADTX
 
 In addition, these, (or custom hash functions), may be "fronted" by the
 SBOX32 hash function for keys under a chosen size. This hash function is
@@ -388,42 +488,60 @@ and which has rather expensive setup costs (relatively speaking), both in
 terms of performance and more importantly in terms of memory. SBOX32
 requires 1k of storage per character it can hash, and it must populate that
 storage with 256 32-bit random values as well. In practice the RNG we use
-for seeding the SBOX32 storage is very efficient and populating the table
+for seeding the SBOX32 storage is very efficient, and populating the table
 required for hashing even fairly long keys is negligible as we only do it
-during startup. By default we build with SBOX32 enabled, but you change that
-by setting
+during startup. By default we build with SBOX32 enabled, but you can change
+that by setting the C<PERL_HASH_USE_SBOX32_ALSO> in the Configure process,
+with something like this
 
-   PERL_HASH_USE_SBOX32_ALSO
+   -Accflags='-DPERL_HASH_USE_SBOX32_ALSO=0'
 
-to zero in configure. By default Perl will use SBOX32 to hash strings 24 bytes
-or shorter, you can change this length by setting
+or alternatively you can use the simple define C<PERL_HASH_NO_SBOX32> like this:
 
-    SBOX32_MAX_LEN
+    -Accflags='-DPERL_HASH_NO_SBOX32'
 
-to the desired length, with the maximum length being 256.
+By default Perl will use SBOX32 to hash strings 24 bytes
+or shorter, you can change this length by setting C<SBOX32_MAX_LEN>
+to the desired length, with the maximum length being 256. For example with
+this:
+
+    -Accflags='-DSBOX_MAX_LEN=128'
 
 As of Perl 5.18 the order returned by keys(), values(), and each() is
 non-deterministic and distinct per hash, and the insert order for
 colliding keys is randomized as well, and perl allows for controlling this
 by the PERL_PERTURB_KEYS environment setting. You can disable this behavior
-entirely with the define
+entirely with the define C<PERL_PERTURB_KEYS_DISABLED> with
 
-    PERL_PERTURB_KEYS_DISABLED
+    -Accflags='-DPERL_PERTURB_KEYS_DISABLED'
 
 You can disable the environment variable checks and compile time specify
-the type of key traversal randomization to be used by defining one of these:
+the type of key traversal randomization to be used by defining either
+C<PERL_PERTURB_KEYS_RANDOM> or C<PERL_PERTURB_KEYS_DETERMINISTIC> with
+
+    -Accflags='-DPERL_PERTURB_KEYS_RANDOM'
 
-    PERL_PERTURB_KEYS_RANDOM
-    PERL_PERTURB_KEYS_DETERMINISTIC
+or
+
+    -Accflags='-DPERL_PERTURB_KEYS_DETERMINISTIC'
 
 Since Perl 5.18 the seed used for the hash function is randomly selected
 at process start, which can be overridden by specifying a seed by setting
-the PERL_HASH_SEED environment variable.
+the PERL_HASH_SEED environment variable. Be aware that
+PERL_PERTURB_KEYS_DETERMINISTIC and the equivalent environment variable
+setting will produce the same results if and only if the code does not
+put non-deterministic data into a hash, and the code is executed in exactly
+the same context in terms of the environment. If the code populates a hash
+with random data, or builds a hash using the address of its items, or
+if the code is run in a different environment context with a different
+number or selection of environment variables then the result may differ.
+DETERMINISTIC in this context means "if everything else is kept the same
+the same results should be observed".
 
 You can change this behavior so that your perl is built with a hard coded
-seed with the define
+seed with the define C<NO_HASH_SEED> by providing to Configure
 
-    NO_HASH_SEED
+    -Accflags='-DNO_HASH_SEED'
 
 Note that if you do this you should modify the code in hv_func.h to specify
 your own key. In the future this define may be renamed and replaced with one
@@ -444,13 +562,45 @@ See L<perlrun/PERL_HASH_SEED> and L<perlrun/PERL_PERTURB_KEYS> for
 details on the environment variables, and L<perlsec/Algorithmic
 Complexity Attacks> for further security details.
 
-The C<PERL_HASH_SEED> and PERL_PERTURB_KEYS> environment variables can
+The C<PERL_HASH_SEED> and C<PERL_PERTURB_KEYS> environment variables can
 be disabled by building configuring perl with
 C<-Accflags=-DNO_PERL_HASH_ENV>.
 
 The C<PERL_HASH_SEED_DEBUG> environment variable can be disabled by
 configuring perl with C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>.
 
+=head3 MISCELLANEOUS CONFIG
+
+Perl uses various defines to control defaults for its behavior. These
+values are chosen to represent "sane" config, but users can override
+these values in their builds if they wish. This is a list of such
+settings.
+
+=over 2
+
+=item PERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT
+
+This define is used to control the default maximum number of nested
+eval/BEGIN statements, and in this context require should be
+understood to be a special form of eval so this means require/BEGIN
+and "use" statements as well.
+
+Currently each C<BEGIN> block inside of an C<eval EXPR> or C<require>
+operation will use a fairly high number of frames of the perl internal
+C stack, and this value is used to prevent stack overflows. Normally
+it is defaulted to 1000 but the default can be configured to another
+value, for instance 100, like this
+
+  -Accflags='-DPERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT=100'
+
+
+If you don't know what this is then it is safe to ignore it. Do not
+configure this to 0 or another very low value, it will break a lot of
+code. If you want to set it to a low value use the run time variable
+C<${^MAX_NESTED_EVAL_BEGIN_BLOCKS}> instead.
+
+=back
+
 =head3 SOCKS
 
 Perl can be configured to be 'socksified', that is, to use the SOCKS
@@ -458,7 +608,7 @@ TCP/IP proxy protocol library.  SOCKS is used to give applications
 access to transport layer network proxies.  Perl supports only SOCKS
 Version 5.  The corresponding Configure option is -Dusesocks.
 You can find more about SOCKS from wikipedia at
-L<http://en.wikipedia.org/wiki/SOCKS>.
+L<https://en.wikipedia.org/wiki/SOCKS>.
 
 =head3 Dynamic Loading
 
@@ -506,7 +656,7 @@ You can elect to build a shared libperl by
 To build a shared libperl, the environment variable controlling shared
 library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for
 Darwin, LD_LIBRARY_PATH/SHLIB_PATH
-for HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include
+for HP-UX, LIBPATH for AIX and z/OS, PATH for Cygwin) must be set up to include
 the Perl build directory because that's where the shared libperl will
 be created.  Configure arranges makefile to have the correct shared
 library search settings.  You can find the name of the environment
@@ -544,7 +694,7 @@ for example:
 
     18126:./miniperl: /sbin/loader: Fatal Error: cannot map libperl.so
 
-There is also an potential problem with the shared perl library if you
+There is also a potential problem with the shared perl library if you
 want to have more than one "flavor" of the same version of perl (e.g.
 with and without -DDEBUGGING).  For example, suppose you build and
 install a standard Perl 5.10.0 with a shared library.  Then, suppose you
@@ -569,20 +719,11 @@ architecture-dependent library for your -DDEBUGGING version of perl.
 You can do this by changing all the *archlib* variables in config.sh to
 point to your new architecture-dependent library.
 
-=head3 Environment access
-
-Perl often needs to write to the program's environment, such as when
-C<%ENV> is assigned to. Many implementations of the C library function
-C<putenv()> leak memory, so where possible perl will manipulate the
-environment directly to avoid these leaks. The default is now to perform
-direct manipulation whenever perl is running as a stand alone interpreter,
-and to call the safe but potentially leaky C<putenv()> function when the
-perl interpreter is embedded in another application. You can force perl
-to always use C<putenv()> by compiling with
-C<-Accflags="-DPERL_USE_SAFE_PUTENV">, see section L</"Altering Configure
-variables for C compiler switches etc.">.  You can force an embedded perl
-to use direct manipulation by setting C<PL_use_safe_putenv = 0;> after
-the C<perl_construct()> call.
+=head3 External glob
+
+Before File::Glob entered core in 5.6.0 globbing was implemented by shelling
+out. If the environmental variable PERL_EXTERNAL_GLOB is defined and if the
+F<csh> shell is available, perl will still do this the old way.
 
 =head2 Installation Directories
 
@@ -609,7 +750,7 @@ The directories set up by Configure fall into three broad categories.
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.29.4.
+By default, Configure will use the following directories for 5.39.8.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -752,7 +893,7 @@ separated list of directories, like this
 
        sh Configure -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"'
 
-The directories defined by APPLLIB_EXP get added to @INC I<first>,
+The directories defined by APPLLIB_EXP get added to @INC B<first>,
 ahead of any others, and so provide a way to override the standard perl
 modules should you, for example, want to distribute fixes without
 touching the perl distribution proper.  And, like otherlib dirs,
@@ -764,7 +905,7 @@ run-time methods: $PERLLIB, $PERL5LIB, -I, use lib, etc.
 =item default_inc_excludes_dot
 
 Since version 5.26.0, default perl builds no longer includes C<'.'> as the
-last element of @INC. The old behaviour can restored using 
+last element of @INC. The old behaviour can restored using
 
        sh Configure -Udefault_inc_excludes_dot
 
@@ -1019,7 +1160,7 @@ Removes -g from optimize, and -DDEBUGGING from ccflags.
 =back
 
 If you are using a shared libperl, see the warnings about multiple
-versions of perl under L<Building a shared Perl library>.
+versions of perl under L</Building a shared Perl library>.
 
 Note that a perl built with -DDEBUGGING will be much bigger and will run
 much, much more slowly than a standard perl.
@@ -1040,7 +1181,7 @@ simple D script that uses them:
 =head2 Extensions
 
 Perl ships with a number of standard extensions.  These are contained
-in the ext/ subdirectory.
+in the F<ext/> subdirectory.
 
 By default, Configure will offer to build every extension which appears
 to be supported.  For example, Configure will offer to build GDBM_File
@@ -1184,6 +1325,13 @@ options.  Try
 
 for a listing.
 
+Unrecognized arguments with a double dash prefix produce an error.
+
+Any other arguments are passed through to C<Configure>, so you could
+build a threaded perl with:
+
+        CC=gcc ./configure.gnu -Dusethreads
+
 (The file is called configure.gnu to avoid problems on systems
 that would not distinguish the files "Configure" and "configure".)
 
@@ -1415,7 +1563,7 @@ including a glossary of all those config.sh variables, is in the Porting
 subdirectory.  Porting/Glossary should especially come in handy.
 
 Ports for other systems may also be available.  You should check out
-http://www.cpan.org/ports for current information on ports to
+L<https://www.cpan.org/ports> for current information on ports to
 various other operating systems.
 
 If you plan to port Perl to a new architecture, study carefully the
@@ -1539,10 +1687,11 @@ retesting with the various PERL variables unset.
 =item LD_LIBRARY_PATH
 
 If you run into dynamic loading problems, check your setting of
-the LD_LIBRARY_PATH environment variable.  If you're creating a static
-Perl library (libperl.a rather than libperl.so) it should build
-fine with LD_LIBRARY_PATH unset, though that may depend on details
-of your local setup.
+the LD_LIBRARY_PATH environment variable (or on some systems the equivalent
+with a different name, see L</Building a shared Perl library>).  If you're
+creating a static Perl library (libperl.a rather than libperl.so) it should
+build fine with LD_LIBRARY_PATH unset, though that may depend on details of
+your local setup.
 
 =item nm extraction
 
@@ -1659,7 +1808,7 @@ If you still have missing routines or undefined symbols, you probably
 need to add some library or other, make a symbolic link like described
 above, or you need to undefine some feature that Configure thought was
 there but is defective or incomplete.  If you used a hint file, see if
-it has any relevant advice.  You can also look through through config.h
+it has any relevant advice.  You can also look through config.h
 for likely suspects.
 
 =item toke.c
@@ -1806,8 +1955,8 @@ to avoid the BIND.
 
 Perl can be cross-compiled.  It is just not trivial, cross-compilation
 rarely is.  Perl is routinely cross-compiled for several platforms: as of
-January 2014, these include Android, Blackberry 10, PocketPC aka
-WinCE, ARM Linux, and Solaris.  Previous versions of
+June 2019, these include Android, Blackberry 10,
+ARM Linux, and Solaris.  Previous versions of
 Perl also provided support for Open Zaurus, Symbian, and
 the IBM OS/400, but it's unknown if those ports are still functional.
 These platforms are known as the B<target> platforms, while the systems
@@ -1826,10 +1975,6 @@ the particular platforms:
 
 =over 4
 
-=item WinCE/PocketPC
-
-L<README.ce or perlce|perlce>
-
 =item Android
 
 L<"Cross-compilation" in README.android or
@@ -1854,11 +1999,11 @@ Packaging and transferring either the core Perl modules or CPAN
 modules to the target platform is also left up to the each
 cross-compilation environment.  Often the cross-compilation target
 platforms are somewhat limited in diskspace: see the section
-L<Minimizing the Perl installation> to learn more of the minimal set
+L</Minimizing the Perl installation> to learn more of the minimal set
 of files required for a functional Perl installation.
 
 For some cross-compilation environments the Configure option
-C<-Dinstallprefix=...> might be handy, see L<Changing the installation
+C<-Dinstallprefix=...> might be handy, see L</Changing the installation
 directory>.
 
 About the cross-compilation support of Configure: There's two forms.
@@ -1866,7 +2011,7 @@ The more common one requires some way of transferring and running
 executables in the target system, such as an ssh connection; this is the
 C<./Configure -Dusecrosscompile -Dtargethost=...> route.  The second
 method doesn't need access to the target system, but requires you to
-provide a config.sh, and and a canned Makefile; the rest of this section
+provide a config.sh, and a canned Makefile; the rest of this section
 describes the former.
 
 This cross-compilation setup of Configure has successfully been used in
@@ -2388,30 +2533,28 @@ settings"> above.
 
 =head1 Reporting Problems
 
-Wherever possible please use the perlbug tool supplied with this Perl
-to report problems, as it automatically includes summary configuration
-information about your perl, which may help us track down problems far
-more quickly. But first you should read the advice in this file,
-carefully re-read the error message and check the relevant manual pages
-on your system, as these may help you find an immediate solution.
-Once you've exhausted the documentation, please report bugs to us using
-the 'perlbug' tool.
-
-The perlbug tool is installed along with perl, so after you have
-completed C<make install> it should be possible to run it with plain
-C<perlbug>.  If the install fails, or you want to report problems with
-C<make test> without installing perl, then you can use C<make nok> to
-run perlbug to report the problem, or run it by hand from this source
-directory with C<./perl -Ilib utils/perlbug>
-
-If the build fails too early to run perlbug uninstalled, then please
-B<run> the C<./myconfig> shell script, and mail its output along with
-an accurate description of your problem to perlbug@perl.org
+Please report problems to the GitHub issue tracker at
+https://github.com/Perl/perl5/issues, which will ask for the
+appropriate summary configuration information about your perl, which
+may help us track down problems far more quickly.  But first you should
+read the advice in this file, carefully re-read the error message and
+check the relevant manual pages on your system, as these may help you
+find an immediate solution.  Once you've exhausted the documentation,
+please report bugs to us using the GitHub tracker.
+
+The summary configuration information can be printed with C<perl -V>.
+If the install fails, or you want to report problems with C<make test>
+without installing perl, then you can run it by hand from this source
+directory with C<./perl -V>.
+
+If the build fails too early to run perl, then please
+B<run> the C<./myconfig> shell script, and include its output along
+with an accurate description of your problem.
 
 If Configure itself fails, and does not generate a config.sh file
-(needed to run C<./myconfig>), then please mail perlbug@perl.org the
+(needed to run C<./myconfig>), then please open an issue with the
 description of how Configure fails along with details of your system
--- for example the output from running C<uname -a>
+-- for example the output from running C<uname -a>.
 
 Please try to make your message brief but clear.  Brief, clear bug
 reports tend to get answered more quickly.  Please don't worry if your
@@ -2424,27 +2567,24 @@ config.sh or a complete Configure or make log) unless absolutely
 necessary.  Do not include a complete transcript of your build
 session.  Just include the failing commands, the relevant error
 messages, and whatever preceding commands are necessary to give the
-appropriate context.  Plain text should usually be sufficient -- fancy
-attachments or encodings may actually reduce the number of people who
-read your message.  Your message will get relayed to over 400
-subscribers around the world so please try to keep it brief but clear.
+appropriate context.
 
 If the bug you are reporting has security implications which make it
-inappropriate to send to a publicly archived mailing list, then see
+inappropriate to send to a public issue tracker, then see
 L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
 for details of how to report the issue.
 
 If you are unsure what makes a good bug report please read "How to
 report Bugs Effectively" by Simon Tatham:
-http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
+L<https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.29.4 is not binary compatible with earlier versions of Perl.
+Perl 5.39.8 is not binary compatible with earlier versions of Perl.
 In other words, you will have to recompile your XS modules.
 
-In general, you can usually safely upgrade from one version of Perl
-(e.g.  5.X.Y) to another similar minor version (e.g. 5.X.(Y+1))) without
+In general, you can usually safely upgrade from one stable version of Perl
+(e.g. 5.30.0) to another similar minor version (e.g. 5.30.1) without
 re-compiling all of your extensions.  You can also safely leave the old
 version around in case the new version causes you problems for some
 reason.
@@ -2515,9 +2655,9 @@ won't interfere with another version.  (The defaults guarantee this for
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-       sh Configure -Dprefix=/opt/perl5.29.4
+       sh Configure -Dprefix=/opt/perl5.39.8
 
-and adding /opt/perl5.29.4/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.39.8/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2530,13 +2670,13 @@ seriously consider using a separate directory, since development
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
-=head2 Upgrading from 5.28.0 or earlier
+=head2 Upgrading from 5.39.6 or earlier
 
-B<Perl 5.29.4 may not be binary compatible with Perl 5.28.0 or
+B<Perl 5.39.8 may not be binary compatible with Perl 5.39.6 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.29.4.  If you find you do need to rebuild an extension with
-5.29.4, you may safely do so without disturbing the older
+used with 5.39.8.  If you find you do need to rebuild an extension with
+5.39.8, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2569,15 +2709,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.29.4 is as follows (under $Config{prefix}):
+in Linux with perl-5.39.8 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.29.4/strict.pm
-  ./lib/perl5/5.29.4/warnings.pm
-  ./lib/perl5/5.29.4/i686-linux/File/Glob.pm
-  ./lib/perl5/5.29.4/feature.pm
-  ./lib/perl5/5.29.4/XSLoader.pm
-  ./lib/perl5/5.29.4/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.39.8/strict.pm
+  ./lib/perl5/5.39.8/warnings.pm
+  ./lib/perl5/5.39.8/i686-linux/File/Glob.pm
+  ./lib/perl5/5.39.8/feature.pm
+  ./lib/perl5/5.39.8/XSLoader.pm
+  ./lib/perl5/5.39.8/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591
 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
@@ -2690,15 +2830,20 @@ by perl itself; for source compatibility reasons, though, they weren't
 completely removed.
 
 =head2 C<-DNO_PERL_INTERNAL_RAND_SEED>
-X<PERL_INTERNAL_RAND_SEED>
 
 If you configure perl with C<-Accflags=-DNO_PERL_INTERNAL_RAND_SEED>,
 perl will ignore the C<PERL_INTERNAL_RAND_SEED> environment variable.
 
+=head2 C<-DNO_PERL_RAND_SEED>
+X<PERL_RAND_SEED>
+
+If you configure perl with C<-Accflags=-DNO_PERL_RAND_SEED>,
+perl will ignore the C<PERL_RAND_SEED> environment variable.
+
 =head1 DOCUMENTATION
 
 Read the manual entries before running perl.  The main documentation
-is in the pod/ subdirectory and should have been installed during the
+is in the F<pod/> subdirectory and should have been installed during the
 build process.  Type B<man perl> to get started.  Alternatively, you
 can type B<perldoc perl> to use the supplied perldoc script.  This is
 sometimes useful for finding things in the library modules.