summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-07-02 15:04:05 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-07-02 15:04:05 +0100
commit62164cf56bd91ddd9449d345f8d710fbbdbf4827 (patch)
tree6895bb96b0b843b9e835e325581fa53cbbc23696
parent330769c9ca21c2fb37e8273283832ec0e9a6c117 (diff)
downloadhaskell-62164cf56bd91ddd9449d345f8d710fbbdbf4827.tar.gz
-package P was loading all versions of P in GHCi (#7030)
-package P means "the latest version of P" if multiple versions are installed. It was working as advertised, but we were eagerly *linking* all versions of P, which might cause an error if the package has some C code, because we can't link multiple instances of the same symbol.
-rw-r--r--compiler/main/Packages.lhs4
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/main/Packages.lhs b/compiler/main/Packages.lhs
index 9831367fff..5bea131088 100644
--- a/compiler/main/Packages.lhs
+++ b/compiler/main/Packages.lhs
@@ -767,7 +767,9 @@ mkPackageState dflags pkgs0 preload0 this_package = do
--
let preload1 = [ installedPackageId p | f <- flags, p <- get_exposed f ]
- get_exposed (ExposePackage s) = filter (matchingStr s) pkgs2
+ get_exposed (ExposePackage s)
+ = take 1 $ sortByVersion (filter (matchingStr s) pkgs2)
+ -- -package P means "the latest version of P" (#7030)
get_exposed (ExposePackageId s) = filter (matchingId s) pkgs2
get_exposed _ = []