-- misc stuff
machdepCCOpts, picCCOpts,
- supportedLanguages,
+ supportedLanguages, languageOptions,
compilerInfo,
) where
allFlags :: [String]
allFlags = map ('-':) $
- [ name | (name, optkind) <- dynamic_flags, ok optkind ] ++
+ [ flagName flag | flag <- dynamic_flags, ok (flagOptKind flag) ] ++
map ("fno-"++) flags ++
map ("f"++) flags ++
- map ("X"++) xs ++
- map ("XNo"++) xs
+ map ("X"++) supportedLanguages ++
+ map ("XNo"++) supportedLanguages
where ok (PrefixPred _ _) = False
ok _ = True
flags = map fst fFlags
- xs = map fst xFlags
-dynamic_flags :: [(String, OptKind DynP)]
+dynamic_flags :: [Flag DynP]
dynamic_flags = [
- ( "n" , NoArg (setDynFlag Opt_DryRun) )
- , ( "cpp" , NoArg (setDynFlag Opt_Cpp))
- , ( "F" , NoArg (setDynFlag Opt_Pp))
- , ( "#include" , HasArg (addCmdlineHCInclude) )
- , ( "v" , OptIntSuffix setVerbosity )
+ Flag "n" (NoArg (setDynFlag Opt_DryRun)) Supported
+ , Flag "cpp" (NoArg (setDynFlag Opt_Cpp)) Supported
+ , Flag "F" (NoArg (setDynFlag Opt_Pp)) Supported
+ , Flag "#include" (HasArg (addCmdlineHCInclude)) Supported
+ , Flag "v" (OptIntSuffix setVerbosity) Supported
------- Specific phases --------------------------------------------
- , ( "pgmL" , HasArg (upd . setPgmL) )
- , ( "pgmP" , HasArg (upd . setPgmP) )
- , ( "pgmF" , HasArg (upd . setPgmF) )
- , ( "pgmc" , HasArg (upd . setPgmc) )
- , ( "pgmm" , HasArg (upd . setPgmm) )
- , ( "pgms" , HasArg (upd . setPgms) )
- , ( "pgma" , HasArg (upd . setPgma) )
- , ( "pgml" , HasArg (upd . setPgml) )
- , ( "pgmdll" , HasArg (upd . setPgmdll) )
- , ( "pgmwindres" , HasArg (upd . setPgmwindres) )
-
- , ( "optL" , HasArg (upd . addOptL) )
- , ( "optP" , HasArg (upd . addOptP) )
- , ( "optF" , HasArg (upd . addOptF) )
- , ( "optc" , HasArg (upd . addOptc) )
- , ( "optm" , HasArg (upd . addOptm) )
- , ( "opta" , HasArg (upd . addOpta) )
- , ( "optl" , HasArg (upd . addOptl) )
- , ( "optdep" , HasArg (upd . addOptdep) )
- , ( "optwindres" , HasArg (upd . addOptwindres) )
-
- , ( "split-objs" , NoArg (if can_split
- then setDynFlag Opt_SplitObjs
- else return ()) )
+ , Flag "pgmL" (HasArg (upd . setPgmL)) Supported
+ , Flag "pgmP" (HasArg (upd . setPgmP)) Supported
+ , Flag "pgmF" (HasArg (upd . setPgmF)) Supported
+ , Flag "pgmc" (HasArg (upd . setPgmc)) Supported
+ , Flag "pgmm" (HasArg (upd . setPgmm)) Supported
+ , Flag "pgms" (HasArg (upd . setPgms)) Supported
+ , Flag "pgma" (HasArg (upd . setPgma)) Supported
+ , Flag "pgml" (HasArg (upd . setPgml)) Supported
+ , Flag "pgmdll" (HasArg (upd . setPgmdll)) Supported
+ , Flag "pgmwindres" (HasArg (upd . setPgmwindres)) Supported
+
+ , Flag "optL" (HasArg (upd . addOptL)) Supported
+ , Flag "optP" (HasArg (upd . addOptP)) Supported
+ , Flag "optF" (HasArg (upd . addOptF)) Supported
+ , Flag "optc" (HasArg (upd . addOptc)) Supported
+ , Flag "optm" (HasArg (upd . addOptm)) Supported
+ , Flag "opta" (HasArg (upd . addOpta)) Supported
+ , Flag "optl" (HasArg (upd . addOptl)) Supported
+ , Flag "optdep" (HasArg (upd . addOptdep)) Supported
+ , Flag "optwindres" (HasArg (upd . addOptwindres)) Supported
+
+ , Flag "split-objs"
+ (NoArg (if can_split then setDynFlag Opt_SplitObjs else return ()))
+ Supported
-------- Linking ----------------------------------------------------
- , ( "c" , NoArg (upd $ \d -> d{ ghcLink=NoLink } ))
- , ( "no-link" , NoArg (upd $ \d -> d{ ghcLink=NoLink } )) -- Dep.
- , ( "shared" , NoArg (upd $ \d -> d{ ghcLink=LinkDynLib } ))
- , ( "dynload" , HasArg (upd . parseDynLibLoaderMode))
+ , Flag "c" (NoArg (upd $ \d -> d{ ghcLink=NoLink } ))
+ Supported
+ , Flag "no-link" (NoArg (upd $ \d -> d{ ghcLink=NoLink } ))
+ (Deprecated "Use -c instead")
+ , Flag "shared" (NoArg (upd $ \d -> d{ ghcLink=LinkDynLib } ))
+ Supported
+ , Flag "dynload" (HasArg (upd . parseDynLibLoaderMode))
+ Supported
------- Libraries ---------------------------------------------------
- , ( "L" , Prefix addLibraryPath )
- , ( "l" , AnySuffix (\s -> do upd (addOptl s)))
+ , Flag "L" (Prefix addLibraryPath ) Supported
+ , Flag "l" (AnySuffix (\s -> do upd (addOptl s))) Supported
------- Frameworks --------------------------------------------------
-- -framework-path should really be -F ...
- , ( "framework-path" , HasArg addFrameworkPath )
- , ( "framework" , HasArg (upd . addCmdlineFramework) )
+ , Flag "framework-path" (HasArg addFrameworkPath ) Supported
+ , Flag "framework" (HasArg (upd . addCmdlineFramework)) Supported
------- Output Redirection ------------------------------------------
- , ( "odir" , HasArg (upd . setObjectDir))
- , ( "o" , SepArg (upd . setOutputFile . Just))
- , ( "ohi" , HasArg (upd . setOutputHi . Just ))
- , ( "osuf" , HasArg (upd . setObjectSuf))
- , ( "hcsuf" , HasArg (upd . setHcSuf))
- , ( "hisuf" , HasArg (upd . setHiSuf))
- , ( "hidir" , HasArg (upd . setHiDir))
- , ( "tmpdir" , HasArg (upd . setTmpDir))
- , ( "stubdir" , HasArg (upd . setStubDir))
- , ( "ddump-file-prefix", HasArg (upd . setDumpPrefixForce . Just))
+ , Flag "odir" (HasArg (upd . setObjectDir)) Supported
+ , Flag "o" (SepArg (upd . setOutputFile . Just)) Supported
+ , Flag "ohi" (HasArg (upd . setOutputHi . Just )) Supported
+ , Flag "osuf" (HasArg (upd . setObjectSuf)) Supported
+ , Flag "hcsuf" (HasArg (upd . setHcSuf)) Supported
+ , Flag "hisuf" (HasArg (upd . setHiSuf)) Supported
+ , Flag "hidir" (HasArg (upd . setHiDir)) Supported
+ , Flag "tmpdir" (HasArg (upd . setTmpDir)) Supported
+ , Flag "stubdir" (HasArg (upd . setStubDir)) Supported
+ , Flag "ddump-file-prefix" (HasArg (upd . setDumpPrefixForce . Just))
+ Supported
------- Keeping temporary files -------------------------------------
-- These can be singular (think ghc -c) or plural (think ghc --make)
- , ( "keep-hc-file" , NoArg (setDynFlag Opt_KeepHcFiles))
- , ( "keep-hc-files" , NoArg (setDynFlag Opt_KeepHcFiles))
- , ( "keep-s-file" , NoArg (setDynFlag Opt_KeepSFiles))
- , ( "keep-s-files" , NoArg (setDynFlag Opt_KeepSFiles))
- , ( "keep-raw-s-file" , NoArg (setDynFlag Opt_KeepRawSFiles))
- , ( "keep-raw-s-files", NoArg (setDynFlag Opt_KeepRawSFiles))
+ , Flag "keep-hc-file" (NoArg (setDynFlag Opt_KeepHcFiles)) Supported
+ , Flag "keep-hc-files" (NoArg (setDynFlag Opt_KeepHcFiles)) Supported
+ , Flag "keep-s-file" (NoArg (setDynFlag Opt_KeepSFiles)) Supported
+ , Flag "keep-s-files" (NoArg (setDynFlag Opt_KeepSFiles)) Supported
+ , Flag "keep-raw-s-file" (NoArg (setDynFlag Opt_KeepRawSFiles)) Supported
+ , Flag "keep-raw-s-files" (NoArg (setDynFlag Opt_KeepRawSFiles)) Supported
-- This only makes sense as plural
- , ( "keep-tmp-files" , NoArg (setDynFlag Opt_KeepTmpFiles))
+ , Flag "keep-tmp-files" (NoArg (setDynFlag Opt_KeepTmpFiles)) Supported
------- Miscellaneous ----------------------------------------------
- , ( "no-hs-main" , NoArg (setDynFlag Opt_NoHsMain))
- , ( "main-is" , SepArg setMainIs )
- , ( "haddock" , NoArg (setDynFlag Opt_Haddock) )
- , ( "haddock-opts" , HasArg (upd . addHaddockOpts))
- , ( "hpcdir" , SepArg setOptHpcDir )
-
- ------- recompilation checker (DEPRECATED, use -fforce-recomp) -----
- , ( "recomp" , NoArg (unSetDynFlag Opt_ForceRecomp) )
- , ( "no-recomp" , NoArg (setDynFlag Opt_ForceRecomp) )
+ , Flag "no-hs-main" (NoArg (setDynFlag Opt_NoHsMain)) Supported
+ , Flag "main-is" (SepArg setMainIs ) Supported
+ , Flag "haddock" (NoArg (setDynFlag Opt_Haddock)) Supported
+ , Flag "haddock-opts" (HasArg (upd . addHaddockOpts)) Supported
+ , Flag "hpcdir" (SepArg setOptHpcDir) Supported
+
+ ------- recompilation checker --------------------------------------
+ , Flag "recomp" (NoArg (unSetDynFlag Opt_ForceRecomp))
+ (Deprecated "Use -fno-force-recomp instead")
+ , Flag "no-recomp" (NoArg (setDynFlag Opt_ForceRecomp))
+ (Deprecated "Use -fforce-recomp instead")
------- Packages ----------------------------------------------------
- , ( "package-conf" , HasArg extraPkgConf_ )
- , ( "no-user-package-conf", NoArg (unSetDynFlag Opt_ReadUserPackageConf) )
- , ( "package-name" , HasArg (upd . setPackageName) )
- , ( "package" , HasArg exposePackage )
- , ( "hide-package" , HasArg hidePackage )
- , ( "hide-all-packages", NoArg (setDynFlag Opt_HideAllPackages) )
- , ( "ignore-package" , HasArg ignorePackage )
- , ( "syslib" , HasArg exposePackage ) -- for compatibility
+ , Flag "package-conf" (HasArg extraPkgConf_) Supported
+ , Flag "no-user-package-conf" (NoArg (unSetDynFlag Opt_ReadUserPackageConf))
+ Supported
+ , Flag "package-name" (HasArg (upd . setPackageName)) Supported
+ , Flag "package" (HasArg exposePackage) Supported
+ , Flag "hide-package" (HasArg hidePackage) Supported
+ , Flag "hide-all-packages" (NoArg (setDynFlag Opt_HideAllPackages))
+ Supported
+ , Flag "ignore-package" (HasArg ignorePackage)
+ Supported
+ , Flag "syslib" (HasArg exposePackage)
+ (Deprecated "Use -package instead")
------ HsCpp opts ---------------------------------------------------
- , ( "D", AnySuffix (upd . addOptP) )
- , ( "U", AnySuffix (upd . addOptP) )
+ , Flag "D" (AnySuffix (upd . addOptP)) Supported
+ , Flag "U" (AnySuffix (upd . addOptP)) Supported
------- Include/Import Paths ----------------------------------------
- , ( "I" , Prefix addIncludePath)
- , ( "i" , OptPrefix addImportPath )
+ , Flag "I" (Prefix addIncludePath) Supported
+ , Flag "i" (OptPrefix addImportPath ) Supported
------ Debugging ----------------------------------------------------
- , ( "dstg-stats", NoArg (setDynFlag Opt_StgStats))
-
- , ( "ddump-cmm", setDumpFlag Opt_D_dump_cmm)
- , ( "ddump-cmmz", setDumpFlag Opt_D_dump_cmmz)
- , ( "ddump-cmmz-pretty", setDumpFlag Opt_D_dump_cmmz_pretty)
- , ( "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)
- , ( "ddump-asm-coalesce", setDumpFlag Opt_D_dump_asm_coalesce)
- , ( "ddump-asm-regalloc", setDumpFlag Opt_D_dump_asm_regalloc)
- , ( "ddump-asm-conflicts", setDumpFlag Opt_D_dump_asm_conflicts)
- , ( "ddump-asm-regalloc-stages",
- setDumpFlag Opt_D_dump_asm_regalloc_stages)
- , ( "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)
- , ( "ddump-flatC", setDumpFlag Opt_D_dump_flatC)
- , ( "ddump-foreign", setDumpFlag Opt_D_dump_foreign)
- , ( "ddump-inlinings", setDumpFlag Opt_D_dump_inlinings)
- , ( "ddump-rule-firings", setDumpFlag Opt_D_dump_rule_firings)
- , ( "ddump-occur-anal", setDumpFlag Opt_D_dump_occur_anal)
- , ( "ddump-parsed", setDumpFlag Opt_D_dump_parsed)
- , ( "ddump-rn", setDumpFlag Opt_D_dump_rn)
- , ( "ddump-simpl", setDumpFlag Opt_D_dump_simpl)
- , ( "ddump-simpl-iterations", setDumpFlag Opt_D_dump_simpl_iterations)
- , ( "ddump-simpl-phases", OptPrefix setDumpSimplPhases)
- , ( "ddump-spec", setDumpFlag Opt_D_dump_spec)
- , ( "ddump-prep", setDumpFlag Opt_D_dump_prep)
- , ( "ddump-stg", setDumpFlag Opt_D_dump_stg)
- , ( "ddump-stranal", setDumpFlag Opt_D_dump_stranal)
- , ( "ddump-tc", setDumpFlag Opt_D_dump_tc)
- , ( "ddump-types", setDumpFlag Opt_D_dump_types)
- , ( "ddump-rules", setDumpFlag Opt_D_dump_rules)
- , ( "ddump-cse", setDumpFlag Opt_D_dump_cse)
- , ( "ddump-worker-wrapper", setDumpFlag Opt_D_dump_worker_wrapper)
- , ( "ddump-rn-trace", setDumpFlag Opt_D_dump_rn_trace)
- , ( "ddump-if-trace", setDumpFlag Opt_D_dump_if_trace)
- , ( "ddump-tc-trace", setDumpFlag Opt_D_dump_tc_trace)
- , ( "ddump-splices", setDumpFlag Opt_D_dump_splices)
- , ( "ddump-rn-stats", setDumpFlag Opt_D_dump_rn_stats)
- , ( "ddump-opt-cmm", setDumpFlag Opt_D_dump_opt_cmm)
- , ( "ddump-simpl-stats", setDumpFlag Opt_D_dump_simpl_stats)
- , ( "ddump-bcos", setDumpFlag Opt_D_dump_BCOs)
- , ( "dsource-stats", setDumpFlag Opt_D_source_stats)
- , ( "dverbose-core2core", NoArg setVerboseCore2Core)
- , ( "dverbose-stg2stg", setDumpFlag Opt_D_verbose_stg2stg)
- , ( "ddump-hi", setDumpFlag Opt_D_dump_hi)
- , ( "ddump-minimal-imports", setDumpFlag Opt_D_dump_minimal_imports)
- , ( "ddump-vect", setDumpFlag Opt_D_dump_vect)
- , ( "ddump-hpc", setDumpFlag Opt_D_dump_hpc)
- , ( "ddump-mod-cycles", setDumpFlag Opt_D_dump_mod_cycles)
- , ( "ddump-view-pattern-commoning", setDumpFlag Opt_D_dump_view_pattern_commoning)
- , ( "ddump-to-file", setDumpFlag Opt_DumpToFile)
- , ( "ddump-hi-diffs", setDumpFlag Opt_D_dump_hi_diffs)
-
- , ( "dcore-lint", NoArg (setDynFlag Opt_DoCoreLinting))
- , ( "dstg-lint", NoArg (setDynFlag Opt_DoStgLinting))
- , ( "dcmm-lint", NoArg (setDynFlag Opt_DoCmmLinting))
- , ( "dasm-lint", NoArg (setDynFlag Opt_DoAsmLinting))
- , ( "dshow-passes", NoArg (do setDynFlag Opt_ForceRecomp
- setVerbosity (Just 2)) )
- , ( "dfaststring-stats", NoArg (setDynFlag Opt_D_faststring_stats))
+ , Flag "dstg-stats" (NoArg (setDynFlag Opt_StgStats)) Supported
+
+ , Flag "ddump-cmm" (setDumpFlag Opt_D_dump_cmm)
+ Supported
+ , Flag "ddump-cmmz" (setDumpFlag Opt_D_dump_cmmz)
+ Supported
+ , Flag "ddump-cmmz-pretty" (setDumpFlag Opt_D_dump_cmmz_pretty)
+ Supported
+ , Flag "ddump-cps-cmm" (setDumpFlag Opt_D_dump_cps_cmm)
+ Supported
+ , Flag "ddump-cvt-cmm" (setDumpFlag Opt_D_dump_cvt_cmm)
+ Supported
+ , Flag "ddump-asm" (setDumpFlag Opt_D_dump_asm)
+ Supported
+ , Flag "ddump-asm-native" (setDumpFlag Opt_D_dump_asm_native)
+ Supported
+ , Flag "ddump-asm-liveness" (setDumpFlag Opt_D_dump_asm_liveness)
+ Supported
+ , Flag "ddump-asm-coalesce" (setDumpFlag Opt_D_dump_asm_coalesce)
+ Supported
+ , Flag "ddump-asm-regalloc" (setDumpFlag Opt_D_dump_asm_regalloc)
+ Supported
+ , Flag "ddump-asm-conflicts" (setDumpFlag Opt_D_dump_asm_conflicts)
+ Supported
+ , Flag "ddump-asm-regalloc-stages"
+ (setDumpFlag Opt_D_dump_asm_regalloc_stages)
+ Supported
+ , Flag "ddump-asm-stats" (setDumpFlag Opt_D_dump_asm_stats)
+ Supported
+ , Flag "ddump-cpranal" (setDumpFlag Opt_D_dump_cpranal)
+ Supported
+ , Flag "ddump-deriv" (setDumpFlag Opt_D_dump_deriv)
+ Supported
+ , Flag "ddump-ds" (setDumpFlag Opt_D_dump_ds)
+ Supported
+ , Flag "ddump-flatC" (setDumpFlag Opt_D_dump_flatC)
+ Supported
+ , Flag "ddump-foreign" (setDumpFlag Opt_D_dump_foreign)
+ Supported
+ , Flag "ddump-inlinings" (setDumpFlag Opt_D_dump_inlinings)
+ Supported
+ , Flag "ddump-rule-firings" (setDumpFlag Opt_D_dump_rule_firings)
+ Supported
+ , Flag "ddump-occur-anal" (setDumpFlag Opt_D_dump_occur_anal)
+ Supported
+ , Flag "ddump-parsed" (setDumpFlag Opt_D_dump_parsed)
+ Supported
+ , Flag "ddump-rn" (setDumpFlag Opt_D_dump_rn)
+ Supported
+ , Flag "ddump-simpl" (setDumpFlag Opt_D_dump_simpl)
+ Supported
+ , Flag "ddump-simpl-iterations" (setDumpFlag Opt_D_dump_simpl_iterations)
+ Supported
+ , Flag "ddump-simpl-phases" (OptPrefix setDumpSimplPhases)
+ Supported
+ , Flag "ddump-spec" (setDumpFlag Opt_D_dump_spec)
+ Supported
+ , Flag "ddump-prep" (setDumpFlag Opt_D_dump_prep)
+ Supported
+ , Flag "ddump-stg" (setDumpFlag Opt_D_dump_stg)
+ Supported
+ , Flag "ddump-stranal" (setDumpFlag Opt_D_dump_stranal)
+ Supported
+ , Flag "ddump-tc" (setDumpFlag Opt_D_dump_tc)
+ Supported
+ , Flag "ddump-types" (setDumpFlag Opt_D_dump_types)
+ Supported
+ , Flag "ddump-rules" (setDumpFlag Opt_D_dump_rules)
+ Supported
+ , Flag "ddump-cse" (setDumpFlag Opt_D_dump_cse)
+ Supported
+ , Flag "ddump-worker-wrapper" (setDumpFlag Opt_D_dump_worker_wrapper)
+ Supported
+ , Flag "ddump-rn-trace" (setDumpFlag Opt_D_dump_rn_trace)
+ Supported
+ , Flag "ddump-if-trace" (setDumpFlag Opt_D_dump_if_trace)
+ Supported
+ , Flag "ddump-tc-trace" (setDumpFlag Opt_D_dump_tc_trace)
+ Supported
+ , Flag "ddump-splices" (setDumpFlag Opt_D_dump_splices)
+ Supported
+ , Flag "ddump-rn-stats" (setDumpFlag Opt_D_dump_rn_stats)
+ Supported
+ , Flag "ddump-opt-cmm" (setDumpFlag Opt_D_dump_opt_cmm)
+ Supported
+ , Flag "ddump-simpl-stats" (setDumpFlag Opt_D_dump_simpl_stats)
+ Supported
+ , Flag "ddump-bcos" (setDumpFlag Opt_D_dump_BCOs)
+ Supported
+ , Flag "dsource-stats" (setDumpFlag Opt_D_source_stats)
+ Supported
+ , Flag "dverbose-core2core" (NoArg setVerboseCore2Core)
+ Supported
+ , Flag "dverbose-stg2stg" (setDumpFlag Opt_D_verbose_stg2stg)
+ Supported
+ , Flag "ddump-hi" (setDumpFlag Opt_D_dump_hi)
+ Supported
+ , Flag "ddump-minimal-imports" (setDumpFlag Opt_D_dump_minimal_imports)
+ Supported
+ , Flag "ddump-vect" (setDumpFlag Opt_D_dump_vect)
+ Supported
+ , Flag "ddump-hpc" (setDumpFlag Opt_D_dump_hpc)
+ Supported
+ , Flag "ddump-mod-cycles" (setDumpFlag Opt_D_dump_mod_cycles)
+ Supported
+ , Flag "ddump-view-pattern-commoning" (setDumpFlag Opt_D_dump_view_pattern_commoning)
+ Supported
+ , Flag "ddump-to-file" (setDumpFlag Opt_DumpToFile)
+ Supported
+ , Flag "ddump-hi-diffs" (setDumpFlag Opt_D_dump_hi_diffs)
+ Supported
+
+ , Flag "dcore-lint" (NoArg (setDynFlag Opt_DoCoreLinting))
+ Supported
+ , Flag "dstg-lint" (NoArg (setDynFlag Opt_DoStgLinting))
+ Supported
+ , Flag "dcmm-lint" (NoArg (setDynFlag Opt_DoCmmLinting))
+ Supported
+ , Flag "dasm-lint" (NoArg (setDynFlag Opt_DoAsmLinting))
+ Supported
+ , Flag "dshow-passes"
+ (NoArg (do setDynFlag Opt_ForceRecomp
+ setVerbosity (Just 2)))
+ Supported
+ , Flag "dfaststring-stats" (NoArg (setDynFlag Opt_D_faststring_stats))
+ Supported
------ Machine dependant (-m<blah>) stuff ---------------------------
- , ( "monly-2-regs", NoArg (upd (\s -> s{stolen_x86_regs = 2}) ))
- , ( "monly-3-regs", NoArg (upd (\s -> s{stolen_x86_regs = 3}) ))
- , ( "monly-4-regs", NoArg (upd (\s -> s{stolen_x86_regs = 4}) ))
+ , Flag "monly-2-regs" (NoArg (upd (\s -> s{stolen_x86_regs = 2}) ))
+ Supported
+ , Flag "monly-3-regs" (NoArg (upd (\s -> s{stolen_x86_regs = 3}) ))
+ Supported
+ , Flag "monly-4-regs" (NoArg (upd (\s -> s{stolen_x86_regs = 4}) ))
+ Supported
------ 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) )
+ , Flag "W" (NoArg (mapM_ setDynFlag minusWOpts))
+ Supported
+ , Flag "Werror" (NoArg (setDynFlag Opt_WarnIsError))
+ Supported
+ , Flag "Wwarn" (NoArg (unSetDynFlag Opt_WarnIsError))
+ Supported
+ , Flag "Wall" (NoArg (mapM_ setDynFlag minusWallOpts))
+ Supported
+ , Flag "Wnot" (NoArg (mapM_ unSetDynFlag minusWallOpts))
+ (Deprecated "Use -w instead")
+ , Flag "w" (NoArg (mapM_ unSetDynFlag minuswRemovesOpts))
+ Supported
------ Optimisation flags ------------------------------------------
- , ( "O" , NoArg (upd (setOptLevel 1)))
- , ( "Onot" , NoArg (upd (setOptLevel 0))) -- deprecated
- , ( "Odph" , NoArg (upd setDPHOpt))
- , ( "O" , OptIntSuffix (\mb_n -> upd (setOptLevel (mb_n `orElse` 1))))
+ , Flag "O" (NoArg (upd (setOptLevel 1))) Supported
+ , Flag "Onot" (NoArg (upd (setOptLevel 0)))
+ (Deprecated "Use -O0 instead")
+ , Flag "Odph" (NoArg (upd setDPHOpt)) Supported
+ , Flag "O" (OptIntSuffix (\mb_n -> upd (setOptLevel (mb_n `orElse` 1))))
+ Supported
-- If the number is missing, use 1
- , ( "fsimplifier-phases", IntSuffix (\n ->
- upd (\dfs -> dfs{ simplPhases = n })) )
- , ( "fmax-simplifier-iterations", IntSuffix (\n ->
- upd (\dfs -> dfs{ maxSimplIterations = n })) )
-
- , ( "fspec-constr-threshold", IntSuffix (\n ->
- upd (\dfs -> dfs{ specConstrThreshold = Just n })))
- , ( "fno-spec-constr-threshold", NoArg (
- upd (\dfs -> dfs{ specConstrThreshold = Nothing })))
- , ( "fspec-constr-count", IntSuffix (\n ->
- upd (\dfs -> dfs{ specConstrCount = Just n })))
- , ( "fno-spec-constr-count", NoArg (
- upd (\dfs -> dfs{ specConstrCount = Nothing })))
- , ( "fliberate-case-threshold", IntSuffix (\n ->
- upd (\dfs -> dfs{ liberateCaseThreshold = Just n })))
- , ( "fno-liberate-case-threshold", NoArg (
- upd (\dfs -> dfs{ liberateCaseThreshold = Nothing })))
-
- , ( "frule-check", SepArg (\s -> upd (\dfs -> dfs{ ruleCheck = Just s })))
- , ( "fcontext-stack" , IntSuffix $ \n -> upd $ \dfs -> dfs{ ctxtStkDepth = n })
+ , Flag "fsimplifier-phases"
+ (IntSuffix (\n -> upd (\dfs -> dfs{ simplPhases = n })))
+ Supported
+ , Flag "fmax-simplifier-iterations"
+ (IntSuffix (\n -> upd (\dfs -> dfs{ maxSimplIterations = n })))
+ Supported
+
+ , Flag "fspec-constr-threshold"
+ (IntSuffix (\n -> upd (\dfs -> dfs{ specConstrThreshold = Just n })))
+ Supported
+ , Flag "fno-spec-constr-threshold"
+ (NoArg (upd (\dfs -> dfs{ specConstrThreshold = Nothing })))
+ Supported
+ , Flag "fspec-constr-count"
+ (IntSuffix (\n -> upd (\dfs -> dfs{ specConstrCount = Just n })))
+ Supported
+ , Flag "fno-spec-constr-count"
+ (NoArg (upd (\dfs -> dfs{ specConstrCount = Nothing })))
+ Supported
+ , Flag "fliberate-case-threshold"
+ (IntSuffix (\n -> upd (\dfs -> dfs{ liberateCaseThreshold = Just n })))
+ Supported
+ , Flag "fno-liberate-case-threshold"
+ (NoArg (upd (\dfs -> dfs{ liberateCaseThreshold = Nothing })))
+ Supported
+
+ , Flag "frule-check"
+ (SepArg (\s -> upd (\dfs -> dfs{ ruleCheck = Just s })))
+ Supported
+ , Flag "fcontext-stack"
+ (IntSuffix $ \n -> upd $ \dfs -> dfs{ ctxtStkDepth = n })
+ Supported
------ Compiler flags -----------------------------------------------
- , ( "fasm", NoArg (setObjTarget HscAsm) )
- , ( "fvia-c", NoArg (setObjTarget HscC) )
- , ( "fvia-C", NoArg (setObjTarget HscC) )
+ , Flag "fasm" (NoArg (setObjTarget HscAsm)) Supported
+ , Flag "fvia-c" (NoArg (setObjTarget HscC)) Supported
+ , Flag "fvia-C" (NoArg (setObjTarget HscC)) Supported
+
+ , Flag "fno-code" (NoArg (setTarget HscNothing)) Supported
+ , Flag "fbyte-code" (NoArg (setTarget HscInterpreted)) Supported
+ , Flag "fobject-code" (NoArg (setTarget defaultHscTarget)) Supported
- , ( "fno-code", NoArg (setTarget HscNothing))
- , ( "fbyte-code", NoArg (setTarget HscInterpreted) )
- , ( "fobject-code", NoArg (setTarget defaultHscTarget) )
+ , Flag "fglasgow-exts" (NoArg (mapM_ setDynFlag glasgowExtsFlags))
+ Supported
+ , Flag "fno-glasgow-exts" (NoArg (mapM_ unSetDynFlag glasgowExtsFlags))
+ Supported
- , ( "fglasgow-exts", NoArg (mapM_ setDynFlag glasgowExtsFlags) )
- , ( "fno-glasgow-exts", NoArg (mapM_ unSetDynFlag glasgowExtsFlags) )
+ -- XXX We need to flatten these:
-- the rest of the -f* and -fno-* flags
- , ( "f", PrefixPred (isFlag fFlags)
- (\f -> setDynFlag (getFlag fFlags f)) )
- , ( "f", PrefixPred (isPrefFlag "no-" fFlags)
- (\f -> unSetDynFlag (getPrefFlag "no-" fFlags f)) )
-
- -- the -X* and -XNo* flags
- , ( "X", PrefixPred (isFlag xFlags)
- (\f -> setDynFlag (getFlag xFlags f)) )
- , ( "X", PrefixPred (isPrefFlag "No" xFlags)
- (\f -> unSetDynFlag (getPrefFlag "No" xFlags f)) )
+ , Flag "f"
+ (PrefixPred (isFlag fFlags)
+ (\f -> setDynFlag (getFlag fFlags f)))
+ Supported
+ , Flag "f"
+ (PrefixPred (isPrefFlag "no-" fFlags)
+ (\f -> unSetDynFlag (getPrefFlag "no-" fFlags f)))
+ Supported
]
+ ++ -- -X*
+ map xFlagToFlag xFlags
+ ++ -- -XNo*
+ map xNoFlagToFlag xFlags
+
+xFlagToFlag :: (String, DynFlag, Deprecated) -> Flag DynP
+xFlagToFlag = xMaybeFlagToFlag setDynFlag
+
+xNoFlagToFlag :: (String, DynFlag, Deprecated) -> Flag DynP
+xNoFlagToFlag = xMaybeFlagToFlag unSetDynFlag
+
+xMaybeFlagToFlag :: (DynFlag -> DynP ()) -> (String, DynFlag, Deprecated)
+ -> Flag DynP
+xMaybeFlagToFlag f (name, dynflag, deprecated)
+ = Flag ('X' : name) (NoArg (f dynflag)) deprecated
-- these -f<blah> flags can all be reversed with -fno-<blah>
]
supportedLanguages :: [String]
-supportedLanguages = map fst xFlags
+supportedLanguages = [ name | (name, _, _) <- xFlags ]
+
+-- This may contain duplicates
+languageOptions :: [DynFlag]
+languageOptions = [ dynFlag | (_, dynFlag, _) <- xFlags ]
-- These -X<blah> flags can all be reversed with -XNo<blah>
-xFlags :: [(String, DynFlag)]
+xFlags :: [(String, DynFlag, Deprecated)]
xFlags = [
- ( "CPP", Opt_Cpp ),
- ( "PatternGuards", Opt_PatternGuards ),
- ( "UnicodeSyntax", Opt_UnicodeSyntax ),
- ( "MagicHash", Opt_MagicHash ),
- ( "PolymorphicComponents", Opt_PolymorphicComponents ),
- ( "ExistentialQuantification", Opt_ExistentialQuantification ),
- ( "KindSignatures", Opt_KindSignatures ),
- ( "PatternSignatures", Opt_PatternSignatures ),
- ( "EmptyDataDecls", Opt_EmptyDataDecls ),
- ( "ParallelListComp", Opt_ParallelListComp ),
- ( "TransformListComp", Opt_TransformListComp ),
- ( "ForeignFunctionInterface", Opt_ForeignFunctionInterface ),
- ( "UnliftedFFITypes", Opt_UnliftedFFITypes ),
- ( "LiberalTypeSynonyms", Opt_LiberalTypeSynonyms ),
- ( "Rank2Types", Opt_Rank2Types ),
- ( "RankNTypes", Opt_RankNTypes ),
- ( "ImpredicativeTypes", Opt_ImpredicativeTypes ),
- ( "TypeOperators", Opt_TypeOperators ),
- ( "RecursiveDo", Opt_RecursiveDo ),
- ( "Arrows", Opt_Arrows ),
- ( "PArr", Opt_PArr ),
- ( "TemplateHaskell", Opt_TemplateHaskell ),
- ( "QuasiQuotes", Opt_QuasiQuotes ),
- ( "Generics", Opt_Generics ),
+ ( "CPP", Opt_Cpp, Supported ),
+ ( "PatternGuards", Opt_PatternGuards, Supported ),
+ ( "UnicodeSyntax", Opt_UnicodeSyntax, Supported ),
+ ( "MagicHash", Opt_MagicHash, Supported ),
+ ( "PolymorphicComponents", Opt_PolymorphicComponents, Supported ),
+ ( "ExistentialQuantification", Opt_ExistentialQuantification, Supported ),
+ ( "KindSignatures", Opt_KindSignatures, Supported ),
+ ( "PatternSignatures", Opt_PatternSignatures, Supported ),
+ ( "EmptyDataDecls", Opt_EmptyDataDecls, Supported ),
+ ( "ParallelListComp", Opt_ParallelListComp, Supported ),
+ ( "TransformListComp", Opt_TransformListComp, Supported ),
+ ( "ForeignFunctionInterface", Opt_ForeignFunctionInterface, Supported ),
+ ( "UnliftedFFITypes", Opt_UnliftedFFITypes, Supported ),
+ ( "LiberalTypeSynonyms", Opt_LiberalTypeSynonyms, Supported ),
+ ( "Rank2Types", Opt_Rank2Types, Supported ),
+ ( "RankNTypes", Opt_RankNTypes, Supported ),
+ ( "ImpredicativeTypes", Opt_ImpredicativeTypes, Supported ),
+ ( "TypeOperators", Opt_TypeOperators, Supported ),
+ ( "RecursiveDo", Opt_RecursiveDo, Supported ),
+ ( "Arrows", Opt_Arrows, Supported ),
+ ( "PArr", Opt_PArr, Supported ),
+ ( "TemplateHaskell", Opt_TemplateHaskell, Supported ),
+ ( "QuasiQuotes", Opt_QuasiQuotes, Supported ),
+ ( "Generics", Opt_Generics, Supported ),
-- On by default:
- ( "ImplicitPrelude", Opt_ImplicitPrelude ),
- ( "RecordWildCards", Opt_RecordWildCards ),
- ( "RecordPuns", Opt_RecordPuns ),
- ( "DisambiguateRecordFields", Opt_DisambiguateRecordFields ),
- ( "OverloadedStrings", Opt_OverloadedStrings ),
- ( "GADTs", Opt_GADTs ),
- ( "ViewPatterns", Opt_ViewPatterns),
- ( "TypeFamilies", Opt_TypeFamilies ),
- ( "BangPatterns", Opt_BangPatterns ),
+ ( "ImplicitPrelude", Opt_ImplicitPrelude, Supported ),
+ ( "RecordWildCards", Opt_RecordWildCards, Supported ),
+ ( "NamedFieldPuns", Opt_RecordPuns, Supported ),
+ ( "RecordPuns", Opt_RecordPuns,
+ Deprecated "Use the NamedFieldPuns language instead" ),
+ ( "DisambiguateRecordFields", Opt_DisambiguateRecordFields, Supported ),
+ ( "OverloadedStrings", Opt_OverloadedStrings, Supported ),
+ ( "GADTs", Opt_GADTs, Supported ),
+ ( "ViewPatterns", Opt_ViewPatterns, Supported ),
+ ( "TypeFamilies", Opt_TypeFamilies, Supported ),
+ ( "BangPatterns", Opt_BangPatterns, Supported ),
-- On by default:
- ( "MonomorphismRestriction", Opt_MonomorphismRestriction ),
+ ( "MonomorphismRestriction", Opt_MonomorphismRestriction, Supported ),
-- On by default (which is not strictly H98):
- ( "MonoPatBinds", Opt_MonoPatBinds ),
- ( "RelaxedPolyRec", Opt_RelaxedPolyRec),
- ( "ExtendedDefaultRules", Opt_ExtendedDefaultRules ),
- ( "ImplicitParams", Opt_ImplicitParams ),
- ( "ScopedTypeVariables", Opt_ScopedTypeVariables ),
- ( "UnboxedTuples", Opt_UnboxedTuples ),
- ( "StandaloneDeriving", Opt_StandaloneDeriving ),
- ( "DeriveDataTypeable", Opt_DeriveDataTypeable ),
- ( "TypeSynonymInstances", Opt_TypeSynonymInstances ),
- ( "FlexibleContexts", Opt_FlexibleContexts ),
- ( "FlexibleInstances", Opt_FlexibleInstances ),
- ( "ConstrainedClassMethods", Opt_ConstrainedClassMethods ),
- ( "MultiParamTypeClasses", Opt_MultiParamTypeClasses ),
- ( "FunctionalDependencies", Opt_FunctionalDependencies ),
- ( "GeneralizedNewtypeDeriving", Opt_GeneralizedNewtypeDeriving ),
- ( "OverlappingInstances", Opt_OverlappingInstances ),
- ( "UndecidableInstances", Opt_UndecidableInstances ),
- ( "IncoherentInstances", Opt_IncoherentInstances )
+ ( "MonoPatBinds", Opt_MonoPatBinds, Supported ),
+ ( "RelaxedPolyRec", Opt_RelaxedPolyRec, Supported ),
+ ( "ExtendedDefaultRules", Opt_ExtendedDefaultRules, Supported ),
+ ( "ImplicitParams", Opt_ImplicitParams, Supported ),
+ ( "ScopedTypeVariables", Opt_ScopedTypeVariables, Supported ),
+ ( "UnboxedTuples", Opt_UnboxedTuples, Supported ),
+ ( "StandaloneDeriving", Opt_StandaloneDeriving, Supported ),
+ ( "DeriveDataTypeable", Opt_DeriveDataTypeable, Supported ),
+ ( "TypeSynonymInstances", Opt_TypeSynonymInstances, Supported ),
+ ( "FlexibleContexts", Opt_FlexibleContexts, Supported ),
+ ( "FlexibleInstances", Opt_FlexibleInstances, Supported ),
+ ( "ConstrainedClassMethods", Opt_ConstrainedClassMethods, Supported ),
+ ( "MultiParamTypeClasses", Opt_MultiParamTypeClasses, Supported ),
+ ( "FunctionalDependencies", Opt_FunctionalDependencies, Supported ),
+ ( "GeneralizedNewtypeDeriving", Opt_GeneralizedNewtypeDeriving, Supported ),
+ ( "OverlappingInstances", Opt_OverlappingInstances, Supported ),
+ ( "UndecidableInstances", Opt_UndecidableInstances, Supported ),
+ ( "IncoherentInstances", Opt_IncoherentInstances, Supported )
]
impliedFlags :: [(DynFlag, [DynFlag])]
-- -----------------------------------------------------------------------------
-- Parsing the dynamic flags.
-parseDynamicFlags :: DynFlags -> [String] -> IO (DynFlags,[String])
+parseDynamicFlags :: DynFlags -> [String] -> IO (DynFlags, [String], [String])
parseDynamicFlags dflags args = do
- let ((leftover,errs),dflags')
+ let ((leftover, errs, warns), dflags')
= runCmdLine (processArgs dynamic_flags args) dflags
when (not (null errs)) $ do
throwDyn (UsageError (unlines errs))
- return (dflags', leftover)
-
+ return (dflags', leftover, warns)
type DynP = CmdLineP DynFlags