[Haskell-cafe] Cabal version constraint seems to be ignored.
Carlo Hamalainen
carlo at carlo-hamalainen.net
Wed Jan 22 18:52:12 UTC 2014
On 22/01/14 18:07, Rogan Creswick wrote:
> Does the behavior change if you build with a sandbox? (without hiding
> either Cabal via ghc-pkg?)
Yes, in particular:
$ ghc-pkg expose Cabal-1.18.1.2
$ rm -fr .cabal-sandbox cabal.sandbox.config dist
$ cabal sandbox init
$ cabal install --dependencies-only
$ cabal install
$ .cabal-sandbox/bin/ghc-imported-from src/Main.hs Main getArgs 11 11
--ghc-options --ghc-pkg-options
runs with no problems.
I dug into this a bit more and I think it's a bug in my own code: the
error that I quoted before was not the executable blowing up, instead it
was runGhc exploding because I did not pass the right flags to the GHC
API when I called "load LoadAllTargets".
Stepping back, I can reproduce the error with plain ghci:
$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :l src/Main.hs
[1 of 3] Compiling Language.Haskell.GhcImportedFrom.UtilsFromGhcMod
( Language/Haskell/GhcImportedFrom/UtilsFromGhcMod.hs, interpreted )
[2 of 3] Compiling Language.Haskell.GhcImportedFrom (
Language/Haskell/GhcImportedFrom.hs, interpreted )
Language/Haskell/GhcImportedFrom.hs:132:54:
Couldn't match expected type
`Distribution.PackageDescription.BuildInfo'
with actual type
`Cabal-1.16.0:Distribution.PackageDescription.BuildInfo'
In the fourth argument of `getGHCOptions', namely `binfo'
In a stmt of a 'do' block:
getGHCOptions [] c (fromJust $ cradleCabalDir c) binfo
In the expression:
do { c <- findCradle;
pkgDesc <- GhcMonad.liftIO
$ parseCabalFile $ fromJust $ cradleCabalFile c;
let binfo = head $ cabalAllBuildInfo pkgDesc;
getGHCOptions [] c (fromJust $ cradleCabalDir c) binfo }
Failed, modules loaded:
Language.Haskell.GhcImportedFrom.UtilsFromGhcMod.
whereas cabal repl works fine, because it parses the .cabal file and
realises that it needs the earlier version of Cabal.
Confirming this, if I use -package to specify the version of Cabal then
it works fine:
$ ghci -package Cabal-1.16.0
(all happy now)
So I should look at how the latest Cabal (in particular "cabal repl")
works out the right flags to pass to ghci, and incorporate that into my
ghc-imported-from project. I see that the developer of ghc-mod has run
into a similar issue recently:
https://github.com/kazu-yamamoto/ghc-mod/issues/171
> If I had to hazard a guess, I'd say that the inability to specify
> dependencies for the build process are causing this problem, even
> though you're using build-type: simple; one cabal is used to set
> cabal-specific details in the cabal_macros.h file (which I'm assuming
> you're using somewhere in the source?) and another is picked based on
> the build-depends.
>
> That's just a guess, though... and if true, it's a wrinkle in the
> interactions between build-system dependencies and program build-time
> dependencies that I haven't run across before (even with Cabal-dev!).
Nope, it's a wrinkle in my understanding of Cabal/ghci/etc :)
Thanks for the reply though, it helped me hunt down the problem.
Cheers,
--
Carlo Hamalainen
http://carlo-hamalainen.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140122/20c06845/attachment.html>
More information about the Haskell-Cafe
mailing list