[add support for --ho-dir option
John Meacham <john@repetae.net>**20080212133652] hunk ./Ho/Build.hs 148
-findHoFile :: IORef Done -> FilePath -> Maybe Module -> SourceHash -> IO (Maybe FilePath)
-findHoFile done_ref fp _ sh = do
+hoFile :: FilePath -> Maybe Module -> SourceHash -> FilePath
+hoFile fp mm sh = case optHoDir options of
+    Nothing -> replaceSuffix "ho" fp
+    Just hdir -> case mm of
+        Nothing -> hdir ++ "/" ++ show sh ++ ".ho"
+        Just m -> hdir ++ "/" ++ map ft (show m) ++ ".ho" where
+            ft '/' = '.'
+            ft x = x
+
+findHoFile :: IORef Done -> FilePath -> Maybe Module -> SourceHash -> IO (Bool,FilePath)
+findHoFile done_ref fp mm sh = do
hunk ./Ho/Build.hs 160
-    if sh `Map.member` knownSourceMap done then return Nothing else do
-    let honame = replaceSuffix "ho" fp
-    onErr (return Nothing) (readHoFile honame) $ \ (hoh,hidep,ho) -> do
+    let honame = hoFile fp mm sh
+    if sh `Map.member` knownSourceMap done then return (False,honame) else do
+    onErr (return (False,honame)) (readHoFile honame) $ \ (hoh,hidep,ho) -> do
hunk ./Ho/Build.hs 164
-            Just (fn,_,_a) -> return (Just fn)
+            Just (fn,_,_a) -> return (True,fn)
hunk ./Ho/Build.hs 166
-                honame <- shortenPath honame
hunk ./Ho/Build.hs 168
-                return (Just honame)
+                return (True,honame)
hunk ./Ho/Build.hs 184
-    mho <- findHoFile done_ref fn mm hash
+    (foundho,mho) <- findHoFile done_ref fn mm hash
hunk ./Ho/Build.hs 199
-            fn' <- shortenPath fn
-            let sc (Right mod) = SourceParsed hash ds mod fn
-                sc (Left lbs) = SourceRaw hash ds m lbs fn
+            let sc (Right mod) = SourceParsed hash ds mod fn mho
+                sc (Left lbs) = SourceRaw hash ds m lbs fn mho
hunk ./Ho/Build.hs 202
-            case mho of
-                Nothing -> putVerboseLn $ printf "%-23s [%s]" (show m) fn'
-                Just ho -> putVerboseLn $ printf "%-23s [%s] <%s>" (show m) fn' ho
+            fn' <- shortenPath fn
+            mho' <- shortenPath mho
+            case foundho of
+                False -> putVerboseLn $ printf "%-23s [%s]" (show m) fn'
+                True -> putVerboseLn $ printf "%-23s [%s] <%s>" (show m) fn' mho'
hunk ./Ho/Build.hs 219
-    = SourceParsed { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModule :: HsModule, sourceFP :: FilePath }
-    | SourceRaw    { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModName :: Module, sourceLBS :: LBS.ByteString, sourceFP :: FilePath }
+    = SourceParsed { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModule :: HsModule, sourceFP :: FilePath, sourceHoName :: FilePath }
+    | SourceRaw    { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModName :: Module, sourceLBS :: LBS.ByteString, sourceFP :: FilePath, sourceHoName :: FilePath }
hunk ./Ho/Build.hs 336
-                                 hohHash = hh,
+                                 hohHash       = hh,
hunk ./Ho/Build.hs 340
-            recordHoFile newHo idep (map (replaceSuffix "ho" . sourceFP) sc) hoh
-            f (cho' `mappend` mempty { choFiles = Map.fromList $ hohDepends hoh, choModules = mprovides hoh }) (libHo `mappend` newHo)  scs
+            recordHoFile newHo idep (map sourceHoName sc) hoh
+            f (cho' `mappend` mempty { choFiles = Map.fromList $ hohDepends hoh  }) (libHo `mappend` newHo)  scs
hunk ./Ho/Type.hs 29
-    choModules :: Map.Map Module MD5.Hash,
hunk ./Ho/Type.hs 39
-        choModules = choModules a `mappend` choModules b,
hunk ./Ho/Type.hs 47
-collectedHo = CollectedHo { choFiles = mempty, choModules = mempty, choExternalNames = mempty, choHo = mempty, choVarMap = mempty }
+collectedHo = CollectedHo { choFiles = mempty, choExternalNames = mempty, choHo = mempty, choVarMap = mempty }