Imported from ../bash-2.05a.tar.gz.
[platform/upstream/bash.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index e366406..193f2b8 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-File: bash.info,  Node: Install,  Next: Invoke,         Prev: Built-in,  Up: Top
+Basic Installation
+==================
 
-Installing BASH
-***************
+These are installation instructions for Bash.
 
-To install BASH you simply type `make'.         The BASH `Makefile' tries
-to dynamically figure out what kind of machine and operating system
-you are using. It makes an educated guess based on the information
-it finds.
+The simplest way to compile Bash is:
 
-During the `make' process, a message is displayed describing what
-machine and operating system has been chosen for you.  This
-information is also saved in the file `.machine' so you can look at
-it later.
+  1. `cd' to the directory containing the source code and type
+     `./configure' to configure Bash for your system.  If you're using
+     `csh' on an old version of System V, you might need to type `sh
+     ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
 
-Therefore, for most machines, simply follow this simple checklist
-to install BASH:
+     Running `configure' takes some time.  While running, it prints
+     messages telling which features it is checking for.
 
-  1. Type `make'.  If you want to use GCC to compile bash, type
-     `make CC=gcc CPPNAME='$(CC) -E''.
+  2. Type `make' to compile Bash and build the `bashbug' bug reporting
+     script.
 
-  2. Wait for the compilation to finish.
+  3. Optionally, type `make tests' to run the Bash test suite.
+
+  4. Type `make install' to install `bash' and `bashbug'.  This will
+     also install the manual pages and Info file.
+
+The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package
+(the top directory, the `builtins', `doc', and `support' directories,
+each directory under `lib', and several others).  It also creates a
+`config.h' file containing system-dependent definitions.  Finally, it
+creates a shell script named `config.status' that you can run in the
+future to recreate the current configuration, a file `config.cache'
+that saves the results of its tests to speed up reconfiguring, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').  If at some point `config.cache' contains
+results you don't want to keep, you may remove or edit it.
+
+To find out more about the options and arguments that the `configure'
+script understands, type
+
+     bash-2.04$ ./configure --help
+
+at the Bash prompt in your Bash source directory.
+
+If you need to do unusual things to compile Bash, please try to figure
+out how `configure' could check whether or not to do them, and mail
+diffs or instructions to <bash-maintainers@gnu.org> so they can be
+considered for the next release.
+
+The file `configure.in' is used to create `configure' by a program
+called Autoconf.  You only need `configure.in' if you want to change it
+or regenerate `configure' using a newer version of Autoconf.  If you do
+this, make sure you are using Autoconf version 2.50 or newer.
+
+You can remove the program binaries and object files from the source
+code directory by typing `make clean'.  To also remove the files that
+`configure' created (so you can compile Bash for a different kind of
+computer), type `make distclean'.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+On systems that have the `env' program, you can do it like this:
+
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+The configuration process uses GCC to build Bash if it is available.
+
+Compiling For Multiple Architectures
+====================================
 
-  3. Type `./bash' to see if the compile worked.
-
-  4. Type `make install prefix=/usr/gnu/' (or the appropriate root
-     of your local GNU software installation tree) to copy bash to
-     your binaries directory, assumed to be ${prefix}/bin.  This will
-     also attempt to install the manual pages under ${prefix}/man
-     and the info file under ${prefix}/info.
-
-* Menu:
-
-* Problems::  What to do if BASH doesn't install quite so easily.
-
-* Files::     Files used in the `make' process.
-
-* Porting::   Porting BASH to a new machine.
-
-* Bugs::      What to do if you Discover Bugs in BASH.
-
-File: bash.info,  Node: Problems,  Next: Files,         Prev: Install,  Up: Install
-
-What if it Doesn't Install so Easily?
-=====================================
-
-Sometimes BASH gets confused and will make the wrong assumptions
-about your machine or operating system.         If the displayed
-information (also found in `.machine') is incorrect, you will have
-to edit the file `machines.h' and provide the appropriate
-information so that BASH can be installed correctly.  The complete
-instructions for doing this are located in the `machines.h' file.
-
-However, if BASH says that your machine type is an
-"UNKNOWN_MACHINE", or BASH thought it knew something about your
-machine but was wrong, then reading the next few sections could
-be of use to you (*note Files::., and *note Porting::., for more
-information). 
-
-On the MIPSEB with the BSD universe, you must:
-
-1) Place /bsd43/bin in your PATH before /bin
-2) Use $(CC) -E instead of /lib/cpp to build cpp-Makefile.
-
-On SCO Xenix 386, you must:
-
-1) Use $(CC) -E instead of /lib/cpp to build cpp-Makefile.
-
-On Interactive Unix version 3 or 4, you must:
-
-1) Edit cpp-Makefile to remove either -O or -g from DEBUG_FLAGS
-
-File: bash.info,  Node: Files, Next: Porting,  Prev: Problems,  Up: Install
-
-Files Used in the `make' Process.
-=================================
-
-The following files are used during the installation of BASH, in
-the `make' process:
-
-`Makefile'
-     This is responsible for making the actual `Makefile' that is
-     used to create Bash.  It runs the C preprocessor (usually
-     located in `/lib/cpp') on the file `cpp-Makefile', producing
-     the output file `bash-Makefile'.
-
-`cpp-Makefile'
-     This is a file of C comments and text.  It contains a
-     reasonable number of `ifdefs' which control what files get
-     compiled and which flags are passed to the various C files
-     comprising BASH.  It includes files named `machines.h',
-     `sysdefs.h', and `config.h'.
-
-`machines.h'
-     This file contains the basic compilation parameters for all of
-     the machines to which BASH has been ported.  This file
-     consists of a series of conditional blocks, one per machine
-     type.
-
-     These conditional blocks are depend upon the unique identifier
-     that `cpp' has predefined for this machine.  In some cases,
-     additional information can be passed from `Makefile'.  It is
-     possible to pass information such as whether or not a
-     particular file is available on this system, and so on.
-
-`sysdefs.h'
-     This file is dynamically made at build time by running the shell
-     script `support/mksydefs'.  If there appears to be something wrong
-     in this file, then edit the `mksysdefs' script, and mail the
-     changes that you make to bash-maintainers@prep.ai.mit.edu.
-
-`bash-Makefile'
-     This is the output from the initial stage of `make'.  It is a
-     stripped down version of `cpp-Makefile' which is tailor-made
-     for your machine and operating system.  All subsequent `makes'
-     use this file.
-
-
-File: bash.info,  Node: Porting,  Next: Bugs,  Prev: Files,  Up: Install
-
-What if You Have to Port to a New Machine?
-==========================================
-
-Sometimes you may want to port BASH to a new, previously
-unsupported machine.  To do so you need to create a block in
-`machines.h' which is conditional based on a unique identifier
-present in your version of the C preprocessor.
-
-If you don't know what that symbol is, you might try the following
-simple test:
-
-     echo "main () { }" > foo.c
-     cc -v foo.c
-
-You are looking for `-DMACHINE', where `MACHINE' is an identifier
-for your machine.  If you are very unlucky and your machine's C
-preprocessor doesn't have a unique identifier, you will have to
-define the identifier in Makefile manually.
-
-Let's say you have a machine from Yoyodyne Industries, called the
-YoYo.  It runs a version of BSD, so it is reasonably compatible. 
-However, the `cpp' on this YoYo machine doesn't define any unique
-identifiers.  You should change the `Makefile' line for `CPPFLAGS'
-to:
-
-     CPPFLAGS = -P -DYoYo
-
-Then, in `machines.h', you copy the block for `UNKNOWN_MACHINE',
-and change the conditional to;
-
-     #if defined (YoYo)
-
-Inside of the YoYo block you define `M_MACHINE="YoYo"', and
-`M_OS=Bsd'.  You also modify the existing defines to match your
-machine's software.
-
-If BASH still won't compile, perhaps because of missing code that
-is required for your YoYo machine, you will have to write that code
-and place it within a conditional block based on YoYo.
-
-Most machines aren't that difficult; simply redefining a few of the
-default values is sufficient.  If you do run across a difficult
-machine, please send all fixes and changes to
-bash-maintainers@prep.ai.mit.edu in the form of context diffs:
-
-     diff -c orig-machines.h machines.h >machines.diffs
-
-Please include information about which version of the shell you have.
-
-For those machines which prove more difficult, or if you are not
-sure about where to start, the scripts in the `portbash' directory
-may prove helpful.
-
-File: bash.info,  Node: Bugs,  Prev: Porting,  Up: Install
-
-Reporting Bugs
-==============
-
-If you find a bug in bash, you should report it.  But first you
-should make sure that it really is a bug and that it appears in the
-latest version of BASH that is available.
-
-Once you have ascertained that a bug really exists, you are welcome
-to mail in a bug report.  If you have a fix, please mail that too!
-The program `bashbug' is used to submit bug reports.
-
-Suggestions and "philosophical" bug reports should be mailed to
-bug-bash@ai.mit.edu.  Genuine bug reports should be mailed to the
-same place, or to bash-maintainers@prep.ai.mit.edu.  The `bashbug'
-script sends its messages to bug-bash@prep.ai.mit.edu.
-
-*All* bug reports should include:
-
-   * The version number of BASH.
-
-   * The hardware and operating system used.
-
-   * The compiler used to compile BASH.
-
-   * A description of the bug's behavior.
-
-   * A short script or "recipe" which demonstrates the bug.
-
-The `bashbug' program includes much of this information
-automatically.  Without this information, it is generally not
-possible to successfully debug BASH.  Usually, without this
-information, the bug won't manifest itself! 
-
-Discussion and questions about BASH in general (including
-questions about this documentation) can be sent to
-bash-maintainers@prep.ai.mit.edu. 
+You can compile Bash for more than one kind of computer at the same
+time, by placing the object files for each architecture in their own
+directory.  To do this, you must use a version of `make' that supports
+the `VPATH' variable, such as GNU `make'.  `cd' to the directory where
+you want the object files and executables to go and run the `configure'
+script from the source directory.  You may need to supply the
+`--srcdir=PATH' argument to tell `configure' where the source files
+are.  `configure' automatically checks for the source code in the
+directory that `configure' is in and in `..'.
+
+If you have to use a `make' that does not supports the `VPATH'
+variable, you can compile Bash for one architecture at a time in the
+source code directory.  After you have installed Bash for one
+architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Alternatively, if your system supports symbolic links, you can use the
+`support/mkclone' script to create a build tree which has symbolic
+links back to each file in the source directory.  Here's an example
+that creates a build directory in the current directory from a source
+directory `/usr/gnu/src/bash-2.0':
+
+     bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+
+The `mkclone' script requires Bash, so you must have already built Bash
+for at least one architecture before you can create build directories
+for other architectures.
+
+Installation Names
+==================
+
+By default, `make install' will install into `/usr/local/bin',
+`/usr/local/man', etc.  You can specify an installation prefix other
+than `/usr/local' by giving `configure' the option `--prefix=PATH', or
+by specifying a value for the `DESTDIR' `make' variable when running
+`make install'.
+
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', `make install' will
+use PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' can not figure out
+automatically, but need to determine by the type of host Bash will run
+on.  Usually `configure' can figure that out, but if it prints a
+message saying it can not guess the host type, give it the
+`--host=TYPE' option.  `TYPE' can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+`CPU-COMPANY-SYSTEM' (e.g., `i386-unknown-freebsd4.2').
+
+See the file `support/config.sub' for the possible values of each field.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.  `configure'
+looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: the Bash `configure' looks for a site script, but not all
+`configure' scripts do.
+
+Operation Controls
+==================
+
+`configure' recognizes the following options to control how it operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+     Look for the Bash source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely used, boilerplate
+options.  `configure --help' prints the complete list.
+
+Optional Features
+=================
+
+The Bash `configure' has a number of `--enable-FEATURE' options, where
+FEATURE indicates an optional part of Bash.  There are also several
+`--with-PACKAGE' options, where PACKAGE is something like `bash-malloc'
+or `purify'.  To turn off the default use of a package, use
+`--without-PACKAGE'.  To configure Bash without a feature that is
+enabled by default, use `--disable-FEATURE'.
+
+Here is a complete list of the `--enable-' and `--with-' options that
+the Bash `configure' recognizes.
+
+`--with-afs'
+     Define if you are using the Andrew File System from Transarc.
+
+`--with-bash-malloc'
+     Use the Bash version of `malloc' in `lib/malloc/malloc.c'.  This
+     is not the same `malloc' that appears in GNU libc, but an older
+     version derived from the 4.2 BSD `malloc'.  This `malloc' is very
+     fast, but wastes some space on each allocation.  This option is
+     enabled by default.  The `NOTES' file contains a list of systems
+     for which this should be turned off, and `configure' disables this
+     option automatically for a number of systems.
+
+`--with-curses'
+     Use the curses library instead of the termcap library.  This should
+     be supplied if your system has an inadequate or incomplete termcap
+     database.
+
+`--with-gnu-malloc'
+     A synonym for `--with-bash-malloc'.
+
+`--with-installed-readline[=PREFIX]'
+     Define this to make Bash link with a locally-installed version of
+     Readline rather than the version in `lib/readline'.  This works
+     only with Readline 4.2 and later versions.  If PREFIX is `yes' or
+     not supplied, `configure' uses the values of the make variables
+     `includedir' and `libdir', which are subdirectories of `prefix' by
+     default, to find the installed version of Readline if it is not in
+     the standard system include and library directories.  If PREFIX is
+     `no', Bash links with the version in `lib/readline'.  If PREFIX is
+     set to any other value, `configure' treats it as a directory
+     pathname and looks for the installed version of Readline in
+     subdirectories of that directory (include files in
+     PREFIX/`include' and the library in PREFIX/`lib').
+
+`--with-purify'
+     Define this to use the Purify memory allocation checker from
+     Rational Software.
+
+`--enable-minimal-config'
+     This produces a shell with minimal features, close to the
+     historical Bourne shell.
+
+There are several `--enable-' options that alter how Bash is compiled
+and linked, rather than changing run-time features.
+
+`--enable-largefile'
+     Enable support for large files
+     (http://www.sas.com/standards/large_file/x_open.20Mar96.html) if
+     the operating system requires special compiler options to build
+     programs which can access large files.
+
+`--enable-profiling'
+     This builds a Bash binary that produces profiling information to be
+     processed by `gprof' each time it is executed.
+
+`--enable-static-link'
+     This causes Bash to be linked statically, if `gcc' is being used.
+     This could be used to build a version to use as root's shell.
+
+The `minimal-config' option can be used to disable all of the following
+options, but it is processed first, so individual options may be
+enabled using `enable-FEATURE'.
+
+All of the following options except for `disabled-builtins' and
+`xpg-echo-default' are enabled by default, unless the operating system
+does not provide the necessary support.
+
+`--enable-alias'
+     Allow alias expansion and include the `alias' and `unalias'
+     builtins (*note Aliases::).
+
+`--enable-arith-for-command'
+     Include support for the alternate form of the `for' command that
+     behaves like the C language `for' statement (*note Looping
+     Constructs::).
+
+`--enable-array-variables'
+     Include support for one-dimensional array shell variables (*note
+     Arrays::).
+
+`--enable-bang-history'
+     Include support for `csh'-like history substitution (*note History
+     Interaction::).
+
+`--enable-brace-expansion'
+     Include `csh'-like brace expansion ( `b{a,b}c' ==> `bac bbc' ).
+     See *Note Brace Expansion::, for a complete description.
+
+`--enable-command-timing'
+     Include support for recognizing `time' as a reserved word and for
+     displaying timing statistics for the pipeline following `time'
+     (*note Pipelines::).  This allows pipelines as well as shell
+     builtins and functions to be timed.
+
+`--enable-cond-command'
+     Include support for the `[[' conditional command (*note
+     Conditional Constructs::).
+
+`--enable-directory-stack'
+     Include support for a `csh'-like directory stack and the `pushd',
+     `popd', and `dirs' builtins (*note The Directory Stack::).
+
+`--enable-disabled-builtins'
+     Allow builtin commands to be invoked via `builtin xxx' even after
+     `xxx' has been disabled using `enable -n xxx'.  See *Note Bash
+     Builtins::, for details of the `builtin' and `enable' builtin
+     commands.
+
+`--enable-dparen-arithmetic'
+     Include support for the `((...))' command (*note Conditional
+     Constructs::).
+
+`--enable-extended-glob'
+     Include support for the extended pattern matching features
+     described above under *Note Pattern Matching::.
+
+`--enable-help-builtin'
+     Include the `help' builtin, which displays help on shell builtins
+     and variables (*note Bash Builtins::).
+
+`--enable-history'
+     Include command history and the `fc' and `history' builtin
+     commands (*note Bash History Facilities::).
+
+`--enable-job-control'
+     This enables the job control features (*note Job Control::), if
+     the operating system supports them.
+
+`--enable-net-redirections'
+     This enables the special handling of filenames of the form
+     `/dev/tcp/HOST/PORT' and `/dev/udp/HOST/PORT' when used in
+     redirections (*note Redirections::).
+
+`--enable-process-substitution'
+     This enables process substitution (*note Process Substitution::) if
+     the operating system provides the necessary support.
+
+`--enable-prompt-string-decoding'
+     Turn on the interpretation of a number of backslash-escaped
+     characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt
+     strings.  See *Note Printing a Prompt::, for a complete list of
+     prompt string escape sequences.
+
+`--enable-progcomp'
+     Enable the programmable completion facilities (*note Programmable
+     Completion::).  If Readline is not enabled, this option has no
+     effect.
+
+`--enable-readline'
+     Include support for command-line editing and history with the Bash
+     version of the Readline library (*note Command Line Editing::).
+
+`--enable-restricted'
+     Include support for a "restricted shell".  If this is enabled,
+     Bash, when called as `rbash', enters a restricted mode.  See *Note
+     The Restricted Shell::, for a description of restricted mode.
+
+`--enable-select'
+     Include the `select' builtin, which allows the generation of simple
+     menus (*note Conditional Constructs::).
+
+`--enable-usg-echo-default'
+     A synonym for `--enable-xpg-echo-default'.
+
+`--enable-xpg-echo-default'
+     Make the `echo' builtin expand backslash-escaped characters by
+     default, without requiring the `-e' option.  This sets the default
+     value of the `xpg_echo' shell option to `on', which makes the Bash
+     `echo' behave more like the version specified in the Single Unix
+     Specification, version 2.  *Note Bash Builtins::, for a
+     description of the escape sequences that `echo' recognizes.
+
+The file `config-top.h' contains C Preprocessor `#define' statements
+for options which are not settable from `configure'.  Some of these are
+not meant to be changed; beware of the consequences if you do.  Read
+the comments associated with each definition for more information about
+its effect.