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>