Skip to content

Commit

Permalink
Add --show-options to list all flags (Fixes #7843)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Stolarek authored and ezyang committed Jun 6, 2013
1 parent cfe92a8 commit a28731b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
13 changes: 10 additions & 3 deletions compiler/main/StaticFlags.hs
Expand Up @@ -35,7 +35,10 @@ module StaticFlags (
addOpt, removeOpt, v_opt_C_ready,

-- Saving/restoring globals
saveStaticFlagGlobals, restoreStaticFlagGlobals
saveStaticFlagGlobals, restoreStaticFlagGlobals,

-- For options autocompletion
flagsStatic, flagsStaticNames
) where

#include "HsVersions.h"
Expand Down Expand Up @@ -139,9 +142,13 @@ flagsStatic = [
]



isStaticFlag :: String -> Bool
isStaticFlag f =
f `elem` [
isStaticFlag f = f `elem` flagsStaticNames


flagsStaticNames :: [String]
flagsStaticNames = [
"fdicts-strict",
"fno-state-hack",
"fno-opt-coercion",
Expand Down
21 changes: 20 additions & 1 deletion ghc/Main.hs
Expand Up @@ -109,6 +109,7 @@ main = do
ShowSupportedExtensions -> showSupportedExtensions
ShowVersion -> showVersion
ShowNumVersion -> putStrLn cProjectVersion
ShowOptions -> showOptions
Right postStartupMode ->
-- start our GHC session
GHC.runGhc mbMinusB $ do
Expand Down Expand Up @@ -371,11 +372,13 @@ data PreStartupMode
= ShowVersion -- ghc -V/--version
| ShowNumVersion -- ghc --numeric-version
| ShowSupportedExtensions -- ghc --supported-extensions
| ShowOptions -- ghc --show-options

showVersionMode, showNumVersionMode, showSupportedExtensionsMode :: Mode
showVersionMode, showNumVersionMode, showSupportedExtensionsMode, showOptionsMode :: Mode
showVersionMode = mkPreStartupMode ShowVersion
showNumVersionMode = mkPreStartupMode ShowNumVersion
showSupportedExtensionsMode = mkPreStartupMode ShowSupportedExtensions
showOptionsMode = mkPreStartupMode ShowOptions

mkPreStartupMode :: PreStartupMode -> Mode
mkPreStartupMode = Left
Expand Down Expand Up @@ -519,6 +522,7 @@ mode_flags =
, Flag "-version" (PassFlag (setMode showVersionMode))
, Flag "-numeric-version" (PassFlag (setMode showNumVersionMode))
, Flag "-info" (PassFlag (setMode showInfoMode))
, Flag "-show-options" (PassFlag (setMode showOptionsMode))
, Flag "-supported-languages" (PassFlag (setMode showSupportedExtensionsMode))
, Flag "-supported-extensions" (PassFlag (setMode showSupportedExtensionsMode))
] ++
Expand Down Expand Up @@ -693,6 +697,21 @@ showSupportedExtensions = mapM_ putStrLn supportedLanguagesAndExtensions
showVersion :: IO ()
showVersion = putStrLn (cProjectName ++ ", version " ++ cProjectVersion)

showOptions :: IO ()
showOptions = putStr (unlines availableOptions)
where
availableOptions = map ((:) '-') . filter ((>2) . length) $
getFlagNames mode_flags ++
getFlagNames flagsDynamic ++
(filterUnwantedStatic . getFlagNames $ flagsStatic) ++
flagsStaticNames
getFlagNames opts = map getFlagName opts
getFlagName (Flag name _) = name
-- this is a hack to get rid of two unwanted entries that get listed
-- as static flags. Hopefully this hack will disappear one day together
-- with static flags
filterUnwantedStatic = filter (\x -> not (x `elem` ["f", "fno-"]))

showGhcUsage :: DynFlags -> IO ()
showGhcUsage = showUsage False

Expand Down

0 comments on commit a28731b

Please sign in to comment.