Use extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibraries
authorDuncan Coutts <duncan.coutts@worc.ox.ac.uk>
Wed, 7 Dec 2005 10:56:54 +0000 (10:56 +0000)
committerDuncan Coutts <duncan.coutts@worc.ox.ac.uk>
Wed, 7 Dec 2005 10:56:54 +0000 (10:56 +0000)
Also extend the parser.

ghc/compiler/ghci/Linker.lhs
ghc/compiler/main/ParsePkgConf.y

index 162adbf..15786f4 100644 (file)
@@ -756,8 +756,19 @@ linkPackage :: DynFlags -> PackageConfig -> IO ()
 linkPackage dflags pkg
    = do 
         let dirs      =  Packages.libraryDirs pkg
-        let libs      =  Packages.hsLibraries pkg ++ Packages.extraLibraries pkg
-                               ++ [ lib | '-':'l':lib <- Packages.ldOptions pkg ]
+
+        let libs      =  Packages.hsLibraries pkg
+        -- Because of slight differences between the GHC dynamic linker and
+        -- the native system linker some packages have to link with a
+        -- different list of libraries when using GHCi. Examples include: libs
+        -- that are actually gnu ld scripts, and the possability that the .a
+        -- libs do not exactly match the .so/.dll equivalents. So if the
+        -- package file provides an "extra-ghci-libraries" field then we use
+        -- that instead of the "extra-libraries" field.
+                      ++ (if null (Packages.extraGHCiLibraries pkg)
+                            then Packages.extraLibraries pkg
+                            else Packages.extraGHCiLibraries pkg)
+                      ++ [ lib | '-':'l':lib <- Packages.ldOptions pkg ]
         classifieds   <- mapM (locateOneObj dirs) libs
 
         -- Complication: all the .so's must be loaded before any of the .o's.  
index 6d3f0df..901a5bc 100644 (file)
@@ -82,6 +82,7 @@ field :: { PackageConfig -> PackageConfig }
                        "libraryDirs"       -> p{libraryDirs       = $3}
                        "hsLibraries"       -> p{hsLibraries       = $3}
                        "extraLibraries"    -> p{extraLibraries    = $3}
+                       "extraGHCiLibraries"-> p{extraGHCiLibraries= $3}
                        "includeDirs"       -> p{includeDirs       = $3}
                        "includes"          -> p{includes          = $3}
                        "hugsOptions"       -> p{hugsOptions       = $3}