1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- module CabalApi (
- cabalParseFile,
- cabalBuildInfo,
- cabalDependPackages
- ) where
- import Control.Applicative
- import Data.Maybe (fromJust, maybeToList)
- import Data.Set (fromList, toList)
- import Distribution.Verbosity (silent)
- import Distribution.Package (Dependency(Dependency), PackageName(PackageName))
- import Distribution.PackageDescription
- (GenericPackageDescription,
- condLibrary, condExecutables, condTestSuites, condBenchmarks,
- BuildInfo, libBuildInfo, buildInfo,
- CondTree, condTreeConstraints, condTreeData)
- import Distribution.PackageDescription.Parse (readPackageDescription)
- ----------------------------------------------------------------
- cabalParseFile :: FilePath -> IO GenericPackageDescription
- cabalParseFile = readPackageDescription silent
- -- Causes error, catched in the upper function.
- cabalBuildInfo :: GenericPackageDescription -> IO BuildInfo
- cabalBuildInfo pd =
- return . fromJust $ fromLibrary pd <|> fromExecutable pd
- where
- fromLibrary c = libBuildInfo . condTreeData <$> condLibrary c
- fromExecutable c = buildInfo . condTreeData . snd <$> toMaybe (condExecutables c)
- toMaybe [] = Nothing
- toMaybe (x:_) = Just x
- getDepsOfPairs :: [(a1, CondTree v [b] a)] -> [b]
- getDepsOfPairs = concatMap (condTreeConstraints . snd)
- allDependsOfDescription :: GenericPackageDescription -> [Dependency]
- allDependsOfDescription pd =
- concat [depLib, depExe, depTests, depBench]
- where
- depLib = concatMap condTreeConstraints (maybeToList . condLibrary $ pd)
- depExe = getDepsOfPairs . condExecutables $ pd
- depTests = getDepsOfPairs . condTestSuites $ pd
- depBench = getDepsOfPairs . condBenchmarks $ pd
- getDependencyPackageName :: Dependency -> String
- getDependencyPackageName (Dependency (PackageName n) _) = n
- cabalDependPackages :: GenericPackageDescription -> IO [String]
- cabalDependPackages =
- return . toList . fromList
- . map getDependencyPackageName
- . allDependsOfDescription
|