1 module Main (main) where
12 [ "install" ] -> do { putStr (dumpPackages (package_details True)) }
13 [ "in-place" ] -> do { putStr (dumpPackages (package_details False)) }
14 _ -> do hPutStr stderr "usage: pkgconf (install | in-place)\n"
15 exitWith (ExitFailure 1)
17 package_details :: Bool -> [(String,Package)]
18 package_details installing =
20 ( "gmp", -- GMP is at the bottom of the heap
23 library_dirs = if cHaveLibGmp == "YES"
27 else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ],
28 libraries = [ "gmp" ],
38 ( "rts", -- The RTS is just another package!
41 library_dirs = if installing
43 else [ ghc_src_dir cGHC_RUNTIME_DIR ],
44 libraries = [ "HSrts" ],
45 include_dirs = if installing
46 then [ clibdir ++ "/includes" ]
47 else [ ghc_src_dir cGHC_INCLUDE_DIR ],
48 c_includes = [ "Stg.h" ], -- ha!
49 package_deps = [ "gmp" ],
52 -- the RTS forward-references to a bunch of stuff in the prelude,
53 -- so we force it to be included with special options to ld.
55 "-u PrelMain_mainIO_closure"
56 , "-u PrelBase_Izh_static_info"
57 , "-u PrelBase_Czh_static_info"
58 , "-u PrelFloat_Fzh_static_info"
59 , "-u PrelFloat_Dzh_static_info"
60 , "-u PrelAddr_Azh_static_info"
61 , "-u PrelAddr_Wzh_static_info"
62 , "-u PrelAddr_I64zh_static_info"
63 , "-u PrelAddr_W64zh_static_info"
64 , "-u PrelStable_StablePtr_static_info"
65 , "-u PrelBase_Izh_con_info"
66 , "-u PrelBase_Czh_con_info"
67 , "-u PrelFloat_Fzh_con_info"
68 , "-u PrelFloat_Dzh_con_info"
69 , "-u PrelAddr_Azh_con_info"
70 , "-u PrelAddr_Wzh_con_info"
71 , "-u PrelAddr_I64zh_con_info"
72 , "-u PrelAddr_W64zh_con_info"
73 , "-u PrelStable_StablePtr_con_info"
74 , "-u PrelBase_False_closure"
75 , "-u PrelBase_True_closure"
76 , "-u PrelPack_unpackCString_closure"
77 , "-u PrelIOBase_stackOverflow_closure"
78 , "-u PrelIOBase_heapOverflow_closure"
79 , "-u PrelIOBase_NonTermination_closure"
80 , "-u PrelIOBase_PutFullMVar_closure"
81 , "-u PrelIOBase_BlockedOnDeadMVar_closure"
82 , "-u PrelWeak_runFinalizzerBatch_closure"
84 , "-u __init_PrelMain"
89 ( "std", -- The Prelude & Standard 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 libraries = [ "HSstd", "HSstd_cbits" ],
99 include_dirs = if installing
101 else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ],
102 c_includes = [ "HsStd.h" ],
103 package_deps = [ "rts" ],
106 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 libraries = [ "HSlang", "HSlang_cbits" ],
121 include_dirs = if installing
123 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/lang/cbits" ],
124 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 libraries = [ "HSconcurrent" ],
141 include_dirs = if installing
143 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/concurrent/cbits" ],
144 c_includes = [ "HsConcurrent.h" ],
145 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 libraries = [ "HSdata" ],
165 include_dirs = if installing
167 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/data/cbits" ],
168 c_includes = [ "HsData.h" ],
169 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 libraries = [ "HSnet", "HSnet_cbits" ],
186 include_dirs = if installing
188 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/net/cbits" ],
189 c_includes = [ "HsNet.h" ],
190 package_deps = [ "lang", "text" ],
193 extra_ld_opts = if postfixMatch "solaris2" cTARGETPLATFORM
194 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 libraries = [ "HSposix", "HSposix_cbits" ],
209 include_dirs = if installing
211 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/posix/cbits" ],
212 c_includes = [ "HsPosix.h" ],
213 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 libraries = [ "HStext", "HStext_cbits" ],
233 include_dirs = if installing
235 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/text/cbits" ],
236 c_includes = [ "HsText.h" ],
237 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 libraries = [ "HSutil", "HSutil_cbits" ],
255 include_dirs = if installing
257 else [ cFPTOOLS_TOP_ABS ++ "/hslibs/util/cbits" ],
258 c_includes = [ "HsUtil.h" ],
259 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 libraries = [ "HShssource" ],
279 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 libraries = [ "HSwin32" ],
296 c_includes = [], -- ???
297 package_deps = [ "lang" ],
300 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 libraries = [ "HScom" ],
314 c_includes = [], -- ???
315 package_deps = [ "lang" ],
318 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)