summaryrefslogtreecommitdiff
path: root/bootstrap/bmake/README
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/bmake/README')
-rw-r--r--bootstrap/bmake/README110
1 files changed, 110 insertions, 0 deletions
diff --git a/bootstrap/bmake/README b/bootstrap/bmake/README
new file mode 100644
index 00000000000..005c3228e08
--- /dev/null
+++ b/bootstrap/bmake/README
@@ -0,0 +1,110 @@
+ bmake v3
+
+This directory contains a port of the BSD make tool (from NetBSD)
+I have run it on SunOS,Solaris,HP-UX 9 and IRIX.
+
+Version 3 is has been re-worked from scratch to better facilitate
+importing newer make(1) versions from NetBSD. The original code base
+was NetBSD-1.0, so version 3 was built by doing a fresh import of the
+NetBSD-1.0 usr.bin/make, adding the autoconf and other portability
+patches to sync it with bmake v2, and then NetBSD's make
+of Feb 20, 2000 was imported and conflicts dealt with.
+NetBSD's make was again imported on June 6 and December 15, 2000.
+
+Note: when cvs importing newer versions
+it is important to (in usr.bin/make):
+
+mv config.h make-conf.h
+mv Makefile Makefile.in
+
+before running cvs import.
+
+Building is simply a matter of:
+
+configure
+make -f makefile.boot
+make -f makefile.boot install
+make -f makefile.boot install-man
+make -f makefile.boot install-mk
+
+The install-mk target is only useful if you unpacked [bsd-]mk.tar.gz
+under the bmake directory.
+
+if you have GNU make or a make which supports VPATH, you can build it
+in a separate directory:
+
+here=`pwd`
+mkdir /tmp/bmake
+cd /tmp/bmake
+$here/configure
+gmake -f makefile.boot
+gmake -f makefile.boot install
+gmake -f makefile.boot install-man
+gmake -f makefile.boot install-mk
+
+To make much use of bmake you will need the bsd.*.mk macros or my
+portable *.mk macros. See
+ftp://ftp.quick.com.au/pub/sjg/bsd-mk.tar.gz
+ftp://ftp.quick.com.au/pub/sjg/mk.tar.gz
+
+If you have an earlier version of bmake installed you can use that
+with the generated Makefile.
+
+Apart from new features such as .PARSEDIR picked up from the recent
+NetBSD make, this version has improvments (which are also in NetBSD's
+make or soon will be) to facilitate using MAKEOBJDIRPREFIX to support
+true read-only src trees. See also ChangeLog.
+
+MAKEOBJDIRPREFIX:
+
+When MAKEOBJDIRPREFIX is set in the environment make(1) will attempt
+to chdir(${MAKEOBJDIRPREFIX}${.CUDRIR}) and use that as its objdir.
+Because the directory tree under ${MAKEOBJDIRPREFIX} is a mirror of
+the src tree, make ends up chdir'ing to objdirs that would not exist
+otherwise. That is, when using normal ./obj dirs (or symlinks) only
+Makefiles which include obj.mk get a separate objdir. When using
+MAKEOBJDIRPREFIX any directory which has subdirs that use obj.mk will
+have an objdir, thus Makefiles which were written expecting to process
+in ${.CURDIR} may break. In particular, Makefiles which do:
+
+build:
+ ${.MAKE} something
+ ${.MAKE} else
+
+will break as the sub-make will not find a Makefile in
+${MAKEOBJDIRPREFIX}${.CUDRIR}. Whereas
+
+build:
+ cd ${.CURDIR} && ${.MAKE} something
+ cd ${.CURDIR} && ${.MAKE} else
+
+will work fine. To avoid the need to re-work these Makefiles we
+check for running ${.MAKE} or ${.MAKE:T} without a preceeding cd and
+effectively insert one. This feature only operates if
+MAKEOBJDIRPREFIX (or MAKEOBJDIR) is set and can be dissabled by
+defining NOCHECKMAKECHDIR.
+
+Another problem arrises from make(1) overriding the physical location
+returned by getcwd() with the logical one from $PWD. We dissable this
+feature if MAKEOBJDIRPREFIX is set to avoid the situation where
+make(1) behaves differently depending on how it got to a directory.
+This avoids lossage like the following example.
+
+If /usr/local/src is a symlink to /d3/src:
+
+cd /usr/local/src/project
+MAKEOBJDIRPREFIX=/tmp/obj make obj
+===> sub1
+/d3/src/project/sub1 -> /tmp/obj/d3/src/project/sub1
+...
+
+cd /usr/local/src/project/sub1
+MAKEOBJDIRPREFIX=/tmp/obj make obj
+/usr/local/src/project/sub1 -> /tmp/obj/usr/local/src/project/sub1
+
+the expected objdir changes depending on circumstances - which
+means that 9 times out of 10 you'll end up trying to polute
+curdir because the objdir you expected does not exist.
+
+
+--sjg