Subject: indirect dependencies through build tools [Re: pkg/33100 (devel/darcs
To: Thomas Klausner <wiz@NetBSD.org>
From: Johnny Lam <jlam@pkgsrc.org>
List: tech-pkg
Date: 03/21/2006 12:25:28
wiz@netbsd.org wrote:
> Synopsis: devel/darcs missing DEPENDS=gmp
>
> Responsible-Changed-From-To: pkg-manager->jlam
> Responsible-Changed-By: wiz@netbsd.org
> Responsible-Changed-When: Sun, 19 Mar 2006 15:55:20 +0000
> Responsible-Changed-Why:
> Committed a workaround. jlam can hopefully explain what's happening here...
These packages want ghc as a build dependency, but want gmp (through
ghc) as a run-time dependency. In the case of darcs, because the ghc
dependency is expressed by including ghc/buildlink3.mk, gmp is
considered an indirect dependency for darcs, and so is not added as a
dependency for darcs.
It's important to remember that dependencies are (mostly) only
registered if a package directly includes a buildlink3.mk for that
dependency in the package Makefile. This is the distinction between
"BUILDLINK_DEPENDS", which are actual dependencies, and
"BUILDLINK_PACKAGES", which are merely the packages whose libraries and
headers are symlinked into the buildlink work directory. If you look at
a typical buildlink3.mk file, you'll see that BUILDLINK_PACKAGES is
always modified when the buildlink3.mk is included, but
BUILDLINK_DEPENDS is only modified if the buildlink3.mk is not
"recursively" included (BUILDLINK_DEPTH == 1).
You can force all packages that directly include ghc/buildlink3.mk to
build with ghc to have a dependency on gmp by modifying
ghc/buildlink3.mk so that gmp/buildlink3.mk is included outside of the
BUILDLINK_DEPTH guards, i.e. move that inclusion to the end of the file.
Should I go ahead and do this?
Cheers,
-- Johnny Lam <jlam@pkgsrc.org>