g2-0.2.0.0: src/G2/Translation/Cabal/Cabal.hs
{-# LANGUAGE CPP #-}
module G2.Translation.Cabal.Cabal (cabalSrcDirs) where
import Distribution.PackageDescription
#if MIN_VERSION_Cabal(3,8,0)
import Distribution.Simple.PackageDescription
#elif MIN_VERSION_Cabal(2,2,0)
import Distribution.PackageDescription.Parsec
#else
import Distribution.PackageDescription.Parse
#endif
import Distribution.Verbosity
#if MIN_VERSION_Cabal(3,6,0)
import Distribution.Utils.Path ( getSymbolicPath )
#endif
-- | Takes the filepath to a Cabal file, and returns a list of FilePaths to red
-- from.
cabalSrcDirs :: FilePath -> IO [FilePath]
cabalSrcDirs fp = do
gpd <- readGenericPackageDescription silent fp
return $ genericPackageDescriptionSrcDirs gpd
genericPackageDescriptionSrcDirs :: GenericPackageDescription -> [FilePath]
genericPackageDescriptionSrcDirs (GenericPackageDescription
{ condLibrary = cl
, condExecutables = ce
, condTestSuites = ts }) = do
maybe [] (condTreeSrcDirs libSrcDirs) cl
++ concatMap (condTreeSrcDirs execSrcDirs . snd) ce
++ concatMap (condTreeSrcDirs testSrcDirs . snd) ts
condTreeSrcDirs :: (a -> [FilePath]) -> CondTree v c a -> [FilePath]
condTreeSrcDirs f (CondNode { condTreeData = t }) = f t
libSrcDirs :: Library -> [FilePath]
libSrcDirs = buildInfoSrcDirs . libBuildInfo
execSrcDirs :: Executable -> [FilePath]
execSrcDirs = buildInfoSrcDirs . buildInfo
testSrcDirs :: TestSuite -> [FilePath]
testSrcDirs = buildInfoSrcDirs . testBuildInfo
buildInfoSrcDirs :: BuildInfo -> [FilePath]
#if MIN_VERSION_Cabal(3,6,0)
buildInfoSrcDirs (BuildInfo { hsSourceDirs = sd }) = map getSymbolicPath sd
#else
buildInfoSrcDirs (BuildInfo { hsSourceDirs = sd }) = sd
#endif