[project @ 2001-05-01 16:01:06 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / DriverPipeline.hs
index f0e2db9..4e70ec4 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $Id: DriverPipeline.hs,v 1.62 2001/03/28 16:51:03 simonmar Exp $
+-- $Id: DriverPipeline.hs,v 1.65 2001/05/01 16:01:06 simonmar Exp $
 --
 -- GHC Driver
 --
@@ -366,8 +366,9 @@ run_phase MkDependHS basename suff input_fn _output_fn = do
    src <- readFile input_fn
    let (import_sources, import_normals, module_name) = getImports src
 
-   deps_sources <- mapM (findDependency True  src)  import_sources
-   deps_normals <- mapM (findDependency False src) import_normals
+   let orig_fn = basename ++ '.':suff
+   deps_sources <- mapM (findDependency True  orig_fn) import_sources
+   deps_normals <- mapM (findDependency False orig_fn) import_normals
    let deps = deps_sources ++ deps_normals
 
    osuf_opt <- readIORef v_Object_suf
@@ -446,7 +447,7 @@ run_phase Hsc basename suff input_fn output_fn
        cmdline_includes <- dynFlag cmdlineHcIncludes -- -#include options
 
        let cc_injects = unlines (map mk_include 
-                               (c_includes ++ reverse cmdline_includes))
+                                (c_includes ++ reverse cmdline_includes))
            mk_include h_file = 
                case h_file of 
                   '"':_{-"-} -> "#include "++h_file
@@ -481,8 +482,7 @@ run_phase Hsc basename suff input_fn output_fn
                                  else return False
 
         -- build a ModuleLocation to pass to hscMain.
-        modsrc <- readFile input_fn
-        let (srcimps,imps,mod_name) = getImports modsrc
+        (srcimps,imps,mod_name) <- getImportsFromFile input_fn
 
        Just (mod, location)
           <- mkHomeModuleLocn mod_name basename (basename ++ '.':suff)
@@ -992,6 +992,20 @@ compile ghci_mode summary source_unchanged have_object
                                hscStubCOutName = basename ++ "_stub.c",
                                hscStubHOutName = basename ++ "_stub.h" }
 
+   -- figure out which header files to #include in a generated .hc file
+   c_includes <- getPackageCIncludes
+   cmdline_includes <- dynFlag cmdlineHcIncludes -- -#include options
+
+   let cc_injects = unlines (map mk_include 
+                                 (c_includes ++ reverse cmdline_includes))
+       mk_include h_file = 
+       case h_file of 
+           '"':_{-"-} -> "#include "++h_file
+           '<':_      -> "#include "++h_file
+           _          -> "#include \""++h_file++"\""
+
+   writeIORef v_HCHeader cc_injects
+
    -- run the compiler
    hsc_result <- hscMain ghci_mode dyn_flags'
                         (ms_mod summary) location