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