This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: Proposed addition to File::Copy: move
[perl5.git] / INSTALL
CommitLineData
8e07c86e
AD
1=head1 NAME
2
3Install - Build and Installation guide for perl5.
4
5=head1 SYNOPSIS
6
7f678428 7The basic steps to build and install perl5 on a Unix system are:
8e07c86e
AD
8
9 rm -f config.sh
10 sh Configure
11 make
12 make test
13 make install
36477c24 14 # possibly add these:
15 (cd /usr/include && h2ph *.h sys/*.h)
16 cd pod; make html && mv *.html <www home dir> && cd ..
17 cd pod; make tex && <process the latex files> && cd ..
18
8e07c86e
AD
19
20Each of these is explained in further detail below.
21
7f678428 22For information on non-Unix systems, see the section on
23L<"Porting Information">, below.
24
c3edaffb 25=head1 DESCRIPTION
26
edb1cbcb 27You should probably at least skim through this entire document before
28proceeding. Special notes specific to this release are identified
29by B<NOTE>.
30
c3edaffb 31This document is written in pod format as an easy way to indicate its
32structure. The pod format is described in pod/perlpod.pod, but you can
33read it as is with any pager or editor.
34
eed2e782 35If you're building Perl on a non-Unix system, you should also read
36the README file specific to your operating system, since this may
37provide additional or different instructions for building Perl.
38
c3edaffb 39=head1 Space Requirements.
eed2e782 40
c3edaffb 41The complete perl5 source tree takes up about 7 MB of disk space.
42The complete tree after completing C<make> takes roughly
4315 MB, though the actual total is likely to be quite
44system-dependent. The installation directories need something
45on the order of 7 MB, though again that value is system-dependent.
8e07c86e
AD
46
47=head1 Start with a Fresh Distribution.
48
edb1cbcb 49If you have built perl before, you should clean out the build directory
50with the command
51
52 make realclean
c3edaffb 53
8e07c86e
AD
54The results of a Configure run are stored in the config.sh file. If
55you are upgrading from a previous version of perl, or if you change
56systems or compilers or make other significant changes, or if you are
57experiencing difficulties building perl, you should probably I<not>
58re-use your old config.sh. Simply remove it or rename it, e.g.
59
60 mv config.sh config.sh.old
4633a7c4 61
e57fd563 62If you wish to use your old config.sh, be especially attentive to the
63version and architecture-specific questions and answers. For example,
64the default directory for architecture-dependent library modules
65includes the version name. By default, Configure will reuse your old
66name (e.g. /opt/perl/lib/i86pc-solaris/5.003) even if you're running
67Configure for a different version, e.g. 5.004. Yes, Configure should
68probably check and correct for this, but it doesn't, presently.
69Similarly, if you used a shared libperl.so (see below) with version
70numbers, you will probably want to adjust them as well.
71
72Also, be careful to check your architecture name. Some Linux systems
73call themselves i486, while others use i586. If you pick up a
74precompiled binary, it might not use the same name.
75
76In short, if you wish to use your old config.sh, I recommend running
77Configure interactively rather than blindly accepting the defaults.
8e07c86e
AD
78
79=head1 Run Configure.
80
81Configure will figure out various things about your system. Some
82things Configure will figure out for itself, other things it will ask
83you about. To accept the default, just press C<RETURN>. The default
84is almost always ok.
85
86After it runs, Configure will perform variable substitution on all the
87F<*.SH> files and offer to run B<make depend>.
88
89Configure supports a number of useful options. Run B<Configure -h>
90to get a listing. To compile with gcc, for example, you can run
91
92 sh Configure -Dcc=gcc
93
94This is the preferred way to specify gcc (or another alternative
95compiler) so that the hints files can set appropriate defaults.
96
4633a7c4
LW
97If you want to use your old config.sh but override some of the items
98with command line options, you need to use B<Configure -O>.
99
8e07c86e
AD
100If you are willing to accept all the defaults, and you want terse
101output, you can run
102
103 sh Configure -des
104
105By default, for most systems, perl will be installed in
106/usr/local/{bin, lib, man}. You can specify a different 'prefix' for
107the default installation directory, when Configure prompts you or by
108using the Configure command line option -Dprefix='/some/directory',
109e.g.
110
25f94b33 111 sh Configure -Dprefix=/opt/perl
4633a7c4
LW
112
113If your prefix contains the string "perl", then the directories
114are simplified. For example, if you use prefix=/opt/perl,
115then Configure will suggest /opt/perl/lib instead of
116/usr/local/lib/perl5/.
8e07c86e
AD
117
118By default, Configure will compile perl to use dynamic loading, if
119your system supports it. If you want to force perl to be compiled
56c6f531
JH
120statically, you can either choose this when Configure prompts you or
121you can use the Configure command line option -Uusedl.
8e07c86e 122
24b3df7f 123=head2 Extensions
124
edb1cbcb 125By default, Configure will offer to build every extension which appears
126to be supported. For example, Configure will offer to build GDBM_File
127only if it is able to find the gdbm library. (See examples below.)
56c6f531 128DynaLoader, Fcntl, FileHandle and IO are always built by default.
edb1cbcb 129Configure does not contain code to test for POSIX compliance, so POSIX
130is always built by default as well. If you wish to skip POSIX, you can
131set the Configure variable useposix=false either in a hint file or from
c3edaffb 132the Configure command line. Similarly, the Opcode extension is always
edb1cbcb 133built by default, but you can skip it by setting the Configure variable
c3edaffb 134useopcode=false either in a hint file for from the command line.
24b3df7f 135
56c6f531
JH
136Even if you do not have dynamic loading, you must still build the
137DynaLoader extension; you should just build the stub dl_none.xs
138version. (Configure will suggest this as the default.)
139
24b3df7f 140In summary, here are the Configure command-line variables you can set
141to turn off each extension:
142
143 DB_File i_db
56c6f531 144 DynaLoader (Must always be included as a static extension)
24b3df7f 145 Fcntl (Always included by default)
edb1cbcb 146 FileHandle (Always included by default)
24b3df7f 147 GDBM_File i_gdbm
9d67150a 148 IO (Always included by default)
24b3df7f 149 NDBM_File i_ndbm
150 ODBM_File i_dbm
151 POSIX useposix
152 SDBM_File (Always included by default)
c3edaffb 153 Opcode useopcode
24b3df7f 154 Socket d_socket
155
156Thus to skip the NDBM_File extension, you can use
157
158 sh Configure -Ui_ndbm
159
160Again, this is taken care of automatically if you don't have the ndbm
161library.
162
163Of course, you may always run Configure interactively and select only
164the Extensions you want.
165
166Finally, if you have dynamic loading (most modern Unix systems do)
167remember that these extensions do not increase the size of your perl
168executable, nor do they impact start-up time, so you probably might as
169well build all the ones that will work on your system.
170
8e07c86e
AD
171=head2 GNU-style configure
172
173If you prefer the GNU-style B<configure> command line interface, you can
174use the supplied B<configure> command, e.g.
175
176 CC=gcc ./configure
177
178The B<configure> script emulates several of the more common configure
179options. Try
180
181 ./configure --help
182
183for a listing.
184
185Cross compiling is currently not supported.
186
187=head2 Including locally-installed libraries
188
4633a7c4
LW
189Perl5 comes with interfaces to number of database extensions, including
190dbm, ndbm, gdbm, and Berkeley db. For each extension, if
191Configure can find the appropriate header files and libraries, it will
192automatically include that extension. The gdbm and db libraries
193are B<not> included with perl. See the library documentation for
194how to obtain the libraries.
8e07c86e
AD
195
196I<Note:> If your database header (.h) files are not in a
197directory normally searched by your C compiler, then you will need to
198include the appropriate B<-I/your/directory> option when prompted by
199Configure. If your database library (.a) files are not in a directory
200normally searched by your C compiler and linker, then you will need to
201include the appropriate B<-L/your/directory> option when prompted by
202Configure. See the examples below.
203
204=head2 Examples
205
206=over 4
207
208=item gdbm in /usr/local.
209
210Suppose you have gdbm and want Configure to find it and build the
211GDBM_File extension. This examples assumes you have F<gdbm.h>
212installed in F</usr/local/include/gdbm.h> and F<libgdbm.a> installed in
213F</usr/local/lib/libgdbm.a>. Configure should figure all the
214necessary steps out automatically.
215
216Specifically, when Configure prompts you for flags for
217your C compiler, you should include C<-I/usr/local/include>.
218
219When Configure prompts you for linker flags, you should include
220C<-L/usr/local/lib>.
221
222If you are using dynamic loading, then when Configure prompts you for
223linker flags for dynamic loading, you should again include
224C<-L/usr/local/lib>.
225
226Again, this should all happen automatically. If you want to accept the
227defaults for all the questions and have Configure print out only terse
228messages, then you can just run
229
230 sh Configure -des
231
232and Configure should include the GDBM_File extension automatically.
233
234This should actually work if you have gdbm installed in any of
235(/usr/local, /opt/local, /usr/gnu, /opt/gnu, /usr/GNU, or /opt/GNU).
236
237=item gdbm in /usr/you
238
239Suppose you have gdbm installed in some place other than /usr/local/,
240but you still want Configure to find it. To be specific, assume you
241have F</usr/you/include/gdbm.h> and F</usr/you/lib/libgdbm.a>. You
242still have to add B<-I/usr/you/include> to cc flags, but you have to take
243an extra step to help Configure find F<libgdbm.a>. Specifically, when
244Configure prompts you for library directories, you have to add
245F</usr/you/lib> to the list.
246
247It is possible to specify this from the command line too (all on one
248line):
249
250 sh Configure -des \
251 -Dlocincpth="/usr/you/include" \
252 -Dloclibpth="/usr/you/lib"
253
254C<locincpth> is a space-separated list of include directories to search.
255Configure will automatically add the appropriate B<-I> directives.
256
257C<loclibpth> is a space-separated list of library directories to search.
258Configure will automatically add the appropriate B<-L> directives. If
259you have some libraries under F</usr/local/> and others under
260F</usr/you>, then you have to include both, namely
261
262 sh Configure -des \
263 -Dlocincpth="/usr/you/include /usr/local/include" \
264 -Dloclibpth="/usr/you/lib /usr/local/lib"
265
266=back
267
4633a7c4
LW
268=head2 Installation Directories.
269
270The installation directories can all be changed by answering the
271appropriate questions in Configure. For convenience, all the
272installation questions are near the beginning of Configure.
273
274By default, Configure uses the following directories for
275library files (archname is a string like sun4-sunos, determined
276by Configure)
277
278 /usr/local/lib/perl5/archname/5.002
279 /usr/local/lib/perl5/
24b3df7f 280 /usr/local/lib/perl5/site_perl/archname
281 /usr/local/lib/perl5/site_perl
4633a7c4
LW
282
283and the following directories for manual pages:
284
285 /usr/local/man/man1
286 /usr/local/lib/perl5/man/man3
287
288(Actually, Configure recognizes the SVR3-style
289/usr/local/man/l_man/man1 directories, if present, and uses those
290instead.) The module man pages are stuck in that strange spot so that
291they don't collide with other man pages stored in /usr/local/man/man3,
292and so that Perl's man pages don't hide system man pages. On some
293systems, B<man less> would end up calling up Perl's less.pm module man
294page, rather than the B<less> program.
295
296If you specify a prefix that contains the string "perl", then the
297directory structure is simplified. For example, if you Configure
298with -Dprefix=/opt/perl, then the defaults are
299
300 /opt/perl/lib/archname/5.002
301 /opt/perl/lib
302 /opt/perl/lib/site_perl/archname
303 /opt/perl/lib/site_perl
304
305 /opt/perl/man/man1
306 /opt/perl/man/man3
307
308The perl executable will search the libraries in the order given
309above.
310
311The directories site_perl and site_perl/archname are empty, but are
312intended to be used for installing local or site-wide extensions. Perl
313will automatically look in these directories. Previously, most sites
314just put their local extensions in with the standard distribution.
315
316In order to support using things like #!/usr/local/bin/perl5.002 after
317a later version is released, architecture-dependent libraries are
318stored in a version-specific directory, such as
319/usr/local/lib/perl5/archname/5.002/. In 5.000 and 5.001, these files
320were just stored in /usr/local/lib/perl5/archname/. If you will not be
321using 5.001 binaries, you can delete the standard extensions from the
322/usr/local/lib/perl5/archname/ directory. Locally-added extensions can
323be moved to the site_perl and site_perl/archname directories.
324
325Again, these are just the defaults, and can be changed as you run
326Configure.
327
8e07c86e
AD
328=head2 Changing the installation directory
329
330Configure distinguishes between the directory in which perl (and its
331associated files) should be installed and the directory in which it
332will eventually reside. For most sites, these two are the same; for
333sites that use AFS, this distinction is handled automatically.
334However, sites that use software such as B<depot> to manage software
335packages may also wish to install perl into a different directory and
336use that management software to move perl to its final destination.
337This section describes how to do this. Someday, Configure may support
338an option C<-Dinstallprefix=/foo> to simplify this.
339
340Suppose you want to install perl under the F</tmp/perl5> directory.
341You can edit F<config.sh> and change all the install* variables to
342point to F</tmp/perl5> instead of F</usr/local/wherever>. You could
343also set them all from the Configure command line. Or, you can
344automate this process by placing the following lines in a file
345F<config.over> B<before> you run Configure (replace /tmp/perl5 by a
346directory of your choice):
347
348 installprefix=/tmp/perl5
349 test -d $installprefix || mkdir $installprefix
350 test -d $installprefix/bin || mkdir $installprefix/bin
351 installarchlib=`echo $installarchlib | sed "s!$prefix!$installprefix!"`
352 installbin=`echo $installbin | sed "s!$prefix!$installprefix!"`
353 installman1dir=`echo $installman1dir | sed "s!$prefix!$installprefix!"`
354 installman3dir=`echo $installman3dir | sed "s!$prefix!$installprefix!"`
355 installprivlib=`echo $installprivlib | sed "s!$prefix!$installprefix!"`
356 installscript=`echo $installscript | sed "s!$prefix!$installprefix!"`
357 installsitelib=`echo $installsitelib | sed "s!$prefix!$installprefix!"`
4633a7c4 358 installsitearch=`echo $installsitearch | sed "s!$prefix!$installprefix!"`
8e07c86e
AD
359
360Then, you can Configure and install in the usual way:
361
25f94b33 362 sh Configure -des
8e07c86e
AD
363 make
364 make test
365 make install
366
367=head2 Creating an installable tar archive
368
369If you need to install perl on many identical systems, it is
370convenient to compile it once and create an archive that can be
371installed on multiple systems. Here's one way to do that:
372
373 # Set up config.over to install perl into a different directory,
374 # e.g. /tmp/perl5 (see previous part).
25f94b33 375 sh Configure -des
8e07c86e
AD
376 make
377 make test
378 make install
379 cd /tmp/perl5
380 tar cvf ../perl5-archive.tar .
381 # Then, on each machine where you want to install perl,
382 cd /usr/local # Or wherever you specified as $prefix
383 tar xvf perl5-archive.tar
384
9d67150a 385=head2 Building a shared libperl.so Perl library.
c3edaffb 386
387Currently, for most systems, the main perl executable is built by
388linking the "perl library" libperl.a with perlmain.o, your static
389extensions (usually just DynaLoader.a) and various extra libraries,
390such as -lm.
391
9d67150a 392On some systems that support dynamic loading, it may be possible to
393replace libperl.a with a shared libperl.so. If you anticipate building
c3edaffb 394several different perl binaries (e.g. by embedding libperl into
395different programs, or by using the optional compiler extension), then
9d67150a 396you might wish to build a shared libperl.so so that all your binaries
c3edaffb 397can share the same library.
398
399The disadvantages are that there may be a significant performance
9d67150a 400penalty associated with the shared libperl.so, and that the overall
c3edaffb 401meachanism is still rather fragile with respect to different versions
402and upgrades.
403
404In terms of performance, on my test system (Solaris 2.5_x86) the perl
9d67150a 405test suite took roughly 15% longer to run with the shared libperl.so.
c3edaffb 406Your system and typical applications may well give quite different
407results.
408
409The default name for the shared library is typically something like
9d67150a 410libperl.so.3.2 (for perl5.003_02) or libperl.so.302 or simply
411libperl.so. Configure tries to guess a sensible naming convention
c3edaffb 412based on your C library name. Since the library gets installed in a
413version-specific architecture-dependent directory, the exact name
414isn't very important anyway, as long as your linker is happy.
415
416For some systems (mostly SVR4), building a shared libperl is required
417for dynamic loading to work, and hence is already the default.
418
419You can elect to build a shared libperl by
420
421 sh Configure -Duseshrplib
422
423To actually build perl, you must add the current working directory to your
424LD_LIBRARY_PATH environtment variable before running make. You can do
425this with
426
427 LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
428
429for Bourne-style shells, or
430
431 setenv LD_LIBRARY_PATH `pwd`
432
433for Csh-style shells. You *MUST* do this before running make.
434Folks running NeXT OPENSTEP must substitute DYLD_LIBRARY_PATH for
435LD_LIBRARY_PATH above.
436
9d67150a 437There is also an potential problem with the shared perl library if you
438want to have more than one "flavor" of the same version of perl (e.g.
439with and without -DDEBUGGING). For example, suppose you build and
440install a standard perl5.004 with a shared library. Then, suppose you
441try to build perl5.004 with -DDEBUGGING enabled, but everything else
442the same, including all the installation directories. How can you
443ensure that your newly built perl will link with your newly built
7f678428 444libperl.so.4 rather with the installed libperl.so.4? The answer is
9d67150a 445that you might not be able to. The installation directory is encoded
56c6f531
JH
446in the perl binary with the LD_RUN_PATH environment variable (or
447equivalent ld command-line option). On Solaris, you can override that
448with LD_LIBRARY_PATH; on Linux you can't.
9d67150a 449
450The only reliable answer is that you should specify a different
451directory for the architecture-dependent library for your -DDEBUGGING
452version of perl. You can do this with by changing all the *archlib*
453variables in config.sh, namely archlib, archlib_exp, and
454installarchlib, to point to your new architecture-dependent library.
455
c3edaffb 456=head2 Selecting File IO mechanisms
457
9d67150a 458Previous versions of perl used the standard IO mechanisms as defined in
c3edaffb 459<stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
460mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
461the default and is the only supported mechanism.
462
463This PerlIO abstraction can be enabled either on the Configure command
464line with
465
466 sh Configure -Duseperlio
467
468or interactively at the appropriate Configure prompt.
469
470If you choose to use the PerlIO abstraction layer, there are two
471(experimental) possibilities for the underlying IO calls. These have been
472tested to some extent on some platforms, but are not guaranteed to work
473everywhere.
474
475=over 4
476
477=item 1.
478
479AT&T's "sfio". This has superior performance to <stdio.h> in many
480cases, and is extensible by the use of "disipline" modules. Sfio
481currently only builds on a subset of the UNIX platforms perl supports.
482Because the data structures are completely different from stdio, perl
483extension modules or external libraries may not work. This
484configuration exists to allow these issues to be worked on.
485
486This option requires the 'sfio' package to have been built and installed.
487A (fairly old) version of sfio is in CPAN, and work is in progress to make
488it more easily buildable by adding Configure support.
489
490You select this option by
491
492 sh Configure -Duseperlio -Dusesfio
493
494If you have already selected -Duseperlio, and if Configure detects
495that you have sfio, then sfio will be the default suggested by
496Configure.
497
498=item 2.
499
500Normal stdio IO, but with all IO going through calls to the PerlIO
501abstraction layer. This configuration can be used to check that perl and
502extension modules have been correctly converted to use the PerlIO
503abstraction.
504
56c6f531 505This configuration should work on all platforms (but might not).
c3edaffb 506
507You select this option via :
508
509 sh Configure -Duseperlio -Uusesfio
510
511If you have already selected -Duseperlio, and if Configure does not
512detect sfio, then this will be the default suggested by Configure.
513
514=back
515
8e07c86e
AD
516=head2 What if it doesn't work?
517
518=over 4
519
25f94b33
AD
520=item Running Configure Interactively
521
522If Configure runs into trouble, remember that you can always run
523Configure interactively so that you can check (and correct) its
524guesses.
525
526All the installation questions have been moved to the top, so you don't
527have to wait for them. Once you've handled them (and your C compiler &
c3edaffb 528flags) you can type C<&-d> at the next Configure prompt and Configure
25f94b33
AD
529will use the defaults from then on.
530
531If you find yourself trying obscure command line incantations and
532config.over tricks, I recommend you run Configure interactively
533instead. You'll probably save yourself time in the long run.
534
8e07c86e
AD
535=item Hint files.
536
537The perl distribution includes a number of system-specific hints files
538in the hints/ directory. If one of them matches your system, Configure
539will offer to use that hint file.
540
541Several of the hint files contain additional important information.
542If you have any problems, it is a good idea to read the relevant hint
543file for further information. See F<hints/solaris_2.sh> for an
544extensive example.
545
edb1cbcb 546=item *** WHOA THERE!!! ***
547
548Occasionally, Configure makes a wrong guess. For example, on SunOS
5494.1.3, Configure incorrectly concludes that tzname[] is in the
550standard C library. The hint file is set up to correct for this. You
551will see a message:
552
553 *** WHOA THERE!!! ***
554 The recommended value for $d_tzname on this machine was "undef"!
555 Keep the recommended value? [y]
556
557You should always keep the recommended value unless, after reading the
558relevant section of the hint file, you are sure you want to try
559overriding it.
560
561If you are re-using an old config.sh, the word "previous" will be
562used instead of "recommended". Again, you will almost always want
563to keep the previous value, unless you have changed something on your
564system.
565
566For example, suppose you have added libgdbm.a to your system
567and you decide to reconfigure perl to use GDBM_File. When you run
568Configure again, you will need to add -lgdbm to the list of libraries.
569Now, Configure will find your gdbm library and will issue a message:
570
571 *** WHOA THERE!!! ***
572 The previous value for $i_gdbm on this machine was "undef"!
573 Keep the previous value? [y]
574
575In this case, you do I<not> want to keep the previous value, so you
c3edaffb 576should answer 'n'. (You'll also have to manually add GDBM_File to
edb1cbcb 577the list of dynamic extensions to build.)
578
8e07c86e
AD
579=item Changing Compilers
580
581If you change compilers or make other significant changes, you should
582probably I<not> re-use your old config.sh. Simply remove it or
583rename it, e.g. mv config.sh config.sh.old. Then rerun Configure
584with the options you want to use.
585
586This is a common source of problems. If you change from B<cc> to
587B<gcc>, you should almost always remove your old config.sh.
588
c3edaffb 589=item Propagating your changes to config.sh
8e07c86e 590
56c6f531 591If you make any changes to F<config.sh>, you should propagate
9d67150a 592them to all the .SH files by running B<sh Configure -S>. You will
593then have to rebuild by running
594
595 make depend
596 make
8e07c86e
AD
597
598=item config.over
599
600You can also supply a shell script config.over to over-ride Configure's
601guesses. It will get loaded up at the very end, just before config.sh
602is created. You have to be careful with this, however, as Configure
d52d4e46 603does no checking that your changes make sense. See the section on
7f678428 604L<"Changing the installation directory"> for an example.
8e07c86e
AD
605
606=item config.h
607
608Many of the system dependencies are contained in F<config.h>.
609F<Configure> builds F<config.h> by running the F<config_h.SH> script.
610The values for the variables are taken from F<config.sh>.
611
612If there are any problems, you can edit F<config.h> directly. Beware,
613though, that the next time you run B<Configure>, your changes will be
614lost.
615
616=item cflags
617
618If you have any additional changes to make to the C compiler command
619line, they can be made in F<cflags.SH>. For instance, to turn off the
620optimizer on F<toke.c>, find the line in the switch structure for
621F<toke.c> and put the command C<optimize='-g'> before the C<;;>. You
622can also edit F<cflags> directly, but beware that your changes will be
623lost the next time you run B<Configure>.
624
625To change the C flags for all the files, edit F<config.sh>
626and change either C<$ccflags> or C<$optimize>,
25f94b33 627and then re-run B<sh Configure -S ; make depend>.
8e07c86e
AD
628
629=item No sh.
630
631If you don't have sh, you'll have to copy the sample file config_H to
632config.h and edit the config.h to reflect your system's peculiarities.
633You'll probably also have to extensively modify the extension building
634mechanism.
635
c3edaffb 636=item Porting information
637
638Specific information for the OS/2, Plan9, and VMS ports are in the
639corresponing subdirectories. Additional information, including
640a glossary of all those config.sh variables, is in the Porting
641subdirectory.
642
7f678428 643Ports for other systems may also be available. You should check out
644L<"http:/www.perl.com/CPAN/ports"> for current information on ports to
645various other operating systems.
646
8e07c86e
AD
647=back
648
ff68c719 649=head1 Binary Compatibility With 5.003
650
651Perl 5.003 turned on the EMBED feature by default, which tries to
652avoid possible symbol name conflict by prefixing all global symbols
653with "Perl_". However, its list of global symbols was incomplete.
654This error has been rectified in Perl 5.004.
655
656However, some sites may need to maintain complete binary compatibility
657with Perl 5.003. If you are building Perl for such a site, then after
658B<Configure> you should run these two commands:
659
660 perl old_embed.pl
661 sh old_perl_exp.SH
662
663These commands will make your new Perl as binary-compatible with
664version 5.003 as possible.
665
8e07c86e
AD
666=head1 make depend
667
668This will look for all the includes.
669The output is stored in F<makefile>. The only difference between
670F<Makefile> and F<makefile> is the dependencies at the bottom of
671F<makefile>. If you have to make any changes, you should edit
672F<makefile>, not F<Makefile> since the Unix B<make> command reads
c3edaffb 673F<makefile> first. (On non-Unix systems, the output may be stored in
674a different file. Check the value of $firstmakefile in your config.sh
675if in doubt.)
8e07c86e
AD
676
677Configure will offer to do this step for you, so it isn't listed
678explicitly above.
679
680=head1 make
681
682This will attempt to make perl in the current directory.
683
684If you can't compile successfully, try some of the following ideas.
7f678428 685If none of them help, and careful reading of the error message and
686the relevant manual pages on your system doesn't help, you can
687send a message to either the comp.lang.perl.misc newsgroup or to
688perlbug@perl.com with an accurate description of your problem.
689Please include the I<output> of the B<./myconfig> shell script
690that comes with the distribution.
691
692[The B<perlbug> program that comes with the perl distribution is
693useful for sending in such reports, but you need to have
694perl compiled and installed before you can use it.]
8e07c86e
AD
695
696=over 4
697
698=item *
699
700If you used a hint file, try reading the comments in the hint file
701for further tips and information.
702
703=item *
704
c3edaffb 705If you can successfully build F<miniperl>, but the process crashes
706during the building of extensions, you should run
707
708 make minitest
709
710to test your version of miniperl.
711
e57fd563 712=item locale
713
714If you have any locale-related environment variables set, try
715unsetting them. I have some reports that some versions of IRIX hang
716while running B<./miniperl configpm> with locales other than the C
717locale. See the discussion under L<make test> below about locales.
718
c3edaffb 719=item *
720
721If you get duplicates upon linking for malloc et al, say -DHIDEMYMALLOC.
722
7f678428 723=item varargs
c3edaffb 724
725If you get varargs problems with gcc, be sure that gcc is installed
726correctly. When using gcc, you should probably have i_stdarg='define'
727and i_varargs='undef' in config.sh. The problem is usually solved by
728running fixincludes correctly. If you do change config.sh, don't
7f678428 729forget to propagate your changes (see
730L<"Propagating your changes to config.sh"> below).
731See also the L<"vsprintf"> item below.
c3edaffb 732
733=item *
734
735If you get error messages such as the following (the exact line
736numbers will vary in different versions of perl):
737
738 util.c: In function `Perl_croak':
739 util.c:962: number of arguments doesn't match prototype
740 proto.h:45: prototype declaration
741
742it might well be a symptom of the gcc "varargs problem". See the
7f678428 743previous L<"varargs"> item.
c3edaffb 744
9d67150a 745=item Solaris and SunOS dynamic loading
c3edaffb 746
747If you have problems with dynamic loading using gcc on SunOS or
748Solaris, and you are using GNU as and GNU ld, you may need to add
749B<-B/bin/> (for SunOS) or B<-B/usr/ccs/bin/> (for Solaris) to your
750$ccflags, $ldflags, and $lddlflags so that the system's versions of as
751and ld are used. Alternatively, you can use the GCC_EXEC_PREFIX
752environment variable to ensure that Sun's as and ld are used. Consult
753your gcc documentation for further information on the B<-B> option and
754the GCC_EXEC_PREFIX variable.
755
9d67150a 756=item ld.so.1: ./perl: fatal: relocation error:
757
758If you get this message on SunOS or Solaris, and you're using gcc,
7f678428 759it's probably the GNU as or GNU ld problem in the previous item
760L<"Solaris and SunOS dynamic loading">.
9d67150a 761
c3edaffb 762=item *
763
764If you run into dynamic loading problems, check your setting of
765the LD_LIBRARY_PATH environment variable. Perl should build
766fine with LD_LIBRARY_PATH unset, though that may depend on details
767of your local set-up.
768
769=item dlopen: stub interception failed
770
771The primary cause of the 'dlopen: stub interception failed' message is
772that the LD_LIBRARY_PATH environment variable includes a directory
773which is a symlink to /usr/lib (such as /lib).
774
775The reason this causes a problem is quite subtle. The file libdl.so.1.0
776actually *only* contains functions which generate 'stub interception
777failed' errors! The runtime linker intercepts links to
778"/usr/lib/libdl.so.1.0" and links in internal implementation of those
779functions instead. [Thanks to Tim Bunce for this explanation.]
780
781=item *
782
783If Configure seems to be having trouble finding library functions,
784try not using nm extraction. You can do this from the command line
785with
786
787 sh Configure -Uusenm
788
789or by answering the nm extraction question interactively.
790If you have previously run Configure, you should I<not> reuse your old
791config.sh.
792
7f678428 793=item vsprintf
c3edaffb 794
795If you run into problems with vsprintf in compiling util.c, the
796problem is probably that Configure failed to detect your system's
797version of vsprintf(). Check whether your system has vprintf().
798(Virtually all modern Unix systems do.) Then, check the variable
799d_vprintf in config.sh. If your system has vprintf, it should be:
800
801 d_vprintf='define'
802
803If Configure guessed wrong, it is likely that Configure guessed wrong
804on a number of other common functions too. You are probably better off
805re-running Configure without using nm extraction (see previous item).
806
807=item *
808
9d67150a 809If you can't compile successfully, try turning off your compiler's
810optimizier. Edit config.sh and change the line
811
812 optimize='-O'
813
814to something like
815
816 optimize=' '
817
818then propagate your changes with B<sh Configure -S> and rebuild
819with B<make depend; make>.
820
821=item *
822
56c6f531
JH
823If you still can't compile successfully, try adding a C<-DCRIPPLED_CC>
824flag. (Just because you get no errors doesn't mean it compiled right!)
825This simplifies some complicated expressions for compilers that get
826indigestion easily.
9d67150a 827
828=item Missing functions
829
830If you have missing routines, you probably need to add some library or
831other, or you need to undefine some feature that Configure thought was
832there but is defective or incomplete. Look through config.h for
833likely suspects.
8e07c86e
AD
834
835=item *
836
837Some compilers will not compile or optimize the larger files without
838some extra switches to use larger jump offsets or allocate larger
839internal tables. You can customize the switches for each file in
840F<cflags>. It's okay to insert rules for specific files into
841F<makefile> since a default rule only takes effect in the absence of a
842specific rule.
843
7f678428 844=item Missing dbmclose
8e07c86e 845
c3edaffb 846SCO prior to 3.2.4 may be missing dbmclose(). An upgrade to 3.2.4
847that includes libdbm.nfs (which includes dbmclose()) may be available.
8e07c86e 848
7f678428 849=item Warning (will try anyway): No library found for -lposix
850
851If you see such a message during the building of an extension, but
852the extension passes its tests anyway (see L<"make test"> below),
853then don't worry about the warning message. The extension
854Makefile.PL goes looking for various libraries needed on various
855systems; few systems will need all the possible libries listed.
856For example, a system may have -lcposix or -lposix, but it's
857unlikely to have both, so most users will see warnings for the one
858they don't have. The message 'will try anyway' is intended to
859reassure you that the process is continuing.
860
861On the other hand, if you are building GDBM_File and you get the
862message
863
864 Warning (will try anyway): No library found for -lgdbm
865
866then it's likely you're going to run into trouble somewhere along
867the line, since it's hard to see how you can use the GDBM_File
868extension without the -lgdbm library.
869
870It is true that, in principle, Configure could have figured all of
871this out, but Configure and the extension building process are not
872quite that tightly coordinated.
873
8e07c86e
AD
874=item *
875
876Some additional things that have been reported for either perl4 or perl5:
877
878Genix may need to use libc rather than libc_s, or #undef VARARGS.
879
880NCR Tower 32 (OS 2.01.01) may need -W2,-Sl,2000 and #undef MKDIR.
881
882UTS may need one or more of B<-DCRIPPLED_CC>, B<-K> or B<-g>, and undef LSTAT.
883
884If you get syntax errors on '(', try -DCRIPPLED_CC.
885
886Machines with half-implemented dbm routines will need to #undef I_ODBM
887
8e07c86e
AD
888=back
889
890=head1 make test
891
892This will run the regression tests on the perl you just made. If it
893doesn't say "All tests successful" then something went wrong. See the
894file F<t/README> in the F<t> subdirectory. Note that you can't run it
c3edaffb 895in background if this disables opening of /dev/tty.
896
897If B<make test> bombs out, just B<cd> to the F<t> directory and run
898B<TEST> by hand to see if it makes any difference. If individual tests
899bomb, you can run them by hand, e.g.,
8e07c86e
AD
900
901 ./perl op/groups.t
902
c3edaffb 903You can also read the individual tests to see if there are any helpful
904comments that apply to your system.
905
edb1cbcb 906B<Note>: one possible reason for errors is that some external programs
c07a80fd 907may be broken due to the combination of your environment and the way
c3edaffb 908C<make test> exercises them. For example, this may happen if you have
909one or more of these environment variables set: C<LC_ALL LC_CTYPE
56c6f531 910LC_COLLATE LANG>. In some versions of UNIX, the non-English locales
e57fd563 911are known to cause programs to exhibit mysterious errors.
912
913If you have any of the above environment variables set, please try
914C<setenv LC_ALL C> (for C shell) or <LC_ALL=C;export LC_ALL> (for
915Bourne or Korn shell) from the command line and then retry C<make
916test>. If the tests then succeed, you may have a broken program that
917is confusing the testing. Please run the troublesome test by hand as
918shown above and see whether you can locate the program. Look for
919things like: C<exec, `backquoted command`, system, open("|...")> or
920C<open("...|")>. All these mean that Perl is trying to run some
921external program.
eed2e782 922
8e07c86e
AD
923=head1 INSTALLING PERL5
924
925=head1 make install
926
927This will put perl into the public directory you specified to
928B<Configure>; by default this is F</usr/local/bin>. It will also try
929to put the man pages in a reasonable place. It will not nroff the man
930page, however. You may need to be root to run B<make install>. If you
931are not root, you must own the directories in question and you should
932ignore any messages about chown not working.
933
c3edaffb 934You may see some harmless error messages and warnings from pod2man.
935You may safely ignore them. (Yes, they should be fixed, but they
936didn't seem important enough to warrant holding up the entire release.)
a5f75d66 937
8e07c86e
AD
938If you want to see exactly what will happen without installing
939anything, you can run
4633a7c4 940
8e07c86e
AD
941 ./perl installperl -n
942 ./perl installman -n
943
944B<make install> will install the following:
945
946 perl,
947 perl5.nnn where nnn is the current release number. This
948 will be a link to perl.
949 suidperl,
950 sperl5.nnn If you requested setuid emulation.
951 a2p awk-to-perl translator
952 cppstdin This is used by perl -P, if your cc -E can't
953 read from stdin.
954 c2ph, pstruct Scripts for handling C structures in header files.
955 s2p sed-to-perl translator
956 find2perl find-to-perl translator
957 h2xs Converts C .h header files to Perl extensions.
24b3df7f 958 perlbug Tool to report bugs in Perl.
8e07c86e
AD
959 perldoc Tool to read perl's pod documentation.
960 pod2html, Converters from perl's pod documentation format
961 pod2latex, and to other useful formats.
962 pod2man
963
964 library files in $privlib and $archlib specified to
965 Configure, usually under /usr/local/lib/perl5/.
966 man pages in the location specified to Configure, usually
967 something like /usr/local/man/man1.
968 module in the location specified to Configure, usually
969 man pages under /usr/local/lib/perl5/man/man3.
970 pod/*.pod in $privlib/pod/.
971
4633a7c4
LW
972Installperl will also create the library directories $siteperl and
973$sitearch listed in config.sh. Usually, these are something like
24b3df7f 974 /usr/local/lib/perl5/site_perl/
975 /usr/local/lib/perl5/site_perl/$archname
4633a7c4
LW
976where $archname is something like sun4-sunos. These directories
977will be used for installing extensions.
978
56c6f531
JH
979Perl's *.h header files and the libperl.a library are also installed
980under $archlib so that any user may later build new extensions, run the
981optional Perl compiler, or embed the perl interpreter into another
982program even if the Perl source is no longer available.
8e07c86e
AD
983
984Most of the documentation in the pod/ directory is also available
985in HTML and LaTeX format. Type
986
987 cd pod; make html; cd ..
988
989to generate the html versions, and
990
991 cd pod; make tex; cd ..
992
993to generate the LaTeX versions.
994
eed2e782 995=head1 cd /usr/include; h2ph *.h sys/*.h
996
997Some of the perl library files need to be able to obtain information from
998the system header files. This command will convert the most commonly used
999header files in F</usr/include> into files that can be easily interpreted
1000by perl. These files will be placed in architectural library directory
1001you specified to B<Configure>; by default this is
1002F</usr/local/lib/perl5/ARCH/VERSION>, where B<ARCH> is your architecture
1003(such as C<sun4-solaris>) and B<VERSION> is the version of perl you are
1004building (for example, C<5.003>).
1005
1006B<NOTE:> Due to differences in the C and perl languages, the conversion of
c3edaffb 1007the header files in not perfect. You may have to hand edit some of the
eed2e782 1008converted files to get them to parse correctly. For example, it breaks
1009spectacularly on type casting and certain structures.
c3edaffb 1010
4633a7c4
LW
1011=head1 Coexistence with earlier versions of perl5.
1012
eed2e782 1013You can safely install the current version of perl5 and still run scripts
56c6f531 1014under the old binaries for versions 5.003 and later ONLY. Instead of
eed2e782 1015starting your script with #!/usr/local/bin/perl, just start it with
56c6f531
JH
1016#!/usr/local/bin/perl5.003 (or whatever version you want to run.)
1017If you want to retain a version of perl5 prior to perl5.003, you'll
eed2e782 1018need to install the current version in a separate directory tree,
1019since some of the architecture-independent library files have changed
1020in incompatible ways.
4633a7c4
LW
1021
1022The architecture-dependent files are stored in a version-specific
1023directory (such as F</usr/local/lib/perl5/sun4-sunos/5.002>) so that
1024they are still accessible. I<Note:> perl5.000 and perl5.001 did not
1025put their architecture-dependent libraries in a version-specific
1026directory. They are simply in F</usr/local/lib/perl5/$archname>. If
1027you will not be using 5.000 or 5.001, you may safely remove those
1028files.
1029
1030The standard library files in F</usr/local/lib/perl5>
c3edaffb 1031should be usable by all versions of perl5.
4633a7c4 1032
d52d4e46 1033Most extensions will probably not need to be recompiled to use with a newer
4633a7c4
LW
1034version of perl. If you do run into problems, and you want to continue
1035to use the old version of perl along with your extension, simply move
1036those extension files to the appropriate version directory, such as
1037F</usr/local/lib/perl/archname/5.002>. Then perl5.002 will find your
1038files in the 5.002 directory, and newer versions of perl will find your
1039newer extension in the site_perl directory.
1040
d52d4e46 1041Some users may prefer to keep all versions of perl in completely
1042separate directories. One convenient way to do this is by
1043using a separate prefix for each version, such as
1044
1045 sh Configure -Dprefix=/opt/perl5.002
1046
1047and adding /opt/perl5.002/bin to the shell PATH variable. Such users
1048may also wish to add a symbolic link /usr/local/bin/perl so that
1049scripts can still start with #!/usr/local/bin/perl.
1050
edb1cbcb 1051B<NOTE>: Starting with 5.002_01, all functions in the perl C source
1052code are protected by default by the prefix Perl_ (or perl_) so that
1053you may link with third-party libraries without fear of namespace
56c6f531
JH
1054collisons. This breaks compatability with
1055version 5.002, so once you install 5.002_01 (or higher) you will
edb1cbcb 1056need to re-build and install all of your dynamically loadable
1057extensions. (The standard extensions supplied with Perl are handled
1058automatically). You can turn off this namespace protection by adding
56c6f531
JH
1059-DNO_EMBED to your ccflags variable in config.sh.
1060
1061In the future, we certainly hope that most extensions won't need to be
1062recompiled for use with a newer version of perl.
edb1cbcb 1063
8e07c86e
AD
1064=head1 Coexistence with perl4
1065
1066You can safely install perl5 even if you want to keep perl4 around.
1067
1068By default, the perl5 libraries go into F</usr/local/lib/perl5/>, so
1069they don't override the perl4 libraries in F</usr/local/lib/perl/>.
1070
1071In your /usr/local/bin directory, you should have a binary named
1072F<perl4.036>. That will not be touched by the perl5 installation
1073process. Most perl4 scripts should run just fine under perl5.
1074However, if you have any scripts that require perl4, you can replace
1075the C<#!> line at the top of them by C<#!/usr/local/bin/perl4.036>
edb1cbcb 1076(or whatever the appropriate pathname is). See pod/perltrap.pod
1077for possible problems running perl4 scripts under perl5.
8e07c86e
AD
1078
1079=head1 DOCUMENTATION
1080
1081Read the manual entries before running perl. The main documentation is
1082in the pod/ subdirectory and should have been installed during the
1083build process. Type B<man perl> to get started. Alternatively, you
1084can type B<perldoc perl> to use the supplied B<perldoc> script. This
1085is sometimes useful for finding things in the library modules.
1086
1087=head1 AUTHOR
1088
1089Andy Dougherty <doughera@lafcol.lafayette.edu>, borrowing I<very> heavily
1090from the original README by Larry Wall.
1091
a5f75d66 1092=head1 LAST MODIFIED
24b3df7f 1093
e57fd563 10949 October 1996