[project @ 2002-01-22 13:54:22 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                             [],
86         include_dirs   = if installing
87                             then [ "$libdir/include"
88 #ifdef mingw32_TARGET_OS
89                                  , "$libdir/include/mingw"
90 #endif
91                                  ]
92                             else [ ghc_src_dir cGHC_INCLUDE_DIR ],
93         c_includes     = [ "Stg.h" ],           -- ha!
94         package_deps   = [ "gmp" ],
95         extra_ghc_opts = [],
96         extra_cc_opts  = [],
97                 -- the RTS forward-references to a bunch of stuff in the prelude,
98                 -- so we force it to be included with special options to ld.
99         extra_ld_opts  =
100            foldr (\ x xs -> "-u" : x : xs) []
101                  (map (
102 #ifndef LEADING_UNDERSCORE
103                           ""
104 #else
105                           "_"
106 #endif
107                           ++ ) [
108            "PrelBase_Izh_static_info"
109          , "PrelBase_Czh_static_info"
110          , "PrelFloat_Fzh_static_info"
111          , "PrelFloat_Dzh_static_info"
112          , "PrelPtr_Ptr_static_info"
113          , "PrelWord_Wzh_static_info"
114          , "PrelInt_I8zh_static_info"
115          , "PrelInt_I16zh_static_info"
116          , "PrelInt_I32zh_static_info"
117          , "PrelInt_I64zh_static_info"
118          , "PrelWord_W8zh_static_info"
119          , "PrelWord_W16zh_static_info"
120          , "PrelWord_W32zh_static_info"
121          , "PrelWord_W64zh_static_info"
122          , "PrelStable_StablePtr_static_info"
123          , "PrelBase_Izh_con_info"
124          , "PrelBase_Czh_con_info"
125          , "PrelFloat_Fzh_con_info"
126          , "PrelFloat_Dzh_con_info"
127          , "PrelPtr_Ptr_con_info"
128          , "PrelStable_StablePtr_con_info"
129          , "PrelBase_False_closure"
130          , "PrelBase_True_closure"
131          , "PrelPack_unpackCString_closure"
132          , "PrelIOBase_stackOverflow_closure"
133          , "PrelIOBase_heapOverflow_closure"
134          , "PrelIOBase_NonTermination_closure"
135          , "PrelIOBase_BlockedOnDeadMVar_closure"
136          , "PrelIOBase_Deadlock_closure"
137          , "PrelWeak_runFinalizzerBatch_closure"
138          , "__stginit_Prelude"
139          ])
140         },
141
142         Package {
143         name           = "std",  -- The Prelude & Standard Hs_libraries
144         import_dirs    = if installing
145                             then [ "$libdir/imports/std" ]
146                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ],
147         source_dirs    = [],
148         library_dirs   = if installing
149                             then [ "$libdir" ]
150                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
151                                  , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
152
153         hs_libraries      = 
154 #                           ifndef mingw32_TARGET_OS
155                             [ "HSstd" ]
156 #                           else
157                             -- This splitting is the subject of a totally 
158                             -- horrible hack, which glues HSstd1 and HSstd2 
159                             -- back into HSstd for the purposes of static linking.
160                             -- See DriverState.getPackageLibraries for details.
161                             [ "HSstd1", "HSstd2" ]
162 #                           endif
163                             ,
164         extra_libraries   = [ "HSstd_cbits" ] ++
165 #                           ifdef mingw32_TARGET_OS
166                             [ "wsock32", "msvcrt", "kernel32", "user32" ]
167 #                           else
168                             [ ]
169 #                           endif
170                             ,
171         include_dirs   = if installing
172                             then []
173                             else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
174         c_includes     = [ "HsStd.h" ],
175         package_deps   = [ "rts" ],
176         extra_ghc_opts = [],
177         extra_cc_opts  = [],
178         extra_ld_opts  = []
179         },
180
181          Package { 
182          name           = "lang",
183          import_dirs    = if installing
184                              then [ "$libdir/imports/lang" ]
185                              else [ "$libdir/hslibs/lang"
186                                   , "$libdir/hslibs/lang/monads" ],
187          source_dirs    = [],
188          library_dirs   = if installing
189                              then [ "$libdir" ]
190                              else [ "$libdir/hslibs/lang"
191                                   , "$libdir/hslibs/lang/cbits" ],
192          hs_libraries      = [ "HSlang" ],
193          extra_libraries   = [ "HSlang_cbits" ],
194          include_dirs   = if installing
195                              then []
196                              else [ "$libdir/hslibs/lang/cbits" ],
197          c_includes     = [ "HsLang.h" ],
198          package_deps   = [],
199          extra_ghc_opts = [],
200          extra_cc_opts  = [],
201          extra_ld_opts  = [
202 #ifndef LEADING_UNDERSCORE
203                           "-u", "Addr_Azh_static_info"
204 #else
205                           "-u", "_Addr_Azh_static_info"
206 #endif
207                         ]
208         },
209
210          Package {
211          name           = "concurrent",
212          import_dirs    = if installing
213                              then [ "$libdir/imports/concurrent" ]
214                              else [ "$libdir/hslibs/concurrent" ],
215          source_dirs    = [],
216          library_dirs   = if installing
217                              then [ "$libdir" ]
218                              else [ "$libdir/hslibs/concurrent" ],
219          hs_libraries      = [ "HSconcurrent" ],
220          extra_libraries   = [],
221          include_dirs   = if installing
222                              then []
223                              else [ "$libdir/hslibs/concurrent/cbits" ],
224          c_includes     = [],
225          package_deps   = [ "lang" ],
226          extra_ghc_opts = [],
227          extra_cc_opts  = [],
228          extra_ld_opts  = []
229         },
230
231          Package {
232          name           = "data",
233          import_dirs    = if installing
234                              then [ "$libdir/imports/data" ]
235                              else [ "$libdir/hslibs/data"
236                                   , "$libdir/hslibs/data/edison"
237                                   , "$libdir/hslibs/data/edison/Assoc"
238                                   , "$libdir/hslibs/data/edison/Coll"
239                                   , "$libdir/hslibs/data/edison/Seq" ],
240          source_dirs    = [],
241          library_dirs   = if installing
242                              then [ "$libdir" ]
243                              else [ "$libdir/hslibs/data" ],
244          hs_libraries      = [ "HSdata" ],
245          extra_libraries   = [],
246          include_dirs   = if installing
247                              then []
248                              else [ "$libdir/hslibs/data/cbits" ],
249          c_includes     = [],
250          package_deps   = [ "lang", "util" ],
251          extra_ghc_opts = [],
252          extra_cc_opts  = [],
253          extra_ld_opts  = []
254         },
255
256          Package {
257          name           = "net",
258          import_dirs    = if installing
259                              then [ "$libdir/imports/net" ]
260                              else [ "$libdir/hslibs/net" ],
261          source_dirs    = [],
262          library_dirs   = if installing
263                              then [ "$libdir" ]
264                              else [ "$libdir/hslibs/net"
265                                   , "$libdir/hslibs/net/cbits" ],
266          hs_libraries      = [ "HSnet" ],
267          extra_libraries   = if suffixMatch "solaris2" cTARGETPLATFORM
268                                 then [ "nsl",  "socket" ]
269                                 else []
270                              ,
271          include_dirs   = if installing
272                              then []
273                              else [ "$libdir/hslibs/net/cbits" ],
274          c_includes     = [ "HsNet.h" ],
275          package_deps   = [ "lang", "text", "concurrent" ],
276          extra_ghc_opts = [],
277          extra_cc_opts  = [],
278          extra_ld_opts  = []
279         },
280
281          Package {
282          name           = "posix",
283          import_dirs    = if installing
284                              then [ "$libdir/imports/posix" ]
285                              else [ "$libdir/hslibs/posix" ],
286          source_dirs    = [],
287          library_dirs   = if installing
288                              then [ "$libdir" ]
289                              else [ "$libdir/hslibs/posix"
290                                   , "$libdir/hslibs/posix/cbits" ],
291          hs_libraries      = [ "HSposix" ],
292          extra_libraries   = [ "HSposix_cbits" ],
293          include_dirs   = if installing
294                              then []
295                              else [ "$libdir/hslibs/posix/cbits" ],
296          c_includes     = [ "HsPosix.h" ],
297          package_deps   = [ "lang" ],
298          extra_ghc_opts = [],
299          extra_cc_opts  = [],
300          extra_ld_opts  = []
301         },
302
303          Package {
304          name           = "text",
305          import_dirs    = if installing
306                              then [ "$libdir/imports/text" ]
307                              else [ "$libdir/hslibs/text" 
308                                   , "$libdir/hslibs/text/html" 
309                                   , "$libdir/hslibs/text/HaXml/lib" 
310                                   , "$libdir/hslibs/text/parsec" ],
311          source_dirs    = [],
312          library_dirs   = if installing
313                              then [ "$libdir" ]
314                              else [ "$libdir/hslibs/text"
315                                   , "$libdir/hslibs/text/cbits" ],
316          hs_libraries      = [ "HStext" ],
317          extra_libraries   = [ "HStext_cbits" ],
318          include_dirs   = if installing
319                              then []
320                              else [ "$libdir/hslibs/text/cbits" ],
321          c_includes     = [ "HsText.h" ],
322          package_deps   = [ "lang" ],
323          extra_ghc_opts = [],
324          extra_cc_opts  = [],
325          extra_ld_opts  = []
326         },
327
328          Package {
329          name           = "util",
330          import_dirs    = if installing
331                              then [ "$libdir/imports/util" ]
332                              else [ "$libdir/hslibs/util"
333                                   , "$libdir/hslibs/util/check" ],
334          source_dirs    = [],
335          library_dirs   = if installing
336                              then [ "$libdir" ]
337                              else [ "$libdir/hslibs/util"
338                                   , "$libdir/hslibs/util/cbits" ],
339          hs_libraries      = [ "HSutil" ],
340          extra_libraries   = [ "HSutil_cbits" ] 
341 #ifndef mingw32_TARGET_OS
342                              ++ words cLibsReadline
343 #endif
344                              ,
345          include_dirs   = if installing
346                              then []
347                              else [ "$libdir/hslibs/util/cbits" ],
348          c_includes     = [ "HsUtil.h" ],
349          package_deps   = [ "lang", "concurrent"
350 #ifndef mingw32_TARGET_OS
351                             , "posix"
352 #endif
353                           ],
354          extra_ghc_opts = [],
355          extra_cc_opts  = [],
356          extra_ld_opts  = []
357         },
358
359         -- no cbits at the moment, we'll need to add one if this library
360         -- ever calls out to any C libs.
361          Package {
362          name           = "hssource",
363          import_dirs    = if installing
364                              then [ "$libdir/imports/hssource" ]
365                              else [ "$libdir/hslibs/hssource" ],
366          source_dirs    = [],
367          library_dirs   = if installing
368                              then [ "$libdir" ]
369                              else [ "$libdir/hslibs/hssource" ],
370          hs_libraries      = [ "HShssource" ],
371          extra_libraries   = [],
372          include_dirs   = [],
373          c_includes     = [],
374          package_deps   = [ "text" ],
375          extra_ghc_opts = [],
376          extra_cc_opts  = [],
377          extra_ld_opts  = []
378         },
379
380          Package {
381          name         = "greencard",
382          import_dirs    = if installing
383                              then [ "$libdir/imports/greencard" ]
384                              else [ "$libdir/green-card/lib/ghc" ],
385          source_dirs    = [],
386          library_dirs   = if installing
387                              then [ "$libdir" ]
388                              else [ "$libdir/green-card/lib/ghc" ],
389          hs_libraries      = [ "HSgreencard" ],
390          extra_libraries   = [],
391          include_dirs   = [],
392          c_includes     = [],
393          package_deps   = [ "lang" ],
394          extra_ghc_opts = [],
395          extra_cc_opts  = [],
396          extra_ld_opts  = [],
397         }
398
399 #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS)
400          ,Package {
401          name         = "win32",
402          import_dirs    = if installing
403                              then [ "$libdir/imports/win32" ]
404                              else [ "$libdir/hslibs/win32" ],
405          source_dirs    = [],
406          library_dirs   = if installing
407                              then [ "$libdir" ]
408                              else [ "$libdir/hslibs/win32" ],
409          hs_libraries      = [ "HSwin321", "HSwin322" ],
410          extra_libraries   = [ "user32",  "gdi32", "winmm", 
411                                "kernel32", "advapi32" ],
412          include_dirs   = [],
413          c_includes     = [],           -- ???
414          package_deps   = [ "lang" ], -- greencard now built in
415          extra_ghc_opts = [],
416          extra_cc_opts  = [],
417          extra_ld_opts  = []
418         }
419 #endif
420
421          ,Package {
422          name           = "xlib",
423          import_dirs    = if installing
424                              then [ "$libdir/imports/xlib" ]
425                              else [ "$libdir/hslibs/xlib" ],
426          source_dirs    = [],
427          library_dirs   = if installing
428                              then [ "$libdir" ]
429                              else [ "$libdir/hslibs/xlib"
430                                   , "$libdir/hslibs/xlib/cbits" ],
431          hs_libraries      = [ "HSxlib" ],
432          extra_libraries   = [ "HSxlib_cbits", "X11" ],
433          include_dirs   = if installing
434                              then []
435                              else [ "$libdir/hslibs/xlib/cbits" ],
436          c_includes     = [ "HsXlib.h" ],
437          package_deps   = [ "greencard" ],
438          extra_ghc_opts = [],
439          extra_cc_opts  = [ cX_CFLAGS ],
440          extra_ld_opts  = [ cX_LIBS ]
441         }
442
443          ,Package {
444          name           = "HGL",
445          import_dirs    = if installing
446                              then [ "$libdir/imports/HGL" ]
447                              else [ "$libdir/hslibs/graphics/lib/x11" ],
448          source_dirs    = [],
449          library_dirs   = if installing
450                              then [ "$libdir" ]
451                              else [ "$libdir/hslibs/graphics/lib/x11"],
452          hs_libraries   = [ "HSHGL" ],
453          extra_libraries= [],
454          include_dirs   = [],
455          c_includes     = [],
456          package_deps   = [ "xlib", "concurrent" ],
457          extra_ghc_opts = [],
458          extra_cc_opts  = [],
459          extra_ld_opts  = []
460         }
461
462    ]
463   where
464         ghc_src_dir :: String -> String
465         ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path