[PATCH for 5.004_64] Configure patch Config_64-01
[p5sagit/p5-mst-13.2.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index f8931ae..0f2157a 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
@@ -48,12 +48,32 @@ If there is a hint file for your system (in the hints/ directory) you
 should also read that hint file for specific information for your
 system.  (Unixware users should use the svr4.sh hint file.)
 
+=head1 NOTE:  This version is not binary compatible with Perl 5.004.
+
+For Perl 5.004 it was possible to be binary compatible with 5.003.
+Starting from Perl 5.004_50 this is no longer possible because there were
+many deep and far-reaching changes to the language internals.
+
+If you have dynamically loaded extensions that you built under perl
+5.003 or 5.004 and the so-called 'bincompat3' mode (the default mode)
+and that you wish to continue to use with perl 5.005, you may need to
+reinstall the extensions.  If you wish to continue to support both 5.004
+and 5.005 on your system, you will have to move the 5.004 extensions
+over to the 5.004 architecture-dependent library.  See the discussion
+below on L<"Coexistence with earlier versions of perl5.">
+
+The standard extensions supplied with Perl will be handled automatically.
+
+In a related issue, old extensions may possibly be affected by the
+changes in the Perl language in the current release.  Please see
+pod/perldelta.pod for a description of what's changed.
+
 =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
@@ -61,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
 
@@ -88,6 +115,11 @@ 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
@@ -147,34 +179,33 @@ 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
+       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 --help
+       ./configure.gnu --help
 
 for a listing.
 
 Cross compiling is not supported.
 
-For systems that do not distinguish the files "Configure" and
-"configure", Perl includes a copy of configure named
-configure.gnu.
+(The file is called configure.gnu to avoid problems on systems
+that would not distinguish the files "Configure" and "configure".)
 
 =head2 Extensions
 
 By default, Configure will offer to build every extension which appears
 to be supported.  For example, Configure will offer to build GDBM_File
 only if it is able to find the gdbm library.  (See examples below.)
-DynaLoader, Fcntl, and IO are always built by default.  Configure does
-not contain code to test for POSIX compliance, so POSIX is always built
-by default as well.  If you wish to skip POSIX, you can set the
-Configure variable useposix=false either in a hint file or from the
-Configure command line.  Similarly, the Opcode extension is always built
-by default, but you can skip it by setting the Configure variable
+B, DynaLoader, Fcntl, IO, and attrs are always built by default.
+Configure does not contain code to test for POSIX compliance, so POSIX
+is always built by default as well.  If you wish to skip POSIX, you can
+set the Configure variable useposix=false either in a hint file or from
+the Configure command line.  Similarly, the Opcode extension is always
+built by default, but you can skip it by setting the Configure variable
 useopcode=false either in a hint file for from the command line.
 
 You can learn more about each of these extensions by consulting the
@@ -188,6 +219,7 @@ version.  (Configure will suggest this as the default.)
 In summary, here are the Configure command-line variables you can set
 to turn off each extension:
 
+    B                  (Always included by default)
     DB_File            i_db
     DynaLoader         (Must always be included as a static extension)
     Fcntl              (Always included by default)
@@ -199,6 +231,8 @@ to turn off each extension:
     SDBM_File          (Always included by default)
     Opcode             useopcode
     Socket             d_socket
+    Threads            usethreads
+    attrs              (Always included by default)
 
 Thus to skip the NDBM_File extension, you can use
 
@@ -210,10 +244,14 @@ library.
 Of course, you may always run Configure interactively and select only
 the extensions you want.
 
-Note:  The DB_File module will only work with version 1.x of
-Berkeley DB.  Once Berkeley DB version 2 is released, DB_File will be
-upgraded to work with it.  Configure will automatically detect this
-for you and refuse to try to build DB_File with version 2.
+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
@@ -363,17 +401,12 @@ above.
 
 The  directories site_perl and site_perl/archname are empty, but are
 intended to be used for installing local or site-wide extensions.  Perl
-will automatically look in these directories.  Previously, most sites
-just put their local extensions in with the standard distribution.
+will automatically look in these directories.
 
 In order to support using things like #!/usr/local/bin/perl5.004 after
 a later version is released, architecture-dependent libraries are
 stored in a version-specific directory, such as
-/usr/local/lib/perl5/archname/5.004/.  In Perl 5.000 and 5.001, these
-files were just stored in /usr/local/lib/perl5/archname/.  If you will
-not be using 5.001 binaries, you can delete the standard extensions from
-the /usr/local/lib/perl5/archname/ directory.  Locally-added extensions
-can be moved to the site_perl and site_perl/archname directories.
+/usr/local/lib/perl5/archname/5.004/.
 
 Again, these are just the defaults, and can be changed as you run
 Configure.
@@ -415,6 +448,11 @@ Then, you can Configure and install in the usual way:
     make test
     make install
 
+Beware, though, that if you go to try to install new add-on
+extensions, they too will get installed in under '/tmp/perl5' if you
+follow this example.  The next section shows one way of dealing with
+that problem.
+
 =head2 Creating an installable tar archive
 
 If you need to install perl on many identical systems, it is
@@ -436,6 +474,24 @@ 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
+
+After Configure runs, it stores a number of common site-wide "policy"
+answers (such as installation directories and the local perl contact
+person) in the Policy.sh file.  If you want to build perl on another
+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
@@ -443,30 +499,17 @@ system.  For most users, the defaults are sensible and will work.
 Some users, however, may wish to further customize perl.  Here are
 some of the main things you can change.
 
-=head2 Binary Compatibility With Earlier Versions of Perl 5
+=head2 Threads
 
-For Perl 5.004 it was possible to be binary compatible with 5.003.
-Starting from Perl 5.005 this is no more possible because there were
-many deep and far-reaching changes to the language internals.
+On some platforms, perl5.005 can be compiled to use threads.  To
+enable this, read the file README.threads, and then try
 
-If you have dynamically loaded extensions that you built under perl
-5.003 or 5.004 and the so-called 'bincompat3' mode (the default mode)
-and that you wish to continue to use with perl 5.005, you may need to
-reinstall the extensions.
-
-Background: starting with Perl 5.003, all functions in the Perl C
-source code have been protected by default by the prefix Perl_ (or
-perl_) so that you may link with third-party libraries without fear of
-namespace collisions.  This change broke compatibility with version
-5.002, so installing 5.003 or 5.004 over 5.002 or earlier will force
-you to re-build and install all of your dynamically loadable
-extensions.  (The standard extensions supplied with Perl are handled
-automatically).  You can turn off this namespace protection by adding
--DNO_EMBED to your ccflags variable in config.sh.
+       sh Configure -Dusethreads
 
-In a related issue, old extensions may possibly be affected by the
-changes in the Perl language in the current release.  Please see
-pod/perldelta.pod for a description of what's changed.
+Currently, you need to specify -Dusethreads on the Configure command
+line so that the hint files can make appropriate adjustments.
+
+The default is to compile without thread support.
 
 =head2 Selecting File IO mechanisms
 
@@ -638,7 +681,7 @@ 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 is probably a bit slower but also a bit more frugal.
+malloc() function may be a bit slower but also a bit more frugal.
 
 For many uses, speed is probably the most important consideration, so
 the default behavior (for most systems) is to use the malloc supplied
@@ -866,8 +909,8 @@ and then re-run
 
 =item No sh
 
-If you don't have sh, you'll have to copy the sample file config_H to
-config.h and edit the config.h to reflect your system's peculiarities.
+If you don't have sh, you'll have to copy the sample file Porting/config_H
+to config.h and edit the config.h to reflect your system's peculiarities.
 You'll probably also have to extensively modify the extension building
 mechanism.
 
@@ -930,12 +973,23 @@ to test your version of miniperl.
 If you have any locale-related environment variables set, try
 unsetting them.  I have some reports that some versions of IRIX hang
 while running B<./miniperl configpm> with locales other than the C
-locale.  See the discussion under L<make test> below about locales.
+locale.  See the discussion under L<"make test"> below about locales
+and the whole L<Locale problems> section in the file pod/perllocale.pod.
+The latter is especially useful if you see something like this
+
+       perl: warning: Setting locale failed.
+       perl: warning: Please check that your locale settings:
+               LC_ALL = "En_US",
+               LANG = (unset)
+           are supported and installed on your system.
+       perl: warning: Falling back to the standard locale ("C").
+
+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
 
@@ -1163,6 +1217,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.,
@@ -1180,6 +1236,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
@@ -1203,6 +1263,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
@@ -1264,37 +1347,63 @@ program even if the Perl source is no longer available.
 
 =head1 Coexistence with earlier versions of perl5
 
-You can safely install the current version of perl5 and still run scripts
-under the old binaries for versions 5.003 and later ONLY.  Instead of
-starting your script with #!/usr/local/bin/perl, just start it with
-#!/usr/local/bin/perl5.003 (or whatever version you want to run.)
-If you want to retain a version of Perl 5 prior to 5.003, you'll
-need to install the current version in a separate directory tree,
-since some of the architecture-independent library files have changed
-in incompatible ways.
-
-The old architecture-dependent files are stored in a version-specific
-directory (such as /usr/local/lib/perl5/sun4-sunos/5.003) so that they
-will still be accessible even after a later version is installed.
-(Note:  Perl 5.000 and 5.001 did not put their architecture-dependent
-libraries in a version-specific directory.  They are simply in
-/usr/local/lib/perl5/$archname.  If you will not be using 5.000 or
-5.001, you may safely remove those files.)
-
-In general, the standard library files in /usr/local/lib/perl5 should
-be usable by all versions of perl5.  However, the diagnostics.pm module
-uses the /usr/local/lib/perl5/pod/perldiag.pod documentation file, so
-the C<use diagnostics;> pragma and the splain script will only identify
-and explain any warnings or errors that the most recently-installed
-version of perl can generate.
-
-Most extensions will probably not need to be recompiled to use with a newer
-version of perl.  If you do run into problems, and you want to continue
-to use the old version of perl along with your extension, simply move
+WARNING:  The upgrade from 5.004_0x to 5.005 is going to be a bit
+tricky.  See L<"Upgrading from 5.004 to 5.005">  below.
+
+In general, you can usually safely upgrade from one version of Perl (e.g.
+5.004_04) to another similar version (e.g. 5.004_05) without re-compiling
+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, 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.
+
+(If you are upgrading from 5.002 or earlier, beware that some of the
+standard library files have changed in incompatible ways, so you are
+probably better off starting with a fresh installation.)
+
+The standard library files in /usr/local/lib/perl5 should be usable by
+all versions of perl5 after 5.002.  An exception is the diagnostics.pm
+module.  Since that module uses the /usr/local/lib/perl5/pod/perldiag.pod
+documentation file, the C<use diagnostics;> pragma and the splain script
+will only identify and explain any warnings or errors that the most
+recently-installed version of perl can generate.  Usually, this is not
+a problem.
+
+Most extensions will probably not need to be recompiled to use
+with a newer version of perl.   Here is how it is supposed to work.
+(These examples assume you accept all the Configure defaults.)
+
+The directories searched by version 5.004_05 will be
+
+       /usr/local/lib/perl5/archname/5.00405
+       /usr/local/lib/perl5/
+       /usr/local/lib/perl5/site_perl/archname
+       /usr/local/lib/perl5/site_perl
+
+while the directories searched by version 5.004_04 are
+
+       /usr/local/lib/perl5/archname/5.00404
+       /usr/local/lib/perl5/
+       /usr/local/lib/perl5/site_perl/archname
+       /usr/local/lib/perl5/site_perl
+
+When you install an add-on extension, it gets installed into
+/usr/local/lib/perl5/site_perl/archname (if it is architecture-specific.)
+This directory is deliberately NOT version-specific so that both 5.004_04
+and 5.004_05 can use the extension.
+
+However, if you do run into problems, and you want to continue to
+use the old version of perl along with your extension, simply move
 those extension files to the appropriate version directory, such as
-/usr/local/lib/perl/archname/5.003.  Then Perl 5.003 will find your
-files in the 5.003 directory, and newer versions of perl will find your
-newer extension in the site_perl directory.
+/usr/local/lib/perl5/archname/5.00404.  Then use your newer version of
+perl to rebuild and re-install the extension into site_perl.  This way,
+Perl 5.004_04 will find your files in the 5.00404 directory, and
+newer versions of perl will find your newer extension in the site_perl
+directory.
+
+=head2 Maintaining completely separate versions
 
 Many users prefer to keep all versions of perl in completely
 separate directories.  One convenient way to do this is by
@@ -1306,11 +1415,36 @@ and adding /opt/perl5.004/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
+Others might share a common directory for maintenance sub-versions
+(e.g. 5.004 for all 5.004_0x versions), but change directory with
+each major version.
+
 If you are installing a development subversion, you probably ought to
 seriously consider using a separate directory, since development
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
+=head2 Upgrading from 5.004 to 5.005
+
+Extensions compiled with versions of perl prior to 5.004_50 will need
+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
+directories, which are something like
+
+       /usr/local/lib/perl5/site_perl/
+       /usr/local/lib/perl5/site_perl/archname
+
+to the version-specific directory such as
+
+       /usr/local/lib/perl5/archname/5.00404
+
+as described above.
+
+Once you have moved the 5.00404 versions of the extensions out of the
+way, you may recompile and reinstall with 5.005.
+
 =head1 Coexistence with perl4
 
 You can safely install perl5 even if you want to keep perl4 around.
@@ -1430,4 +1564,4 @@ above.
 
 =head1 LAST MODIFIED
 
-$Id: INSTALL,v 1.28 1997/10/10 16:50:59 doughera Released $
+$Id: INSTALL,v 1.34 1998/04/23 18:19:41 doughera Released $