on 4de7dfd help sign in
stackage/Stackage/InstallInfo.hs
58 lines 2.1 kB history raw
1module Stackage.InstallInfo
2 ( getInstallInfo
3 , iiPackageList
4 ) where
6import qualified Data.Map as Map
7import qualified Data.Set as Set
8import Stackage.Config
9import Stackage.HaskellPlatform
10import Stackage.LoadDatabase
11import Stackage.NarrowDatabase
12import Stackage.Types
13import Stackage.Util
14import Data.Version (showVersion)
16dropExcluded :: BuildSettings
17 -> Map PackageName (VersionRange, Maintainer)
18 -> Map PackageName (VersionRange, Maintainer)
19dropExcluded bs m0 =
20 Set.foldl' (flip Map.delete) m0 (excludedPackages bs)
22getInstallInfo :: BuildSettings -> IO InstallInfo
23getInstallInfo settings = do
24 hp <- loadHaskellPlatform settings
25 let allPackages'
26 | requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
27 | otherwise = stablePackages settings
28 allPackages = dropExcluded settings allPackages'
29 let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
30 pdb <- loadPackageDB totalCore allPackages
31 final <- narrowPackageDB pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
33 putStrLn "Printing build plan to build-plan.log"
34 writeFile "build-plan.log" $ unlines $ map showDep $ Map.toList final
35 return InstallInfo
36 { iiCore = totalCore
37 , iiPackages = Map.map (\(v, _, m) -> (v, m)) final
38 , iiOptionalCore = Map.fromList $ map (\(PackageIdentifier p v) -> (p, v)) $ Set.toList $ hplibs hp
39 , iiPackageDB = pdb
40 }
42showDep :: (PackageName, (Version, [PackageName], Maintainer)) -> String
43showDep (name, (version, deps, Maintainer m)) =
44 concat
45 [ unP name
46 , "-"
47 , showVersion version
48 , " ("
49 , m
50 , ")"
51 , ": "
52 , unwords $ map unP deps
53 ]
54 where
55 unP (PackageName p) = p
57iiPackageList :: InstallInfo -> [String]
58iiPackageList = map packageVersionString . Map.toList . Map.map fst . iiPackages