[project @ 2002-06-13 23:31:55 by sof]
[ghc-hetmet.git] / ghc / utils / ghc-pkg / Package.hs
1 -----------------------------------------------------------------------------
2 -- $Id: Package.hs,v 1.3 2002/06/12 22:04:27 wolfgang 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 import Pretty
21 #endif
22
23 data PackageConfig
24    = Package {
25         name            :: String,
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],
37         framework_dirs  :: [String], -- ignored everywhere but on Darwin/MacOS X
38         extra_frameworks:: [String]  -- ignored everywhere but on Darwin/MacOS X
39      }
40
41 defaultPackageConfig
42    = Package {
43         name = error "defaultPackage",
44         import_dirs     = [],
45         source_dirs     = [],
46         library_dirs    = [],
47         hs_libraries    = [],
48         extra_libraries = [],
49         include_dirs    = [],
50         c_includes      = [],
51         package_deps    = [],
52         extra_ghc_opts  = [],
53         extra_cc_opts   = [],
54         extra_ld_opts   = [],
55         framework_dirs  = [],
56         extra_frameworks= []
57     }
58
59 -----------------------------------------------------------------------------
60 -- Pretty printing package info
61
62 #ifdef WANT_PRETTY
63 listPkgs :: [PackageConfig] -> String
64 listPkgs pkgs = render (fsep (punctuate comma (map (text . name) pkgs)))
65
66 dumpPackages :: [PackageConfig] -> String
67 dumpPackages pkgs = 
68    render (brackets (vcat (punctuate comma (map dumpPkgGuts pkgs))))
69
70 dumpPkgGuts :: PackageConfig -> Doc
71 dumpPkgGuts pkg =
72    text "Package" $$ nest 3 (braces (
73       sep (punctuate comma [
74          text "name = " <> text (show (name pkg)),
75          dumpField "import_dirs"     (import_dirs     pkg),
76          dumpField "source_dirs"     (source_dirs     pkg),
77          dumpField "library_dirs"    (library_dirs    pkg),
78          dumpField "hs_libraries"    (hs_libraries    pkg),
79          dumpField "extra_libraries" (extra_libraries pkg),
80          dumpField "include_dirs"    (include_dirs    pkg),
81          dumpField "c_includes"      (c_includes      pkg),
82          dumpField "package_deps"    (package_deps    pkg),
83          dumpField "extra_ghc_opts"  (extra_ghc_opts  pkg),
84          dumpField "extra_cc_opts"   (extra_cc_opts   pkg),
85          dumpField "extra_ld_opts"   (extra_ld_opts   pkg),
86          dumpField "framework_dirs"  (framework_dirs   pkg),
87          dumpField "extra_frameworks"(extra_frameworks pkg)
88       ])))
89
90 dumpField :: String -> [String] -> Doc
91 dumpField name val = hang (text name <+> equals) 2  (dumpFieldContents val)
92
93 dumpFieldContents :: [String] -> Doc
94 dumpFieldContents val = brackets (sep (punctuate comma (map (text . show) val)))
95 #endif
96