RFC: A new tool for dependencies
The last few days I've been thinking a bit about dependencies among our packages in HABS. My belief is that it would be beneficial to be able to very quickly see whether a set of packages is consistent in dependencies and therefore ought to compile. Now I may be wrong about this, which is why I'm asking for comments early on. I've only spent about an hour hacking on this so far, I'm confident such a tool is possible (actually rather easy) to make. So, please comment before I waste too much time on something that in fact is useless! The central part is a database of tuples: <name, version, dependencies>. Initially it's populated with the packages that GHC come with (base, array, etc). After that it would basically be used something like this: % pkgdb add http://hackage.haskell.org/packages/archive/dataenc/0.13.0.1/dataenc.cabal Package added, all dependencies satisfied. % pkgdb add http://hackage.haskell.org/packages/archive/dataenc/0.13.0.4/dataenc.cabal Package added, all dependencies satisfied. % pkgdb add http://hackage.haskell.org/packages/archive/nanoparsec/0.1/nanoparsec.cabal Package not added, the following dependencies not satisfied ListLike ==2.0.* base >=4.3 && <5 % pkgdb deps dataenc array >=0.1.0 && <0.4 base >=3.0.0 && <4.4 containers >=0.1.0 && <0.5 % pkgdb reqby base dataenc In short, it would make sure that the set of packages in the database is consistent at all times, and it would offer some querying functionality. Some problems: - not all CABAL files specify the complete set of dependencies (as highlighted in a few bug on cabal2arch[1]) - dependencies on non-Haskell packages isn't tracked, so it's very possible to add a package to the database that wouldn't actually compile on an Arch system because a C library is of the wrong version Possible extensions: - hooking it up to cabal2arch (e.g. by generating output that can be consumed by it) for generating PKGBUILDs and .install files So, what are your thoughts. Should I continue hacking on this? /M [1] https://github.com/archhaskell/cabal2arch/issues#issue/22 -- Magnus Therning OpenPGP: 0xAB4DFBA4 email: magnus@therning.org jabber: magnus@therning.org twitter: magthe http://therning.org/magnus
Hi Magnus,
So, what are your thoughts. Should I continue hacking on this?
there already is a tool that can figure out which versions of a given set of packages are compatible with each other: cabal-install. The code of that utility features an algorithm to compute something that's called "InstallPlan". In my humble opinion, that is what we should use to maintain our PKGLIST. Unfortunately, cabal-install doesn't have a library interface that we could access, so to get that done we would have to hack that tool, or we would have to convince Duncan to hack it for us. Either way, I feel that it's more sensible to re-use that existing code (which is being developed and maintained by the community) rather than re-inventing all this from scratch. Just my 2 cents ... Peter
On 11/01/11 20:57, Peter Simons wrote:
Hi Magnus,
So, what are your thoughts. Should I continue hacking on this?
there already is a tool that can figure out which versions of a given set of packages are compatible with each other: cabal-install. The code of that utility features an algorithm to compute something that's called "InstallPlan". In my humble opinion, that is what we should use to maintain our PKGLIST.
Thanks for pointing out that option for the implementation.
Unfortunately, cabal-install doesn't have a library interface that we could access, so to get that done we would have to hack that tool, or we would have to convince Duncan to hack it for us. Either way, I feel that it's more sensible to re-use that existing code (which is being developed and maintained by the community) rather than re-inventing all this from scratch.
Implementation details aside, do you think that such a tool would be useful? /M -- Magnus Therning OpenPGP: 0xAB4DFBA4 email: magnus@therning.org jabber: magnus@therning.org twitter: magthe http://therning.org/magnus
participants (2)
-
Magnus Therning -
Peter Simons