1 #include "../includes/config.h"
2 #include "../includes/Derived.h"
4 module Main (main) where
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)
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.
25 -- This is how we make package.conf independent of GHC's installation
28 package_details :: Bool -> [String] -> [PackageConfig]
29 package_details installing
44 name = "gmp", -- GMP is at the bottom of the heap
47 library_dirs = if cHaveLibGmp == "YES"
51 else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ],
53 extra_libraries = [ "gmp" ],
63 name = "rts", -- The RTS is just another package!
66 library_dirs = if installing
68 else [ ghc_src_dir cGHC_RUNTIME_DIR ],
69 hs_libraries = [ "HSrts" ],
72 #ifdef mingw32_TARGET_OS
73 "winmm": -- for the threadDelay timer
74 "wsock32": -- for the linker
77 "bfd": "iberty": -- for debugging
80 include_dirs = if installing
81 then [ "$libdir/include"
82 #ifdef mingw32_TARGET_OS
83 , "$libdir/include/mingw"
86 else [ ghc_src_dir cGHC_INCLUDE_DIR ],
87 c_includes = [ "Stg.h" ], -- ha!
88 package_deps = [ "gmp" ],
91 -- the RTS forward-references to a bunch of stuff in the prelude,
92 -- so we force it to be included with special options to ld.
94 foldr (\ x xs -> "-u" : x : xs) []
96 #ifndef LEADING_UNDERSCORE
102 "PrelBase_Izh_static_info"
103 , "PrelBase_Czh_static_info"
104 , "PrelFloat_Fzh_static_info"
105 , "PrelFloat_Dzh_static_info"
106 , "PrelPtr_Ptr_static_info"
107 , "PrelWord_Wzh_static_info"
108 , "PrelInt_I8zh_static_info"
109 , "PrelInt_I16zh_static_info"
110 , "PrelInt_I32zh_static_info"
111 , "PrelInt_I64zh_static_info"
112 , "PrelWord_W8zh_static_info"
113 , "PrelWord_W16zh_static_info"
114 , "PrelWord_W32zh_static_info"
115 , "PrelWord_W64zh_static_info"
116 , "PrelStable_StablePtr_static_info"
117 , "PrelBase_Izh_con_info"
118 , "PrelBase_Czh_con_info"
119 , "PrelFloat_Fzh_con_info"
120 , "PrelFloat_Dzh_con_info"
121 , "PrelPtr_Ptr_con_info"
122 , "PrelStable_StablePtr_con_info"
123 , "PrelBase_False_closure"
124 , "PrelBase_True_closure"
125 , "PrelPack_unpackCString_closure"
126 , "PrelIOBase_stackOverflow_closure"
127 , "PrelIOBase_heapOverflow_closure"
128 , "PrelIOBase_NonTermination_closure"
129 , "PrelIOBase_BlockedOnDeadMVar_closure"
130 , "PrelWeak_runFinalizzerBatch_closure"
131 , "__stginit_Prelude"
136 name = "std", -- The Prelude & Standard Hs_libraries
137 import_dirs = if installing
138 then [ "$libdir/imports/std" ]
139 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ],
141 library_dirs = if installing
143 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
144 , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
147 # ifndef mingw32_TARGET_OS
150 -- This splitting is the subject of a totally
151 -- horrible hack, which glues HSstd1 and HSstd2
152 -- back into HSstd for the purposes of static linking.
153 -- See DriverState.getPackageLibraries for details.
154 [ "HSstd1", "HSstd2" ]
157 extra_libraries = [ "HSstd_cbits" ] ++
158 # ifdef mingw32_TARGET_OS
159 [ "wsock32", "msvcrt", "kernel32" ]
164 include_dirs = if installing
166 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
167 c_includes = [ "HsStd.h" ],
168 package_deps = [ "rts" ],
176 import_dirs = if installing
177 then [ "$libdir/imports/lang" ]
178 else [ "$libdir/hslibs/lang"
179 , "$libdir/hslibs/lang/monads" ],
181 library_dirs = if installing
183 else [ "$libdir/hslibs/lang"
184 , "$libdir/hslibs/lang/cbits" ],
185 hs_libraries = [ "HSlang" ],
186 extra_libraries = [ "HSlang_cbits" ],
187 include_dirs = if installing
189 else [ "$libdir/hslibs/lang/cbits" ],
190 c_includes = [ "HsLang.h" ],
195 #ifndef LEADING_UNDERSCORE
196 "-u", "Addr_Azh_static_info"
198 "-u", "_Addr_Azh_static_info"
205 import_dirs = if installing
206 then [ "$libdir/imports/concurrent" ]
207 else [ "$libdir/hslibs/concurrent" ],
209 library_dirs = if installing
211 else [ "$libdir/hslibs/concurrent" ],
212 hs_libraries = [ "HSconcurrent" ],
213 extra_libraries = [],
214 include_dirs = if installing
216 else [ "$libdir/hslibs/concurrent/cbits" ],
218 package_deps = [ "lang" ],
226 import_dirs = if installing
227 then [ "$libdir/imports/data" ]
228 else [ "$libdir/hslibs/data"
229 , "$libdir/hslibs/data/edison"
230 , "$libdir/hslibs/data/edison/Assoc"
231 , "$libdir/hslibs/data/edison/Coll"
232 , "$libdir/hslibs/data/edison/Seq" ],
234 library_dirs = if installing
236 else [ "$libdir/hslibs/data" ],
237 hs_libraries = [ "HSdata" ],
238 extra_libraries = [],
239 include_dirs = if installing
241 else [ "$libdir/hslibs/data/cbits" ],
243 package_deps = [ "lang", "util" ],
251 import_dirs = if installing
252 then [ "$libdir/imports/net" ]
253 else [ "$libdir/hslibs/net" ],
255 library_dirs = if installing
257 else [ "$libdir/hslibs/net"
258 , "$libdir/hslibs/net/cbits" ],
259 hs_libraries = [ "HSnet" ],
260 extra_libraries = if suffixMatch "solaris2" cTARGETPLATFORM
261 then [ "nsl", "socket" ]
264 include_dirs = if installing
266 else [ "$libdir/hslibs/net/cbits" ],
267 c_includes = [ "HsNet.h" ],
268 package_deps = [ "lang", "text", "concurrent" ],
276 import_dirs = if installing
277 then [ "$libdir/imports/posix" ]
278 else [ "$libdir/hslibs/posix" ],
280 library_dirs = if installing
282 else [ "$libdir/hslibs/posix"
283 , "$libdir/hslibs/posix/cbits" ],
284 hs_libraries = [ "HSposix" ],
285 extra_libraries = [ "HSposix_cbits" ],
286 include_dirs = if installing
288 else [ "$libdir/hslibs/posix/cbits" ],
289 c_includes = [ "HsPosix.h" ],
290 package_deps = [ "lang" ],
298 import_dirs = if installing
299 then [ "$libdir/imports/text" ]
300 else [ "$libdir/hslibs/text"
301 , "$libdir/hslibs/text/html"
302 , "$libdir/hslibs/text/HaXml/lib"
303 , "$libdir/hslibs/text/parsec" ],
305 library_dirs = if installing
307 else [ "$libdir/hslibs/text"
308 , "$libdir/hslibs/text/cbits" ],
309 hs_libraries = [ "HStext" ],
310 extra_libraries = [ "HStext_cbits" ],
311 include_dirs = if installing
313 else [ "$libdir/hslibs/text/cbits" ],
314 c_includes = [ "HsText.h" ],
315 package_deps = [ "lang" ],
323 import_dirs = if installing
324 then [ "$libdir/imports/util" ]
325 else [ "$libdir/hslibs/util"
326 , "$libdir/hslibs/util/check" ],
328 library_dirs = if installing
330 else [ "$libdir/hslibs/util"
331 , "$libdir/hslibs/util/cbits" ],
332 hs_libraries = [ "HSutil" ],
333 extra_libraries = [ "HSutil_cbits" ]
334 #ifndef mingw32_TARGET_OS
335 ++ words cLibsReadline
338 include_dirs = if installing
340 else [ "$libdir/hslibs/util/cbits" ],
341 c_includes = [ "HsUtil.h" ],
342 package_deps = [ "lang", "concurrent"
343 #ifndef mingw32_TARGET_OS
352 -- no cbits at the moment, we'll need to add one if this library
353 -- ever calls out to any C libs.
356 import_dirs = if installing
357 then [ "$libdir/imports/hssource" ]
358 else [ "$libdir/hslibs/hssource" ],
360 library_dirs = if installing
362 else [ "$libdir/hslibs/hssource" ],
363 hs_libraries = [ "HShssource" ],
364 extra_libraries = [],
367 package_deps = [ "text" ],
375 import_dirs = if installing
376 then [ "$libdir/imports/greencard" ]
377 else [ "$libdir/green-card/lib/ghc" ],
379 library_dirs = if installing
381 else [ "$libdir/green-card/lib/ghc" ],
382 hs_libraries = [ "HSgreencard" ],
383 extra_libraries = [],
386 package_deps = [ "lang" ],
392 #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS)
395 import_dirs = if installing
396 then [ "$libdir/imports/win32" ]
397 else [ "$libdir/hslibs/win32" ],
399 library_dirs = if installing
401 else [ "$libdir/hslibs/win32" ],
402 hs_libraries = [ "HSwin321", "HSwin322" ],
403 extra_libraries = [ "user32", "gdi32", "winmm",
404 "kernel32", "advapi32" ],
406 c_includes = [], -- ???
407 package_deps = [ "lang" ], -- greencard now built in
416 import_dirs = if installing
417 then [ "$libdir/imports/xlib" ]
418 else [ "$libdir/hslibs/xlib" ],
420 library_dirs = if installing
422 else [ "$libdir/hslibs/xlib"
423 , "$libdir/hslibs/xlib/cbits" ],
424 hs_libraries = [ "HSxlib" ],
425 extra_libraries = [ "HSxlib_cbits", "X11" ],
426 include_dirs = if installing
428 else [ "$libdir/hslibs/xlib/cbits" ],
429 c_includes = [ "HsXlib.h" ],
430 package_deps = [ "greencard" ],
432 extra_cc_opts = [ cX_CFLAGS ],
433 extra_ld_opts = [ cX_LIBS ]
438 import_dirs = if installing
439 then [ "$libdir/imports/HGL" ]
440 else [ "$libdir/hslibs/graphics/lib/x11" ],
442 library_dirs = if installing
444 else [ "$libdir/hslibs/graphics/lib/x11"],
445 hs_libraries = [ "HSHGL" ],
449 package_deps = [ "xlib", "concurrent" ],
457 ghc_src_dir :: String -> String
458 ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path