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