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 #ifdef mingw32_TARGET_OS
69 -- force the dist-provided gcc-lib/ into scope.
70 [ "$libdir", "$libdir/gcc-lib" ]
74 else [ ghc_src_dir cGHC_RUNTIME_DIR ],
75 hs_libraries = [ "HSrts" ],
78 #ifdef mingw32_TARGET_OS
79 "winmm": -- for the threadDelay timer
80 "wsock32": -- for the linker
83 "bfd": "iberty": -- for debugging
90 include_dirs = if installing
91 then [ "$libdir/include"
92 #ifdef mingw32_TARGET_OS
93 , "$libdir/include/mingw"
96 else [ ghc_src_dir cGHC_INCLUDE_DIR ],
97 c_includes = [ "Stg.h" ], -- ha!
98 package_deps = [ "gmp" ],
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.
104 foldr (\ x xs -> "-u" : x : xs) []
106 #ifndef LEADING_UNDERSCORE
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"
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" ],
152 library_dirs = if installing
154 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
155 , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
158 # ifndef mingw32_TARGET_OS
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" ]
168 extra_libraries = [ "HSstd_cbits" ] ++
169 # ifdef mingw32_TARGET_OS
170 [ "wsock32", "msvcrt", "kernel32", "user32" ]
175 include_dirs = if installing
177 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
178 c_includes = [ "HsStd.h" ],
179 package_deps = [ "rts" ],
187 import_dirs = if installing
188 then [ "$libdir/imports/lang" ]
189 else [ "$libdir/hslibs/lang"
190 , "$libdir/hslibs/lang/monads" ],
192 library_dirs = if installing
194 else [ "$libdir/hslibs/lang"
195 , "$libdir/hslibs/lang/cbits" ],
196 hs_libraries = [ "HSlang" ],
197 extra_libraries = [ "HSlang_cbits" ],
198 include_dirs = if installing
200 else [ "$libdir/hslibs/lang/cbits" ],
201 c_includes = [ "HsLang.h" ],
206 #ifndef LEADING_UNDERSCORE
207 "-u", "Addr_Azh_static_info"
209 "-u", "_Addr_Azh_static_info"
216 import_dirs = if installing
217 then [ "$libdir/imports/concurrent" ]
218 else [ "$libdir/hslibs/concurrent" ],
220 library_dirs = if installing
222 else [ "$libdir/hslibs/concurrent" ],
223 hs_libraries = [ "HSconcurrent" ],
224 extra_libraries = [],
225 include_dirs = if installing
227 else [ "$libdir/hslibs/concurrent/cbits" ],
229 package_deps = [ "lang" ],
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" ],
245 library_dirs = if installing
247 else [ "$libdir/hslibs/data" ],
248 hs_libraries = [ "HSdata" ],
249 extra_libraries = [],
250 include_dirs = if installing
252 else [ "$libdir/hslibs/data/cbits" ],
254 package_deps = [ "lang", "util" ],
262 import_dirs = if installing
263 then [ "$libdir/imports/net" ]
264 else [ "$libdir/hslibs/net" ],
266 library_dirs = if installing
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" ]
275 include_dirs = if installing
277 else [ "$libdir/hslibs/net/cbits" ],
278 c_includes = [ "HsNet.h" ],
279 package_deps = [ "lang", "text", "concurrent" ],
287 import_dirs = if installing
288 then [ "$libdir/imports/posix" ]
289 else [ "$libdir/hslibs/posix" ],
291 library_dirs = if installing
293 else [ "$libdir/hslibs/posix"
294 , "$libdir/hslibs/posix/cbits" ],
295 hs_libraries = [ "HSposix" ],
296 extra_libraries = [ "HSposix_cbits" ],
297 include_dirs = if installing
299 else [ "$libdir/hslibs/posix/cbits" ],
300 c_includes = [ "HsPosix.h" ],
301 package_deps = [ "lang" ],
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" ],
316 library_dirs = if installing
318 else [ "$libdir/hslibs/text"
319 , "$libdir/hslibs/text/cbits" ],
320 hs_libraries = [ "HStext" ],
321 extra_libraries = [ "HStext_cbits" ],
322 include_dirs = if installing
324 else [ "$libdir/hslibs/text/cbits" ],
325 c_includes = [ "HsText.h" ],
326 package_deps = [ "lang" ],
334 import_dirs = if installing
335 then [ "$libdir/imports/util" ]
336 else [ "$libdir/hslibs/util"
337 , "$libdir/hslibs/util/check" ],
339 library_dirs = if installing
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
349 include_dirs = if installing
351 else [ "$libdir/hslibs/util/cbits" ],
352 c_includes = [ "HsUtil.h" ],
353 package_deps = [ "lang", "concurrent"
354 #ifndef mingw32_TARGET_OS
363 -- no cbits at the moment, we'll need to add one if this library
364 -- ever calls out to any C libs.
367 import_dirs = if installing
368 then [ "$libdir/imports/hssource" ]
369 else [ "$libdir/hslibs/hssource" ],
371 library_dirs = if installing
373 else [ "$libdir/hslibs/hssource" ],
374 hs_libraries = [ "HShssource" ],
375 extra_libraries = [],
378 package_deps = [ "text" ],
386 import_dirs = if installing
387 then [ "$libdir/imports/greencard" ]
388 else [ "$libdir/green-card/lib/ghc" ],
390 library_dirs = if installing
392 else [ "$libdir/green-card/lib/ghc" ],
393 hs_libraries = [ "HSgreencard" ],
394 extra_libraries = [],
397 package_deps = [ "lang" ],
403 #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS)
406 import_dirs = if installing
407 then [ "$libdir/imports/win32" ]
408 else [ "$libdir/hslibs/win32" ],
410 library_dirs = if installing
412 else [ "$libdir/hslibs/win32" ],
413 hs_libraries = [ "HSwin321", "HSwin322" ],
414 extra_libraries = [ "user32", "gdi32", "winmm",
415 "kernel32", "advapi32" ],
417 c_includes = [], -- ???
418 package_deps = [ "lang" ], -- greencard now built in
425 import_dirs = if installing
426 then ["$libdir/imports/objectio"]
427 else ["$libdir/hslibs/object-io/ObjectIO","$libdir/hslibs/object-io/OSWindows"],
429 library_dirs = if installing
431 else [ "$libdir/hslibs/object-io"],
432 hs_libraries = ["HSobjectio"],
445 package_deps = ["concurrent", "lang"],
454 import_dirs = if installing
455 then [ "$libdir/imports/xlib" ]
456 else [ "$libdir/hslibs/xlib" ],
458 library_dirs = if installing
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
466 else [ "$libdir/hslibs/xlib/cbits" ],
467 c_includes = [ "HsXlib.h" ],
468 package_deps = [ "greencard" ],
470 extra_cc_opts = [ cX_CFLAGS ],
471 extra_ld_opts = [ cX_LIBS ]
476 import_dirs = if installing
477 then [ "$libdir/imports/HGL" ]
478 else [ "$libdir/hslibs/graphics/lib/x11" ],
480 library_dirs = if installing
482 else [ "$libdir/hslibs/graphics/lib/x11"],
483 hs_libraries = [ "HSHGL" ],
487 package_deps = [ "xlib", "concurrent" ],
495 ghc_src_dir :: String -> String
496 ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path