[project @ 2003-09-10 16:44:03 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / DriverUtil.hs
index 17eb663..d8fe68c 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $Id: DriverUtil.hs,v 1.35 2002/10/17 14:26:18 simonmar Exp $
+-- $Id: DriverUtil.hs,v 1.39 2003/08/20 15:07:57 simonmar Exp $
 --
 -- Utils for the driver
 --
@@ -16,11 +16,12 @@ import Util
 import Panic
 import Config          ( cLeadingUnderscore )
 
-import EXCEPTION as Exception
+import EXCEPTION       ( Exception(..), finally, throwDyn, catchDyn, throw )
+import qualified EXCEPTION as Exception
 import DYNAMIC
 import DATA_IOREF      ( IORef, readIORef, writeIORef )
 
-import Directory       ( getDirectoryContents, doesDirectoryExist )
+import Directory
 import IO
 import List
 import Char
@@ -50,9 +51,9 @@ getOptionsFromSource file
                   | otherwise -> return []
 
 matchOptions s
-  | Just s1 <- my_prefix_match "{-#" s, -- -}
-    Just s2 <- my_prefix_match "OPTIONS" (remove_spaces s1),
-    Just s3 <- my_prefix_match "}-#" (reverse s2)
+  | Just s1 <- maybePrefixMatch "{-#" s, -- -}
+    Just s2 <- maybePrefixMatch "OPTIONS" (remove_spaces s1),
+    Just s3 <- maybePrefixMatch "}-#" (reverse s2)
   = Just (reverse s3)
   | otherwise
   = Nothing
@@ -69,6 +70,16 @@ softGetDirectoryContents d
          )
 
 -----------------------------------------------------------------------------
+-- Create a hierarchy of directories
+
+createDirectoryHierarchy :: FilePath -> IO ()
+createDirectoryHierarchy dir = do
+  b <- doesDirectoryExist dir
+  when (not b) $ do
+       createDirectoryHierarchy (directoryOf dir)
+       createDirectory dir
+
+-----------------------------------------------------------------------------
 -- Verify that the 'dirname' portion of a FilePath exists.
 -- 
 doesDirNameExist :: FilePath -> IO Bool
@@ -98,13 +109,6 @@ my_partition p (a:as)
        Nothing -> (bs,a:cs)
        Just b  -> ((a,b):bs,cs)
 
-my_prefix_match :: String -> String -> Maybe String
-my_prefix_match []    rest = Just rest
-my_prefix_match (_:_) []   = Nothing
-my_prefix_match (p:pat) (r:rest)
-  | p == r    = my_prefix_match pat rest
-  | otherwise = Nothing
-
 later = flip finally
 
 handleDyn :: Typeable ex => (ex -> IO a) -> IO a -> IO a