-----------------------------------------------------------------------------
--- $Id: DriverUtil.hs,v 1.46 2004/11/09 16:59:31 simonmar Exp $
+-- $Id: DriverUtil.hs,v 1.50 2005/01/28 12:55:37 simonmar Exp $
--
-- Utils for the driver
--
replaceFilenameDirectory, remove_spaces, escapeSpaces,
) where
-#include "../includes/ghcconfig.h"
#include "HsVersions.h"
import Util
import Panic
import Config ( cLeadingUnderscore )
+import Ctype
import EXCEPTION ( Exception(..), finally, throwDyn, catchDyn, throw )
import qualified EXCEPTION as Exception
return (words opts ++ rest)
| otherwise -> return []
+-- detect {-# OPTIONS_GHC ... #-}. For the time being, we accept OPTIONS
+-- instead of OPTIONS_GHC, but that is deprecated.
matchOptions s
- | Just s1 <- maybePrefixMatch "{-#" s, -- -}
- Just s2 <- maybePrefixMatch "OPTIONS" (remove_spaces s1),
- Just s3 <- maybePrefixMatch "}-#" (reverse s2)
- = Just (reverse s3)
+ | Just s1 <- maybePrefixMatch "{-#" s -- -}
+ = matchOptions1 (remove_spaces s1)
| otherwise
= Nothing
+ where
+ matchOptions1 s
+ | Just s2 <- maybePrefixMatch "OPTIONS" s
+ = case () of
+ _ | Just s3 <- maybePrefixMatch "_GHC" s2, not (is_ident (head s3))
+ -> matchOptions2 s3
+ | not (is_ident (head s2))
+ -> matchOptions2 s2
+ | otherwise
+ -> Just [] -- OPTIONS_anything is ignored, not treated as start of source
+ | otherwise = Nothing
+ matchOptions2 s
+ | Just s3 <- maybePrefixMatch "}-#" (reverse s) = Just (reverse s3)
+ | otherwise = Nothing
-----------------------------------------------------------------------------
-- A version of getDirectoryContents that is non-fatal if the