-getPackageCIncludes :: IO [String]
-getPackageCIncludes = do
- ps <- readIORef packages
- ps' <- getPackageDetails ps
- return (reverse (nub (filter (not.null) (concatMap c_includes ps'))))
-
-getPackageLibraryPath :: IO [String]
-getPackageLibraryPath = do
- ps <- readIORef packages
- ps' <- getPackageDetails ps
- return (nub (concat (map library_dirs ps')))
-
-getPackageLibraries :: IO [String]
-getPackageLibraries = do
- ps <- readIORef packages
- ps' <- getPackageDetails ps
- tag <- readIORef build_tag
- let suffix = if null tag then "" else '_':tag
- return (concat (
- map (\p -> map (++suffix) (hs_libraries p) ++ extra_libraries p) ps'
- ))
+getPackageCIncludes :: [PackageConfig] -> IO [String]
+getPackageCIncludes pkg_configs = do
+ return (reverse (nub (filter notNull (concatMap c_includes pkg_configs))))
+
+getPackageLibraryPath :: [PackageName] -> IO [String]
+getPackageLibraryPath pkgs = do
+ ps <- getExplicitPackagesAnd pkgs
+ return (nub (filter notNull (concatMap library_dirs ps)))
+
+getPackageLinkOpts :: [PackageName] -> IO [String]
+getPackageLinkOpts pkgs = do
+ ps <- getExplicitPackagesAnd pkgs
+ tag <- readIORef v_Build_tag
+ static <- readIORef v_Static
+ let
+ imp = if static then "" else "_imp"
+ suffix = if null tag then "" else '_':tag
+ libs p = map (++suffix) (hACK (hs_libraries p)) ++ extra_libraries p
+ imp_libs p = map (++imp) (libs p)
+ all_opts p = map ("-l" ++) (imp_libs p) ++ extra_ld_opts p
+
+ return (concat (map all_opts ps))
+ where
+ -- This is a totally horrible (temporary) hack, for Win32. Problem is
+ -- that package.conf for Win32 says that the main prelude lib is
+ -- split into HSbase1, HSbase2 and HSbase3, which is needed due to a bug
+ -- in the GNU linker (PEi386 backend). However, we still only
+ -- have HSbase.a for static linking, not HSbase{1,2,3}.a
+ -- getPackageLibraries is called to find the .a's to add to the static
+ -- link line. On Win32, this hACK detects HSbase{1,2,3} and
+ -- replaces them with HSbase, so static linking still works.
+ -- Libraries needed for dynamic (GHCi) linking are discovered via
+ -- different route (in InteractiveUI.linkPackage).
+ -- See driver/PackageSrc.hs for the HSbase1/HSbase2 split definition.
+ -- THIS IS A STRICTLY TEMPORARY HACK (famous last words ...)
+ -- JRS 04 Sept 01: Same appalling hack for HSwin32[1,2]
+ -- KAA 29 Mar 02: Same appalling hack for HSobjectio[1,2,3,4]
+ hACK libs
+# if !defined(mingw32_TARGET_OS) && !defined(cygwin32_TARGET_OS)
+ = libs
+# else
+ = if "HSbase1" `elem` libs && "HSbase2" `elem` libs && "HSbase3" `elem` libs
+ then "HSbase" : filter (not.(isPrefixOf "HSbase")) libs
+ else
+ if "HSwin321" `elem` libs && "HSwin322" `elem` libs
+ then "HSwin32" : filter (not.(isPrefixOf "HSwin32")) libs
+ else
+ if "HSobjectio1" `elem` libs && "HSobjectio2" `elem` libs && "HSobjectio3" `elem` libs && "HSobjectio4" `elem` libs
+ then "HSobjectio" : filter (not.(isPrefixOf "HSobjectio")) libs
+ else
+ libs
+# endif