This changes the buildlink3.mk files to use an include guard for the
recursive include. The use of BUILDLINK_DEPTH, BUILDLINK_DEPENDS,
BUILDLINK_PACKAGES and BUILDLINK_ORDER is handled by a single new
variable BUILDLINK_TREE. Each buildlink3.mk file adds a pair of
enter/exit marker, which can be used to reconstruct the tree and
to determine first level includes. Avoiding := for large variables
(BUILDLINK_ORDER) speeds up parse time as += has linear complexity.
The include guard reduces system time by avoiding reading files over and
over again. For complex packages this reduces both %user and %sys time to
half of the former time.
X.Org found in NetBSD-current.
Thanks a lot to all who helped, especially Matthias Scheler who did
repeated tests on Mac OS X and older versions of NetBSD to make sure the
support for those platforms wouldn't be broken (or at least, not fatally,
as I would still expect a few hiccups here and there, because there is
only so much one can test in such limited time).
On the infrastructure side, this branch brings pkgconfig-builtin.mk, in
order to write very easily new builtin.mk files. It can actually handle
more than just pkgconfig files, but it will provide a version if it finds
such a file. x11.builtin.mk has also been made more useful and now all
existing (and future!) native-X11-related builtin.mk files should include
it.
(e.g. NetBSD with bundled XFree86). Checking whether "X11_TYPE" is "xorg"
is obsolete and *not* equivalent to checking whether we are not using
modular X.org.
xproto; should have been .renderproto so that the variable always gets
defined somehow. (Under older bmake, there was a syntax error when
IS_BUILTIN.renderproto was later checked, because for x11-links, it was
never defined in the first place.)
Remove check for X11BASE==LOCALBASE. There's even a comment there saying
we don't want to check that, so don't do it.
.if foo || bar
BAZ= no
.else
BAZ= yes
.endif
different from
.if foo
BAZ= no
.elif bar
BAZ= no
.else
BAZ= yes
.endif
in some situations exposed in this builtin.mk. Workaround this for now.
since they always need a C compiler, even when the source code is
completely in C++.
For some other packages, stated in the comment that a C compiler is
really not needed.
when X11_TYPE=xorg. Let them include x11.buildlink3.mk directly.
Remove the manual USE_BUILTIN declarations from xorg-libs/b3.mk.
This fixes a symmetry in the dependency list depending on whether
xorg-libs is installed already or not.
Discussed with jlam@
and add a new helper target and script, "show-buildlink3", that outputs
a listing of the buildlink3.mk files included as well as the depth at
which they are included.
For example, "make show-buildlink3" in fonts/Xft2 displays:
zlib
fontconfig
iconv
zlib
freetype2
expat
freetype2
Xrender
renderproto