+src_filename :: FAST_STRING
+src_filename = case argv of
+ filename : rest | headFS filename /= '-' -> filename
+ otherwise -> panic "no filename"
+\end{code}
+
+\begin{code}
+-- debugging opts
+opt_D_dump_all {- do not -} = lookUp SLIT("-ddump-all")
+opt_D_dump_most {- export -} = opt_D_dump_all || lookUp SLIT("-ddump-most")
+
+opt_D_dump_absC = opt_D_dump_all || lookUp SLIT("-ddump-absC")
+opt_D_dump_asm = opt_D_dump_all || lookUp SLIT("-ddump-asm")
+opt_D_dump_cpranal = opt_D_dump_most || lookUp SLIT("-ddump-cpranal")
+opt_D_dump_deriv = opt_D_dump_most || lookUp SLIT("-ddump-deriv")
+opt_D_dump_ds = opt_D_dump_most || lookUp SLIT("-ddump-ds")
+opt_D_dump_flatC = opt_D_dump_all || lookUp SLIT("-ddump-flatC")
+opt_D_dump_foreign = opt_D_dump_most || lookUp SLIT("-ddump-foreign-stubs")
+opt_D_dump_inlinings = opt_D_dump_all || lookUp SLIT("-ddump-inlinings")
+opt_D_dump_occur_anal = opt_D_dump_all || lookUp SLIT("-ddump-occur-anal")
+opt_D_dump_parsed = opt_D_dump_most || lookUp SLIT("-ddump-parsed")
+opt_D_dump_realC = opt_D_dump_all || lookUp SLIT("-ddump-realC")
+opt_D_dump_rn = opt_D_dump_most || lookUp SLIT("-ddump-rn")
+opt_D_dump_simpl = opt_D_dump_most || lookUp SLIT("-ddump-simpl")
+opt_D_dump_simpl_iterations = opt_D_dump_all || lookUp SLIT("-ddump-simpl-iterations")
+opt_D_dump_spec = opt_D_dump_most || lookUp SLIT("-ddump-spec")
+opt_D_dump_stg = opt_D_dump_most || lookUp SLIT("-ddump-stg")
+opt_D_dump_stranal = opt_D_dump_most || lookUp SLIT("-ddump-stranal")
+opt_D_dump_tc = opt_D_dump_most || lookUp SLIT("-ddump-tc")
+opt_D_dump_types = opt_D_dump_most || lookUp SLIT("-ddump-types")
+opt_D_dump_rules = opt_D_dump_most || lookUp SLIT("-ddump-rules")
+opt_D_dump_usagesp = opt_D_dump_most || lookUp SLIT("-ddump-usagesp")
+opt_D_dump_cse = opt_D_dump_most || lookUp SLIT("-ddump-cse")
+opt_D_dump_worker_wrapper = opt_D_dump_most || lookUp SLIT("-ddump-workwrap")
+opt_D_show_passes = opt_D_dump_most || lookUp SLIT("-dshow-passes")
+opt_D_dump_rn_trace = opt_D_dump_all || lookUp SLIT("-ddump-rn-trace")
+opt_D_dump_rn_stats = opt_D_dump_most || lookUp SLIT("-ddump-rn-stats")
+opt_D_dump_stix = opt_D_dump_all || lookUp SLIT("-ddump-stix")
+opt_D_dump_simpl_stats = opt_D_dump_most || lookUp SLIT("-ddump-simpl-stats")
+opt_D_source_stats = opt_D_dump_most || lookUp SLIT("-dsource-stats")
+opt_D_verbose_core2core = opt_D_dump_all || lookUp SLIT("-dverbose-simpl")
+opt_D_verbose_stg2stg = opt_D_dump_all || lookUp SLIT("-dverbose-stg")
+opt_D_dump_minimal_imports = lookUp SLIT("-ddump-minimal-imports")
+
+opt_DoCoreLinting = lookUp SLIT("-dcore-lint")
+opt_DoStgLinting = lookUp SLIT("-dstg-lint")
+opt_DoUSPLinting = lookUp SLIT("-dusagesp-lint")
+opt_PprStyle_NoPrags = lookUp SLIT("-dppr-noprags")
+opt_PprStyle_Debug = lookUp SLIT("-dppr-debug")
+opt_PprUserLength = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
+
+-- warning opts
+opt_WarnDuplicateExports = lookUp SLIT("-fwarn-duplicate-exports")
+opt_WarnHiShadows = lookUp SLIT("-fwarn-hi-shadowing")
+opt_WarnIncompletePatterns = lookUp SLIT("-fwarn-incomplete-patterns")
+opt_WarnMissingFields = lookUp SLIT("-fwarn-missing-fields")
+opt_WarnMissingMethods = lookUp SLIT("-fwarn-missing-methods")
+opt_WarnMissingSigs = lookUp SLIT("-fwarn-missing-signatures")
+opt_WarnNameShadowing = lookUp SLIT("-fwarn-name-shadowing")
+opt_WarnOverlappingPatterns = lookUp SLIT("-fwarn-overlapping-patterns")
+opt_WarnSimplePatterns = lookUp SLIT("-fwarn-simple-patterns")
+opt_WarnTypeDefaults = lookUp SLIT("-fwarn-type-defaults")
+opt_WarnUnusedBinds = lookUp SLIT("-fwarn-unused-binds")
+opt_WarnUnusedImports = lookUp SLIT("-fwarn-unused-imports")
+opt_WarnUnusedMatches = lookUp SLIT("-fwarn-unused-matches")
+opt_WarnDeprecations = lookUp SLIT("-fwarn-deprecations")
+
+-- profiling opts