Building library that depends on another library.

Warner Losh imp at bsdimp.com
Tue May 7 19:29:24 UTC 2013


On May 7, 2013, at 1:20 PM, mdf at FreeBSD.org wrote:

> On Tue, May 7, 2013 at 11:50 AM, Pawel Jakub Dawidek <pjd at freebsd.org>wrote:
> 
>> On Mon, May 06, 2013 at 08:49:15PM +0200, Dag-Erling Smørgrav wrote:
>>> Pawel Jakub Dawidek <pjd at FreeBSD.org> writes:
>>>> It looks like to make such dependency work one HAS TO add libnv to
>>>> _prebuild_libs in src/Makefile.inc1, which seems wrong.
>>> 
>>> It may seem wrong, but it is correct, cf the following comment in
>>> Makefile.inc1:
>>> 
>>> # The list of libraries with dependents (${_prebuild_libs}) and their
>>> # interdependencies (__L) are built automatically by the
>>> # ${.CURDIR}/tools/make_libdeps.sh script.
>> 
>> Yes, this also means SUBDIR_ORDERED in lib/Makefile doesn't make sense.
>> 
>> All in all I really don't like to add libraries to Makefile.inc1, it
>> doesn't sound right. I'd like this to be self-contained. For bsd.prog.mk
>> it is enough to specify DPADD/LDADD in program's Makefile instead of
>> hacking some central Makefile.
>> 
>> I came up with something like the following. Instead of:
>> 
>> DPADD=  ${LIBNV}
>> LDADD=  -lnv
>> (plus modifying src/Makefile.inc1)
>> 
>> I only add:
>> 
>> LDADD=  -L${.OBJDIR}/../libnv -lnv
>> 
>> What do people think?
>> 
> 
> I won't claim any knowledge of various Makefile variables, but at work we
> use this.  (I think gcooper is changing this to have the -L in LDFLAGS so
> the LDADD stays pure; I suppose it is better but it's even more verbose).
> 
> We also use rcorder on our makefiles so they're built in the right order,
> which AFAICT serves the same purpose as DPADD but perhaps less annoyingly
> (no need to define LIBNV somewhere).  However, it still requires
> over-specification (and a mis-spelling will break it).  So for our
> libraries, each Makefile should have a # PROIVIDE: line as well as
> potentially some # REQUIRE: lines.  Using rcorder has the advantage that it
> will detect circular dependencies.
> 
> It would be nice if the existence of an LDADD in the Makefile would
> automatically also mean the ordering of build was determined; DPADD/LDADD
> should be in parallel already.  And for our use of rcorder, it's redundant
> to have both a REQUIRE line and an LDADD line.  But I think quickly we're
> getting past what make(1) can do and into the realms of "build systems are
> hard".

DPADD should be sufficient to get the ordering right.

Warner


More information about the freebsd-arch mailing list