execution is usually unnecessary in BSD Makefiles because BSD make
invokes shells with -e. Using it to give conditional execution is
often wrong in BSD makefiles because BSD make joins shell commands
when invoked in certain ways (in particular, as `make -jN'). Example
makefile:
---
clean:
cd /
false && true
rm -rf * # a dangerous command
---
This should terminate after the `false && true' command fails, but
it doesn't when the commands are joined (`false && true' is a non-
simple command, so -e doesn't cause termination). The b-maked version:
---
clean:
cd /
false; true
rm -rf * # a dangerous command
---
terminates after the `false' command fails (`false' is a simple
command, so -e causes termination). However, for versions of
make like gnu make that don't invoke shells with -e, this change
completely breaks the makefile.
This is one of the fixes for the bug suite that caused `make world'
to sometimes put raw cpp output in .depend files. Building of cc
sometimes failed, but the failure did not terminate the build
immediately, and various wrong versions of the cc components were
used until one was wrong enough to cause a fatal error.
The headers that are installed in WORLDTMP are part of the interface
that includes libraries like libc, so they must be installed together.
This means that lib-tools and build-tools should be merged. The FreeBSD
build only works in hosted form where it is assumed that the installed
version contains adequate tools to build the latest release.
`make world' by about 14% here (down to 4490 seconds real on a
K6/233). Temporarily skip this optimization when building with
-j, since there are still many broken makefiles.
Fixed NOCLEANDIR option. Cleaning of `.depend' was broken.
Put -nostdinc in CFLAGS, not in CC, and don't override the default
CC. This fixes enforcing use of ${WORLDTMP}/usr/include.
Don't install library man pages in ${WORLDTMP}.
`make world' times by about 10%. Use a new `bootstrap-libraries'
target to build just enough (static) libraries to bootstrap the
tools, and delay building of shared libraries until all the tools
have been built.
Fixed `/usr/bin/make world'. The version of `make' that we buildis
nand use is named "make", not ${MAKE}.
cleaning doesn't affect the normal copy. Save a little time by not doing
unnecessary clean, depend nd cleandepend steps.
Reviewed by: mckay@freebsd.org
Added xargs to build-tools. It may be used for kdump and truss.
(slightly stale) shared libraries get installed before non-tools
are linked. The 2-stage build of the libraries has never really
worked, since we link to the libraries built in the first stage.
so that dirtier-than-previously tools aren't left lying around to be
installed.
Filter out NOPIC from ${MK_FLAGS} for `make ${OBJDIR}' for ld (and
some other things), so that the obj dir for ld/rtld always gets
re-made.
Fixed a literal "make".
Build libraries (for linking the tools to) in a more correct order
(for linking freshly created shared libraries to each other). This
is probably a no-op now that shared libraries for tools aren't
built, but I didn't test any intermediate versions. Security-related
directories that are not built by default may now be misordered
for the shared case.
Don't build libcompat specially. It isn't used for tools, and
shouldn't be used in /usr/src (it is only used for IPXrouted and
crufty games).
Added missing ${.CURDIR} to existence tests for library directories.
Existence tests for top-level directories are still broken.
Test for library directories actually being built, not for directories
above them.
earlier. This is probably unnecessary.
Added now-necessary -B for installing headers for libss.
Removed now-unnecessary -B for building cleandepend for rpcgen.
Add the path to the source .mk files to the beginning of .MAKEFLAGS
instead of to the end, so that there is more chance of it having
priority. Additions in /etc/make.conf still have priority for
sub-makes if they are also at the beginning, although this is
probably not wanted for building /usr/src.
Use ${MK_FLAGS} for building dependencies for tools. This saves
time building dependencies for tools that won't be created (mainly
profiled libraries) and will be necessary to give correct dependencies
when tools are built static.
Spell the object directory as ${OBJDIR} consistently (even when we know
that ${OBJDIR} == "obj").
Print ${DESTDIR} in messages where appropriate.
Fixed some misformattings.
- After the install has been done, but before makedb is run, run
'ldconfig -R' to pick up new shlib dependencies.
Suggested by: Amancio and a whole lot of other folks
of doing the normal build. When the alpha bootstrap is complete (there
is more work to do!), the alpha will build like the i386 does now.
I changed i386 references to ${MACHINE} now that we're multi-architecture.
Did I ever spam this file good with that last commit. Despite 3
reviewers, we still managed to revoke the eBones fixes, TCL 8.0 support,
libvgl and a host of other new things from this file in the process of
parallelizing the Makefile. DOH! I think we need more pointy hats - this
particular incident is worthy of a small children's birthday party's worth of
pointy hats. ;-)
I certainly intend to take more care with the processing of aged diffs
in the future, even if it does mean reading through 20K's worth of them.
I might also be a bit more anal about asking for more up-to-date changes
before looking at them. ;)
way - for buildworld only.
Rev.1.136 broke the (deprecated) external includes target. Rev.1.144 was
a half-baked backout of rev.1.136. It broke SHARED=symlinks for the
buildworld target and installation of subdirs of src/include for the
includes target.
wrong switches were being passed to 'make' that caused sys.mk to come from
the /usr/share/mk location but the bsd.*.mk files to come from the
source tree in src/share/mk. This was bound to break sooner or later.
Submitted by: Dmitrij Tejblum <dima@tejblum.dnttm.rssi.ru>
everything that a full install would (modulo bugs in rpcsvc/Makefile).
The missing things weren't used (except for mp.h from libmp), but
there are relatively few of them and it's easier to be complete.
call the 'symlinks' target to build the /usr/obj/tmp/install/sys tree since
In the includes target, call the header install target explicitly and then
call the 'symlinks' target to build the /usr/obj/tmp/install/sys tree since
we set this up manually earlier, and if we do a 'make all install', we
replace the symlink tree in the obj dirs with new copies of the files
which breaks any chance of -DNOCLEAN working.
a couple *.mk files to enable -current world building on really old
machines (e.g., 2.1.5).
Reviewed by: too many many people to list here, special thanks to bde