X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FDriverMkDepend.hs;h=c6d32909b63065b1177071203f9a58b781053973;hb=d062db6e01b90d2fdebe39865db930096de3c70b;hp=607ba78d2896ccd6203fd59e6f9f1a35daaead0b;hpb=fb1b5b0773c7efd0fba32e580afd91f99b9fcc89;p=ghc-hetmet.git diff --git a/ghc/compiler/main/DriverMkDepend.hs b/ghc/compiler/main/DriverMkDepend.hs index 607ba78..c6d3290 100644 --- a/ghc/compiler/main/DriverMkDepend.hs +++ b/ghc/compiler/main/DriverMkDepend.hs @@ -1,5 +1,5 @@ ----------------------------------------------------------------------------- --- $Id: DriverMkDepend.hs,v 1.23 2002/09/18 10:51:01 simonmar Exp $ +-- $Id: DriverMkDepend.hs,v 1.26 2002/11/08 12:52:51 simonmar Exp $ -- -- GHC Driver -- @@ -12,17 +12,17 @@ module DriverMkDepend where #include "HsVersions.h" import DriverState -import DriverUtil ( add, softGetDirectoryContents ) +import DriverUtil ( add, softGetDirectoryContents, replaceFilenameSuffix ) import DriverFlags import SysTools ( newTempName ) import qualified SysTools import Module ( ModuleName, ModLocation(..), moduleNameUserString, isHomeModule ) -import Finder ( findModuleDep ) +import Finder ( findModule, hiBootExt, hiBootVerExt ) import Util ( global ) import Panic -import DATA_IOREF ( IORef, newIORef, readIORef, writeIORef ) +import DATA_IOREF ( IORef, readIORef, writeIORef ) import EXCEPTION import Directory @@ -171,13 +171,33 @@ findDependency is_source src imp = do if imp_mod `elem` excl_mods then return Nothing else do - r <- findModuleDep imp is_source + r <- findModule imp case r of Just (mod,loc) - | isHomeModule mod || include_prelude + -- not in this package: we don't need a dependency + | not (isHomeModule mod) && not include_prelude + -> return Nothing + + -- normal import: just depend on the .hi file + | not is_source -> return (Just (ml_hi_file loc, not is_source)) + + -- if it's a source import, we want to generate a dependency + -- on the .hi-boot file, not the .hi file | otherwise - -> return Nothing + -> let hi_file = ml_hi_file loc + boot_hi_file = replaceFilenameSuffix hi_file hiBootExt + boot_ver_hi_file = replaceFilenameSuffix hi_file hiBootVerExt + in do + b <- doesFileExist boot_ver_hi_file + if b + then return (Just (boot_ver_hi_file, not is_source)) + else do + b <- doesFileExist boot_hi_file + if b + then return (Just (boot_hi_file, not is_source)) + else return (Just (hi_file, not is_source)) + Nothing -> throwDyn (ProgramError (src ++ ": " ++ "can't locate import `" ++ imp_mod ++ "'" ++ if is_source then " (SOURCE import)" else ""))