* Set stuff mostly in the environment, not on make(1)'s command line.
This is needed for MACHINE and MACHINE_ARCH (noted by bjh21), and keeps
the mk.conf-overriding-env behavior (suggested by several people).
* Use MAKEFLAGS to make the wrapper script more readable.
* When prepping objdir in tools for the default TOOLDIR value, just make
that objdir; leave the recursive "make obj" for later.
* Allow MACHINE to be set automatically on NetBSD native builds.
Require -m only if the host is not NetBSD.
* Fail if DESTDIR is set to root (/) and the build is not NetBSD native,
or the build is attempting a "make release" (option -R).
* Warn the user if DESTDIR is set to root (/) that the kernel must be up
to date, or else the build might hose the system. Also, do not remove
DESTDIR on -r if it is set to root.
* Fail if TOOLDIR is set to / or empty after checking with nbmake.
* Allow DESTDIR and TOOLDIR to be set in mk.conf and/or by the new default
from <bsd.own.mk>. Note that if -T is not used to set TOOLDIR, and
TOOLDIR is not set in the environment, then nbmake will always be
bootstrapped (rather than looking at nbmake's timestamp). This is
because /bin/sh doesn't know how to get TOOLDIR from mk.conf without
first having nbmake (...which lives in TOOLDIR).
* Do a pass of "make obj" through src/tools before installing nbmake (so
long as -o/MKOBJDIRS=no is not specified). This ensures that objdirs
exist if they are desired, and paves the way for using build.sh to
build all the src/tools without building everything else.
* Add "-w" option, which allows the builder to specify where the nbmake
wrapper shell script should be created. If not specified,
$TOOLDIR/bin/nbmake-$MACHINE is still created as a default.
* Print the values of DESTDIR and TOOLDIR after bootstrapping nbmake,
for informational purposes.
It should now be possible to type just "./build.sh" on a NetBSD-current
host and get a new build in / for the appropriate architecture.
However, building in-place like this has *not* been extensively tested
yet, so be careful.
quoting, so the commands were thought to be one big word with embedded
whitespace)
* New options:
-O obj Set root of an obj tree; sets MAKEOBJDIR to an appropriate
substitution pattern.
-o Sets MKOBJDIRS=no (otherwise sets MKOBJDIRS=yes)
-u Sets UPDATE
* Don't require DESTDIR when -b is set.
* Add -n option, which prints the commands that would be run by build.sh,
but doesn't run them (much like make's -n option).
* Auto-resolve relative paths for -D, -R, and -T (but not for the
corresponding environment variables).
* Explicitly declare defaults of all shell variables used where feasible,
rather than sprinkling ${varname-value} expansions.
* Prefix shell true/false variables with "do_" to indicate their use as
actual values in shell expressions (like "$do_buildsystem && echo foo").
If a machine is not known, abort.
- Emulate "mkdir -p" for Old "mkdir" programs on some host OS's.
- Add "-a" option to provide MACHINE_ARCH explicitly (for MACHINEs
that are capable of having more than one MACHINE_ARCH, such as sh3
and sparc64)
- Where "getopts" is not available in the shell, try using "getopt".
It's not whitespace compatible, but works in most cases.
- Rename "bmake" to "nbmake" per suggestions.
- When building nbmake, create a temporary directory for the purpose
of holding host compiler objects that might be created in the cwd.
Delete this directory if aborted via sh's "trap".
- Create a wrapper script in $TOOLDIR/bin called "nbmake-$MACHINE",
which can be run by hand for building parts of a cross tree easily.
Use this script when finally starting the build.