Leftovers from the 1st GHCi debugger prototype
[ghc-hetmet.git] / compiler / main / Main.hs
index 3c94bf5..ad8d1f4 100644 (file)
@@ -1,4 +1,11 @@
 {-# OPTIONS -fno-warn-incomplete-patterns -optc-DNON_POSIX_SOURCE #-}
+{-# 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
+
 -----------------------------------------------------------------------------
 --
 -- GHC Driver program
@@ -85,6 +92,8 @@ main =
   -- to find out what version of GHC it's using before package.conf
   -- exists, so starting the session fails.
   case cli_mode of
+    ShowInfo                -> do showInfo
+                                  exitWith ExitSuccess
     ShowSupportedLanguages  -> do showSupportedLanguages
                                   exitWith ExitSuccess
     ShowVersion             -> do showVersion
@@ -162,6 +171,7 @@ main =
     ShowUsage              -> showGhcUsage dflags cli_mode
     PrintLibdir            -> putStrLn (topDir dflags)
     ShowSupportedLanguages -> alreadyHandled
+    ShowDocDir             -> showDocDir (topDir dflags)
     ShowVersion            -> alreadyHandled
     ShowNumVersion         -> alreadyHandled
     ShowInterface f        -> doShowIface dflags f
@@ -296,6 +306,8 @@ verifyOutputFiles dflags = do
 data CmdLineMode
   = ShowUsage               -- ghc -?
   | PrintLibdir             -- ghc --print-libdir
+  | ShowDocDir              -- ghc --print-docdir
+  | ShowInfo                -- ghc --info
   | ShowSupportedLanguages  -- ghc --supported-languages
   | ShowVersion             -- ghc -V/--version
   | ShowNumVersion          -- ghc --numeric-version
@@ -354,12 +366,14 @@ type ModeM a = CmdLineP (CmdLineMode, String, [String]) a
 mode_flags :: [(String, OptKind (CmdLineP (CmdLineMode, String, [String])))]
 mode_flags =
   [  ------- help / version ----------------------------------------------
-     ( "?"              , PassFlag (setMode ShowUsage))
-  ,  ( "-help"          , PassFlag (setMode ShowUsage))
-  ,  ( "-print-libdir"   , PassFlag (setMode PrintLibdir))
-  ,  ( "V"              , PassFlag (setMode ShowVersion))
-  ,  ( "-version"       , PassFlag (setMode ShowVersion))
-  ,  ( "-numeric-version", PassFlag (setMode ShowNumVersion))
+     ( "?"                   , PassFlag (setMode ShowUsage))
+  ,  ( "-help"               , PassFlag (setMode ShowUsage))
+  ,  ( "-print-libdir"       , PassFlag (setMode PrintLibdir))
+  ,  ( "-print-docdir"       , PassFlag (setMode ShowDocDir))
+  ,  ( "V"                   , PassFlag (setMode ShowVersion))
+  ,  ( "-version"            , PassFlag (setMode ShowVersion))
+  ,  ( "-numeric-version"    , PassFlag (setMode ShowNumVersion))
+  ,  ( "-info"               , PassFlag (setMode ShowInfo))
   ,  ( "-supported-languages", PassFlag (setMode ShowSupportedLanguages))
 
       ------- interfaces ----------------------------------------------------
@@ -449,10 +463,24 @@ showBanner cli_mode dflags = do
        hPutStr stderr " booted by GHC version "
        hPutStrLn stderr cBooterVersion
 
+-- We print out a Read-friendly string, but a prettier one than the
+-- Show instance gives us
+showInfo :: IO ()
+showInfo = do
+    let sq x = " [" ++ x ++ "\n ]"
+    putStrLn $ sq $ concat $ intersperse "\n ," $ map show compilerInfo
+    exitWith ExitSuccess
+
 showSupportedLanguages :: IO ()
 showSupportedLanguages = do mapM_ putStrLn supportedLanguages
                             exitWith ExitSuccess
 
+showDocDir :: FilePath -> IO ()
+showDocDir topdir = putStrLn docDir
+    where docDir = if cRelocatableBuild
+                   then topdir ++ "/doc"
+                   else cDocDir
+
 showVersion :: IO ()
 showVersion = do
   putStrLn (cProjectName ++ ", version " ++ cProjectVersion)