1 module Main (main) where
12 [ "install" ] -> do { putStr (pprPackage (package_details True)) }
13 [ "in-place" ] -> do { putStr (pprPackage (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 _HaveLibGmp == "YES"
27 else [ ghc_src_dir _GHC_RUNTIME_DIR ++ "/gmp" ],
28 libraries = [ "gmp" ],
38 ( "rts", -- The RTS is just another package!
41 library_dirs = [ if installing
43 else ghc_src_dir _GHC_RUNTIME_DIR ],
44 libraries = [ "HSrts" ],
45 include_dir = if installing
46 then _libdir ++ "/includes"
47 else ghc_src_dir _GHC_INCLUDE_DIR,
48 c_include = "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.
54 extra_ld_opts = unwords [
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 PrelException_stackOverflow_closure",
78 "-u PrelException_heapOverflow_closure",
79 "-u PrelException_NonTermination_closure",
80 "-u PrelException_PutFullMVar_closure",
81 "-u PrelException_BlockedOnDeadMVar_closure",
82 "-u PrelWeak_runFinalizzerBatch_closure",
89 ( "std", -- The Prelude & Standard Libraries
91 import_dirs = [ if installing
92 then _libdir ++ "/imports/std"
93 else ghc_src_dir _GHC_LIB_DIR ++ "/std" ],
94 library_dirs = if installing
96 else [ ghc_src_dir _GHC_LIB_DIR ++ "/std"
97 , ghc_src_dir _GHC_LIB_DIR ++ "/std/cbits" ],
98 libraries = [ "HSstd", "HSstd_cbits" ],
99 include_dir = if installing
101 else ghc_src_dir _GHC_LIB_DIR ++ "/std/cbits",
102 c_include = "HsStd.h",
103 package_deps = [ "rts" ],
106 extra_ld_opts = "-lm"
112 import_dirs = if installing
113 then [ _libdir ++ "/imports/lang" ]
114 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/lang"
115 , _FPTOOLS_TOP_ABS ++ "/hslibs/lang/monads"],
116 library_dirs = if installing
118 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/lang"
119 , _FPTOOLS_TOP_ABS ++ "/hslibs/lang/cbits" ],
120 libraries = [ "HSlang", "HSlang_cbits" ],
121 include_dir = if installing
123 else _FPTOOLS_TOP_ABS ++ "/hslibs/lang/cbits",
124 c_include = "HsLang.h",
134 import_dirs = [ if installing
135 then _libdir ++ "/imports/concurrent"
136 else _FPTOOLS_TOP_ABS ++ "/hslibs/concurrent" ],
137 library_dirs = [ if installing
139 else _FPTOOLS_TOP_ABS ++ "/hslibs/concurrent" ],
140 libraries = [ "HSconcurrent" ],
141 include_dir = if installing
143 else _FPTOOLS_TOP_ABS ++ "/hslibs/concurrent/cbits",
144 c_include = "HsConcurrent.h",
145 package_deps = [ "lang" ],
154 import_dirs = if installing
155 then [ _libdir ++ "/imports/data" ]
156 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/data"
157 , _FPTOOLS_TOP_ABS ++ "/hslibs/data/edison"
158 , _FPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Assoc"
159 , _FPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Coll"
160 , _FPTOOLS_TOP_ABS ++ "/hslibs/data/edison/Seq" ],
161 library_dirs = if installing
163 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/data" ],
164 libraries = [ "HSdata" ],
165 include_dir = if installing
167 else _FPTOOLS_TOP_ABS ++ "/hslibs/data/cbits",
168 c_include = "HsData.h",
169 package_deps = [ "lang" ],
178 import_dirs = if installing
179 then [ _libdir ++ "/imports/net" ]
180 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/net" ],
181 library_dirs = if installing
183 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/net"
184 , _FPTOOLS_TOP_ABS ++ "/hslibs/net/cbits" ],
185 libraries = [ "HSnet", "HSnet_cbits" ],
186 include_dir = if installing
188 else _FPTOOLS_TOP_ABS ++ "/hslibs/net/cbits",
189 c_include = "HsNet.h",
190 package_deps = [ "lang", "text" ],
193 extra_ld_opts = if postfixMatch "solaris2" _TARGETPLATFORM
194 then "-lnsl -lsocket"
201 import_dirs = if installing
202 then [ _libdir ++ "/imports/posix" ]
203 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/posix" ],
204 library_dirs = if installing
206 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/posix"
207 , _FPTOOLS_TOP_ABS ++ "/hslibs/posix/cbits" ],
208 libraries = [ "HSposix", "HSposix_cbits" ],
209 include_dir = if installing
211 else _FPTOOLS_TOP_ABS ++ "/hslibs/posix/cbits",
212 c_include = "HsPosix.h",
213 package_deps = [ "lang" ],
222 import_dirs = if installing
223 then [ _libdir ++ "/imports/text" ]
224 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/text"
225 , _FPTOOLS_TOP_ABS ++ "/hslibs/text/html"
226 , _FPTOOLS_TOP_ABS ++ "/hslibs/text/haxml/lib"
227 , _FPTOOLS_TOP_ABS ++ "/hslibs/text/parsec" ],
228 library_dirs = if installing
230 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/text"
231 , _FPTOOLS_TOP_ABS ++ "/hslibs/text/cbits" ],
232 libraries = [ "HStext", "HStext_cbits" ],
233 include_dir = if installing
235 else _FPTOOLS_TOP_ABS ++ "/hslibs/text/cbits",
236 c_include = "HsText.h",
237 package_deps = [ "lang", "data" ],
246 import_dirs = if installing
247 then [ _libdir ++ "/imports/util" ]
248 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/util"
249 , _FPTOOLS_TOP_ABS ++ "/hslibs/util/check" ],
250 library_dirs = if installing
252 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/util"
253 , _FPTOOLS_TOP_ABS ++ "/hslibs/util/cbits" ],
254 libraries = [ "HSutil", "HSutil_cbits" ],
255 include_dir = if installing
257 else _FPTOOLS_TOP_ABS ++ "/hslibs/util/cbits",
258 c_include = "HsUtil.h",
259 package_deps = ["lang", "concurrent", "posix"],
268 import_dirs = if installing
269 then [ _libdir ++ "/imports/win32" ]
270 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/win32/src" ],
271 library_dirs = if installing
273 else [ _FPTOOLS_TOP_ABS ++ "/hslibs/win32/src" ],
274 libraries = [ "HSwin32" ],
276 c_include = "", -- ???
277 package_deps = ["lang"],
280 extra_ld_opts = "-luser32 -lgdi32"
286 import_dirs = if installing
287 then [ _libdir ++ "/imports/com" ]
288 else [ _FPTOOLS_TOP_ABS ++ "/hdirect/lib" ],
289 library_dirs = if installing
291 else [ _FPTOOLS_TOP_ABS ++ "/hdirect/lib" ],
292 libraries = [ "HScom" ],
294 c_include = "", -- ???
295 package_deps = [ "lang" ],
298 extra_ld_opts = "-luser32 -lole32 -loleaut32 -ladvapi32"
303 ghc_src_dir path = _FPTOOLS_TOP_ABS ++ '/':_CURRENT_DIR ++ '/':path
305 prefixMatch :: Eq a => [a] -> [a] -> Bool
306 prefixMatch [] str = True
307 prefixMatch pat [] = False
308 prefixMatch (p:ps) (s:ss) | p == s = prefixMatch ps ss
311 postfixMatch :: String -> String -> Bool
312 postfixMatch pat str = prefixMatch (reverse pat) (reverse str)