FIX part of #1372, improvements to the recompilation checker
[ghc-hetmet.git] / compiler / main / DriverPipeline.hs
index 22ce65b..e9fb307 100644 (file)
@@ -35,7 +35,7 @@ import Module
 import UniqFM          ( eltsUFM )
 import ErrUtils
 import DynFlags
-import StaticFlags     ( v_Ld_inputs, opt_Static, WayName(..) )
+import StaticFlags     ( v_Ld_inputs, opt_Static, opt_HardwireLibPaths, WayName(..) )
 import Config
 import Panic
 import Util
@@ -156,7 +156,9 @@ compile hsc_env mod_summary maybe_old_linkable old_iface mod_index nmods = do
              return (CompOK details iface maybe_old_linkable)
        handleBatch (HscRecomp hasStub, iface, details)
            | isHsBoot src_flavour
-               = return (CompOK details iface Nothing)
+               = do SysTools.touch dflags' "Touching object file"
+                                   object_filename
+                    return (CompOK details iface Nothing)
            | otherwise
                = do stub_unlinked <- getStubLinkable hasStub
                     (hs_unlinked, unlinked_time) <-
@@ -638,15 +640,15 @@ runPhase (Hsc src_flavour) stop dflags0 basename suff input_fn get_output_fn _ma
            dflags = dflags0 { includePaths = current_dir : paths }
        
   -- gather the imports and module name
-        (hspp_buf,mod_name) <- 
+        (hspp_buf,mod_name,imps,src_imps) <- 
             case src_flavour of
                ExtCoreFile -> do {  -- no explicit imports in ExtCore input.
                                  ; m <- getCoreModuleName input_fn
-                                 ; return (Nothing, mkModuleName m) }
+                                 ; return (Nothing, mkModuleName m, [], []) }
 
                other -> do { buf <- hGetStringBuffer input_fn
-                           ; (_,_,L _ mod_name) <- getImports dflags buf input_fn
-                           ; return (Just buf, mod_name) }
+                           ; (src_imps,imps,L _ mod_name) <- getImports dflags buf input_fn
+                           ; return (Just buf, mod_name, imps, src_imps) }
 
   -- Build a ModLocation to pass to hscMain.
   -- The source filename is rather irrelevant by now, but it's used
@@ -733,8 +735,8 @@ runPhase (Hsc src_flavour) stop dflags0 basename suff input_fn get_output_fn _ma
                                        ms_location  = location4,
                                        ms_hs_date   = src_timestamp,
                                        ms_obj_date  = Nothing,
-                                       ms_imps      = unused_field,
-                                       ms_srcimps   = unused_field }
+                                       ms_imps      = imps,
+                                       ms_srcimps   = src_imps }
 
   -- run the compiler!
        mbResult <- hscCompileOneShot hsc_env
@@ -1171,7 +1173,9 @@ linkBinary dflags o_files dep_packages = do
     -- dependencies, and eliminating duplicates.
 
     pkg_lib_paths <- getPackageLibraryPath dflags dep_packages
-    let pkg_lib_path_opts = map ("-L"++) pkg_lib_paths
+    let pkg_lib_path_opts = concat (map get_pkg_lib_path_opts pkg_lib_paths)
+       get_pkg_lib_path_opts l | opt_HardwireLibPaths && not opt_Static = ["-L" ++ l, "-Wl,-rpath", "-Wl," ++ l]
+                               | otherwise = ["-L" ++ l]
 
     let lib_paths = libraryPaths dflags
     let lib_path_opts = map ("-L"++) lib_paths
@@ -1433,8 +1437,6 @@ hscNextPhase dflags other hsc_lang =
 
 
 hscMaybeAdjustTarget :: DynFlags -> Phase -> HscSource -> HscTarget -> HscTarget
-hscMaybeAdjustTarget dflags stop HsBootFile current_hsc_lang 
-  = HscNothing         -- No output (other than Foo.hi-boot) for hs-boot files
 hscMaybeAdjustTarget dflags stop other current_hsc_lang 
   = hsc_lang 
   where