2 module ParsePkgConf (parsePkgConf) where
9 #include "HsVersions.h"
21 STRING { ITstring $$ }
23 %monad { P } { thenP } { returnP }
24 %lexer { lexer } { ITeof }
29 pkgconf :: { [ PackageConfig ] }
30 : '[' pkgs ']' { reverse $2 }
32 pkgs :: { [ PackageConfig ] }
34 | pkgs ',' pkg { $3 : $1 }
36 pkg :: { PackageConfig }
37 : CONID '{' fields '}' { $3 defaultPackageConfig }
39 fields :: { PackageConfig -> PackageConfig }
40 : field { \p -> $1 p }
41 | fields ',' field { \p -> $1 ($3 p) }
43 field :: { PackageConfig -> PackageConfig }
45 {\p -> case unpackFS $1 of
46 "name" -> p{name = unpackFS $3} }
49 {\p -> case unpackFS $1 of
50 "import_dirs" -> p{import_dirs = $3}
51 "library_dirs" -> p{library_dirs = $3}
52 "hs_libraries" -> p{hs_libraries = $3}
53 "extra_libraries" -> p{extra_libraries = $3}
54 "include_dirs" -> p{include_dirs = $3}
55 "c_includes" -> p{c_includes = $3}
56 "package_deps" -> p{package_deps = $3}
57 "extra_ghc_opts" -> p{extra_ghc_opts = $3}
58 "extra_cc_opts" -> p{extra_cc_opts = $3}
59 "extra_ld_opts" -> p{extra_ld_opts = $3}
63 strlist :: { [String] }
65 | '[' strs ']' { reverse $2 }
68 : STRING { [ unpackFS $1 ] }
69 | strs ',' STRING { unpackFS $3 : $1 }
73 happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
75 parsePkgConf :: FilePath -> IO (Either SDoc [PackageConfig])
76 parsePkgConf conf_filename = do
77 buf <- hGetStringBuffer False conf_filename
78 case parse buf PState{ bol = 0#, atbol = 1#,
79 context = [], glasgow_exts = 0#,
80 loc = mkSrcLoc (_PK_ conf_filename) 1 } of
85 POk _ pkg_details -> do
87 return (Right pkg_details)