[Haskell-cafe] GHC API arguments via cabal/stack?
Daniel Gröber
dxld at darkboxed.org
Fri Mar 11 12:30:02 UTC 2016
On Fri, Mar 11, 2016 at 09:27:40AM +0000, David Turner wrote:
> I've also briefly contemplated using the Cabal library to read my .cabal
> file and work out what to do, but I'm unsure that this would work nicely
> under stack. At least, I'm not sure quite what to do with all the package
> databases and other stuff that stack does for you.
Using the Cabal library to do this works very well in general, we do
this in ghc-mod these days. The only way I've seen problems creep up
so far is if cabal-install is linked against a different version of
Cabal than your program. If your analysis program doesn't have to work
on the same cabal dist directory as cabal-install (like ghc-mod does)
then that's a non problem though.
Anyways we've wrapped all the ugly stuff to work around this problem
into a library called cabal-helper:
http://hackage.haskell.org/package/cabal-helper/docs/Distribution-Helper.html
Here's a little example program using that library which should do
what you want:
```
import System.Environment
import System.Directory
import System.Process
import Distribution.Helper
import Data.Char
import Data.List
main = do
[project_dir] <- getArgs
setCurrentDirectory project_dir
dist_dir <- dropWhileEnd isSpace <$> readProcess "stack" ["path", "--dist-dir"] ""
print =<< (runQuery (defaultQueryEnv "." dist_dir) $ ghcOptions)
```
--Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160311/4ce0c914/attachment.sig>
More information about the Haskell-Cafe
mailing list