[project @ 2002-07-05 16:15:14 by sof]
authorsof <unknown>
Fri, 5 Jul 2002 16:15:14 +0000 (16:15 +0000)
committersof <unknown>
Fri, 5 Jul 2002 16:15:14 +0000 (16:15 +0000)
When validating the number of source files on the command-line wrt other
options, only consider source files. i.e., don't consider .a's and .o's
that inadvertently, and idempotently, might be present.

ghc/compiler/main/DriverPhases.hs
ghc/compiler/main/Main.hs

index e25e358..214cd36 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $Id: DriverPhases.hs,v 1.19 2002/04/11 12:03:33 simonpj Exp $
+-- $Id: DriverPhases.hs,v 1.20 2002/07/05 16:15:14 sof Exp $
 --
 -- GHC Driver
 --
@@ -19,7 +19,8 @@ module DriverPhases (
    hsbootish_file, hsbootish_suffix,
    objish_file, objish_suffix,
    cish_file, cish_suffix,
-   isExtCore_file, extcoreish_suffix
+   isExtCore_file, extcoreish_suffix,
+   isSourceFile         -- :: FilePath -> Bool
  ) where
 
 import DriverUtil
@@ -118,3 +119,8 @@ objish_file         = objish_suffix         . getFileSuffix
 hsbootish_file      = hsbootish_suffix      . getFileSuffix
 
 isExtCore_file      = extcoreish_suffix     . getFileSuffix
+
+isSourceFile :: FilePath -> Bool
+isSourceFile   f    =
+   haskellish_src_file f ||
+   cish_file   f
index 0e4910a..3cb06dd 100644 (file)
@@ -1,7 +1,7 @@
 {-# OPTIONS -fno-warn-incomplete-patterns -optc-DNON_POSIX_SOURCE #-}
 
 -----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.106 2002/05/01 17:56:57 sof Exp $
+-- $Id: Main.hs,v 1.107 2002/07/05 16:15:14 sof Exp $
 --
 -- GHC Driver program
 --
@@ -42,7 +42,8 @@ import DriverFlags    ( buildStaticHscOpts,
                          dynamic_flags, processArgs, static_flags)
 
 import DriverMkDepend  ( beginMkDependHS, endMkDependHS )
-import DriverPhases    ( Phase(HsPp, Hsc), haskellish_src_file, objish_file )
+import DriverPhases    ( Phase(HsPp, Hsc), haskellish_src_file, objish_file,
+                         isSourceFile )
 
 import DriverUtil      ( add, handle, handleDyn, later, splitFilename,
                          unknownFlagsErr, getFileSuffix )
@@ -257,12 +258,13 @@ main =
    if (mode == DoInteractive) then beginInteractive srcs else do
 
        -- -o sanity checking
+   let real_srcs = filter isSourceFile srcs -- filters out .a and .o that might appear
    o_file <- readIORef v_Output_file
-   if (srcs `lengthExceeds` 1 && isJust o_file && mode /= DoLink && mode /= DoMkDLL)
+   if (real_srcs `lengthExceeds` 1 && isJust o_file && mode /= DoLink && mode /= DoMkDLL)
        then throwDyn (UsageError "can't apply -o to multiple source files")
        else do
 
-   if null srcs then throwDyn (UsageError "no input files") else do
+   if null real_srcs then throwDyn (UsageError "no input files") else do
 
    let compileFile src = do
          restoreDynFlags
@@ -280,19 +282,15 @@ main =
          let not_hs_file  = not (haskellish_src_file src)
          pp <- if not_hs_file || mode == StopBefore Hsc || mode == StopBefore HsPp
                        then return src_and_suff else do
---             hPutStrLn stderr "before" >> hFlush stderr
                phases <- genPipeline (StopBefore Hsc) stop_flag
                                      False{-not persistent-} defaultHscLang
                                      src_and_suff
---             hPutStrLn stderr "after" >> hFlush stderr
                pipeLoop phases src_and_suff False{-no linking-} False{-no -o flag-}
                        basename suffix
 
          -- rest of compilation
          hsc_lang <- dynFlag hscLang
---       hPutStrLn stderr ("before-1 " ++ show (pp,mode)) >> hFlush stderr
          phases   <- genPipeline mode stop_flag True hsc_lang pp
---       hPutStrLn stderr "after" >> hFlush stderr
          (r,_)    <- pipeLoop phases pp (mode==DoLink || mode==DoMkDLL)
                                      True{-use -o flag-} basename suffix
          return r