X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FParsePkgConf.y;h=e9161113e65b08a9823c726ba3dd5950c16ce329;hb=1aaf36f23e5f2ecf71415f5cbed27c430ef60831;hp=a3e569dd28c63769e755150d611e5dfa944967c9;hpb=f86cb6a687090154668d2290c21ea6609fda5936;p=ghc-hetmet.git diff --git a/ghc/compiler/main/ParsePkgConf.y b/ghc/compiler/main/ParsePkgConf.y index a3e569d..e916111 100644 --- a/ghc/compiler/main/ParsePkgConf.y +++ b/ghc/compiler/main/ParsePkgConf.y @@ -1,12 +1,17 @@ { -module ParsePkgConf (parsePkgConf) where -import CmStaticInfo +module ParsePkgConf( loadPackageConfig ) where + +#include "HsVersions.h" + +import Packages ( PackageConfig(..), defaultPackageConfig ) import Lex import FastString import StringBuffer import SrcLoc import Outputable -#include "HsVersions.h" +import Panic ( GhcException(..) ) +import EXCEPTION ( throwDyn ) + } %token @@ -26,24 +31,26 @@ import Outputable %tokentype { Token } %% -pkgconf :: { [ Package ] } - : '[' pkgs ']' { reverse $2 } +pkgconf :: { [ PackageConfig ] } + : '[' ']' { [] } + | '[' pkgs ']' { reverse $2 } -pkgs :: { [ Package ] } +pkgs :: { [ PackageConfig ] } : pkg { [ $1 ] } | pkgs ',' pkg { $3 : $1 } -pkg :: { Package } - : CONID '{' fields '}' { $3 defaultPackage } +pkg :: { PackageConfig } + : CONID '{' fields '}' { $3 defaultPackageConfig } -fields :: { Package -> Package } +fields :: { PackageConfig -> PackageConfig } : field { \p -> $1 p } | fields ',' field { \p -> $1 ($3 p) } -field :: { Package -> Package } +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 @@ -57,6 +64,8 @@ field :: { Package -> Package } "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 } @@ -72,17 +81,20 @@ strs :: { [String] } happyError :: P a happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc) -parsePkgConf :: FilePath -> IO (Either SDoc [Package]) -parsePkgConf 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 +loadPackageConfig :: FilePath -> IO [PackageConfig] +loadPackageConfig conf_filename = do + 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 - return (Left err) + throwDyn (InstallationError (showSDoc err)) POk _ pkg_details -> do freeStringBuffer buf - return (Right pkg_details) + return pkg_details }