1 module Main (main) where
12 [ "install" ] -> do { putStrLn (dumpPackages (package_details True)) }
13 [ "in-place" ] -> do { putStrLn (dumpPackages (package_details False)) }
14 _ -> do hPutStr stderr "usage: pkgconf (install | in-place)\n"
15 exitWith (ExitFailure 1)
17 package_details :: Bool -> [Package]
18 package_details installing =
21 name = "gmp", -- GMP is at the bottom of the heap
23 library_dirs = if cHaveLibGmp == "YES"
27 else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ],
29 extra_libraries = [ "gmp" ],
39 name = "rts", -- The RTS is just another package!
41 library_dirs = if installing
43 else [ ghc_src_dir cGHC_RUNTIME_DIR ],
44 hs_libraries = [ "HSrts" ],
46 include_dirs = if installing
47 then [ clibdir ++ "/includes" ]
48 else [ ghc_src_dir cGHC_INCLUDE_DIR ],
49 c_includes = [ "Stg.h" ], -- ha!
50 package_deps = [ "gmp" ],
53 -- the RTS forward-references to a bunch of stuff in the prelude,
54 -- so we force it to be included with special options to ld.
56 "-u PrelMain_mainIO_closure"
57 , "-u PrelBase_Izh_static_info"
58 , "-u PrelBase_Czh_static_info"
59 , "-u PrelFloat_Fzh_static_info"
60 , "-u PrelFloat_Dzh_static_info"
61 , "-u PrelAddr_Azh_static_info"
62 , "-u PrelAddr_Wzh_static_info"
63 , "-u PrelAddr_I64zh_static_info"
64 , "-u PrelAddr_W64zh_static_info"
65 , "-u PrelStable_StablePtr_static_info"
66 , "-u PrelBase_Izh_con_info"
67 , "-u PrelBase_Czh_con_info"
68 , "-u PrelFloat_Fzh_con_info"
69 , "-u PrelFloat_Dzh_con_info"
70 , "-u PrelAddr_Azh_con_info"
71 , "-u PrelAddr_Wzh_con_info"
72 , "-u PrelAddr_I64zh_con_info"
73 , "-u PrelAddr_W64zh_con_info"
74 , "-u PrelStable_StablePtr_con_info"
75 , "-u PrelBase_False_closure"
76 , "-u PrelBase_True_closure"
77 , "-u PrelPack_unpackCString_closure"
78 , "-u PrelIOBase_stackOverflow_closure"
79 , "-u PrelIOBase_heapOverflow_closure"
80 , "-u PrelIOBase_NonTermination_closure"
81 , "-u PrelIOBase_PutFullMVar_closure"
82 , "-u PrelIOBase_BlockedOnDeadMVar_closure"
83 , "-u PrelWeak_runFinalizzerBatch_closure"
85 , "-u __init_PrelMain"
90 name = "std", -- The Prelude & Standard Hs_libraries
91 import_dirs = if installing
92 then [ clibdir ++ "/imports/std" ]
93 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ],
94 library_dirs = if installing
96 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std"
97 , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
98 hs_libraries = [ "HSstd" ],
99 extra_libraries = [ "HSstd_cbits" ],
100 include_dirs = if installing
102 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
103 c_includes = [ "HsStd.h" ],
104 package_deps = [ "rts" ],
107 extra_ld_opts = [ "-lm" ]
112 import_dirs = if installing
113 then [ clibdir ++ "/imports/lang" ]
114 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/lang"
115 , cFPTOOLS_TOP_ABS ++ "/hslibs/lang/monads" ],
116 library_dirs = if installing
118 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/lang"
119 , cFPTOOLS_TOP_ABS ++ "/hslibs/lang/cbits" ],
120 hs_libraries = [ "HSlang" ],
121 extra_libraries = [ "HSlang_cbits" ],
122 include_dirs = if installing
124 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/lang/cbits" ],
125 c_includes = [ "HsLang.h" ],
134 import_dirs = if installing
135 then [ clibdir ++ "/imports/concurrent" ]
136 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/concurrent" ],
137 library_dirs = if installing
139 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/concurrent" ],
140 hs_libraries = [ "HSconcurrent" ],
141 extra_libraries = [],
142 include_dirs = if installing
144 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/concurrent/cbits" ],
145 c_includes = [ "HsConcurrent.h" ],
146 package_deps = [ "lang" ],
154 import_dirs = if installing
155 then [ clibdir ++ "/imports/data" ]
156 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/data"
157 , cFPTOOLS_TOP_ABS ++ "/hslibs/data/edison"
158 , cFPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Assoc"
159 , cFPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Coll"
160 , cFPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Seq" ],
161 library_dirs = if installing
163 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/data" ],
164 hs_libraries = [ "HSdata" ],
165 extra_libraries = [],
166 include_dirs = if installing
168 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/data/cbits" ],
169 c_includes = [ "HsData.h" ],
170 package_deps = [ "lang" ],
178 import_dirs = if installing
179 then [ clibdir ++ "/imports/net" ]
180 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/net" ],
181 library_dirs = if installing
183 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/net"
184 , cFPTOOLS_TOP_ABS ++ "/hslibs/net/cbits" ],
185 hs_libraries = [ "HSnet" ],
186 extra_libraries = [ "HSnet_cbits" ],
187 include_dirs = if installing
189 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/net/cbits" ],
190 c_includes = [ "HsNet.h" ],
191 package_deps = [ "lang", "text" ],
194 extra_ld_opts = if postfixMatch "solaris2" cTARGETPLATFORM
195 then [ "-lnsl", "-lsocket" ]
201 import_dirs = if installing
202 then [ clibdir ++ "/imports/posix" ]
203 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/posix" ],
204 library_dirs = if installing
206 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/posix"
207 , cFPTOOLS_TOP_ABS ++ "/hslibs/posix/cbits" ],
208 hs_libraries = [ "HSposix" ],
209 extra_libraries = [ "HSposix_cbits" ],
210 include_dirs = if installing
212 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/posix/cbits" ],
213 c_includes = [ "HsPosix.h" ],
214 package_deps = [ "lang" ],
222 import_dirs = if installing
223 then [ clibdir ++ "/imports/text" ]
224 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/text"
225 , cFPTOOLS_TOP_ABS ++ "/hslibs/text/html"
226 , cFPTOOLS_TOP_ABS ++ "/hslibs/text/haxml/lib"
227 , cFPTOOLS_TOP_ABS ++ "/hslibs/text/parsec" ],
228 library_dirs = if installing
230 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/text"
231 , cFPTOOLS_TOP_ABS ++ "/hslibs/text/cbits" ],
232 hs_libraries = [ "HStext" ],
233 extra_libraries = [ "HStext_cbits" ],
234 include_dirs = if installing
236 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/text/cbits" ],
237 c_includes = [ "HsText.h" ],
238 package_deps = [ "lang", "data" ],
246 import_dirs = if installing
247 then [ clibdir ++ "/imports/util" ]
248 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/util"
249 , cFPTOOLS_TOP_ABS ++ "/hslibs/util/check" ],
250 library_dirs = if installing
252 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/util"
253 , cFPTOOLS_TOP_ABS ++ "/hslibs/util/cbits" ],
254 hs_libraries = [ "HSutil" ],
255 extra_libraries = [ "HSutil_cbits" ],
256 include_dirs = if installing
258 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/util/cbits" ],
259 c_includes = [ "HsUtil.h" ],
260 package_deps = [ "lang", "concurrent", "posix" ],
266 -- no cbits at the moment, we'll need to add one if this library
267 -- ever calls out to any C libs.
270 import_dirs = if installing
271 then [ clibdir ++ "/imports/hssource" ]
272 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/hssource" ],
273 library_dirs = if installing
275 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/hssource" ],
276 hs_libraries = [ "HShssource" ],
277 extra_libraries = [],
280 package_deps = [ "text" ],
288 import_dirs = if installing
289 then [ clibdir ++ "/imports/win32" ]
290 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/win32/src" ],
291 library_dirs = if installing
293 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/win32/src" ],
294 hs_libraries = [ "HSwin32" ],
295 extra_libraries = [],
297 c_includes = [], -- ???
298 package_deps = [ "lang" ],
301 extra_ld_opts = [ "-luser32", "-lgdi32" ]
306 import_dirs = if installing
307 then [ clibdir ++ "/imports/com" ]
308 else [ cFPTOOLS_TOP_ABS ++ "/hdirect/lib" ],
309 library_dirs = if installing
311 else [ cFPTOOLS_TOP_ABS ++ "/hdirect/lib" ],
312 hs_libraries = [ "HScom" ],
313 extra_libraries = [],
315 c_includes = [], -- ???
316 package_deps = [ "lang" ],
319 extra_ld_opts = [ "-luser32", "-lole32", "-loleaut32", "-ladvapi32" ]
323 ghc_src_dir :: String -> String
324 ghc_src_dir path = cFPTOOLS_TOP_ABS ++ '/':cCURRENT_DIR ++ '/':path
326 prefixMatch :: Eq a => [a] -> [a] -> Bool
327 prefixMatch [] _str = True
328 prefixMatch _pat [] = False
329 prefixMatch (p:ps) (s:ss) | p == s = prefixMatch ps ss
332 postfixMatch :: String -> String -> Bool
333 postfixMatch pat str = prefixMatch (reverse pat) (reverse str)