[project @ 2002-02-12 11:44:54 by simonmar]
[ghc-hetmet.git] / ghc / driver / PackageSrc.hs
1 #include "../includes/config.h"
2 #include "../includes/Derived.h"
3
4 module Main (main) where
5
6 import Utils
7
8 import IO
9 import System
10 import Package
11
12 main :: IO ()
13 main = do
14   args <- getArgs
15   case args of
16      ("install":rest)  -> do { putStrLn (dumpPackages (package_details True rest)) }
17      ("in-place":rest) -> do { putStrLn (dumpPackages (package_details False rest)) }
18      _ -> do hPutStr stderr "usage: pkgconf (install | in-place) ...\n"
19              exitWith (ExitFailure 1)
20
21 -- The compiler automatically replaces the string "$libdir" at the
22 -- beginning of a path with the directory passed to the compiler via
23 -- the -B<dir> flag.  Absolute path names will be unchanged.
24 --
25 -- This is how we make package.conf independent of GHC's installation
26 -- location.
27
28 package_details :: Bool -> [String] -> [PackageConfig]
29 package_details installing
30  [ cTARGETPLATFORM
31  , cCURRENT_DIR
32  , cHaveLibGmp
33  , cLibsReadline
34  , cGHC_LIB_DIR
35  , cGHC_RUNTIME_DIR
36  , cGHC_UTILS_DIR
37  , cGHC_INCLUDE_DIR
38  , cX_CFLAGS
39  , cX_LIBS
40  ] =
41
42  [
43         Package {
44         name           = "gmp",  -- GMP is at the bottom of the heap
45         import_dirs    = [],
46         source_dirs    = [],
47         library_dirs   = if cHaveLibGmp == "YES"
48                             then []
49                             else if installing
50                                     then [ "$libdir" ]
51                                     else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ],
52         hs_libraries   = [],
53         extra_libraries = [ "gmp" ],
54         include_dirs   = [],
55         c_includes     = [],
56         package_deps   = [],
57         extra_ghc_opts = [],
58         extra_cc_opts  = [],
59         extra_ld_opts  = []
60         },
61
62         Package {
63         name           = "rts",  -- The RTS is just another package!
64         import_dirs    = [],
65         source_dirs    = [],
66         library_dirs   = if installing
67                             then 
68 #ifdef mingw32_TARGET_OS
69                                 -- force the dist-provided gcc-lib/ into scope.
70                                  [ "$libdir", "$libdir/gcc-lib" ]
71 #else
72                                  [ "$libdir" ]
73 #endif
74                             else [ ghc_src_dir cGHC_RUNTIME_DIR ],
75         hs_libraries      = [ "HSrts" ],
76         extra_libraries   =
77                               "m":              -- for ldexp()
78 #ifdef mingw32_TARGET_OS
79                               "winmm":          -- for the threadDelay timer
80                               "wsock32":        -- for the linker
81 #endif
82 #ifdef USING_LIBBFD
83                               "bfd": "iberty":  -- for debugging
84 #endif
85 #ifdef THREADED_RTS
86                               "pthread" :
87 #endif
88
89                             [],
90         include_dirs   = if installing
91                             then [ "$libdir/include"
92 #ifdef mingw32_TARGET_OS
93                                  , "$libdir/include/mingw"
94 #endif
95                                  ]
96                             else [ ghc_src_dir cGHC_INCLUDE_DIR ],
97         c_includes     = [ "Stg.h" ],           -- ha!
98         package_deps   = [ "gmp" ],
99         extra_ghc_opts = [],
100         extra_cc_opts  = [],
101                 -- the RTS forward-references to a bunch of stuff in the prelude,
102                 -- so we force it to be included with special options to ld.
103         extra_ld_opts  =
104            foldr (\ x xs -> "-u" : x : xs) []
105                  (map (
106 #ifndef LEADING_UNDERSCORE
107                           ""
108 #else
109                           "_"
110 #endif
111                           ++ ) [
112            "PrelBase_Izh_static_info"
113          , "PrelBase_Czh_static_info"
114          , "PrelFloat_Fzh_static_info"
115          , "PrelFloat_Dzh_static_info"
116          , "PrelPtr_Ptr_static_info"
117          , "PrelWord_Wzh_static_info"
118          , "PrelInt_I8zh_static_info"
119          , "PrelInt_I16zh_static_info"
120          , "PrelInt_I32zh_static_info"
121          , "PrelInt_I64zh_static_info"
122          , "PrelWord_W8zh_static_info"
123          , "PrelWord_W16zh_static_info"
124          , "PrelWord_W32zh_static_info"
125          , "PrelWord_W64zh_static_info"
126          , "PrelStable_StablePtr_static_info"
127          , "PrelBase_Izh_con_info"
128          , "PrelBase_Czh_con_info"
129          , "PrelFloat_Fzh_con_info"
130          , "PrelFloat_Dzh_con_info"
131          , "PrelPtr_Ptr_con_info"
132          , "PrelStable_StablePtr_con_info"
133          , "PrelBase_False_closure"
134          , "PrelBase_True_closure"
135          , "PrelPack_unpackCString_closure"
136          , "PrelIOBase_stackOverflow_closure"
137          , "PrelIOBase_heapOverflow_closure"
138          , "PrelIOBase_NonTermination_closure"
139          , "PrelIOBase_BlockedOnDeadMVar_closure"
140          , "PrelIOBase_Deadlock_closure"
141          , "PrelWeak_runFinalizzerBatch_closure"
142          , "__stginit_Prelude"
143          ])
144         },
145
146         Package {
147         name           = "std",  -- The Prelude & Standard Hs_libraries
148         import_dirs    = if installing
149                             then [ "$libdir/imports/std" ]
150                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ],
151         source_dirs    = [],
152         library_dirs   = if installing
153                             then [ "$libdir" ]
154                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
155                                  , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
156
157         hs_libraries      = 
158 #                           ifndef mingw32_TARGET_OS
159                             [ "HSstd" ]
160 #                           else
161                             -- This splitting is the subject of a totally 
162                             -- horrible hack, which glues HSstd1 and HSstd2 
163                             -- back into HSstd for the purposes of static linking.
164                             -- See DriverState.getPackageLibraries for details.
165                             [ "HSstd1", "HSstd2" ]
166 #                           endif
167                             ,
168         extra_libraries   = [ "HSstd_cbits" ] ++
169 #                           ifdef mingw32_TARGET_OS
170                             [ "wsock32", "msvcrt", "kernel32", "user32" ]
171 #                           else
172                             [ ]
173 #                           endif
174                             ,
175         include_dirs   = if installing
176                             then []
177                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
178         c_includes     = [ "HsStd.h" ],
179         package_deps   = [ "rts" ],
180         extra_ghc_opts = [],
181         extra_cc_opts  = [],
182         extra_ld_opts  = []
183         },
184
185          Package { 
186          name           = "lang",
187          import_dirs    = if installing
188                              then [ "$libdir/imports/lang" ]
189                              else [ "$libdir/hslibs/lang"
190                                   , "$libdir/hslibs/lang/monads" ],
191          source_dirs    = [],
192          library_dirs   = if installing
193                              then [ "$libdir" ]
194                              else [ "$libdir/hslibs/lang"
195                                   , "$libdir/hslibs/lang/cbits" ],
196          hs_libraries      = [ "HSlang" ],
197          extra_libraries   = [ "HSlang_cbits" ],
198          include_dirs   = if installing
199                              then []
200                              else [ "$libdir/hslibs/lang/cbits" ],
201          c_includes     = [ "HsLang.h" ],
202          package_deps   = [],
203          extra_ghc_opts = [],
204          extra_cc_opts  = [],
205          extra_ld_opts  = [
206 #ifndef LEADING_UNDERSCORE
207                           "-u", "Addr_Azh_static_info"
208 #else
209                           "-u", "_Addr_Azh_static_info"
210 #endif
211                         ]
212         },
213
214          Package {
215          name           = "concurrent",
216          import_dirs    = if installing
217                              then [ "$libdir/imports/concurrent" ]
218                              else [ "$libdir/hslibs/concurrent" ],
219          source_dirs    = [],
220          library_dirs   = if installing
221                              then [ "$libdir" ]
222                              else [ "$libdir/hslibs/concurrent" ],
223          hs_libraries      = [ "HSconcurrent" ],
224          extra_libraries   = [],
225          include_dirs   = if installing
226                              then []
227                              else [ "$libdir/hslibs/concurrent/cbits" ],
228          c_includes     = [],
229          package_deps   = [ "lang" ],
230          extra_ghc_opts = [],
231          extra_cc_opts  = [],
232          extra_ld_opts  = []
233         },
234
235          Package {
236          name           = "data",
237          import_dirs    = if installing
238                              then [ "$libdir/imports/data" ]
239                              else [ "$libdir/hslibs/data"
240                                   , "$libdir/hslibs/data/edison"
241                                   , "$libdir/hslibs/data/edison/Assoc"
242                                   , "$libdir/hslibs/data/edison/Coll"
243                                   , "$libdir/hslibs/data/edison/Seq" ],
244          source_dirs    = [],
245          library_dirs   = if installing
246                              then [ "$libdir" ]
247                              else [ "$libdir/hslibs/data" ],
248          hs_libraries      = [ "HSdata" ],
249          extra_libraries   = [],
250          include_dirs   = if installing
251                              then []
252                              else [ "$libdir/hslibs/data/cbits" ],
253          c_includes     = [],
254          package_deps   = [ "lang", "util" ],
255          extra_ghc_opts = [],
256          extra_cc_opts  = [],
257          extra_ld_opts  = []
258         },
259
260          Package {
261          name           = "net",
262          import_dirs    = if installing
263                              then [ "$libdir/imports/net" ]
264                              else [ "$libdir/hslibs/net" ],
265          source_dirs    = [],
266          library_dirs   = if installing
267                              then [ "$libdir" ]
268                              else [ "$libdir/hslibs/net"
269                                   , "$libdir/hslibs/net/cbits" ],
270          hs_libraries      = [ "HSnet" ],
271          extra_libraries   = if suffixMatch "solaris2" cTARGETPLATFORM
272                                 then [ "nsl",  "socket" ]
273                                 else []
274                              ,
275          include_dirs   = if installing
276                              then []
277                              else [ "$libdir/hslibs/net/cbits" ],
278          c_includes     = [ "HsNet.h" ],
279          package_deps   = [ "lang", "text", "concurrent" ],
280          extra_ghc_opts = [],
281          extra_cc_opts  = [],
282          extra_ld_opts  = []
283         },
284
285          Package {
286          name           = "posix",
287          import_dirs    = if installing
288                              then [ "$libdir/imports/posix" ]
289                              else [ "$libdir/hslibs/posix" ],
290          source_dirs    = [],
291          library_dirs   = if installing
292                              then [ "$libdir" ]
293                              else [ "$libdir/hslibs/posix"
294                                   , "$libdir/hslibs/posix/cbits" ],
295          hs_libraries      = [ "HSposix" ],
296          extra_libraries   = [ "HSposix_cbits" ],
297          include_dirs   = if installing
298                              then []
299                              else [ "$libdir/hslibs/posix/cbits" ],
300          c_includes     = [ "HsPosix.h" ],
301          package_deps   = [ "lang" ],
302          extra_ghc_opts = [],
303          extra_cc_opts  = [],
304          extra_ld_opts  = []
305         },
306
307          Package {
308          name           = "text",
309          import_dirs    = if installing
310                              then [ "$libdir/imports/text" ]
311                              else [ "$libdir/hslibs/text" 
312                                   , "$libdir/hslibs/text/html" 
313                                   , "$libdir/hslibs/text/HaXml/lib" 
314                                   , "$libdir/hslibs/text/parsec" ],
315          source_dirs    = [],
316          library_dirs   = if installing
317                              then [ "$libdir" ]
318                              else [ "$libdir/hslibs/text"
319                                   , "$libdir/hslibs/text/cbits" ],
320          hs_libraries      = [ "HStext" ],
321          extra_libraries   = [ "HStext_cbits" ],
322          include_dirs   = if installing
323                              then []
324                              else [ "$libdir/hslibs/text/cbits" ],
325          c_includes     = [ "HsText.h" ],
326          package_deps   = [ "lang" ],
327          extra_ghc_opts = [],
328          extra_cc_opts  = [],
329          extra_ld_opts  = []
330         },
331
332          Package {
333          name           = "util",
334          import_dirs    = if installing
335                              then [ "$libdir/imports/util" ]
336                              else [ "$libdir/hslibs/util"
337                                   , "$libdir/hslibs/util/check" ],
338          source_dirs    = [],
339          library_dirs   = if installing
340                              then [ "$libdir" ]
341                              else [ "$libdir/hslibs/util"
342                                   , "$libdir/hslibs/util/cbits" ],
343          hs_libraries      = [ "HSutil" ],
344          extra_libraries   = [ "HSutil_cbits" ] 
345 #ifndef mingw32_TARGET_OS
346                              ++ words cLibsReadline
347 #endif
348                              ,
349          include_dirs   = if installing
350                              then []
351                              else [ "$libdir/hslibs/util/cbits" ],
352          c_includes     = [ "HsUtil.h" ],
353          package_deps   = [ "lang", "concurrent"
354 #ifndef mingw32_TARGET_OS
355                             , "posix"
356 #endif
357                           ],
358          extra_ghc_opts = [],
359          extra_cc_opts  = [],
360          extra_ld_opts  = []
361         },
362
363         -- no cbits at the moment, we'll need to add one if this library
364         -- ever calls out to any C libs.
365          Package {
366          name           = "hssource",
367          import_dirs    = if installing
368                              then [ "$libdir/imports/hssource" ]
369                              else [ "$libdir/hslibs/hssource" ],
370          source_dirs    = [],
371          library_dirs   = if installing
372                              then [ "$libdir" ]
373                              else [ "$libdir/hslibs/hssource" ],
374          hs_libraries      = [ "HShssource" ],
375          extra_libraries   = [],
376          include_dirs   = [],
377          c_includes     = [],
378          package_deps   = [ "text" ],
379          extra_ghc_opts = [],
380          extra_cc_opts  = [],
381          extra_ld_opts  = []
382         },
383
384          Package {
385          name         = "greencard",
386          import_dirs    = if installing
387                              then [ "$libdir/imports/greencard" ]
388                              else [ "$libdir/green-card/lib/ghc" ],
389          source_dirs    = [],
390          library_dirs   = if installing
391                              then [ "$libdir" ]
392                              else [ "$libdir/green-card/lib/ghc" ],
393          hs_libraries      = [ "HSgreencard" ],
394          extra_libraries   = [],
395          include_dirs   = [],
396          c_includes     = [],
397          package_deps   = [ "lang" ],
398          extra_ghc_opts = [],
399          extra_cc_opts  = [],
400          extra_ld_opts  = [],
401         }
402
403 #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS)
404          ,Package {
405          name         = "win32",
406          import_dirs    = if installing
407                              then [ "$libdir/imports/win32" ]
408                              else [ "$libdir/hslibs/win32" ],
409          source_dirs    = [],
410          library_dirs   = if installing
411                              then [ "$libdir" ]
412                              else [ "$libdir/hslibs/win32" ],
413          hs_libraries      = [ "HSwin321", "HSwin322" ],
414          extra_libraries   = [ "user32",  "gdi32", "winmm", 
415                                "kernel32", "advapi32" ],
416          include_dirs   = [],
417          c_includes     = [],           -- ???
418          package_deps   = [ "lang" ], -- greencard now built in
419          extra_ghc_opts = [],
420          extra_cc_opts  = [],
421          extra_ld_opts  = []
422         }
423         ,Package {
424          name = "objectio",
425          import_dirs = if installing
426                        then ["$libdir/imports/objectio"]
427                        else ["$libdir/hslibs/object-io/ObjectIO","$libdir/hslibs/object-io/OSWindows"],
428          source_dirs = [],
429          library_dirs = if installing
430                         then [ "$libdir" ]
431                         else [ "$libdir/hslibs/object-io"],
432          hs_libraries = ["HSobjectio"],
433          extra_libraries =
434                        ["user32",
435                         "gdi32",
436                         "kernel32",
437                         "comctl32",
438                         "comdlg32",
439                         "shell32",
440                         "winmm",
441                         "winspool",
442                         "ole32"],
443          include_dirs = [],
444          c_includes = [],
445          package_deps = ["concurrent", "lang"],
446          extra_ghc_opts = [],
447          extra_cc_opts = [],
448          extra_ld_opts = []
449         }
450 #endif
451
452          ,Package {
453          name           = "xlib",
454          import_dirs    = if installing
455                              then [ "$libdir/imports/xlib" ]
456                              else [ "$libdir/hslibs/xlib" ],
457          source_dirs    = [],
458          library_dirs   = if installing
459                              then [ "$libdir" ]
460                              else [ "$libdir/hslibs/xlib"
461                                   , "$libdir/hslibs/xlib/cbits" ],
462          hs_libraries      = [ "HSxlib" ],
463          extra_libraries   = [ "HSxlib_cbits", "X11" ],
464          include_dirs   = if installing
465                              then []
466                              else [ "$libdir/hslibs/xlib/cbits" ],
467          c_includes     = [ "HsXlib.h" ],
468          package_deps   = [ "greencard" ],
469          extra_ghc_opts = [],
470          extra_cc_opts  = [ cX_CFLAGS ],
471          extra_ld_opts  = [ cX_LIBS ]
472         }
473
474          ,Package {
475          name           = "HGL",
476          import_dirs    = if installing
477                              then [ "$libdir/imports/HGL" ]
478                              else [ "$libdir/hslibs/graphics/lib/x11" ],
479          source_dirs    = [],
480          library_dirs   = if installing
481                              then [ "$libdir" ]
482                              else [ "$libdir/hslibs/graphics/lib/x11"],
483          hs_libraries   = [ "HSHGL" ],
484          extra_libraries= [],
485          include_dirs   = [],
486          c_includes     = [],
487          package_deps   = [ "xlib", "concurrent" ],
488          extra_ghc_opts = [],
489          extra_cc_opts  = [],
490          extra_ld_opts  = []
491         }
492
493    ]
494   where
495         ghc_src_dir :: String -> String
496         ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path