+ <h2>Command Line Options</h2>
+ <p>
+ GHC's many flavours of command line options make the code interpreting
+ them rather involved. The following provides a brief overview of the
+ processing of these options. Since the addition of the interactive
+ front-end to GHC, there are two kinds of options: <em>static
+ options</em> and <em>dynamic options.</em> The former can only be set
+ when the system is invoked, whereas the latter can be altered in the
+ course of an interactive session. A brief explanation on the difference
+ between these options and related matters is at the start of the module
+ <a
+ href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/compiler/main/CmdLineOpts.lhs"><code>CmdLineOpts</code></a>.
+ The same module defines the enumeration <code>DynFlag</code>, which
+ contains all dynamic flags. Moreover, there is the labelled record
+ <code>DynFlags</code> that collects all the flag-related information
+ that is passed by the compilation manager to the compiler proper,
+ <code>hsc</code>, whenever a compilation is triggered. If you like to
+ find out whether an option is static, use the predicate
+ <code>isStaticHscFlag</code> in the same module.
+ <p>
+ The second module that contains a lot of code related to the management
+ of flags is <a
+ href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/compiler/main/DriverFlags.hs"><code>DriverFlags.hs</code></a>.
+ In particular, the module contains two association lists that map the
+ textual representation of the various flags to a data structure that
+ tells the driver how to parse the flag (e.g., whether it has any
+ arguments) and provides its internal representation. All static flags
+ are contained in <code>static_flags</code>. A whole range of
+ <code>-f</code> flags can be negated by adding a <code>-f-no-</code>
+ prefix. These flags are contained in the association list
+ <code>fFlags</code>.
+ <p>
+ The driver uses a nasty hack based on <code>IORef</code>s that permits
+ the rest of the compiler to access static flags as CAFs; i.e., there is
+ a family of toplevel variable definitions in
+ <a
+ href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/compiler/main/CmdLineOpts.lhs"><code>CmdLineOpts</code></a>,
+ below the literate section heading <i>Static options</i>, each of which
+ contains the value of one static option. This is essentially realised
+ via global variables (in the sense of C-style, updatable, global
+ variables) defined via an evil pre-processor macro named
+ <code>GLOBAL_VAR</code>, which is defined in a particularly ugly corner
+ of GHC, namely the C header file
+ <a
+ href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/compiler/HsVersions.h"><code>HsVersions.h</code></a>.
+