Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 May 2013 13:29:20 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        mdf@FreeBSD.org
Cc:        =?iso-8859-1?Q?Dag-Erling_Sm=F8rgrav?= <des@des.no>, FreeBSD Arch <freebsd-arch@freebsd.org>
Subject:   Re: Building library that depends on another library.
Message-ID:  <EAAACDAD-0332-4DF5-A778-E3859E2E2792@bsdimp.com>
In-Reply-To: <CAMBSHm_bsiCbUoabZ2YM7sq7HRQ7Lo2OXuOSuykbg_4ViOSO2g@mail.gmail.com>
References:  <20130505201436.GJ1374@garage.freebsd.pl> <86r4hkgd04.fsf@nine.des.no> <20130507185005.GB1888@garage.freebsd.pl> <CAMBSHm_bsiCbUoabZ2YM7sq7HRQ7Lo2OXuOSuykbg_4ViOSO2g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

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

> On Tue, May 7, 2013 at 11:50 AM, Pawel Jakub Dawidek =
<pjd@freebsd.org>wrote:
>=20
>> On Mon, May 06, 2013 at 08:49:15PM +0200, Dag-Erling Sm=F8rgrav =
wrote:
>>> Pawel Jakub Dawidek <pjd@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.
>>>=20
>>> It may seem wrong, but it is correct, cf the following comment in
>>> Makefile.inc1:
>>>=20
>>> # The list of libraries with dependents (${_prebuild_libs}) and =
their
>>> # interdependencies (__L) are built automatically by the
>>> # ${.CURDIR}/tools/make_libdeps.sh script.
>>=20
>> Yes, this also means SUBDIR_ORDERED in lib/Makefile doesn't make =
sense.
>>=20
>> 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.
>>=20
>> I came up with something like the following. Instead of:
>>=20
>> DPADD=3D  ${LIBNV}
>> LDADD=3D  -lnv
>> (plus modifying src/Makefile.inc1)
>>=20
>> I only add:
>>=20
>> LDADD=3D  -L${.OBJDIR}/../libnv -lnv
>>=20
>> What do people think?
>>=20
>=20
> 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).
>=20
> 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.
>=20
> 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=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EAAACDAD-0332-4DF5-A778-E3859E2E2792>