preprocess :: DynFlags -> (FilePath, Maybe Phase) -> IO (DynFlags, FilePath)
preprocess dflags (filename, mb_phase) =
ASSERT2(isJust mb_phase || isHaskellSrcFilename filename, text filename)
- runPipeline anyHsc dflags (filename, mb_phase) Temporary Nothing{-no ModLocation-}
+ runPipeline anyHsc dflags (filename, mb_phase)
+ Nothing Temporary Nothing{-no ModLocation-}
-- ---------------------------------------------------------------------------
-- Compile
-> return ([], ms_hs_date mod_summary)
-- We're in --make mode: finish the compilation pipeline.
_other
- -> do runPipeline StopLn dflags (output_fn,Nothing) Persistent
+ -> do runPipeline StopLn dflags (output_fn,Nothing)
+ (Just basename)
+ Persistent
(Just location)
-- The object filename comes from the ModLocation
o_time <- getModificationTime object_filename
-- compile the _stub.c file w/ gcc
let (stub_c,_) = mkStubPaths dflags (moduleName mod) location
- runPipeline StopLn dflags (stub_c,Nothing)
+ runPipeline StopLn dflags (stub_c,Nothing) Nothing
(SpecificFile stub_o) Nothing{-no ModLocation-}
return stub_o
-- ---------------------------------------------------------------------------
-- Link
-link :: GhcMode -- interactive or batch
+link :: GhcLink -- interactive or batch
-> DynFlags -- dynamic flags
-> Bool -- attempt linking in batch mode?
-> HomePackageTable -- what to link
-- will succeed.
#ifdef GHCI
-link Interactive dflags batch_attempt_linking hpt
+link LinkInMemory dflags batch_attempt_linking hpt
= do -- Not Linking...(demand linker will do the job)
return Succeeded
#endif
-link JustTypecheck dflags batch_attempt_linking hpt
+link NoLink dflags batch_attempt_linking hpt
= return Succeeded
-link BatchCompile dflags batch_attempt_linking hpt
+link LinkBinary dflags batch_attempt_linking hpt
| batch_attempt_linking
= do
let
-- Don't showPass in Batch mode; doLink will do that for us.
let link = case ghcLink dflags of
MkDLL -> doMkDLL
- StaticLink -> staticLink
+ LinkBinary -> staticLink
link dflags obj_files pkg_deps
debugTraceMsg dflags 3 (text "link: done")
other -> stop_phase
(_, out_file) <- runPipeline stop_phase' dflags
- (src, mb_phase) output Nothing{-no ModLocation-}
+ (src, mb_phase) Nothing output
+ Nothing{-no ModLocation-}
return out_file
| otherwise
= case ghcLink dflags of
NoLink -> return ()
- StaticLink -> staticLink dflags o_files link_pkgs
+ LinkBinary -> staticLink dflags o_files link_pkgs
MkDLL -> doMkDLL dflags o_files link_pkgs
where
-- Always link in the haskell98 package for static linking. Other
:: Phase -- When to stop
-> DynFlags -- Dynamic flags
-> (FilePath,Maybe Phase) -- Input filename (and maybe -x suffix)
+ -> Maybe FilePath -- original basename (if different from ^^^)
-> PipelineOutput -- Output filename
-> Maybe ModLocation -- A ModLocation, if this is a Haskell module
-> IO (DynFlags, FilePath) -- (final flags, output filename)
-runPipeline stop_phase dflags (input_fn, mb_phase) output maybe_loc
+runPipeline stop_phase dflags (input_fn, mb_phase) mb_basename output maybe_loc
= do
- let (basename, suffix) = splitFilename input_fn
+ let (input_basename, suffix) = splitFilename input_fn
+ basename | Just b <- mb_basename = b
+ | otherwise = input_basename
-- If we were given a -x flag, then use that phase to start from
start_phase = fromMaybe (startPhase suffix) mb_phase
pvm_executable_base = "=" ++ input_fn
pvm_executable = pvm_root ++ "/bin/" ++ pvm_arch ++ "/" ++ pvm_executable_base
-- nuke old binary; maybe use configur'ed names for cp and rm?
- system ("rm -f " ++ pvm_executable)
+ Panic.try (removeFile pvm_executable)
-- move the newly created binary into PVM land
- system ("cp -p " ++ input_fn ++ " " ++ pvm_executable)
+ copy dflags "copying PVM executable" input_fn pvm_executable
-- generate a wrapper script for running a parallel prg under PVM
writeFile input_fn (mk_pvm_wrapper_script pvm_executable pvm_executable_base sysMan)
return True
"",
"args: while ($a = shift(@ARGV)) {",
" if ( $a eq '+RTS' ) {",
- " $in_RTS_args = 1;",
+ " $in_RTS_args = 1;",
" } elsif ( $a eq '-RTS' ) {",
- " $in_RTS_args = 0;",
+ " $in_RTS_args = 0;",
" }",
" if ( $a eq '-d' && $in_RTS_args ) {",
- " $debug = '-';",
+ " $debug = '-';",
" } elsif ( $a =~ /^-qN(\\d+)/ && $in_RTS_args ) {",
- " $nprocessors = $1;",
+ " $nprocessors = $1;",
" } elsif ( $a =~ /^-qp(\\d+)/ && $in_RTS_args ) {",
- " $nprocessors = $1;",
+ " $nprocessors = $1;",
" } else {",
- " push(@nonPVM_args, $a);",
+ " push(@nonPVM_args, $a);",
" }",
"}",
"",