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