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