#include "../includes/config.h" module Main (main) where import Utils import IO import System import Package main :: IO () main = do args <- getArgs case args of ("install":rest) -> do { putStrLn (dumpPackages (package_details True rest)) } ("in-place":rest) -> do { putStrLn (dumpPackages (package_details False rest)) } _ -> do hPutStr stderr "usage: pkgconf (install | in-place) ...\n" exitWith (ExitFailure 1) -- The compiler automatically replaces the string "$libdir" at the -- beginning of a path with the directory passed to the compiler via -- the -B flag. Absolute path names will be unchanged. -- -- This is how we make package.conf independent of GHC's installation -- location. package_details :: Bool -> [String] -> [PackageConfig] package_details installing [ cTARGETPLATFORM , cCURRENT_DIR , cHaveLibGmp , cLibsReadline , cGHC_LIB_DIR , cGHC_RUNTIME_DIR , cGHC_UTILS_DIR , cGHC_INCLUDE_DIR ] = [ Package { name = "gmp", -- GMP is at the bottom of the heap import_dirs = [], source_dirs = [], library_dirs = if cHaveLibGmp == "YES" then [] else if installing then [ "$libdir" ] else [ ghc_src_dir cGHC_RUNTIME_DIR ++ "/gmp" ], hs_libraries = [], extra_libraries = [ "gmp" ], include_dirs = [], c_includes = [], package_deps = [], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "rts", -- The RTS is just another package! import_dirs = [], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ ghc_src_dir cGHC_RUNTIME_DIR ], hs_libraries = [ "HSrts" ], #ifndef mingw32_TARGET_OS extra_libraries = [], #else extra_libraries = [ "winmm", "wsock32" ], -- winmm for the threadDelay timer, wsock32 for the linker #endif include_dirs = if installing then [ "$libdir/includes" ] else [ ghc_src_dir cGHC_INCLUDE_DIR ], c_includes = [ "Stg.h" ], -- ha! package_deps = [ "gmp" ], extra_ghc_opts = [], extra_cc_opts = [], -- the RTS forward-references to a bunch of stuff in the prelude, -- so we force it to be included with special options to ld. extra_ld_opts = map ( #ifndef LEADING_UNDERSCORE "-u " #else "-u _" #endif ++ ) [ "PrelBase_Izh_static_info" , "PrelBase_Czh_static_info" , "PrelFloat_Fzh_static_info" , "PrelFloat_Dzh_static_info" , "PrelPtr_Ptr_static_info" , "PrelWord_Wzh_static_info" , "PrelInt_I8zh_static_info" , "PrelInt_I16zh_static_info" , "PrelInt_I32zh_static_info" , "PrelInt_I64zh_static_info" , "PrelWord_W8zh_static_info" , "PrelWord_W16zh_static_info" , "PrelWord_W32zh_static_info" , "PrelWord_W64zh_static_info" , "PrelStable_StablePtr_static_info" , "PrelBase_Izh_con_info" , "PrelBase_Czh_con_info" , "PrelFloat_Fzh_con_info" , "PrelFloat_Dzh_con_info" , "PrelPtr_Ptr_con_info" , "PrelStable_StablePtr_con_info" , "PrelBase_False_closure" , "PrelBase_True_closure" , "PrelPack_unpackCString_closure" , "PrelIOBase_stackOverflow_closure" , "PrelIOBase_heapOverflow_closure" , "PrelIOBase_NonTermination_closure" , "PrelIOBase_BlockedOnDeadMVar_closure" , "PrelWeak_runFinalizzerBatch_closure" , "__init_Prelude" ] }, Package { name = "std", -- The Prelude & Standard Hs_libraries import_dirs = if installing then [ "$libdir/imports/std" ] else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ ghc_src_dir cGHC_LIB_DIR ++ "/std" , ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ], hs_libraries = [ "HSstd" ], extra_libraries = [ "HSstd_cbits" ] ++ # ifdef mingw32_TARGET_OS ["wsock32", "msvcrt"] # else ["m"] -- libm, that is # endif , include_dirs = if installing then [] else [ ghc_src_dir cGHC_LIB_DIR ++ "/std/cbits" ], c_includes = [ "HsStd.h" ], package_deps = [ "rts" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "lang", import_dirs = if installing then [ "$libdir/imports/lang" ] else [ "$libdir/hslibs/lang" , "$libdir/hslibs/lang/monads" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/lang" , "$libdir/hslibs/lang/cbits" ], hs_libraries = [ "HSlang" ], extra_libraries = [ "HSlang_cbits" ], include_dirs = if installing then [] else [ "$libdir/hslibs/lang/cbits" ], c_includes = [ "HsLang.h" ], package_deps = [], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [ #ifndef LEADING_UNDERSCORE "-u Addr_Azh_static_info" #else "-u _Addr_Azh_static_info" #endif ] }, Package { name = "concurrent", import_dirs = if installing then [ "$libdir/imports/concurrent" ] else [ "$libdir/hslibs/concurrent" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/concurrent" ], hs_libraries = [ "HSconcurrent" ], extra_libraries = [], include_dirs = if installing then [] else [ "$libdir/hslibs/concurrent/cbits" ], c_includes = [], package_deps = [ "lang" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "data", import_dirs = if installing then [ "$libdir/imports/data" ] else [ "$libdir/hslibs/data" , "$libdir/hslibs/data/edison" , "$libdir/hslibs/data/edison/Assoc" , "$libdir/hslibs/data/edison/Coll" , "$libdir/hslibs/data/edison/Seq" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/data" ], hs_libraries = [ "HSdata" ], extra_libraries = [], include_dirs = if installing then [] else [ "$libdir/hslibs/data/cbits" ], c_includes = [], package_deps = [ "lang", "util" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "net", import_dirs = if installing then [ "$libdir/imports/net" ] else [ "$libdir/hslibs/net" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/net" , "$libdir/hslibs/net/cbits" ], hs_libraries = [ "HSnet" ], extra_libraries = if suffixMatch "solaris2" cTARGETPLATFORM then [ "nsl", "socket" ] else [] , include_dirs = if installing then [] else [ "$libdir/hslibs/net/cbits" ], c_includes = [ "HsNet.h" ], package_deps = [ "lang", "text", "concurrent" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "posix", import_dirs = if installing then [ "$libdir/imports/posix" ] else [ "$libdir/hslibs/posix" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/posix" , "$libdir/hslibs/posix/cbits" ], hs_libraries = [ "HSposix" ], extra_libraries = [ "HSposix_cbits" ], include_dirs = if installing then [] else [ "$libdir/hslibs/posix/cbits" ], c_includes = [ "HsPosix.h" ], package_deps = [ "lang" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "text", import_dirs = if installing then [ "$libdir/imports/text" ] else [ "$libdir/hslibs/text" , "$libdir/hslibs/text/html" , "$libdir/hslibs/text/HaXml/lib" , "$libdir/hslibs/text/parsec" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/text" , "$libdir/hslibs/text/cbits" ], hs_libraries = [ "HStext" ], extra_libraries = [ "HStext_cbits" ], include_dirs = if installing then [] else [ "$libdir/hslibs/text/cbits" ], c_includes = [ "HsText.h" ], package_deps = [ "lang" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "util", import_dirs = if installing then [ "$libdir/imports/util" ] else [ "$libdir/hslibs/util" , "$libdir/hslibs/util/check" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/util" , "$libdir/hslibs/util/cbits" ], hs_libraries = [ "HSutil" ], extra_libraries = [ "HSutil_cbits" ] ++ words cLibsReadline, include_dirs = if installing then [] else [ "$libdir/hslibs/util/cbits" ], c_includes = [ "HsUtil.h" ], package_deps = [ "lang", "concurrent" #ifndef mingw32_TARGET_OS , "posix" #endif ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, -- no cbits at the moment, we'll need to add one if this library -- ever calls out to any C libs. Package { name = "hssource", import_dirs = if installing then [ "$libdir/imports/hssource" ] else [ "$libdir/hslibs/hssource" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/hssource" ], hs_libraries = [ "HShssource" ], extra_libraries = [], include_dirs = [], c_includes = [], package_deps = [ "text" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "greencard", import_dirs = if installing then [ "$libdir/imports/greencard" ] else [ "$libdir/green-card/lib/ghc" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/green-card/lib/ghc" ], hs_libraries = [ "HSgreencard" ], extra_libraries = [], include_dirs = [], c_includes = [], package_deps = [ "lang" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [], } #if defined(mingw32_TARGET_OS) || defined(cygwin32_TARGET_OS) ,Package { name = "win32", import_dirs = if installing then [ "$libdir/imports/win32" ] else [ "$libdir/hslibs/win32" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hslibs/win32" ], hs_libraries = [ "HSwin32" ], extra_libraries = [ "user32", "gdi32", "winmm" ], include_dirs = [], c_includes = [], -- ??? package_deps = [ "lang", "greencard" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] }, Package { name = "com", import_dirs = if installing then [ "$libdir/imports/com" ] else [ "$libdir/hdirect/lib" ], source_dirs = [], library_dirs = if installing then [ "$libdir" ] else [ "$libdir/hdirect/lib" ], hs_libraries = [ "HScom" ], extra_libraries = [ "user32", "ole32", "oleaut32", "advapi32" ], include_dirs = [], c_includes = [], -- ??? package_deps = [ "lang" ], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = [] } #endif ] where ghc_src_dir :: String -> String ghc_src_dir path = "$libdir/" ++ cCURRENT_DIR ++ '/':path