@@ -9,12 +9,14 @@ import qualified Data.Map as Map
99import qualified Data.Set as Set
1010import Data.Version (showVersion)
1111import qualified Distribution.Text
12+import Distribution.Text (display)
1213import Distribution.Version (simplifyVersionRange, withinRange)
1314import Stackage.HaskellPlatform
1415import Stackage.LoadDatabase
1516import Stackage.NarrowDatabase
1617import Stackage.Types
1718import Stackage.Util
19+import Stackage.GhcPkg
1820
1921dropExcluded :: SelectSettings
2022 -> Map PackageName (VersionRange, Maintainer)
@@ -26,22 +28,34 @@ getInstallInfo :: SelectSettings -> IO InstallInfo
2628getInstallInfo settings = do
2729 putStrLn "Loading Haskell Platform"
2830 hp <- loadHaskellPlatform settings
31+
32+ core <-
33+ if useGlobalDatabase settings
34+ then do
35+ putStrLn "Loading core packages from global database"
36+ getGlobalPackages
37+ else return $ hpcore hp
38+ let coreMap = Map.unions
39+ $ map (\(PackageIdentifier k v) -> Map.singleton k v)
40+ $ Set.toList core
41+
2942 let allPackages'
3043 | requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
3144 | otherwise = stablePackages settings
3245 allPackages = dropExcluded settings allPackages'
33− let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
46+ let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) core
3447
3548 putStrLn "Loading package database"
3649 pdb <- loadPackageDB settings totalCore allPackages
3750
3851 putStrLn "Narrowing package database"
39− final <- narrowPackageDB settings pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
52+ final <- narrowPackageDB settings totalCore pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
4053
4154 putStrLn "Printing build plan to build-plan.log"
4255 writeFile "build-plan.log" $ unlines $ map showDep $ Map.toList final
4356
44− case checkBadVersions settings pdb final of
57+ putStrLn "Checking for bad versions"
58+ case checkBadVersions settings coreMap pdb final of
4559 badVersions
4660 | Map.null badVersions -> return ()
4761 | otherwise -> do
@@ -96,10 +110,11 @@ bpPackageList = map packageVersionString . Map.toList . Map.map spiVersion . bpP
96110
97111-- | Check for internal mismatches in required and actual package versions.
98112checkBadVersions :: SelectSettings
113+ -> Map PackageName Version -- ^ core
99114 -> PackageDB
100115 -> Map PackageName BuildInfo
101116 -> Map String (Map PackageName (Version, VersionRange))
102−checkBadVersions settings (PackageDB pdb) buildPlan =
117+checkBadVersions settings core (PackageDB pdb) buildPlan =
103118 Map.unions $ map getBadVersions $ Map.toList $ Map.filterWithKey unexpectedFailure buildPlan
104119 where
105120 unexpectedFailure name _ = name `Set.notMember` expectedFailuresSelect settings
@@ -123,9 +138,13 @@ checkBadVersions settings (PackageDB pdb) buildPlan =
123138 checkPackage :: PackageName -> VersionRange -> Map PackageName (Version, VersionRange)
124139 checkPackage name vr =
125140 case Map.lookup name buildPlan of
126− -- Can't find the dependency. Could be part of core, so just ignore
127− -- it.
128− Nothing -> Map.empty
141+ Nothing ->
142+ case Map.lookup name core of
143+ -- Might be part of extra-core
144+ Nothing -> Map.empty
145+ Just version
146+ | version `withinRange` vr -> Map.empty
147+ | otherwise -> Map.singleton name (version, vr)
129148 Just bi
130149 | biVersion bi `withinRange` vr -> Map.empty
131150 | otherwise -> Map.singleton name (biVersion bi, vr)