[commit: ghc] master: Fix #8770 (dc08091)

git at git.haskell.org git at git.haskell.org
Mon Feb 17 07:49:08 UTC 2014


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/dc080915597065087b3821b3ded0a621a7e2fae7/ghc

>---------------------------------------------------------------

commit dc080915597065087b3821b3ded0a621a7e2fae7
Author: Austin Seipp <austin at well-typed.com>
Date:   Thu Feb 13 07:17:30 2014 -0600

    Fix #8770
    
    As usual, Mac OS X is extremely annoying (or the software is, anyway),
    because not only does it load dynamic libraries with the .dylib
    extension, but also the .so extension. For whatever reason. At least
    it's easy to fix.
    
    Signed-off-by: Austin Seipp <austin at well-typed.com>


>---------------------------------------------------------------

dc080915597065087b3821b3ded0a621a7e2fae7
 compiler/ghci/Linker.lhs      |   11 ++++++++++-
 compiler/main/DriverPhases.hs |   10 +++++-----
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/compiler/ghci/Linker.lhs b/compiler/ghci/Linker.lhs
index eb3e226..274f2fb 100644
--- a/compiler/ghci/Linker.lhs
+++ b/compiler/ghci/Linker.lhs
@@ -378,7 +378,16 @@ preloadLib dflags lib_paths framework_paths lib_spec
              -> do maybe_errstr <- loadDLL (mkSOName platform dll_unadorned)
                    case maybe_errstr of
                       Nothing -> maybePutStrLn dflags "done"
-                      Just mm -> preloadFailed mm lib_paths lib_spec
+                      Just mm | platformOS platform /= OSDarwin ->
+                        preloadFailed mm lib_paths lib_spec
+                      Just mm | otherwise -> do
+                        -- As a backup, on Darwin, try to also load a .so file
+                        -- since (apparently) some things install that way - see
+                        -- ticket #8770.
+                        err2 <- loadDLL $ ("lib" ++ dll_unadorned) <.> "so"
+                        case err2 of
+                          Nothing -> maybePutStrLn dflags "done"
+                          Just _  -> preloadFailed mm lib_paths lib_spec
 
           DLLPath dll_path
              -> do maybe_errstr <- loadDLL dll_path
diff --git a/compiler/main/DriverPhases.hs b/compiler/main/DriverPhases.hs
index 2de19b9..c406f6a 100644
--- a/compiler/main/DriverPhases.hs
+++ b/compiler/main/DriverPhases.hs
@@ -240,14 +240,14 @@ objish_suffixes :: Platform -> [String]
 -- Use the appropriate suffix for the system on which
 -- the GHC-compiled code will run
 objish_suffixes platform = case platformOS platform of
-                           OSMinGW32 -> [ "o", "O", "obj", "OBJ" ]
-                           _         -> [ "o" ]
+  OSMinGW32 -> [ "o", "O", "obj", "OBJ" ]
+  _         -> [ "o" ]
 
 dynlib_suffixes :: Platform -> [String]
 dynlib_suffixes platform = case platformOS platform of
-                           OSMinGW32 -> ["dll", "DLL"]
-                           OSDarwin  -> ["dylib"]
-                           _         -> ["so"]
+  OSMinGW32 -> ["dll", "DLL"]
+  OSDarwin  -> ["dylib", "so"]
+  _         -> ["so"]
 
 isHaskellishSuffix, isHaskellSrcSuffix, isCishSuffix, isExtCoreSuffix,
     isHaskellUserSrcSuffix



More information about the ghc-commits mailing list