[project @ 2001-06-12 17:07:23 by simonmar]
[ghc-hetmet.git] / ghc / driver / PackageSrc.hs
1 #include "../includes/config.h"
2
3 module Main (main) where
4
5 import Utils
6
7 import IO
8 import System
9 import Package
10
11 main :: IO ()
12 main = do
13   args <- getArgs
14   case args of
15      ("install":rest)  -> do { putStrLn (dumpPackages (package_details True rest)) }
16      ("in-place":rest) -> do { putStrLn (dumpPackages (package_details False rest)) }
17      _ -> do hPutStr stderr "usage: pkgconf (install | in-place) ...\n"
18              exitWith (ExitFailure 1)
19
20 -- The compiler automatically replaces the string "$libdir" at the
21 -- beginning of a path with the appropriate directory: either the
22 -- wired-in libdir or the one passed to the compiler via the -B<dir>
23 -- flag.  This is how we make package.conf independent of GHC's
24 -- installation location.
25
26 package_details :: Bool -> [String] -> [PackageConfig]
27 package_details installing
28  [ cTARGETPLATFORM
29  , cCURRENT_DIR
30  , cHaveLibGmp
31  , cLibsReadline
32  , cGHC_LIB_DIR
33  , cGHC_RUNTIME_DIR
34  , cGHC_UTILS_DIR
35  , cGHC_INCLUDE_DIR
36  ] =
37
38  [
39         Package {
40         name           = "gmp",  -- GMP is at the bottom of the heap
41         import_dirs    = [],
42         source_dirs    = [],
43         library_dirs   = if cHaveLibGmp == "YES"
44                             then []
45                             else if installing
46                                     then [ "$libdir" ]
47                                     else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ],
48         hs_libraries   = [],
49         extra_libraries = [ "gmp" ],
50         include_dirs   = [],
51         c_includes     = [],
52         package_deps   = [],
53         extra_ghc_opts = [],
54         extra_cc_opts  = [],
55         extra_ld_opts  = []
56         },
57
58         Package {
59         name           = "rts",  -- The RTS is just another package!
60         import_dirs    = [],
61         source_dirs    = [],
62         library_dirs   = if installing
63                             then [ "$libdir" ]
64                             else [ ghc_src_dir cGHC_RUNTIME_DIR ],
65         hs_libraries      = [ "HSrts" ],
66 #ifndef mingw32_TARGET_OS
67         extra_libraries   = [],
68 #else
69         extra_libraries   = [ "winmm" ], -- for the threadDelay timer
70 #endif
71         include_dirs   = if installing
72                             then [ "$libdir/includes" ]
73                             else [ ghc_src_dir cGHC_INCLUDE_DIR ],
74         c_includes     = [ "Stg.h" ],           -- ha!
75         package_deps   = [ "gmp" ],
76         extra_ghc_opts = [],
77         extra_cc_opts  = [],
78                 -- the RTS forward-references to a bunch of stuff in the prelude,
79                 -- so we force it to be included with special options to ld.
80         extra_ld_opts  = map (
81 #ifndef LEADING_UNDERSCORE
82                           "-u "
83 #else
84                           "-u _"
85 #endif
86                           ++ ) [
87            "PrelBase_Izh_static_info"
88          , "PrelBase_Czh_static_info"
89          , "PrelFloat_Fzh_static_info"
90          , "PrelFloat_Dzh_static_info"
91          , "PrelPtr_Ptr_static_info"
92          , "PrelWord_Wzh_static_info"
93          , "PrelInt_I8zh_static_info"
94          , "PrelInt_I16zh_static_info"
95          , "PrelInt_I32zh_static_info"
96          , "PrelInt_I64zh_static_info"
97          , "PrelWord_W8zh_static_info"
98          , "PrelWord_W16zh_static_info"
99          , "PrelWord_W32zh_static_info"
100          , "PrelWord_W64zh_static_info"
101          , "PrelStable_StablePtr_static_info"
102          , "PrelBase_Izh_con_info"
103          , "PrelBase_Czh_con_info"
104          , "PrelFloat_Fzh_con_info"
105          , "PrelFloat_Dzh_con_info"
106          , "PrelPtr_Ptr_con_info"
107          , "PrelStable_StablePtr_con_info"
108          , "PrelBase_False_closure"
109          , "PrelBase_True_closure"
110          , "PrelPack_unpackCString_closure"
111          , "PrelIOBase_stackOverflow_closure"
112          , "PrelIOBase_heapOverflow_closure"
113          , "PrelIOBase_NonTermination_closure"
114          , "PrelIOBase_BlockedOnDeadMVar_closure"
115          , "PrelWeak_runFinalizzerBatch_closure"
116          , "__init_Prelude"
117          ]
118         },
119
120         Package {
121         name           = "std",  -- The Prelude & Standard Hs_libraries
122         import_dirs    = if installing
123                             then [ "$libdir/imports/std" ]
124                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ],
125         source_dirs    = [],
126         library_dirs   = if installing
127                             then [ "$libdir" ]
128                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
129                                  , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
130         hs_libraries      = [ "HSstd" ],
131         extra_libraries   = [ "HSstd_cbits" ] ++
132 #                           ifdef mingw32_TARGET_OS
133                             ["wsock32", "msvcrt"]
134 #                           else
135                             ["m"]   -- libm, that is
136 #                           endif
137                             ,
138         include_dirs   = if installing
139                             then []
140                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
141         c_includes     = [ "HsStd.h" ],
142         package_deps   = [ "rts" ],
143         extra_ghc_opts = [],
144         extra_cc_opts  = [],
145         extra_ld_opts  = []
146         },
147
148          Package { 
149          name           = "lang",
150          import_dirs    = if installing
151                              then [ "$libdir/imports/lang" ]
152                              else [ "$libdir/hslibs/lang"
153                                   , "$libdir/hslibs/lang/monads" ],
154          source_dirs    = [],
155          library_dirs   = if installing
156                              then [ "$libdir" ]
157                              else [ "$libdir/hslibs/lang"
158                                   , "$libdir/hslibs/lang/cbits" ],
159          hs_libraries      = [ "HSlang" ],
160          extra_libraries   = [ "HSlang_cbits" ],
161          include_dirs   = if installing
162                              then []
163                              else [ "$libdir/hslibs/lang/cbits" ],
164          c_includes     = [ "HsLang.h" ],
165          package_deps   = [],
166          extra_ghc_opts = [],
167          extra_cc_opts  = [],
168          extra_ld_opts  = [
169 #ifndef LEADING_UNDERSCORE
170                           "-u Addr_Azh_static_info"
171 #else
172                           "-u _Addr_Azh_static_info"
173 #endif
174                         ]
175         },
176
177          Package {
178          name           = "concurrent",
179          import_dirs    = if installing
180                              then [ "$libdir/imports/concurrent" ]
181                              else [ "$libdir/hslibs/concurrent" ],
182          source_dirs    = [],
183          library_dirs   = if installing
184                              then [ "$libdir" ]
185                              else [ "$libdir/hslibs/concurrent" ],
186          hs_libraries      = [ "HSconcurrent" ],
187          extra_libraries   = [],
188          include_dirs   = if installing
189                              then []
190                              else [ "$libdir/hslibs/concurrent/cbits" ],
191          c_includes     = [],
192          package_deps   = [ "lang" ],
193          extra_ghc_opts = [],
194          extra_cc_opts  = [],
195          extra_ld_opts  = []
196         },
197
198          Package {
199          name           = "data",
200          import_dirs    = if installing
201                              then [ "$libdir/imports/data" ]
202                              else [ "$libdir/hslibs/data"
203                                   , "$libdir/hslibs/data/edison"
204                                   , "$libdir/hslibs/data/edison/Assoc"
205                                   , "$libdir/hslibs/data/edison/Coll"
206                                   , "$libdir/hslibs/data/edison/Seq" ],
207          source_dirs    = [],
208          library_dirs   = if installing
209                              then [ "$libdir" ]
210                              else [ "$libdir/hslibs/data" ],
211          hs_libraries      = [ "HSdata" ],
212          extra_libraries   = [],
213          include_dirs   = if installing
214                              then []
215                              else [ "$libdir/hslibs/data/cbits" ],
216          c_includes     = [],
217          package_deps   = [ "lang", "util" ],
218          extra_ghc_opts = [],
219          extra_cc_opts  = [],
220          extra_ld_opts  = []
221         },
222
223          Package {
224          name           = "net",
225          import_dirs    = if installing
226                              then [ "$libdir/imports/net" ]
227                              else [ "$libdir/hslibs/net" ],
228          source_dirs    = [],
229          library_dirs   = if installing
230                              then [ "$libdir" ]
231                              else [ "$libdir/hslibs/net"
232                                   , "$libdir/hslibs/net/cbits" ],
233          hs_libraries      = [ "HSnet" ],
234          extra_libraries   = if suffixMatch "solaris2" cTARGETPLATFORM
235                                 then [ "nsl",  "socket" ]
236                                 else []
237                              ,
238          include_dirs   = if installing
239                              then []
240                              else [ "$libdir/hslibs/net/cbits" ],
241          c_includes     = [ "HsNet.h" ],
242          package_deps   = [ "lang", "text", "concurrent" ],
243          extra_ghc_opts = [],
244          extra_cc_opts  = [],
245          extra_ld_opts  = []
246         },
247
248          Package {
249          name           = "posix",
250          import_dirs    = if installing
251                              then [ "$libdir/imports/posix" ]
252                              else [ "$libdir/hslibs/posix" ],
253          source_dirs    = [],
254          library_dirs   = if installing
255                              then [ "$libdir" ]
256                              else [ "$libdir/hslibs/posix"
257                                   , "$libdir/hslibs/posix/cbits" ],
258          hs_libraries      = [ "HSposix" ],
259          extra_libraries   = [ "HSposix_cbits" ],
260          include_dirs   = if installing
261                              then []
262                              else [ "$libdir/hslibs/posix/cbits" ],
263          c_includes     = [ "HsPosix.h" ],
264          package_deps   = [ "lang" ],
265          extra_ghc_opts = [],
266          extra_cc_opts  = [],
267          extra_ld_opts  = []
268         },
269
270          Package {
271          name           = "text",
272          import_dirs    = if installing
273                              then [ "$libdir/imports/text" ]
274                              else [ "$libdir/hslibs/text" 
275                                   , "$libdir/hslibs/text/html" 
276                                   , "$libdir/hslibs/text/HaXml/lib" 
277                                   , "$libdir/hslibs/text/parsec" ],
278          source_dirs    = [],
279          library_dirs   = if installing
280                              then [ "$libdir" ]
281                              else [ "$libdir/hslibs/text"
282                                   , "$libdir/hslibs/text/cbits" ],
283          hs_libraries      = [ "HStext" ],
284          extra_libraries   = [ "HStext_cbits" ],
285          include_dirs   = if installing
286                              then []
287                              else [ "$libdir/hslibs/text/cbits" ],
288          c_includes     = [ "HsText.h" ],
289          package_deps   = [ "lang" ],
290          extra_ghc_opts = [],
291          extra_cc_opts  = [],
292          extra_ld_opts  = []
293         },
294
295          Package {
296          name           = "util",
297          import_dirs    = if installing
298                              then [ "$libdir/imports/util" ]
299                              else [ "$libdir/hslibs/util"
300                                   , "$libdir/hslibs/util/check" ],
301          source_dirs    = [],
302          library_dirs   = if installing
303                              then [ "$libdir" ]
304                              else [ "$libdir/hslibs/util"
305                                   , "$libdir/hslibs/util/cbits" ],
306          hs_libraries      = [ "HSutil" ],
307          extra_libraries   = [ "HSutil_cbits" ] ++ words cLibsReadline,
308          include_dirs   = if installing
309                              then []
310                              else [ "$libdir/hslibs/util/cbits" ],
311          c_includes     = [ "HsUtil.h" ],
312          package_deps   = [ "lang", "concurrent"
313 #ifndef mingw32_TARGET_OS
314                             , "posix"
315 #endif
316                           ],
317          extra_ghc_opts = [],
318          extra_cc_opts  = [],
319          extra_ld_opts  = []
320         },
321
322         -- no cbits at the moment, we'll need to add one if this library
323         -- ever calls out to any C libs.
324          Package {
325          name           = "hssource",
326          import_dirs    = if installing
327                              then [ "$libdir/imports/hssource" ]
328                              else [ "$libdir/hslibs/hssource" ],
329          source_dirs    = [],
330          library_dirs   = if installing
331                              then [ "$libdir" ]
332                              else [ "$libdir/hslibs/hssource" ],
333          hs_libraries      = [ "HShssource" ],
334          extra_libraries   = [],
335          include_dirs   = [],
336          c_includes     = [],
337          package_deps   = [ "text" ],
338          extra_ghc_opts = [],
339          extra_cc_opts  = [],
340          extra_ld_opts  = []
341         },
342
343          Package {
344          name         = "greencard",
345          import_dirs    = if installing
346                              then [ "$libdir/imports/greencard" ]
347                              else [ "$libdir/green-card/lib/ghc" ],
348          source_dirs    = [],
349          library_dirs   = if installing
350                              then [ "$libdir" ]
351                              else [ "$libdir/green-card/lib/ghc" ],
352          hs_libraries      = [ "HSgreencard" ],
353          extra_libraries   = [],
354          include_dirs   = [],
355          c_includes     = [],
356          package_deps   = [ "lang" ],
357          extra_ghc_opts = [],
358          extra_cc_opts  = [],
359          extra_ld_opts  = [],
360         }
361
362 #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS)
363          ,Package {
364          name         = "win32",
365          import_dirs    = if installing
366                              then [ "$libdir/imports/win32" ]
367                              else [ "$libdir/hslibs/win32" ],
368          source_dirs    = [],
369          library_dirs   = if installing
370                              then [ "$libdir" ]
371                              else [ "$libdir/hslibs/win32" ],
372          hs_libraries      = [ "HSwin32" ],
373          extra_libraries   = [ "user32",  "gdi32", "winmm" ],
374          include_dirs   = [],
375          c_includes     = [],           -- ???
376          package_deps   = [ "lang", "greencard" ],
377          extra_ghc_opts = [],
378          extra_cc_opts  = [],
379          extra_ld_opts  = []
380         },
381
382          Package {
383          name           = "com",
384          import_dirs    = if installing
385                              then [ "$libdir/imports/com" ]
386                              else [ "$libdir/hdirect/lib" ],
387          source_dirs    = [],
388          library_dirs   = if installing
389                              then [ "$libdir" ]
390                              else [ "$libdir/hdirect/lib" ],
391          hs_libraries      = [ "HScom" ],
392          extra_libraries   = [ "user32",  "ole32",  "oleaut32", "advapi32" ],
393          include_dirs   = [],
394          c_includes     = [],           -- ???
395          package_deps   = [ "lang" ],
396          extra_ghc_opts = [],
397          extra_cc_opts  = [],
398          extra_ld_opts  = []
399         }
400 #endif
401    ]
402   where
403         ghc_src_dir :: String -> String
404         ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path