committers. A 'make aout-to-elf' is strongly encouraged. This isn't quite
the end of the line for people who have a real problem with updating yet,
but we've got to get this over and done with. Yes, it's bound to be a
couple of bumpy couple of days.
target (see the previous log message). This works for bootstrapping
from 2.2.7. It won't work for bootstrapping from 2.1.x, but that
fails due to include problems earlier.
probably other versions by spamming ${DESTDIR}/usr/include in much
the same way as `make includes'.
Details for 2.2.7: the bootstrap target has always done a weak spam
of ${DESTDIR}/usr/include; we depend on it not installing any
significant anachronisms (it probably shouldn't touch the headers
at all; however, we may be depending on it for things like the
renaming of ts_nsec to ts_sec in <sys/time.h>). Rev.1.49 strengthens
the spam to everything in src/include. For 2.2.7, this is not
immediately fatal. However, the `make all' step in src/includes
is not followed by a `make clean' step, so new rpc headers are not
generated after we've bootstrapped rpcgen. This causes a fatal
error much later when the old (generated) rpc headers are used with
the current headers (sys/types.h and/or the non-generated rpc
headers).
Details for 2.1.x: the bug is immediately fatal. It gives definition
of errno that is not supported by 2.1.x's libc. The weak spam in the
restored version avoids this problem by not installing errno.h.
(Bootstrapping from 2.1.5 actually breaks much earlier.)
I think the header problems supposedly fixed by rev.1.49 were caused
by using NOCLEAN and having the build fall over when the weakly
spammed headers are active. Minor differences in the layout will
then cause the .depend files to point to nonexistent headers. It
is a feature for symlinks like errno.h -> sys/errno.h to not exist
early.
The other change in rev.1.49 breaks building obj directories if NOCLEAN
is set. It is only safe for _re_building with NOCLEAN set.
try and recurse if the lkm dir exists for some reason but there isn't any
Makefile there. (eg: stray files prevented cvs update -P from removing the
empty dirs)
some tools requiring header files, such as errno.h, that are softlinks.
The mini installation of include files in Makefile.inc1 wasn't doing
the job, so it has been ripped out and replaced with a true make of the
/usr/src/include/ directory (make all and make beforeinstall). I think
the original idea was to save time by not installing unnecessary header
files, but it doesn't really save all that much time.
Also, I have moved a NOCLEAN conditional to cover rebuilding the object
tree 'Rebuilding the ${OBJFORMAT} obj tree' section. This may or may not
be correct but it appears to function properly. If it is not correct we
need to find another way to avoid scanning every single file in the
entire source hierarchy for make restarts.
Build the ordered list of libraries in a variable "_libs" before
building any of them. This eliminates a little bit of duplicated
code. More importantly, it makes it easier to include or exclude
libraries with .if constructs, because the list can be built in
multiple steps using "+=".
`make world' case, and only made a difference for the evil NOTOOLS case
of `make world' since games tools are installed in ${TOOLROOT}/usr/bin
if they are built, but the PR was for normal builds. This is fixed
in rev.1.14 of src/games/fortune/datfiles/Makefile.
PR: 7936
- in the elf case, csu must be built and installed before any shared
libraries. It wasn't, but we usually used a stale version that
happened to work. E.g., in the !NOTOOLS case we used the version
built and installed by the bootstrap-libraries target. Only cross
building was completely broken.
- the shared libmd must be built and installed before any shared
libraries that link to it. It wasn't, but we sometimes used a stale
version that happened to work, as above. For elf, this caused
bogus linkage of the target shared libatm and libopie with the host
static libmd. It isn't clear what this actually breaks, except for
cross compiling. For aout, the shared libmd is not built at all, so
all shared libraries linked to libmd may be broken. The linker
reports them by spewing RRS warnings.
Note that building src/lib early and building subdirs of src/lib in
the correct order in src/lib/Makefile doesn't help, since the subdirs
are all built before any are installed.
Fixed bitrot in the comments about the ordering requirements.
Remove /sys/boot from legacy-build.
Add btxld to build-tools.
In src/sys/Makefile:
Add /sys/boot for i386 ELF.
I'm still not sure why the new boot code was being built along with the
legacy stuff, which meant a completely wrong default environment for it.
This may well still be the wrong way to go about this, but it can't work
all that much worse than it has been.
Prompted by: bde
Also. Don't build & install legacy lkm's when NOLKM has been set.
Otherwise it gets built in the src tree rather than obj, because the
previous 'make obj' at the start of legacy-build does respect NOLKM.
was constructed early enough, so perl was linking against the static lib.
This was breaking perl under ELF, as perl could not load shared objects
(in fact would dump core).
Install the rest of the legacy libraries (like libgcc.a, libl.a).
Add games to the user's path to avoid the temptation for people to
hack paths to unsuitable tools.
Make output of make world more readable for grep. Now a
grep '>>>' world.log
shows you the single stages through which the bootstrap
process went as discussed on -current. Could be used to
debug the bootstrap mechanism in case of trouble more
easily. Would be fine if any further @echo "..." messages
containing a description, what's going on, could use the
new format: @echo ">>> ..."