X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FPackages.lhs;h=7c1b3261900d54f518cf4b05f208002394d5ca99;hb=0069a47ad1a539c894f66163cf30c7d98dc9b016;hp=3e2c3ef47d06316022efbd81bcb0a05c0502c6e1;hpb=2cd930397966d27a221998c8ac060151e2027e90;p=ghc-hetmet.git diff --git a/compiler/main/Packages.lhs b/compiler/main/Packages.lhs index 3e2c3ef..7c1b326 100644 --- a/compiler/main/Packages.lhs +++ b/compiler/main/Packages.lhs @@ -49,7 +49,7 @@ import Outputable import System.Environment ( getEnv ) import Distribution.InstalledPackageInfo hiding (depends) -import Distribution.Package hiding (depends) +import Distribution.Package hiding (depends, PackageId) import Distribution.Text import Distribution.Version import FastString @@ -389,6 +389,7 @@ findWiredInPackages dflags pkgs preload this_package = do (basePackageId, [""]), (rtsPackageId, [""]), (haskell98PackageId, [""]), + (sybPackageId, [""]), (thPackageId, [""]), (dphSeqPackageId, [""]), (dphParPackageId, [""]), @@ -413,11 +414,9 @@ findWiredInPackages dflags pkgs preload this_package = do -> IO (Maybe (PackageIdentifier, PackageId)) findWiredInPackage pkgs wired_pkg = let all_ps = [ p | p <- pkgs, p `matches` wired_pkg ] in - case filter exposed all_ps of - [] -> case all_ps of - [] -> notfound - many -> pick (head (sortByVersion many)) - many -> pick (head (sortByVersion many)) + case all_ps of + [] -> notfound + many -> pick (head (sortByVersion many)) where suffixes = snd wired_pkg notfound = do @@ -444,9 +443,18 @@ findWiredInPackages dflags pkgs preload this_package = do let wired_in_ids = catMaybes mb_wired_in_ids - deleteOtherWiredInPackages pkgs = filterOut bad pkgs - where bad p = any (p `matches`) wired_in_pkgids - && package p `notElem` map fst wired_in_ids + -- this is old: we used to assume that if there were + -- multiple versions of wired-in packages installed that + -- they were mutually exclusive. Now we're assuming that + -- you have one "main" version of each wired-in package + -- (the latest version), and the others are backward-compat + -- wrappers that depend on this one. e.g. base-4.0 is the + -- latest, base-3.0 is a compat wrapper depending on base-4.0. + {- + deleteOtherWiredInPackages pkgs = filterOut bad pkgs + where bad p = any (p `matches`) wired_in_pkgids + && package p `notElem` map fst wired_in_ids + -} updateWiredInDependencies pkgs = map upd_pkg pkgs where upd_pkg p = p{ package = upd_pid (package p), @@ -457,9 +465,9 @@ findWiredInPackages dflags pkgs preload this_package = do ((x, y):_) -> x{ pkgName = PackageName (packageIdString y), pkgVersion = Version [] [] } - pkgs1 = deleteOtherWiredInPackages pkgs + -- pkgs1 = deleteOtherWiredInPackages pkgs - pkgs2 = updateWiredInDependencies pkgs1 + pkgs2 = updateWiredInDependencies pkgs preload1 = map upd_pid preload