pkgsrc/bootstrap/bmake
jlam f79acda48d * Modify bmake to use libnbcompat to ensure that a regex implementation
exists.

* nbsed-20040821 requires libnbcompat, so make the appropriate
  adjustments to the build to use it.

* If nbsed is built during bootstrap, then use it as the sed for
  pkg_install so that the correct program is embedded into the pkg_view
  and linkfarm scripts.

* We don't need bmake to build any of the bootstrap packages, so just
  call out to the system make.
2004-08-23 03:44:34 +00:00
..
lst.lib
missing/sys
mk
PSD.doc
aclocal.m4
arch.c
bit.h
buf.c
buf.h
ChangeLog
compat.c
cond.c
config.h.in
configure
configure.in
dir.c
dir.h
FILES
find_lib.sh
for.c
getenv.c
getopt.c
hash.c
hash.h
install-sh
job.c
job.h
list.h
lst.h
machine.sh Ksh on Unixware has problems with IFS in sub shells, so put the 2004-04-11 03:12:17 +00:00
main.c
make-conf.h
make.1
make.c
make.h
makefile.boot.in * Modify bmake to use libnbcompat to ensure that a regex implementation 2004-08-23 03:44:34 +00:00
Makefile.in * Modify bmake to use libnbcompat to ensure that a regex implementation 2004-08-23 03:44:34 +00:00
mkdeps.sh
nonints.h
parse.c
pathnames.h
ranlib.h
README
setenv.c
sigcompat.c
sprite.h
str.c
suff.c
targ.c
trace.c
trace.h
util.c
var.c * Modify bmake to use libnbcompat to ensure that a regex implementation 2004-08-23 03:44:34 +00:00
wait.h

			       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