import UniqFM ( eltsUFM )
import ErrUtils
import DynFlags
-import StaticFlags ( v_Ld_inputs, opt_Static, opt_HardwireLibPaths, WayName(..) )
+import StaticFlags ( v_Ld_inputs, opt_Static, WayName(..) )
import Config
import Panic
import Util
import Data.Maybe
import System.Exit
import System.Environment
-import System.FilePath
-- ---------------------------------------------------------------------------
-- Pre-process
-- Unlit phase
runPhase (Unlit sf) _stop dflags _basename _suff input_fn get_output_fn maybe_loc
- = do let unlit_flags = getOpts dflags opt_L
- -- The -h option passes the file name for unlit to put in a #line directive
+ = do
output_fn <- get_output_fn dflags (Cpp sf) maybe_loc
- SysTools.runUnlit dflags
- (map SysTools.Option unlit_flags ++
- [ SysTools.Option "-h"
- , SysTools.Option input_fn
- , SysTools.FileOption "" input_fn
- , SysTools.FileOption "" output_fn
- ])
+ let unlit_flags = getOpts dflags opt_L
+ flags = map SysTools.Option unlit_flags ++
+ [ -- The -h option passes the file name for unlit to
+ -- put in a #line directive
+ SysTools.Option "-h"
+ -- cpp interprets \b etc as escape sequences,
+ -- so we use / for filenames in pragmas
+ , SysTools.Option $ reslash Forwards $ normalise input_fn
+ , SysTools.FileOption "" input_fn
+ , SysTools.FileOption "" output_fn
+ ]
+
+ SysTools.runUnlit dflags flags
return (Cpp sf, dflags, maybe_loc, output_fn)
pkg_lib_paths <- getPackageLibraryPath dflags dep_packages
let pkg_lib_path_opts = concat (map get_pkg_lib_path_opts pkg_lib_paths)
- get_pkg_lib_path_opts l | opt_HardwireLibPaths && not opt_Static = ["-L" ++ l, "-Wl,-rpath", "-Wl," ++ l]
- | otherwise = ["-L" ++ l]
+#ifdef linux_TARGET_OS
+ get_pkg_lib_path_opts l | (dynLibLoader dflags)==SystemDependent && not opt_Static = ["-L" ++ l, "-Wl,-rpath", "-Wl," ++ l]
+ | otherwise = ["-L" ++ l]
+#else
+ get_pkg_lib_path_opts l = ["-L" ++ l]
+#endif
let lib_paths = libraryPaths dflags
let lib_path_opts = map ("-L"++) lib_paths
framework_opts = concat [ ["-framework", fw] | fw <- reverse frameworks ]
-- reverse because they're added in reverse order from the cmd line
#endif
-
+#ifdef mingw32_TARGET_OS
+ let dynMain = if not opt_Static then
+ (head (libraryDirs (getPackageDetails (pkgState dflags) rtsPackageId))) ++ "/Main.dyn_o"
+ else
+ ""
+#endif
-- probably _stub.o files
extra_ld_inputs <- readIORef v_Ld_inputs
++ map SysTools.Option (
md_c_flags
++ o_files
+#ifdef mingw32_TARGET_OS
+ ++ [dynMain]
+#endif
++ extra_ld_inputs
++ lib_path_opts
++ extra_ld_opts