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