packages feed

argon-0.4.2.0: src/Argon/Cabal.hs

{-# LANGUAGE CPP #-}
module Argon.Cabal (parseExts)
    where

import           Data.List                             (nub)
#if __GLASGOW_HASKELL__ < 710
import           Control.Applicative                   ((<$>))
#endif

import qualified Distribution.PackageDescription       as Dist
import qualified Distribution.PackageDescription.Parse as Dist
import qualified Distribution.Verbosity                as Dist
import qualified Language.Haskell.Extension            as Dist


-- | Parse the given Cabal file generate a list of GHC extension flags. The
--   extension names are read from the default-extensions field in the library
--   section.
parseExts :: FilePath -> IO [String]
#if __GLASGOW_HASKELL__ < 802
parseExts path = extract <$> Dist.readPackageDescription Dist.silent path
#else
parseExts path = extract <$> Dist.readGenericPackageDescription Dist.silent path
#endif
    where extract pkg = maybe [] extFromBI $
            Dist.libBuildInfo . Dist.condTreeData <$> Dist.condLibrary pkg

extFromBI :: Dist.BuildInfo -> [String]
extFromBI binfo = map toString . nub $ allExts
    where toString (Dist.UnknownExtension ext) = ext
          toString (Dist.EnableExtension  ext) = show ext
          toString (Dist.DisableExtension ext) = show ext
          allExts = concatMap ($ binfo)
              [Dist.defaultExtensions, Dist.otherExtensions, Dist.oldExtensions]