FIX #903: mkWWcpr: not a product
[ghc-hetmet.git] / compiler / main / DynFlags.hs
index 5b26155..0438fb0 100644 (file)
 --
 -----------------------------------------------------------------------------
 
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module DynFlags (
        -- Dynamic flags
        DynFlag(..),
@@ -54,7 +61,7 @@ module DynFlags (
 
 #include "HsVersions.h"
 
-import Module          ( Module, mkModuleName, mkModule )
+import Module          ( Module, mkModuleName, mkModule, ModLocation )
 import PackageConfig
 import PrelNames       ( mAIN )
 #ifdef i386_TARGET_ARCH
@@ -84,7 +91,7 @@ import Data.List      ( isPrefixOf )
 import Util            ( split )
 #endif
 
-import Data.Char       ( isUpper, toLower )
+import Data.Char       ( isUpper )
 import System.IO        ( hPutStrLn, stderr )
 
 -- -----------------------------------------------------------------------------
@@ -94,7 +101,9 @@ data DynFlag
 
    -- debugging flags
    = Opt_D_dump_cmm
+   | Opt_D_dump_cmmz
    | Opt_D_dump_cps_cmm
+   | Opt_D_dump_cvt_cmm
    | Opt_D_dump_asm
    | Opt_D_dump_asm_native
    | Opt_D_dump_asm_liveness
@@ -102,7 +111,7 @@ data DynFlag
    | Opt_D_dump_asm_regalloc
    | Opt_D_dump_asm_regalloc_stages
    | Opt_D_dump_asm_conflicts
-   | Opt_D_drop_asm_stats
+   | Opt_D_dump_asm_stats
    | Opt_D_dump_cpranal
    | Opt_D_dump_deriv
    | Opt_D_dump_ds
@@ -142,11 +151,12 @@ data DynFlag
    | Opt_D_dump_minimal_imports
    | Opt_D_dump_mod_cycles
    | Opt_D_faststring_stats
+   | Opt_DumpToFile                    -- ^ Append dump output to files instead of stdout.
    | Opt_DoCoreLinting
    | Opt_DoStgLinting
    | Opt_DoCmmLinting
 
-   | Opt_WarnIsError           -- -Werror; makes warnings fatal
+   | Opt_WarnIsError                   -- -Werror; makes warnings fatal
    | Opt_WarnDuplicateExports
    | Opt_WarnHiShadows
    | Opt_WarnImplicitPrelude
@@ -256,6 +266,8 @@ data DynFlag
    | Opt_BreakOnException
    | Opt_GenManifest
    | Opt_EmbedManifest
+   | Opt_RunCPSZ
+   | Opt_ConvertToZipCfgAndBack
 
    -- keeping stuff
    | Opt_KeepHiDiffs
@@ -264,7 +276,7 @@ data DynFlag
    | Opt_KeepRawSFiles
    | Opt_KeepTmpFiles
 
-   deriving (Eq)
+   deriving (Eq, Show)
  
 data DynFlags = DynFlags {
   ghcMode              :: GhcMode,
@@ -307,6 +319,14 @@ data DynFlags = DynFlags {
   outputFile           :: Maybe String,
   outputHi             :: Maybe String,
 
+  -- | This is set by DriverPipeline.runPipeline based on where
+  --   its output is going.
+  dumpPrefix           :: Maybe FilePath,
+
+  -- | Override the dumpPrefix set by runPipeline.
+  --   Set by -ddump-file-prefix
+  dumpPrefixForce      :: Maybe FilePath,
+
   includePaths         :: [String],
   libraryPaths         :: [String],
   frameworkPaths       :: [String],    -- used on darwin only
@@ -466,6 +486,8 @@ defaultDynFlags =
 
        outputFile              = Nothing,
        outputHi                = Nothing,
+       dumpPrefix              = Nothing,
+       dumpPrefixForce         = Nothing,
        includePaths            = [],
        libraryPaths            = [],
        frameworkPaths          = [],
@@ -558,6 +580,8 @@ setHcSuf      f d = d{ hcSuf      = f}
 setOutputFile f d = d{ outputFile = f}
 setOutputHi   f d = d{ outputHi   = f}
 
+setDumpPrefixForce f d = d { dumpPrefixForce = f}
+
 -- XXX HACK: Prelude> words "'does not' work" ===> ["'does","not'","work"]
 -- Config.hs should really use Option.
 setPgmP   f d = let (pgm:args) = words f in d{ pgm_P   = (pgm, map Option args)}
@@ -961,6 +985,7 @@ dynamic_flags = [
   ,  ( "hidir"         , HasArg (upd . setHiDir . Just))
   ,  ( "tmpdir"                , HasArg (upd . setTmpDir))
   ,  ( "stubdir"       , HasArg (upd . setStubDir . Just))
+  ,  ( "ddump-file-prefix", HasArg (upd . setDumpPrefixForce . Just))
 
        ------- Keeping temporary files -------------------------------------
      -- These can be singular (think ghc -c) or plural (think ghc --make)
@@ -1005,7 +1030,9 @@ dynamic_flags = [
   ,  ( "dstg-stats",   NoArg (setDynFlag Opt_StgStats))
 
   ,  ( "ddump-cmm",             setDumpFlag Opt_D_dump_cmm)
+  ,  ( "ddump-cmmz",            setDumpFlag Opt_D_dump_cmmz)
   ,  ( "ddump-cps-cmm",                 setDumpFlag Opt_D_dump_cps_cmm)
+  ,  ( "ddump-cvt-cmm",                 setDumpFlag Opt_D_dump_cvt_cmm)
   ,  ( "ddump-asm",             setDumpFlag Opt_D_dump_asm)
   ,  ( "ddump-asm-native",       setDumpFlag Opt_D_dump_asm_native)
   ,  ( "ddump-asm-liveness",     setDumpFlag Opt_D_dump_asm_liveness)
@@ -1014,7 +1041,7 @@ dynamic_flags = [
   ,  ( "ddump-asm-conflicts",    setDumpFlag Opt_D_dump_asm_conflicts)
   ,  ( "ddump-asm-regalloc-stages",
                                  setDumpFlag Opt_D_dump_asm_regalloc_stages)
-  ,  ( "ddrop-asm-stats",        setDumpFlag Opt_D_drop_asm_stats)
+  ,  ( "ddump-asm-stats",        setDumpFlag Opt_D_dump_asm_stats)
   ,  ( "ddump-cpranal",         setDumpFlag Opt_D_dump_cpranal)
   ,  ( "ddump-deriv",           setDumpFlag Opt_D_dump_deriv)
   ,  ( "ddump-ds",              setDumpFlag Opt_D_dump_ds)
@@ -1052,7 +1079,7 @@ dynamic_flags = [
   ,  ( "ddump-vect",            setDumpFlag Opt_D_dump_vect)
   ,  ( "ddump-hpc",             setDumpFlag Opt_D_dump_hpc)
   ,  ( "ddump-mod-cycles",              setDumpFlag Opt_D_dump_mod_cycles)
-  
+  ,  ( "ddump-to-file",          setDumpFlag Opt_DumpToFile)
   ,  ( "ddump-hi-diffs",         NoArg (setDynFlag Opt_D_dump_hi_diffs))
   ,  ( "dcore-lint",            NoArg (setDynFlag Opt_DoCoreLinting))
   ,  ( "dstg-lint",             NoArg (setDynFlag Opt_DoStgLinting))
@@ -1067,12 +1094,13 @@ dynamic_flags = [
   ,  ( "monly-3-regs",         NoArg (upd (\s -> s{stolen_x86_regs = 3}) ))
   ,  ( "monly-4-regs",         NoArg (upd (\s -> s{stolen_x86_regs = 4}) ))
 
-       ------ Warning opts -------------------------------------------------
-  ,  ( "W"             , NoArg (mapM_ setDynFlag   minusWOpts)    )
-  ,  ( "Werror"                , NoArg (setDynFlag         Opt_WarnIsError) )
-  ,  ( "Wall"          , NoArg (mapM_ setDynFlag   minusWallOpts) )
-  ,  ( "Wnot"          , NoArg (mapM_ unSetDynFlag minusWallOpts) ) /* DEPREC */
-  ,  ( "w"             , NoArg (mapM_ unSetDynFlag minuswRemovesOpts) )
+     ------ Warning opts -------------------------------------------------
+  ,  ( "W"     , NoArg (mapM_ setDynFlag   minusWOpts)    )
+  ,  ( "Werror", NoArg (setDynFlag         Opt_WarnIsError) )
+  ,  ( "Wwarn" , NoArg (unSetDynFlag       Opt_WarnIsError) )
+  ,  ( "Wall"  , NoArg (mapM_ setDynFlag   minusWallOpts) )
+  ,  ( "Wnot"  , NoArg (mapM_ unSetDynFlag minusWallOpts) ) -- DEPRECATED
+  ,  ( "w"     , NoArg (mapM_ unSetDynFlag minuswRemovesOpts) )
 
        ------ Optimisation flags ------------------------------------------
   ,  ( "O"     , NoArg (upd (setOptLevel 1)))
@@ -1161,6 +1189,8 @@ fFlags = [
   ( "hpc-no-auto",                      Opt_Hpc_No_Auto ),
   ( "rewrite-rules",                    Opt_RewriteRules ),
   ( "break-on-exception",               Opt_BreakOnException ),
+  ( "run-cps",                          Opt_RunCPSZ ),
+  ( "convert-to-zipper-and-back",       Opt_ConvertToZipCfgAndBack),
   ( "vectorise",                        Opt_Vectorise ),
   ( "regs-graph",                       Opt_RegsGraph),
   -- Deprecated in favour of -XTemplateHaskell:
@@ -1668,10 +1698,13 @@ compilerInfo = [("Project name",                cProjectName),
                 ("Booter version",              cBooterVersion),
                 ("Stage",                       cStage),
                 ("Interface file version",      cHscIfaceFileVersion),
+                ("Have interpreter",            cGhcWithInterpreter),
                 ("Object splitting",            cSplitObjs),
                 ("Have native code generator",  cGhcWithNativeCodeGen),
+                ("Support SMP",                 cGhcWithSMP),
                 ("Unregisterised",              cGhcUnregisterised),
                 ("Tables next to code",         cGhcEnableTablesNextToCode),
                 ("Win32 DLLs",                  cEnableWin32DLLs),
+                ("RTS ways",                    cGhcRTSWays),
                 ("Leading underscore",          cLeadingUnderscore)]