[project @ 2002-12-18 16:29:25 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / ParsePkgConf.y
index f710b15..1c94edc 100644 (file)
@@ -1,6 +1,8 @@
 {
 module ParsePkgConf( loadPackageConfig ) where
 
+#include "HsVersions.h"
+
 import Packages  ( PackageConfig(..), defaultPackageConfig )
 import Lex
 import FastString
@@ -8,9 +10,7 @@ import StringBuffer
 import SrcLoc
 import Outputable
 import Panic     ( GhcException(..) )
-import Exception ( throwDyn )
-
-#include "HsVersions.h"
+import EXCEPTION ( throwDyn )
 
 }
 
@@ -32,7 +32,8 @@ import Exception ( throwDyn )
 %%
 
 pkgconf :: { [ PackageConfig ] }
-       : '[' pkgs ']'                  { reverse $2 }
+       : '[' ']'                       { [] }
+       | '[' pkgs ']'                  { reverse $2 }
 
 pkgs   :: { [ PackageConfig ] }
        : pkg                           { [ $1 ] }
@@ -51,6 +52,11 @@ field        :: { PackageConfig -> PackageConfig }
                   "name" -> returnP (\ p -> p{name = unpackFS $3});
                   _      -> happyError } }
                        
+        | VARID '=' bool
+               {\p -> case unpackFS $1 of {
+                       "auto" -> p{auto = $3};
+                       _      -> p } }
+
        | VARID '=' strlist             
                {\p -> case unpackFS $1 of
                        "import_dirs"     -> p{import_dirs     = $3}
@@ -63,6 +69,8 @@ field :: { PackageConfig -> PackageConfig }
                        "extra_ghc_opts"  -> p{extra_ghc_opts  = $3}
                        "extra_cc_opts"   -> p{extra_cc_opts   = $3}
                        "extra_ld_opts"   -> p{extra_ld_opts   = $3}
+                       "framework_dirs"  -> p{framework_dirs  = $3}
+                       "extra_frameworks"-> p{extra_frameworks= $3}
                        _other            -> p
                }
 
@@ -74,6 +82,12 @@ strs :: { [String] }
        : STRING                        { [ unpackFS $1 ] }
        | strs ',' STRING               { unpackFS $3 : $1 }
 
+bool    :: { Bool }
+       : CONID                         {% case unpackFS $1 of {
+                                           "True"  -> returnP True;
+                                           "False" -> returnP False;
+                                           _       -> happyError } }
+
 {
 happyError :: P a
 happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
@@ -81,8 +95,10 @@ happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
 loadPackageConfig :: FilePath -> IO [PackageConfig]
 loadPackageConfig conf_filename = do
    buf <- hGetStringBuffer conf_filename
-   let loc  = mkSrcLoc (_PK_ conf_filename) 1
+   let loc  = mkSrcLoc (mkFastString conf_filename) 1
        exts = ExtFlags {glasgowExtsEF = False,
+                       ffiEF         = False,
+                       withEF        = False,
                        parrEF        = False}
    case parse buf (mkPState loc exts) of
        PFailed err -> do