ipid_map = listToFM [ (installedPackageId p, p) | p <- pkgs0 ]
+ -- pkgs0 with duplicate packages filtered out. This is
+ -- important: it is possible for a package in the user package
+ -- DB to have the same IPID as a package in the global DB, and
+ -- we want the former to take precedence. This is not the same
+ -- as shadowing (below), since in this case the two packages
+ -- have the same ABI and are interchangeable.
+ pkgs0_unique = eltsFM ipid_map
+
ipid_selected = depClosure ipid_map [ InstalledPackageId i
| ExposePackageId i <- flags ]
is_ignore IgnorePackage{} = True
is_ignore _ = False
- shadowed = shadowPackages pkgs0 ipid_selected
+ shadowed = shadowPackages pkgs0_unique ipid_selected
- ignored = ignorePackages ignore_flags pkgs0
+ ignored = ignorePackages ignore_flags pkgs0_unique
- pkgs0' = filter (not . (`elemFM` (plusFM shadowed ignored)) . installedPackageId) pkgs0
+ pkgs0' = filter (not . (`elemFM` (plusFM shadowed ignored)) . installedPackageId) pkgs0_unique
broken = findBroken pkgs0'
unusable = shadowed `plusFM` ignored `plusFM` broken
-- Modify the package database according to the command-line flags
-- (-package, -hide-package, -ignore-package, -hide-all-packages).
--
- pkgs1 <- foldM (applyPackageFlag unusable) pkgs0 other_flags
+ pkgs1 <- foldM (applyPackageFlag unusable) pkgs0_unique other_flags
let pkgs2 = filter (not . (`elemFM` unusable) . installedPackageId) pkgs1
-- Here we build up a set of the packages mentioned in -package
-- the name of a shared library is libHSfoo-ghc<version>.so
-- we leave out the _dyn, because it is superfluous
- -- debug RTS includes support for -ticky and -eventlog
+ -- debug RTS includes support for -eventlog
ways2 | WayDebug `elem` map wayName ways1
- = filter ((`notElem` [WayTicky,WayEventLog]) . wayName) ways1
+ = filter ((/= WayEventLog) . wayName) ways1
| otherwise
= ways1