1 -----------------------------------------------------------------------------
2 -- $Id: Package.hs,v 1.2 2001/03/27 14:10:34 simonmar Exp $
4 -- Package configuration defn.
5 -----------------------------------------------------------------------------
9 PackageConfig(..), defaultPackageConfig
11 , listPkgs -- :: [PackageConfig] -> String
12 , dumpPackages -- :: [PackageConfig] -> String
13 , dumpPkgGuts -- :: PackageConfig -> Doc
14 , dumpFieldContents -- :: [String] -> Doc
26 import_dirs :: [String],
27 source_dirs :: [String],
28 library_dirs :: [String],
29 hs_libraries :: [String],
30 extra_libraries :: [String],
31 include_dirs :: [String],
32 c_includes :: [String],
33 package_deps :: [String],
34 extra_ghc_opts :: [String],
35 extra_cc_opts :: [String],
36 extra_ld_opts :: [String]
44 name = error "defaultPackage",
58 -----------------------------------------------------------------------------
59 -- Pretty printing package info
62 listPkgs :: [PackageConfig] -> String
63 listPkgs pkgs = render (fsep (punctuate comma (map (text . name) pkgs)))
65 dumpPackages :: [PackageConfig] -> String
67 render (brackets (vcat (punctuate comma (map dumpPkgGuts pkgs))))
69 dumpPkgGuts :: PackageConfig -> Doc
71 text "Package" $$ nest 3 (braces (
72 sep (punctuate comma [
73 text "name = " <> text (show (name pkg)),
74 dumpField "import_dirs" (import_dirs pkg),
75 dumpField "source_dirs" (source_dirs pkg),
76 dumpField "library_dirs" (library_dirs pkg),
77 dumpField "hs_libraries" (hs_libraries pkg),
78 dumpField "extra_libraries" (extra_libraries pkg),
79 dumpField "include_dirs" (include_dirs pkg),
80 dumpField "c_includes" (c_includes pkg),
81 dumpField "package_deps" (package_deps pkg),
82 dumpField "extra_ghc_opts" (extra_ghc_opts pkg),
83 dumpField "extra_cc_opts" (extra_cc_opts pkg),
84 dumpField "extra_ld_opts" (extra_ld_opts pkg)
87 dumpField :: String -> [String] -> Doc
88 dumpField name val = hang (text name <+> equals) 2 (dumpFieldContents val)
90 dumpFieldContents :: [String] -> Doc
91 dumpFieldContents val = brackets (sep (punctuate comma (map (text . show) val)))