X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=distrib%2Fcompare%2FBuildInfo.hs;fp=distrib%2Fcompare%2FBuildInfo.hs;h=547e5ac85372cc56a89a1de9b4040d734af9152b;hp=0000000000000000000000000000000000000000;hb=42b40db07ce70b89f867247809c4e930fd82a6f6;hpb=3ce328c715c8ae97325d21216a4dd51050876c62 diff --git a/distrib/compare/BuildInfo.hs b/distrib/compare/BuildInfo.hs new file mode 100644 index 0000000..547e5ac --- /dev/null +++ b/distrib/compare/BuildInfo.hs @@ -0,0 +1,41 @@ + +module BuildInfo where + +import Control.Monad.State + +data BuildInfo = BuildInfo { + biThingVersionMap :: ThingVersionMap, + biWays :: Ways + } +-- Mapping from thing (e.g. "Cabal") to version (e.g. "1.10.0.0") +type ThingVersionMap = [(String, String)] +-- The list of ways in the order the build system uses them, e.g. +-- ["v", "p", "dyn"] => we have ".depend-v-p-dyn.haskell" files +type Ways = [String] + +addThingVersion :: ThingVersionMap -> String -> String -> Maybe ThingVersionMap +addThingVersion mapping thing version + = case lookup thing mapping of + Just version' -> + if version == version' + then Just mapping + else Nothing + Nothing -> + Just ((thing, version) : mapping) + +getThingVersionMap :: State BuildInfo ThingVersionMap +getThingVersionMap = do st <- get + return $ biThingVersionMap st + +getWays :: State BuildInfo Ways +getWays = do st <- get + return $ biWays st + +putThingVersionMap :: ThingVersionMap -> State BuildInfo () +putThingVersionMap tm = do st <- get + put $ st { biThingVersionMap = tm } + +putWays :: Ways -> State BuildInfo () +putWays ws = do st <- get + put $ st { biWays = ws } +