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.
libdaemon is a lightweight C library that eases the writing of UNIX
daemons. It consists of the following parts:
* A wrapper around fork() which does the correct daemonization
procedure of a process
* A wrapper around syslog() for simpler and compatible log output to
Syslog or STDERR
* An API for writing PID files
* An API for serializing UNIX signals into a pipe for usage with
select() or poll()
* An API for running subprocesses with STDOUT and STDERR redirected
to syslog.
APIs like these are used in most daemon software available. It is not
that simple to get it done right and code duplication is not a goal.