Subject: Building an accurate dependency tree - how?
To: None <tech-pkg@netbsd.org>
From: Peter Schuller <peter.schuller@infidyne.com>
List: tech-pkg
Date: 07/30/2005 16:40:26
Hello,

I'm working on a package management tool for pkgsrc. In order to do
its job, it must be able to build a correct dependency graph for
all packages that are desired on the system.

At the moment I am using the output of 'make print-summary-data' to
pick up build and runtime dependencies. This works *reasonably* well,
but there are exceptions.

For example, one test case of mine is a mostly-clean pkgsrc installation
+ mplayer and all its dependencies. After a full installation, three
packages have been installed that do not show up in the dependency
graph at all:

   converters/libiconv devel/zlib x11/fixesext

libiconv and zlib is installed by x11/randrext:

===> Verifying reinstall for ../../x11/randrext
===> *** No /usr/pkgsrc/distfiles/pkg-vulnerabilities file found,
===> *** skipping vulnerability checks. To fix, install
===> *** the pkgsrc/security/audit-packages package and run
===> *** '/usr/pkg/sbin/download-vulnerability-list'.
=> Checksum SHA1 OK for randrext-1.0.tar.bz2.
=> Checksum RMD160 OK for randrext-1.0.tar.bz2.
===> Extracting for randrext-1.0nb1
===> Required installed package xorg-libs>=6.8.2nb1: xorg-libs-6.8.2nb1 found
===> Required installed package fontconfig>=2.2.96nb1: fontconfig-2.3.1nb1 found
===> Required package libiconv>=1.9.1nb4: NOT found

And fixesext is installed by qt3-libs:

===> Returning to build of qt3-libs-3.3.4nb4
===> Required installed package Xrender>=0.8.4nb1: Xrender-0.8.4nb1 found
===> Required installed package fontconfig>=2.2.96nb1: fontconfig-2.3.1nb1 found
===> Required installed package freetype2>=2.1.9nb1: freetype2-2.1.10 found
===> Required installed package expat>=1.95.8nb2: expat-1.95.8nb2 found
===> Required package fixesext>=2.0: NOT found

I haven't been able to figure out exactly how these are dragged in at all.
The resulting installations of these three packages do NOT have dependencies
registered on them (i.e, pkg_info -R returns nothing).

Is there some way of getting the *definite* dependency list for a package,
exactly what will be checked for before a build? And/or, what is the deal
with these three packages?

Any input would be appreciated. And while I am at it - can somebody suggest
a better way to build a dependency graph than invoking 'make print-summary-data'
on all packages (it's quite slow)?

(Note that in this context I am not interested in the dependencies of
installed packages, but by the dependencies of their origin in pkgsrc.)

Thanks in advance,

-- 
/ Peter Schuller, InfiDyne Technologies HB

PGP userID: 0xE9758B7D or 'Peter Schuller <peter.schuller@infidyne.com>'
Key retrieval: Send an E-Mail to getpgpkey@scode.org
E-Mail: peter.schuller@infidyne.com Web: http://www.scode.org