42 lines
1.4 KiB
Haskell
42 lines
1.4 KiB
Haskell
{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
|
|
|
|
module Cabal (fromCabal) where
|
|
|
|
import CabalApi
|
|
import Distribution.PackageDescription (BuildInfo(..), usedExtensions)
|
|
import Distribution.Text (display)
|
|
import System.FilePath
|
|
import Types
|
|
|
|
----------------------------------------------------------------
|
|
|
|
fromCabal :: [GHCOption]
|
|
-> Cradle
|
|
-> IO ([GHCOption]
|
|
,[IncludeDir]
|
|
,[Package]
|
|
,[LangExt])
|
|
fromCabal ghcOptions cradle = do
|
|
cabal <- cabalParseFile cfile
|
|
let binfo@BuildInfo{..} = cabalBuildInfo cabal
|
|
let exts = map (("-X" ++) . display) $ usedExtensions binfo
|
|
lang = maybe "-XHaskell98" (("-X" ++) . display) defaultLanguage
|
|
libs = map ("-l" ++) extraLibs
|
|
libDirs = map ("-L" ++) extraLibDirs
|
|
gopts = ghcOptions ++ exts ++ [lang] ++ libs ++ libDirs
|
|
idirs = case hsSourceDirs of
|
|
[] -> [cdir,owdir]
|
|
dirs -> map (cdir </>) dirs ++ [owdir]
|
|
let depPkgs = removeMe cfile $ cabalAllDependPackages cabal
|
|
hdrExts = cabalAllExtentions cabal
|
|
return (gopts,idirs,depPkgs,hdrExts)
|
|
where
|
|
owdir = cradleCurrentDir cradle
|
|
Just cdir = cradleCabalDir cradle
|
|
Just cfile = cradleCabalDir cradle
|
|
|
|
removeMe :: FilePath -> [String] -> [String]
|
|
removeMe cabalfile = filter (/= me)
|
|
where
|
|
me = dropExtension $ takeFileName cabalfile
|