on 08bb109 help sign in
stackage/Stackage/InstallInfo.hs
51 lines 1.8 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)
16getInstallInfo :: BuildSettings -> IO InstallInfo
17getInstallInfo settings = do
18 hp <- loadHaskellPlatform settings
19 let allPackages
20 | requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
21 | otherwise = stablePackages settings
22 let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
23 pdb <- loadPackageDB totalCore allPackages
24 final <- narrowPackageDB pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
26 putStrLn "Printing build plan to build-plan.log"
27 writeFile "build-plan.log" $ unlines $ map showDep $ Map.toList final
28 return InstallInfo
29 { iiCore = totalCore
30 , iiPackages = Map.map (\(v, _, m) -> (v, m)) final
31 , iiOptionalCore = Map.fromList $ map (\(PackageIdentifier p v) -> (p, v)) $ Set.toList $ hplibs hp
32 , iiPackageDB = pdb
33 }
35showDep :: (PackageName, (Version, [PackageName], Maintainer)) -> String
36showDep (name, (version, deps, Maintainer m)) =
37 concat
38 [ unP name
39 , "-"
40 , showVersion version
41 , " ("
42 , m
43 , ")"
44 , ": "
45 , unwords $ map unP deps
46 ]
47 where
48 unP (PackageName p) = p
50iiPackageList :: InstallInfo -> [String]
51iiPackageList = map packageVersionString . Map.toList . Map.map fst . iiPackages