{-# OPTIONS -fno-warn-incomplete-patterns -optc-DNON_POSIX_SOURCE #-}
-----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.124 2003/06/04 15:47:59 simonmar Exp $
+-- $Id: Main.hs,v 1.131 2003/07/21 15:14:18 ross Exp $
--
-- GHC Driver program
--
import CompManager ( cmInit, cmLoadModules, cmDepAnal )
import HscTypes ( GhciMode(..) )
import Config ( cBooterVersion, cGhcUnregisterised, cProjectVersion )
-import SysTools ( getPackageConfigPath, initSysTools, cleanTempFiles )
+import SysTools ( getPackageConfigPath, initSysTools, cleanTempFiles,
+ normalisePath )
import Packages ( showPackages, getPackageConfigMap, basePackage,
haskell98Package
)
hFlush stdout
case exception of
-- an IO exception probably isn't our fault, so don't panic
- IOException _ -> hPutStr stderr (show exception)
+ IOException _ -> hPutStrLn stderr (show exception)
AsyncException StackOverflow ->
hPutStrLn stderr "stack overflow: use +RTS -K<size> \
\to increase it"
extra_non_static <- processArgs static_flags
(unreg_opts ++ way_opts ++ pkg_extra_opts) []
- -- give the static flags to hsc
+ -- Give the static flags to hsc
static_opts <- buildStaticHscOpts
writeIORef v_Static_hsc_opts static_opts
|| looksLikeModuleName m
|| '.' `notElem` m
- (srcs, objs) = partition looks_like_an_input fileish_args
+ -- To simplify the handling of filepaths, we normalise all filepaths right
+ -- away - e.g., for win32 platforms, backslashes are converted
+ -- into forward slashes.
+ normal_fileish_paths = map normalisePath fileish_args
+ (srcs, objs) = partition looks_like_an_input normal_fileish_paths
mapM_ (add v_Ld_inputs) objs
---------------- Final sanity checking -----------
checkOptions mode srcs objs
+ -- We always link in the base package in
+ -- one-shot linking. Any other packages
+ -- required must be given using -package
+ -- options on the command-line.
+ let def_hs_pkgs = [basePackage, haskell98Package]
+
---------------- Do the business -----------
case mode of
DoMake -> doMake srcs
endMkDependHS }
StopBefore p -> do { compileFiles mode srcs; return () }
DoMkDLL -> do { o_files <- compileFiles mode srcs;
- doMkDLL o_files }
+ doMkDLL o_files def_hs_pkgs }
DoLink -> do { o_files <- compileFiles mode srcs;
omit_linking <- readIORef v_NoLink;
when (not omit_linking)
- (staticLink o_files
- [basePackage, haskell98Package]) }
- -- We always link in the base package in
- -- one-shot linking. Any other packages
- -- required must be given using -package
- -- options on the command-line.
+ (staticLink o_files def_hs_pkgs) }
#ifndef GHCI
DoInteractive -> throwDyn (CmdLineError "not built for interactive use")
checkOptions :: GhcMode -> [String] -> [String] -> IO ()
-- Final sanity checking before kicking off a compilation (pipeline).
checkOptions mode srcs objs = do
+ -- Complain about any unknown flags
+ let unknown_opts = [ f | f@('-':_) <- srcs ]
+ when (notNull unknown_opts) (unknownFlagsErr unknown_opts)
+
-- -ohi sanity check
ohi <- readIORef v_Output_hi
if (isJust ohi &&
then throwDyn (UsageError "no input files")
else do
- -- Complain about any unknown flags
- let unknown_opts = [ f | f@('-':_) <- srcs ]
- when (notNull unknown_opts) (unknownFlagsErr unknown_opts)
-
-- Verify that output files point somewhere sensible.
verifyOutputFiles
| mode==DoLink || mode==DoMkDLL = Nothing
| otherwise = o_file
- runPipeline mode stop_flag True maybe_o_file src
+ runPipeline mode stop_flag True maybe_o_file src Nothing{-no ModLocation-}
-- ----------------------------------------------------------------------------