-----------------------------------------------------------------------------
--- $Id: DriverMkDepend.hs,v 1.24 2002/10/09 15:03:52 simonpj Exp $
+-- $Id: DriverMkDepend.hs,v 1.27 2003/01/08 15:28:05 simonmar Exp $
--
-- GHC Driver
--
#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
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
+ Right (mod,loc)
+ -- 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
- Nothing -> throwDyn (ProgramError
+ -> 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))
+
+ Left _ -> throwDyn (ProgramError
(src ++ ": " ++ "can't locate import `" ++ imp_mod ++ "'" ++
if is_source then " (SOURCE import)" else ""))