2 module ParsePkgConf( loadPackageConfig ) where
4 import Packages ( PackageConfig(..), defaultPackageConfig )
10 import Panic ( GhcException(..) )
11 import Exception ( throwDyn )
13 #include "HsVersions.h"
26 STRING { ITstring $$ }
28 %monad { P } { thenP } { returnP }
29 %lexer { lexer } { ITeof }
34 pkgconf :: { [ PackageConfig ] }
35 : '[' pkgs ']' { reverse $2 }
37 pkgs :: { [ PackageConfig ] }
39 | pkgs ',' pkg { $3 : $1 }
41 pkg :: { PackageConfig }
42 : CONID '{' fields '}' { $3 defaultPackageConfig }
44 fields :: { PackageConfig -> PackageConfig }
45 : field { \p -> $1 p }
46 | fields ',' field { \p -> $1 ($3 p) }
48 field :: { PackageConfig -> PackageConfig }
50 {% case unpackFS $1 of {
51 "name" -> returnP (\ p -> p{name = unpackFS $3});
55 {\p -> case unpackFS $1 of
56 "import_dirs" -> p{import_dirs = $3}
57 "library_dirs" -> p{library_dirs = $3}
58 "hs_libraries" -> p{hs_libraries = $3}
59 "extra_libraries" -> p{extra_libraries = $3}
60 "include_dirs" -> p{include_dirs = $3}
61 "c_includes" -> p{c_includes = $3}
62 "package_deps" -> p{package_deps = $3}
63 "extra_ghc_opts" -> p{extra_ghc_opts = $3}
64 "extra_cc_opts" -> p{extra_cc_opts = $3}
65 "extra_ld_opts" -> p{extra_ld_opts = $3}
69 strlist :: { [String] }
71 | '[' strs ']' { reverse $2 }
74 : STRING { [ unpackFS $1 ] }
75 | strs ',' STRING { unpackFS $3 : $1 }
79 happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
81 loadPackageConfig :: FilePath -> IO [PackageConfig]
82 loadPackageConfig conf_filename = do
83 buf <- hGetStringBuffer False conf_filename
84 case parse buf PState{ bol = 0#, atbol = 1#,
85 context = [], glasgow_exts = 0#,
86 loc = mkSrcLoc (_PK_ conf_filename) 1 } of
89 throwDyn (InstallationError (showSDoc err))
91 POk _ pkg_details -> do