On Tue, Mar 29, 2022 at 09:15:34AM +0000, Mayuresh Kathe wrote: > i would like to understand how pkgsrc determines the > dependencies for a given package, and how does it go > about handling them during installs, uninstalls, etc. > i've heard about some such systems using "sat solvers". > is there a similar sub-system being used by pkgsrc? > thank you.
Probably better to ask this on the tech-pkg list ;-) But there is nothing magic to it, if you look at one of your installed pkgs and check it registered information you can find something like this: > cat /usr/pkg/pkgdb/xsane-0.99.9nb19/+CONTENTS and in there you see e.g. @blddep jpeg-9d that is a build dependency - to build this package, a package name "jpeg-9d" is needed. And you find e.g. @pkgdep tiff>=4.0.3nb5 which is a package dependency, that is: to run/use this package, a package name tiff with version >= 4.0.3nb5 needs to be installed. During a build pkgsrc creates the transitive closure (by recursing into make calls for the dependencies) over these dependencies. During installation pkg_install does something similar for the runtime dependencies. No tricky optimizations are done. Other effects in play: the buldlink technique tries to hide other installed stuff from a build (so only the actually declared dependencies come to play). Martin