This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
added patch for overloading constants, made PERL_OBJECT-aware
[perl5.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 7a4faec..053798a 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Install - Build and Installation guide for perl5.
 
 The basic steps to build and install perl5 on a Unix system are:
 
-       rm -f config.sh
+       rm -f config.sh Policy.sh
        sh Configure
        make
        make test
@@ -70,10 +70,10 @@ pod/perldelta.pod for a description of what's changed.
 
 =head1 Space Requirements
 
-The complete perl5 source tree takes up about 7 MB of disk space.  The
-complete tree after completing make takes roughly 15 MB, though the
+The complete perl5 source tree takes up about 10 MB of disk space.  The
+complete tree after completing make takes roughly 20 MB, though the
 actual total is likely to be quite system-dependent.  The installation
-directories need something on the order of 7 MB, though again that
+directories need something on the order of 10 MB, though again that
 value is system-dependent.
 
 =head1 Start with a Fresh Distribution
@@ -81,13 +81,20 @@ value is system-dependent.
 If you have built perl before, you should clean out the build directory
 with the command
 
+       make distclean
+
+or
+
        make realclean
 
-The results of a Configure run are stored in the config.sh file.  If
-you are upgrading from a previous version of perl, or if you change
-systems or compilers or make other significant changes, or if you are
-experiencing difficulties building perl, you should probably not
-re-use your old config.sh.  Simply remove it or rename it, e.g.
+The only difference between the two is that make distclean also removes
+your old config.sh and Policy.sh files.
+
+The results of a Configure run are stored in the config.sh and Policy.sh
+files.  If you are upgrading from a previous version of perl, or if you
+change systems or compilers or make other significant changes, or if
+you are experiencing difficulties building perl, you should probably
+not re-use your old config.sh.  Simply remove it or rename it, e.g.
 
        mv config.sh config.sh.old
 
@@ -108,12 +115,17 @@ pick up a precompiled binary, it might not use the same name.
 In short, if you wish to use your old config.sh, I recommend running
 Configure interactively rather than blindly accepting the defaults.
 
+If your reason to reuse your old config.sh is to save your
+particular installation choices, then you can probably achieve the
+same effect by using the new Policy.sh file.  See the section on
+L<"Site-wide Policy settings"> below.
+
 =head1 Run Configure
 
 Configure will figure out various things about your system.  Some
 things Configure will figure out for itself, other things it will ask
 you about.  To accept the default, just press RETURN.   The default
-is almost always ok.  At any Configure prompt, you can type  &-d
+is almost always okay.  At any Configure prompt, you can type  &-d
 and Configure will use the defaults from then on.
 
 After it runs, Configure will perform variable substitution on all the
@@ -150,6 +162,15 @@ NOTE:  You must not specify an installation directory that is below
 your perl source directory.  If you do, installperl will attempt
 infinite recursion.
 
+It may seem obvious to say, but Perl is useful only when users can
+easily find it.  It's often a good idea to have both /usr/bin/perl and
+/usr/local/bin/perl be symlinks to the actual binary.  Be especially
+careful, however, of overwriting a version of perl supplied by your
+vendor.  In any case, system administrators are strongly encouraged to
+put (symlinks to) perl and its accompanying utilities, such as perldoc,
+into a directory typically found along a user's PATH, or in another
+obvious and convenient place.
+
 By default, Configure will compile perl to use dynamic loading if
 your system supports it.  If you want to force perl to be compiled
 statically, you can either choose this when Configure prompts you or
@@ -167,11 +188,11 @@ For my Solaris system, I usually use
 =head2 GNU-style configure
 
 If you prefer the GNU-style configure command line interface, you can
-use the supplied configure command, e.g.
+use the supplied configure.gnu command, e.g.
 
        CC=gcc ./configure.gnu
 
-The configure script emulates a few of the more common configure
+The configure.gnu script emulates a few of the more common configure
 options.  Try
 
        ./configure.gnu --help
@@ -180,7 +201,7 @@ for a listing.
 
 Cross compiling is not supported.
 
-(The file is called configugre.gnu to avoid problems on systems
+(The file is called configure.gnu to avoid problems on systems
 that would not distinguish the files "Configure" and "configure".)
 
 =head2 Extensions
@@ -236,6 +257,11 @@ Note:  The DB_File module will only work with version 1.x of Berkeley
 DB or newer releases of version 2.  Configure will automatically detect
 this for you and refuse to try to build DB_File with version 2.
 
+If you re-use your old config.sh but change your system (e.g. by
+adding libgdbm) Configure will still offer your old choices of extensions
+for the default answer, but it will also point out the discrepancy to
+you.
+
 Finally, if you have dynamic loading (most modern Unix systems do)
 remember that these extensions do not increase the size of your perl
 executable, nor do they impact start-up time, so you probably might as
@@ -457,7 +483,7 @@ installed on multiple systems.  Here's one way to do that:
     cd /usr/local  # Or wherever you specified as $prefix
     tar xvf perl5-archive.tar
 
-=head2 Site-wide "Policy" settings
+=head2 Site-wide Policy settings
 
 After Configure runs, it stores a number of common site-wide "policy"
 answers (such as installation directories and the local perl contact
@@ -466,6 +492,15 @@ system using the same policy defaults, simply copy the Policy.sh file
 to the new system and Configure will use it along with the appropriate
 hint file for your system.
 
+Alternatively, if you wish to change some or all of those policy
+answers, you should
+
+       rm -f Policy.sh
+
+to ensure that Configure doesn't re-use them.
+
+Further information is in the Policy_sh.SH file itself.
+
 =head2 Configure-time Options
 
 There are several different ways to Configure and build perl for your
@@ -656,6 +691,9 @@ the malloc function on your system.
 The perl source is shipped with a version of malloc that is very fast
 but somewhat wasteful of space.  On the other hand, your system's
 malloc() function may be a bit slower but also a bit more frugal.
+However, note that space efficiency also contributes to speed efficiency,
+so there's a chance that perl's malloc may be more efficient both
+space and speed wise.
 
 For many uses, speed is probably the most important consideration, so
 the default behavior (for most systems) is to use the malloc supplied
@@ -663,8 +701,8 @@ with perl.  However, if you will be running very large applications
 (e.g. Tk or PDL) or if your system already has an excellent malloc, or
 if you are experiencing difficulties with extensions that use
 third-party libraries that call malloc, then you might wish to use
-your system's malloc.  (Or, you might wish to explore the experimental
-malloc flags discussed below.)
+your system's malloc.  (Or, you might wish to explore the malloc flags
+discussed below.)
 
 To build without perl's malloc, you can use the Configure command
 
@@ -674,43 +712,30 @@ or you can answer 'n' at the appropriate interactive Configure prompt.
 
 =head2 Malloc Performance Flags
 
-If you are using Perl's malloc, you may add one or
-more of the following items to your cflags config.sh variable
-to change its behavior in potentially useful ways.  You can find out
-more about these flags by reading the malloc.c source.
-In a future version of perl, these might be enabled by default.
+If you are using Perl's malloc, you may add one or more of the following
+items to your ccflags config.sh variable to change its behavior.  You can
+find out more about these and other flags by reading the commentary near
+the top of the malloc.c source.
 
 =over 4
 
-=item -DPERL_EMERGENCY_SBRK
-
-If PERL_EMERGENCY_SBRK is defined, running out of memory need not be a
-fatal error: a memory pool can allocated by assigning to the special
-variable $^M.  See perlvar(1) for more details.
-
-=item -DPACK_MALLOC
+=item -DNO_FANCY_MALLOC
 
-If PACK_MALLOC is defined, malloc.c uses a slightly different
-algorithm for small allocations (up to 64 bytes long).  Such small
-allocations are quite common in typical Perl scripts.
+Undefined by default.  Defining it returns malloc to the state it was at
+in Perl version 5.004.
 
-The expected memory savings (with 8-byte alignment in $alignbytes) is
-about 20% for typical Perl usage.  The expected slowdown due to the
-additional malloc overhead is in fractions of a percent.  (It is hard
-to measure because of the effect of the saved memory on speed).
+If left undefined, it enables -DBUCKETS_ROOT2, -DIGNORE_SMALL_BAD_FREE,
+and -DSMALL_BUCKET_VIA_VTABLE.  See the commentary in malloc.c for more
+details.
 
-=item -DTWO_POT_OPTIMIZE
+=item -DPLAIN_MALLOC
 
-If TWO_POT_OPTIMIZE is defined, malloc.c uses a slightly different
-algorithm for large allocations that are close to a power of two
-(starting with 16K).  Such allocations are typical for big hashes and
-special-purpose scripts, especially image processing.  If you will be
-manipulating very large blocks with sizes close to powers of two, it
-might be wise to define this macro.
+Undefined by default.  Defining it in addition to NO_FANCY_MALLOC returns
+malloc to the state it was at in Perl version 5.000.
 
-The expected saving of memory is 0-100% (100% in applications which
-require most memory in such 2**n chunks).  The expected slowdown is
-negligible.
+If left undefined, it enables -DPERL_EMERGENCY_SBRK, -DPACK_MALLOC,
+-DTWO_POT_OPTIMIZE, and -DDEBUGGING_MSTATS.  See the commentary in
+malloc.c for more details.
 
 =back
 
@@ -725,7 +750,7 @@ you probably want to do
 This will do two independent things:  First, it will force compilation
 to use cc -g so that you can use your system's debugger on the
 executable.  (Note:  Your system may actually require something like
-cc -g2.  Check you man pages for cc(1) and also any hint file for your
+cc -g2.  Check your man pages for cc(1) and also any hint file for your
 system.)  Second, it will add -DDEBUGGING to your ccflags variable in
 config.sh so that you can use B<perl -D> to access perl's internal
 state.  (Note: Configure will only add -DDEBUGGING by
@@ -962,8 +987,8 @@ at Perl startup.
 
 =item malloc duplicates
 
-If you get duplicates upon linking for malloc et al, add -DHIDEMYMALLOC
-or -DEMBEDMYMALLOC to your ccflags variable in config.sh.
+If you get duplicates upon linking for malloc et al, add -DEMBEDMYMALLOC
+to your ccflags variable in config.sh.
 
 =item varargs
 
@@ -1191,6 +1216,8 @@ Note that you can't run the tests in background if this disables
 opening of /dev/tty. You can use 'make test-notty' in that case but
 a few tty tests will be skipped.
 
+=head2 What if make test doesn't work?
+
 If make test bombs out, just cd to the t directory and run ./TEST
 by hand to see if it makes any difference.  If individual tests
 bomb, you can run them by hand, e.g.,
@@ -1208,6 +1235,10 @@ complicated constructs).
 You should also read the individual tests to see if there are any helpful
 comments that apply to your system.
 
+=over 4
+
+=item locale
+
 Note:  One possible reason for errors is that some external programs
 may be broken due to the combination of your environment and the way
 B<make test> exercises them.  For example, this may happen if you have
@@ -1231,6 +1262,29 @@ things like:  exec, `backquoted command`, system, open("|...") or
 open("...|").  All these mean that Perl is trying to run some
 external program.
 
+=item Out of memory
+
+On some systems, particularly those with smaller amounts of RAM, some
+of the tests in t/op/pat.t may fail with an "Out of memory" message.
+Specifically, in perl5.004_64, tests 74 and 78 have been reported to
+fail on some systems.  On my SparcStation IPC with 8 MB of RAM, test 78
+will fail if the system is running any other significant tasks at the
+same time.
+
+Try stopping other jobs on the system and then running the test by itself:
+
+       cd t; ./perl op/pat.t
+
+to see if you have any better luck.  If your perl still fails this
+test, it does not necessarily mean you have a broken perl.  This test
+tries to exercise the regular expression subsystem quite thoroughly,
+and may well be far more demanding than your normal usage.
+
+You may also be able to reduce perl's memory usage by using some of
+the ideas described above in L<"Malloc Performance Flags">.
+
+=back
+
 =head1 make install
 
 This will put perl into the public directory you specified to
@@ -1240,6 +1294,16 @@ pages, however.  You may need to be root to run B<make install>.  If you
 are not root, you must own the directories in question and you should
 ignore any messages about chown not working.
 
+=head2 Installing perl under different names
+
+If you want to install perl under a name other than "perl" (for example,
+when installing perl with special features enabled, such as debugging),
+indicate the alternate name on the "make install" line, such as:
+
+    make install PERLNAME=myperl
+
+=head2 Installed files
+
 If you want to see exactly what will happen without installing
 anything, you can run
 
@@ -1300,7 +1364,7 @@ In general, you can usually safely upgrade from one version of Perl (e.g.
 all of your add-on extensions.  You can also safely leave the old version
 around in case the new version causes you problems for some reason.
 For example, if you want to be sure that your script continues to run
-with 5.004_04, simplly replace the '#!/usr/local/bin/perl' line at the
+with 5.004_04, simply replace the '#!/usr/local/bin/perl' line at the
 top of the script with the particular version you want to run, e.g.
 #!/usr/local/bin/perl5.00404.
 
@@ -1376,7 +1440,7 @@ to be recompiled to be used with 5.004_50 and later.
 
 If you wish to continue using those extensions under 5.004_04, for
 example, then you need to move those extensions from their current
-direcotries, which are something like
+directories, which are something like
 
        /usr/local/lib/perl5/site_perl/
        /usr/local/lib/perl5/site_perl/archname
@@ -1509,4 +1573,4 @@ above.
 
 =head1 LAST MODIFIED
 
-$Id: INSTALL,v 1.31 1998/03/03 18:08:52 doughera Released $
+$Id: INSTALL,v 1.35 1998/05/18 19:06:26 doughera Released $