Hi all, I've done some digging into distributing haskell libraries outside of cabal/hackage, using zeroinstall (http://0install.net). My current results distributing compiled libraries have been somewhat fragile, due to having no good way of tracking changes to the GHC abi and forcing a rebuild of libraries when mismatches are found.
I don't at this point care for distributing binary-only libraries, that is just how zeroinstall likes to work (compile all dependencies into a usable binary form, then compile the program that depends on them). I'm wondering if the problem could be worked around by only ever distributing libraries as source-only, and just statically linking programs (which I believe is the default already). This would lead to too much compilation since already-compiled libraries would not be used, but that's better than it not working as soon as GHC is upgraded (which I believe is my current status). When distributing precompiled libraries, I've been adding them to GHC_PKG_PATH - `cabal build` will then use these binaries to satisfy dependencies of the app I'm building. What I would like is for the same mechanism, but for sources instead of precompiled binaries. I have a working cut of this after some hacking, which basically involves: - putting all dependencies' source directories into a colon-separated environment variable, "CABAL_PKG_PATH" (this is how zeroinstall typically makes dependancies available) - Creating a temporary cabal config file that specifies a single `local-repo` location inside the (throwaway) build dir - populating said local-repo folder, by traversing each path in $CABAL_PKG_PATH and: - find the cabal file in each directory - extract important metadata (name and version) from the cabal file - add the cabal file to 00-index.tar as {name}/{version}/{name}.cabal - tarring up the source directory and placing it under {name}/{version}/{name}-{version}.tar.gz - run `cabal install` from the program's source directory with $CABAL_CONF, --builddir and --prefix set appropriately Tarring up all source packages in particular seems fairly wasteful, and it all seems like quite a few hoops to jump through in order to construct something that looks like a hackage cache (which I don't particularly want, but it seems to be the only way to make them available). So I was wondering if there is any simpler way to populate a set of local sources such that `cabal install` will be able to find them? It's quite likely that it was never really intended to work with anything other than a hackage-style DB, but I thought it couldn't hurt to ask :) Cheers, - Tim. _______________________________________________ cabal-devel mailing list cabal-devel@haskell.org http://www.haskell.org/mailman/listinfo/cabal-devel