[project @ 2002-10-29 04:00:59 by mthomas]
[ghc-hetmet.git] / ghc / utils / ghc-pkg / Package.hs
1 -----------------------------------------------------------------------------
2 -- $Id: Package.hs,v 1.5 2002/09/09 12:10:01 simonmar Exp $
3 --
4 -- Package configuration defn.
5 -----------------------------------------------------------------------------
6
7 #ifdef PKG_TOOL
8 module Package ( 
9         PackageConfig(..), defaultPackageConfig
10 #ifdef WANT_PRETTY
11         , listPkgs              -- :: [PackageConfig] -> String
12         , dumpPackages          -- :: [PackageConfig] -> String
13         , dumpPkgGuts           -- :: PackageConfig -> Doc
14         , dumpFieldContents     -- :: [String] -> Doc
15 #endif
16  ) where
17 #endif
18
19 #ifdef WANT_PRETTY
20 #if __GLASGOW_HASKELL__ >= 504 && !defined(INTERNAL_PRETTY)
21 import Text.PrettyPrint
22 #else
23 import Pretty
24 #endif
25 #endif
26
27 data PackageConfig
28    = Package {
29         name            :: String,
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
43      }
44
45 defaultPackageConfig
46    = Package {
47         name = error "defaultPackage",
48         import_dirs     = [],
49         source_dirs     = [],
50         library_dirs    = [],
51         hs_libraries    = [],
52         extra_libraries = [],
53         include_dirs    = [],
54         c_includes      = [],
55         package_deps    = [],
56         extra_ghc_opts  = [],
57         extra_cc_opts   = [],
58         extra_ld_opts   = [],
59         framework_dirs  = [],
60         extra_frameworks= []
61     }
62
63 -----------------------------------------------------------------------------
64 -- Pretty printing package info
65
66 #ifdef WANT_PRETTY
67 listPkgs :: [PackageConfig] -> String
68 listPkgs pkgs = render (fsep (punctuate comma (map (text . name) pkgs)))
69
70 dumpPackages :: [PackageConfig] -> String
71 dumpPackages pkgs = 
72    render (brackets (vcat (punctuate comma (map dumpPkgGuts pkgs))))
73
74 dumpPkgGuts :: PackageConfig -> Doc
75 dumpPkgGuts pkg =
76    text "Package" $$ nest 3 (braces (
77       sep (punctuate comma [
78          text "name = " <> text (show (name pkg)),
79          dumpField "import_dirs"     (import_dirs     pkg),
80          dumpField "source_dirs"     (source_dirs     pkg),
81          dumpField "library_dirs"    (library_dirs    pkg),
82          dumpField "hs_libraries"    (hs_libraries    pkg),
83          dumpField "extra_libraries" (extra_libraries pkg),
84          dumpField "include_dirs"    (include_dirs    pkg),
85          dumpField "c_includes"      (c_includes      pkg),
86          dumpField "package_deps"    (package_deps    pkg),
87          dumpField "extra_ghc_opts"  (extra_ghc_opts  pkg),
88          dumpField "extra_cc_opts"   (extra_cc_opts   pkg),
89          dumpField "extra_ld_opts"   (extra_ld_opts   pkg),
90          dumpField "framework_dirs"  (framework_dirs   pkg),
91          dumpField "extra_frameworks"(extra_frameworks pkg)
92       ])))
93
94 dumpField :: String -> [String] -> Doc
95 dumpField name val = hang (text name <+> equals) 2  (dumpFieldContents val)
96
97 dumpFieldContents :: [String] -> Doc
98 dumpFieldContents val = brackets (sep (punctuate comma (map (text . show) val)))
99 #endif
100