1. configure --without-gnu-malloc on:
- alpha running OSF/1
- alpha running Linux
+ alpha running OSF/1, Linux, or NetBSD (malloc needs 8-byte alignment;
+ bash malloc has 8-byte alignment now, but I have no alphas to test on)
next running NeXT/OS
- all machines running SunOS YP code: SunOS4, SunOS5, HP/UX
+ all machines running SunOS YP code: SunOS4, SunOS5, HP/UX, if you
+ have problems with username completion or tilde expansion for
+ usernames found via YP/NIS
linux (optional, but don't do it if you're using Doug Lea's malloc)
DG/UX
Cray
- NetBSD/sparc (malloc needs 8-byte alignment; GNU malloc has 4-byte)
+ NetBSD/sparc (malloc needs 8-byte alignment; bash malloc has 8-byte
+ alignment now, but I have no NetBSD machines to test on)
- BSD/OS 2.1 if you want to use loadable builtins
+ BSD/OS 2.1, 3.x if you want to use loadable builtins
- If you are using GNU libc, especially on a linux system
+ Motorola m68k machines running System V.3. There is a file descriptor
+ leak caused by using the bash malloc because closedir(3) needs to read
+ freed memory to find the file descriptor to close
-(Configuring --without-gnu-malloc will still result in lib/malloc/libmalloc.a
-being built and linked against, but there is only a stub file in the archive.)
-
-2. configure using shlicc on BSD/OS 2.1 to use loadable builtins
+2. Configure using shlicc2 on BSD/OS 2.1 and BSD/OS 3.x to use loadable
+ builtins
3. Bash cannot be built in a directory separate from the source directory
using configure --srcdir=... unless the version of `make' you're using
configure runs and removing the `-lnsl' from the assignment to `LIBS'
fixes the problem.
-5. There is a problem with Red Hat Linux's `makewhatis' script.
- Running `makewhatis' with bash-2.0 results in error messages
- like this:
+5. There is a problem with the `makewhatis' script in older (pre-7.0)
+ versions of Red Hat Linux. Running `makewhatis' with bash-2.0 or
+ later versions results in error messages like this:
/usr/sbin/makewhatis: cd: manpath: No such file or directory
/usr/sbin/makewhatis: manpath/whatis: No such file or directory
You will see many warnings of the form:
warning: unknown s_type: 98
I have no idea what this means, but it doesn't seem to matter.
+
+10. If you do not have /usr/ccs/bin in your PATH when building on SunOS 5.x
+ (Solaris 2), the configure script will be unable to find `ar' and
+ `ranlib' (of course, ranlib is unnecessary). Make sure your $PATH
+ includes /usr/ccs/bin on SunOS 5.x. This generally manifests itself
+ with libraries not being built and make reporting errors like
+ `cr: not found' when library construction is attempted.
+
+11. Building a statically-linked bash on Solaris 2.5.x, 2.6, 7, or 8 is
+ complicated.
+
+ It's not possible to build a completely statically-linked binary, since
+ part of the C library depends on dynamic linking. The following recipe
+ assumes that you're using gcc and the Solaris ld (/usr/ccs/bin/ld) on
+ Solaris 2.5.x or 2.6:
+
+ configure --enable-static-link
+ make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -ldl -Wl,-B,static'
+
+ This should result in a bash binary that depends only on libdl.so:
+
+ thor(2)$ ldd bash
+ libdl.so.1 => /usr/lib/libdl.so.1
+
+ If you're using the Sun C Compiler (Sun WorkShop C Compiler version
+ 4.2 was what I used), you should be able to get away with using
+
+ configure --enable-static-link
+ make STATIC_LD= LOCAL_LIBS='-B dynamic -ldl -B static'
+
+ If you want to completely remove any dependence on /usr, perhaps
+ to put a copy of bash in /sbin and have it available when /usr is
+ not mounted, force the build process to use the shared dl.so library
+ in /etc/lib.
+
+ For gcc, this would be something like
+
+ configure --enable-static-link
+ make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -Wl,-R/etc/lib -ldl -Wl,-B,static'
+
+ For Sun's WS4.2 cc
+
+ configure --enable-static-link
+ make STATIC_LD= LOCAL_LIBS='-B dynamic -R/etc/lib -ldl -B static'
+
+ seems to work, at least on Solaris 2.5.1:
+
+ thor(2)$ ldd bash
+ libdl.so.1 => /etc/lib/libdl.so.1
+
+ On Solaris 7 (Solaris 8, using the version of gcc on the free software
+ CD-ROM), the following recipe appears to work for gcc:
+
+ configure --enable-static-link
+ make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='-Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
+
+ thor.ins.cwru.edu(2)$ ldd bash
+ libdl.so.1 => /etc/lib/libdl.so.1
+
+ Make the analogous changes if you are running Sun's C Compiler.
+
+ I have received word that adding -L/etc/lib (or the equivalent
+ -Wl,-L/etc/lib) might also be necessary, in addition to the -R/etc/lib.
+
+12. Configuring bash to build it in a cross environment. Currently only
+ two native versions can be compiled this way, cygwin32 and x86 BeOS.
+ For BeOS, you would configure it like this:
+
+ export RANLIB=i586-beos-ranlib
+ export AR=i586-beos-ar
+ export CC=i586-beos-gcc
+ configure i586-beos
+
+ Similarly for cygwin32.
+
+13. Bash-2.05 has reverted to the bash-2.03 behavior of honoring the current
+ locale setting when processing ranges within pattern matching bracket
+ expressions ([A-Z]). This is what POSIX.2 and SUSv2 specify.
+
+ The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
+ setting. Setting this variable to `C' or `POSIX' will result in the
+ traditional behavior ([A-Z] matches all uppercase ASCII characters).
+ Many other locales, including the en_US locale (the default on many US
+ versions of Linux) collate the upper and lower case letters like this:
+
+ AaBb...Zz
+
+ which means that [A-Z] matches every letter except `z'.
+
+ The portable way to specify upper case letters is [:upper:] instead of
+ A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+ Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+ present, locale(1). If you have locale(1), you can use it to find
+ your current locale information even if you do not have any of the
+ LC_ variables set.
+
+ My advice is to put
+
+ export LC_COLLATE=C
+
+ into /etc/profile and inspect any shell scripts run from cron for
+ constructs like [A-Z]. This will prevent things like
+
+ rm [A-Z]*
+
+ from removing every file in the current directory except those beginning
+ with `z' and still allow individual users to change the collation order.
+ Users may put the above command into their own profiles as well, of course.
+
+14. Building on Interix (nee OpenNT), which Microsoft bought from Softway
+ Systems and has seemingly abandoned (thanks to Kevin Moore for this item).
+
+ 1. cp cross-build/opennt.cache config.cache
+
+ 2. If desired, edit pathnames.h to set the values of SYS_PROFILE and
+ DEFAULT_HOSTS_FILE appropriately.
+
+ 3. export CONFIG_SHELL=$INTERIX_ROOT/bin/sh
+
+ 4. ./configure --prefix=$INTERIX_ROOT/usr/local (or wherever you
+ want it).
+
+ 5. make; make install; enjoy
+
+15. Configure with `CC=xlc' if you don't have gcc on AIX 4.2 and later
+ versions. `xlc' running in `cc' mode has trouble compiling error.c.