[project @ 2002-07-16 14:56:08 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / ParsePkgConf.y
index c61d31c..71fe194 100644 (file)
@@ -32,7 +32,8 @@ import Exception ( throwDyn )
 %%
 
 pkgconf :: { [ PackageConfig ] }
-       : '[' pkgs ']'                  { reverse $2 }
+       : '[' ']'                       { [] }
+       | '[' pkgs ']'                  { reverse $2 }
 
 pkgs   :: { [ PackageConfig ] }
        : pkg                           { [ $1 ] }
@@ -47,8 +48,9 @@ fields  :: { PackageConfig -> PackageConfig }
 
 field  :: { PackageConfig -> PackageConfig }
        : VARID '=' STRING              
-               {\p -> case unpackFS $1 of
-                       "name" -> p{name = unpackFS $3} }
+                 {% case unpackFS $1 of { 
+                  "name" -> returnP (\ p -> p{name = unpackFS $3});
+                  _      -> happyError } }
                        
        | VARID '=' strlist             
                {\p -> case unpackFS $1 of
@@ -62,6 +64,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
                }
 
@@ -79,10 +83,13 @@ happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
 
 loadPackageConfig :: FilePath -> IO [PackageConfig]
 loadPackageConfig conf_filename = do
-   buf <- hGetStringBuffer False conf_filename
-   case parse buf PState{ bol = 0#, atbol = 1#,
-                         context = [], glasgow_exts = 0#,
-                         loc = mkSrcLoc (_PK_ conf_filename) 1 } of
+   buf <- hGetStringBuffer conf_filename
+   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
            freeStringBuffer buf
             throwDyn (InstallationError (showSDoc err))