import System.Directory
import System.FilePath
import System.IO
-import System.IO.Error as IO
import Control.Monad
import Data.List ( isSuffixOf )
import Data.Maybe
-- modification times on all of the objects and libraries, then omit
-- linking (unless the -fforce-recomp flag was given).
let exe_file = exeFileName dflags
- e_exe_time <- IO.try $ getModificationTime exe_file
+ e_exe_time <- tryIO $ getModificationTime exe_file
case e_exe_time of
Left _ -> return True
Right t -> do
-- first check object files and extra_ld_inputs
extra_ld_inputs <- readIORef v_Ld_inputs
- e_extra_times <- mapM (IO.try . getModificationTime) extra_ld_inputs
+ e_extra_times <- mapM (tryIO . getModificationTime) extra_ld_inputs
let (errs,extra_times) = splitEithers e_extra_times
let obj_times = map linkableTime linkables ++ extra_times
if not (null errs) || any (t <) obj_times
pkg_libfiles <- mapM (uncurry findHSLib) pkg_hslibs
if any isNothing pkg_libfiles then return True else do
- e_lib_times <- mapM (IO.try . getModificationTime)
+ e_lib_times <- mapM (tryIO . getModificationTime)
(catMaybes pkg_libfiles)
let (lib_errs,lib_times) = splitEithers e_lib_times
if not (null lib_errs) || any (t <) lib_times
map Option md_c_flags)
return oFile
+mkRtsOptionsLevelObj :: DynFlags -> IO [FilePath]
+mkRtsOptionsLevelObj dflags
+ = do let mkRtsEnabledObj val
+ = do fn <- mkExtraCObj dflags
+ ["#include \"Rts.h\"",
+ "#include \"RtsOpts.h\"",
+ "const rtsOptsEnabledEnum rtsOptsEnabled = "
+ ++ val ++ ";"]
+ return [fn]
+ case rtsOptsEnabled dflags of
+ RtsOptsNone -> mkRtsEnabledObj "rtsOptsNone"
+ RtsOptsSafeOnly -> return [] -- The default
+ RtsOptsAll -> mkRtsEnabledObj "rtsOptsAll"
+
-- generates a Perl skript starting a parallel prg under PVM
mk_pvm_wrapper_script :: String -> String -> String -> String
mk_pvm_wrapper_script pvm_executable pvm_executable_base sysMan = unlines $
let no_hs_main = dopt Opt_NoHsMain dflags
let main_lib | no_hs_main = []
| otherwise = [ "-lHSrtsmain" ]
- let mkRtsEnabledObj val = do fn <- mkExtraCObj dflags
- ["#include \"Rts.h\"",
- "#include \"RtsOpts.h\"",
- "const rtsOptsEnabledEnum rtsOptsEnabled = "
- ++ val ++ ";"]
- return [fn]
- rtsEnabledObj <- case rtsOptsEnabled dflags of
- RtsOptsNone -> mkRtsEnabledObj "rtsOptsNone"
- RtsOptsSafeOnly -> return []
- RtsOptsAll -> mkRtsEnabledObj "rtsOptsAll"
+ rtsEnabledObj <- mkRtsOptionsLevelObj dflags
rtsOptsObj <- case rtsOpts dflags of
Just opts ->
do fn <- mkExtraCObj dflags
let (md_c_flags, _) = machdepCCOpts dflags
let extra_ld_opts = getOpts dflags opt_l
+
+ rtsEnabledObj <- mkRtsOptionsLevelObj dflags
+
#if defined(mingw32_HOST_OS)
-----------------------------------------------------------------------------
-- Making a DLL
++ lib_path_opts
++ extra_ld_opts
++ pkg_lib_path_opts
+ ++ rtsEnabledObj
++ pkg_link_opts
))
#elif defined(darwin_TARGET_OS)
++ lib_path_opts
++ extra_ld_opts
++ pkg_lib_path_opts
+ ++ rtsEnabledObj
++ pkg_link_opts
))
#else
++ lib_path_opts
++ extra_ld_opts
++ pkg_lib_path_opts
+ ++ rtsEnabledObj
++ pkg_link_opts
))
#endif