Add transitional rules for the alternative layout rule
[ghc-hetmet.git] / compiler / ghci / Linker.lhs
index a7e9492..d2459f4 100644 (file)
@@ -528,7 +528,16 @@ dieWith span msg = ghcError (ProgramError (showSDoc (mkLocMessage span msg)))
 checkNonStdWay :: DynFlags -> SrcSpan -> IO (Maybe String)
 checkNonStdWay dflags srcspan = do
   let tag = buildTag dflags
-  if null tag || tag == "dyn" then return Nothing else do
+  if null tag {-  || tag == "dyn" -} then return Nothing else do
+    -- see #3604: object files compiled for way "dyn" need to link to the
+    -- dynamic packages, so we can't load them into a statically-linked GHCi.
+    -- we have to treat "dyn" in the same way as "prof".
+    --
+    -- In the future when GHCi is dynamically linked we should be able to relax
+    -- this, but they we may have to make it possible to load either ordinary
+    -- .o files or -dynamic .o files into GHCi (currently that's not possible
+    -- because the dynamic objects contain refs to e.g. __stginit_base_Prelude_dyn
+    -- whereas we have __stginit_base_Prelude_.
   let default_osuf = phaseInputExt StopLn
   if objectSuf dflags == default_osuf
        then failNonStd srcspan
@@ -1075,23 +1084,20 @@ loadFrameworks pkg
 -- If it isn't present, we assume it's a dynamic library.
 locateOneObj :: [FilePath] -> String -> IO LibrarySpec
 locateOneObj dirs lib
- | not picIsOn
+  | not isDynamicGhcLib
     -- When the GHC package was not compiled as dynamic library 
-    -- (=__PIC__ not set), we search for .o libraries first.
+    -- (=DYNAMIC not set), we search for .o libraries.
   = do { mb_obj_path <- findFile mk_obj_path dirs 
        ; case mb_obj_path of
            Just obj_path -> return (Object obj_path)
-           Nothing       -> 
-                do { mb_lib_path <- findFile mk_dyn_lib_path dirs
-                   ; case mb_lib_path of
-                       Just _  -> return (DLL dyn_lib_name)
-                       Nothing -> return (DLL lib) }} -- We assume
- | otherwise
-    -- When the GHC package was compiled as dynamic library (=__PIC__ set),
+           Nothing       -> return (DLL lib) }
+
+  | otherwise
+    -- When the GHC package was compiled as dynamic library (=DYNAMIC set),
     -- we search for .so libraries first.
   = do { mb_lib_path <- findFile mk_dyn_lib_path dirs
        ; case mb_lib_path of
-           Just _ -> return (DLL (lib ++ "-ghc" ++ cProjectVersion))
+           Just _ -> return (DLL dyn_lib_name)
            Nothing       ->
                 do { mb_obj_path <- findFile mk_obj_path dirs
                    ; case mb_obj_path of