2 module ParsePkgConf( loadPackageConfig ) where
4 #include "HsVersions.h"
6 import Packages ( PackageConfig(..), defaultPackageConfig )
13 import Panic ( GhcException(..) )
14 import EXCEPTION ( throwDyn )
19 '{' { T _ _ ITocurly }
20 '}' { T _ _ ITccurly }
21 '[' { T _ _ ITobrack }
22 ']' { T _ _ ITcbrack }
25 VARID { T _ _ (ITvarid $$) }
26 CONID { T _ _ (ITconid $$) }
27 STRING { T _ _ (ITstring $$) }
29 %monad { P } { >>= } { return }
30 %lexer { lexer } { T _ _ ITeof }
35 pkgconf :: { [ PackageConfig ] }
37 | '[' pkgs ']' { reverse $2 }
39 pkgs :: { [ PackageConfig ] }
41 | pkgs ',' pkg { $3 : $1 }
43 pkg :: { PackageConfig }
44 : CONID '{' fields '}' { $3 defaultPackageConfig }
46 fields :: { PackageConfig -> PackageConfig }
47 : field { \p -> $1 p }
48 | fields ',' field { \p -> $1 ($3 p) }
50 field :: { PackageConfig -> PackageConfig }
52 {% case unpackFS $1 of {
53 "name" -> return (\ p -> p{name = unpackFS $3});
57 {\p -> case unpackFS $1 of {
58 "auto" -> p{auto = $3};
62 {\p -> case unpackFS $1 of
63 "import_dirs" -> p{import_dirs = $3}
64 "library_dirs" -> p{library_dirs = $3}
65 "hs_libraries" -> p{hs_libraries = $3}
66 "extra_libraries" -> p{extra_libraries = $3}
67 "include_dirs" -> p{include_dirs = $3}
68 "c_includes" -> p{c_includes = $3}
69 "package_deps" -> p{package_deps = $3}
70 "extra_ghc_opts" -> p{extra_ghc_opts = $3}
71 "extra_cc_opts" -> p{extra_cc_opts = $3}
72 "extra_ld_opts" -> p{extra_ld_opts = $3}
73 "framework_dirs" -> p{framework_dirs = $3}
74 "extra_frameworks"-> p{extra_frameworks= $3}
78 strlist :: { [String] }
80 | '[' strs ']' { reverse $2 }
83 : STRING { [ unpackFS $1 ] }
84 | strs ',' STRING { unpackFS $3 : $1 }
87 : CONID {% case unpackFS $1 of {
88 "True" -> return True;
89 "False" -> return False;
94 happyError = srcParseFail
96 loadPackageConfig :: FilePath -> IO [PackageConfig]
97 loadPackageConfig conf_filename = do
98 buf <- hGetStringBuffer conf_filename
99 let loc = mkSrcLoc (mkFastString conf_filename) 1 0
100 case unP parse (mkPState buf loc defaultDynFlags) of
102 throwDyn (InstallationError (showSDoc (showPFailed l1 l2 err)))
104 POk _ pkg_details -> do