| Cabal-1.2.4.0: A framework for packaging Haskell software | Source code | Contents | Index
Distribution.Configuration |
Portability | portable
Stability | alpha
Maintainer | Isaac Jones <ijones@syntaxpolice.org>
Description
Configurations
Synopsis
data Flag = MkFlag {
flagName :: String
flagDescription :: String
flagDefault :: Bool
}
data ConfVar
= OS String
| Arch String
| Flag ConfFlag
| Impl String VersionRange
data Condition c
= Var c
| Lit Bool
| CNot (Condition c)
| COr (Condition c) (Condition c)
| CAnd (Condition c) (Condition c)
parseCondition :: ReadP r (Condition ConfVar)
simplifyCondition :: Condition c -> (c -> Either d Bool) -> (Condition d, [d])
data CondTree v c a = CondNode {
condTreeData :: a
condTreeConstraints :: c
condTreeComponents :: [(Condition v, CondTree v c a, Maybe (CondTree v c a))]
}
ppCondTree :: Show v => CondTree v c a -> (c -> Doc) -> Doc
mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b
resolveWithFlags :: Monoid a => [(String, [Bool])] -> String -> String -> (String, Version) -> [CondTree ConfVar [d] a] -> ([d] -> DepTestRslt [d]) -> Either [d] ([a], [d], [(String, Bool)])
ignoreConditions :: (Monoid a, Monoid c) => CondTree v c a -> (a, c)
data DepTestRslt d
= DepOk
| MissingDeps d
Documentation
data Flag | Source
A flag can represent a feature to be included, or a way of linking a target against its dependencies, or in fact whatever you can think of.
Constructors
MkFlag |
flagName :: String |
flagDescription :: String |
flagDefault :: Bool |
Instances
Show Flag
data ConfVar | Source
A `ConfVar` represents the variable type used.
Constructors
OS String |
Arch String |
Flag ConfFlag |
Impl String VersionRange |
Instances
Eq ConfVar
Show ConfVar
data Condition c | Source
A boolean expression parameterized over the variable type used.
Constructors
Var c |
Lit Bool |
CNot (Condition c) |
COr (Condition c) (Condition c) |
CAnd (Condition c) (Condition c) |
Instances
Show c => Show (Condition c)
parseCondition :: ReadP r (Condition ConfVar) | Source
Parse a configuration condition from a string.
simplifyCondition | Source
:: Condition c |
-> (c -> Either d Bool) | (partial) variable assignment
-> (Condition d, [d]) |
Simplify the condition and return its free variables.
data CondTree v c a | Source
Constructors
CondNode |
condTreeData :: a |
condTreeConstraints :: c |
condTreeComponents :: [(Condition v, CondTree v c a, Maybe (CondTree v c a))] |
Instances
(Show v, Show c) => Show (CondTree v c a)
ppCondTree :: Show v => CondTree v c a -> (c -> Doc) -> Doc | Source
mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b | Source
resolveWithFlags | Source
:: Monoid a |
=> [(String, [Bool])] | Domain for each flag name, will be tested in order.
-> String | OS name, as returned by System.Info.os
-> String | arch name, as returned by System.Info.arch
-> (String, Version) | Compiler name + version
-> [CondTree ConfVar [d] a] |
-> ([d] -> DepTestRslt [d]) | Dependency test function.
-> Either [d] ([a], [d], [(String, Bool)]) |
Try to find a flag assignment that satisfies the constaints of all trees. Returns either the missing dependencies, or a tuple containing the resulting data, the associated dependencies, and the chosen flag assignments. In case of failure, the _smallest_ number of of missing dependencies is returned. [XXX: Could also be specified with a function argument.] XXX: The current algorithm is rather naive. A better approach would be to: Rule out possible paths, by taking a look at the associated dependencies. Infer the required values for the conditions of these paths, and calculate the required domains for the variables used in these conditions. Then picking a flag assignment would be linear (I guess). This would require some sort of SAT solving, though, thus it's not implemented unless we really need it.
ignoreConditions :: (Monoid a, Monoid c) => CondTree v c a -> (a, c) | Source
Flatten a CondTree. This will resolve the CondTree by taking all possible paths into account. Note that since branches represent exclusive choices this may not result in a "sane" result.
data DepTestRslt d | Source
Result of dependency test. Isomorphic to `Maybe d` but renamed for clarity.
Constructors
DepOk |
MissingDeps d |
Instances
Monoid d => Monoid (DepTestRslt d)
Produced by Haddock version 0.9