[project @ 2001-02-23 09:48:14 by simonmar]
[ghc-hetmet.git] / ghc / driver / Package.hs
1 module Package where
2
3 import Pretty
4
5 data Package = Package {
6                 name            :: String,
7                 import_dirs     :: [String],
8                 library_dirs    :: [String],
9                 hs_libraries    :: [String],
10                 extra_libraries :: [String],
11                 include_dirs    :: [String],
12                 c_includes      :: [String],
13                 package_deps    :: [String],
14                 extra_ghc_opts  :: [String],
15                 extra_cc_opts   :: [String],
16                 extra_ld_opts   :: [String]
17                 }
18   deriving Read
19
20 listPkgs :: [Package] -> String
21 listPkgs pkgs = render (fsep (punctuate comma (map (text . name) pkgs)))
22
23 dumpPackages :: [Package] -> String
24 dumpPackages pkgs = 
25    render (brackets (vcat (punctuate comma (map dumpPkgGuts pkgs))))
26
27 dumpPkgGuts :: Package -> Doc
28 dumpPkgGuts pkg =
29    text "Package" $$ nest 3 (braces (
30       sep (punctuate comma [
31          text "name = " <> text (show (name pkg)),
32          dumpField "import_dirs"     (import_dirs     pkg),
33          dumpField "library_dirs"    (library_dirs    pkg),
34          dumpField "hs_libraries"    (hs_libraries    pkg),
35          dumpField "extra_libraries" (extra_libraries pkg),
36          dumpField "include_dirs"    (include_dirs    pkg),
37          dumpField "c_includes"      (c_includes      pkg),
38          dumpField "package_deps"    (package_deps    pkg),
39          dumpField "extra_ghc_opts"  (extra_ghc_opts  pkg),
40          dumpField "extra_cc_opts"   (extra_cc_opts   pkg),
41          dumpField "extra_ld_opts"   (extra_ld_opts   pkg)
42       ])))
43
44 dumpField :: String -> [String] -> Doc
45 dumpField name val =
46    hang (text name <+> equals) 2
47         (brackets (sep (punctuate comma (map (text . show) val))))