1 -----------------------------------------------------------------------------
3 -- (c) The University of Glasgow 2004
5 -- BACKWARDS COMPATIBILITY only. This is the old (pre-6.4) package
6 -- configuration type, which is still accepted by ghc-pkg for
7 -- compatibility. The new type is InstalledPackageInfo from the
8 -- Distribution.InstalledPackageInfo module.
10 -----------------------------------------------------------------------------
13 PackageConfig(..), defaultPackageConfig
14 , listPkgs -- :: [PackageConfig] -> String
15 , dumpPackages -- :: [PackageConfig] -> String
16 , dumpPkgGuts -- :: PackageConfig -> Doc
17 , dumpFieldContents -- :: [String] -> Doc
20 #if __GLASGOW_HASKELL__ >= 504 && !defined(INTERNAL_PRETTY)
21 import Text.PrettyPrint
30 import_dirs :: [String],
31 source_dirs :: [String],
32 library_dirs :: [String],
33 hs_libraries :: [String],
34 extra_libraries :: [String],
35 include_dirs :: [String],
36 c_includes :: [String],
37 package_deps :: [String],
38 extra_ghc_opts :: [String],
39 extra_cc_opts :: [String],
40 extra_ld_opts :: [String],
41 framework_dirs :: [String], -- ignored everywhere but on Darwin/MacOS X
42 extra_frameworks:: [String] -- ignored everywhere but on Darwin/MacOS X
47 name = error "defaultPackage",
64 -----------------------------------------------------------------------------
65 -- Pretty printing package info
67 listPkgs :: [PackageConfig] -> String
68 listPkgs pkgs = render (fsep (punctuate comma (map (text . name) pkgs)))
70 dumpPackages :: [PackageConfig] -> String
72 render (brackets (vcat (punctuate comma (map dumpPkgGuts pkgs))))
74 dumpPkgGuts :: PackageConfig -> Doc
76 text "Package" $$ nest 3 (braces (
77 sep (punctuate comma [
78 text "name = " <> text (show (name pkg)),
79 text "auto = " <> text (show (auto pkg)),
80 dumpField "import_dirs" (import_dirs pkg),
81 dumpField "source_dirs" (source_dirs pkg),
82 dumpField "library_dirs" (library_dirs pkg),
83 dumpField "hs_libraries" (hs_libraries pkg),
84 dumpField "extra_libraries" (extra_libraries pkg),
85 dumpField "include_dirs" (include_dirs pkg),
86 dumpField "c_includes" (c_includes pkg),
87 dumpField "package_deps" (package_deps pkg),
88 dumpField "extra_ghc_opts" (extra_ghc_opts pkg),
89 dumpField "extra_cc_opts" (extra_cc_opts pkg),
90 dumpField "extra_ld_opts" (extra_ld_opts pkg),
91 dumpField "framework_dirs" (framework_dirs pkg),
92 dumpField "extra_frameworks"(extra_frameworks pkg)
95 dumpField :: String -> [String] -> Doc
96 dumpField name val = hang (text name <+> equals) 2 (dumpFieldContents val)
98 dumpFieldContents :: [String] -> Doc
99 dumpFieldContents val = brackets (sep (punctuate comma (map (text . show) val)))