Changes between Version 14 and Version 15 of SourceGuide

Show
Ignore:
Timestamp:
06/20/11 20:24:27 (2 years ago)
Author:
refold
Comment:

Fix broken links

Legend:

Unmodified
Added
Removed
Modified
  • SourceGuide

    v14 v15  
    3030=== Really dull modules === 
    3131 
    32  `Distribution/GetOpt.hs` ([http://darcs.haskell.org/cabal/Distribution/GetOpt.hs source]) (no docs - hidden module):: 
     32 `Distribution/GetOpt.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/GetOpt.hs source]) (no docs - hidden module):: 
    3333  This should live under Compat/ it's just a bundled version of the standard !GetOpt. Not very interesting. 
    3434 
    3535=== Some simple data types === 
    3636 
    37  `Distribution/Version.hs` ([http://darcs.haskell.org/cabal/Distribution/Version.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Version.html docs]):: 
     37 `Distribution/Version.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Version.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Version.html docs]):: 
    3838  exports the `Version` type  along with a parser and pretty printer. A version is something like "1.3.3". It also defines `VersionRange`s and 
    3939  `Dependency` data types. Version ranges are like ">= 1.2 && < 2". A dependency is a package name and a version range, like "foo >= 1.2 && < 2". 
    4040 
    41  `Distribution/Package.hs` ([http://darcs.haskell.org/cabal/Distribution/Package.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Package.html docs]):: 
     41 `Distribution/Package.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Package.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Package.html docs]):: 
    4242  defines a package identifier along with a parser and pretty printer for it. `PackageIdentifier`s consist of a name and an exact version 
    4343 (exact version as opposed to a dependency like above that uses a version range). 
    4444 
    45  `Distribution/Verbosity.hs` ([http://darcs.haskell.org/cabal/Distribution/Verbosity.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Verbosity.html docs]):: 
     45 `Distribution/Verbosity.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Verbosity.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Verbosity.html docs]):: 
    4646  a simple `Verbosity` type with associated utilities. There are 4 standard verbosity levels from `Silent`, `Normal`,  `Verbose` up to `Deafening`. 
    4747  This is used for deciding what logging messages to print in the active parts. 
    4848 
    49  `Distribution/Compiler.hs` ([http://darcs.haskell.org/cabal/Distribution/Compiler.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Compiler.html docs]):: 
     49 `Distribution/Compiler.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Compiler.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Compiler.html docs]):: 
    5050  This has an enumeration of the various compilers that Cabal knows about. It also specifies the default compiler. Sadly you'll often see code  
    5151  that does case analysis on this compiler flavour enumeration like: 
     
    6060  moment we just have to live with this deficiency. If you're interested, see ticket #50. 
    6161 
    62  `Distribution/System.hs` ([http://darcs.haskell.org/cabal/Distribution/System.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-System.html docs]):: 
     62 `Distribution/System.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/System.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-System.html docs]):: 
    6363  Cabal often needs to do slightly different things on specific platforms. You probably know about the `System.Info.os :: String` however using 
    6464  that is very inconvenient because it is a string and different Haskell implementations do not agree on using the same strings for the same 
     
    6666  enumeration. 
    6767 
    68  `Distribution/License.hs` ([http://darcs.haskell.org/cabal/Distribution/License.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-License.html docs]):: 
     68 `Distribution/License.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/License.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-License.html docs]):: 
    6969  The `.cabal` file allows you to specify a license file. Of course you can use any license you like but people often pick common open source 
    7070  licenses and it's useful if we can automatically recognise that (eg so we can display it on the hackage web pages). So you can also specify the 
     
    7373=== The package description data types === 
    7474 
    75  `Distribution/ParseUtils.hs` ([http://darcs.haskell.org/cabal/Distribution/ParseUtils.hs source]) (no docs - hidden module):: 
     75 `Distribution/ParseUtils.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/ParseUtils.hs source]) (no docs - hidden module):: 
    7676  The `.cabal` file format is not trivial, especially with the introduction of configurations and the section syntax that goes with that. 
    7777  This module has a bunch of parsing functions that is used by the `.cabal` parser and a couple others. It has the parsing framework code and 
    7878  also little parsers for many of the formats we get in various `.cabal` file fields, like module names, comma separated lists etc. 
    7979 
    80  `Distribution/PackageDescription.hs` ([http://darcs.haskell.org/cabal/Distribution/PackageDescription.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html docs]):: 
     80 `Distribution/PackageDescription.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/PackageDescription.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html docs]):: 
    8181  This defines the data structure for the `.cabal` file format. There are several parts to this structure. It has top level 
    8282  info and then `Library` and `Executable` sections each of which have associated `BuildInfo` data that's used to build the 
     
    8888  simpler. 
    8989 
    90  `Distribution/PackageDescription/Configuration.hs` ([http://darcs.haskell.org/cabal/Distribution/PackageDescription/Configuration.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription-Configuration.html docs]):: 
     90 `Distribution/PackageDescription/Configuration.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/PackageDescription/Configuration.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription-Configuration.html docs]):: 
    9191  This is about the [CabalConfigurations cabal configurations] feature. It exports `finalizePackageDescription` and 
    9292  `flattenPackageDescription` which are functions for converting `GenericPackageDescription`s down to 
    9393  `PackageDescription`s. It has code for working with the tree of conditions and resolving or flattening conditions.  
    9494 
    95  `Distribution/PackageDescription/Parse.hs` ([http://darcs.haskell.org/cabal/Distribution/PackageDescription/Parse.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html docs]):: 
     95 `Distribution/PackageDescription/Parse.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/PackageDescription/Parse.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription.html docs]):: 
    9696  This defined parsers and partial pretty printers for the .cabal format. Some of the complexity in this module 
    9797  is due to the fact that we have to be backwards compatible with old `.cabal` files, so there's code to 
    9898  translate into the newer structure. 
    9999 
    100  `Distribution/PackageDescription/Check.hs` ([http://darcs.haskell.org/cabal/Distribution/PackageDescription/Check.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription-Check.html docs]):: 
     100 `Distribution/PackageDescription/Check.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/PackageDescription/Check.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-PackageDescription-Check.html docs]):: 
    101101  This has code for checking for various problems in packages. There is one set of checks that just looks at a 
    102102  `PackageDescription` in isolation and another set of checks that also looks at files in the package. Some of 
     
    108108  higher standard than packages that are only ever expected to be used on the author's own environment. 
    109109 
    110  `Distribution/InstalledPackageInfo.hs` ([http://darcs.haskell.org/cabal/Distribution/InstalledPackageInfo.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-InstalledPackageInfo.html docs]):: 
     110 `Distribution/InstalledPackageInfo.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/InstalledPackageInfo.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-InstalledPackageInfo.html docs]):: 
    111111  The `.cabal` file format is for describing a package that is not yet installed. It has a lot of flexibility like conditionals and dependency 
    112112  ranges. As such that format is not at all suitable for describing a package that has already been built and installed. By the time we get to 
     
    120120=== Useful internal abstractions === 
    121121 
    122  `Distribution/Simple/Program.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Program.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Program.html docs]):: 
     122 `Distribution/Simple/Program.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Program.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Program.html docs]):: 
    123123  This provides an abstraction which deals with configuring and running programs. A `Program` is a static notion of a known program. 
    124124  A `ConfiguredProgram` is a `Program` that has been found on the current machine and is ready to be run (possibly with some user-supplied 
     
    129129  The module also defines all the known built-in `Program`s and the `defaultProgramConfiguration` which contains them all. 
    130130 
    131  `Distribution/Simple/Command.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Command.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Command.html docs]):: 
     131 `Distribution/Simple/Command.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Command.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Command.html docs]):: 
    132132  This is to do with command line handling. The Cabal command line is organised into a number of named sub-commands (much like darcs). 
    133133  The `Command` abstraction represents one of these sub-commands, with a name, description, a set of flags. `Command`s can be associated with 
     
    135135  other tools make derived commands. This feature is used heavily in CabalInstall. 
    136136 
    137  `Distribution/Simple/InstallDirs.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/InstallDirs.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-InstallDirs.html docs]):: 
     137 `Distribution/Simple/InstallDirs.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/InstallDirs.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-InstallDirs.html docs]):: 
    138138  This manages everything to do with where files get installed (though does not get involved with actually doing any installation). It provides an 
    139139  `InstallDirs` type which is a set of directories for where to install things. It also handles the fact that we use templates in these install 
     
    141141  So it provides a `PathTemplate` type and functions for substituting for these templates. 
    142142 
    143  `Distribution/Simple/Compiler.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Compiler.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Compiler.html docs]):: 
     143 `Distribution/Simple/Compiler.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Compiler.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Compiler.html docs]):: 
    144144  This should be a much more sophisticated abstraction than it is. Currently it's just a bit of data about the compiler, like it's flavour 
    145145  and name and version. The reason it's just data is because currently it has to be in `Read` and `Show` so it can be saved along with the 
     
    149149  this latter feature very much. 
    150150 
    151  `Distribution/Simple/PreProcess.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/PreProcess.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-PreProcesshtml docs]):: 
     151 `Distribution/Simple/PreProcess.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/PreProcess.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-PreProcesshtml docs]):: 
    152152  This defines a `PreProcessor` abstraction which represents a pre-processor that can transform one kind of file into another. 
    153153  There is also a `PPSuffixHandler` which is a combination of a file extension and a function for configuring a `PreProcessor`. It defines a 
     
    156156  be, it could really do with a rewrite to address some of the problems we have with pre-processors. 
    157157 
    158  `Distribution/Simple/Utils.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Utils.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Utils.html docs]):: 
     158 `Distribution/Simple/Utils.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Utils.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Utils.html docs]):: 
    159159  A large and somewhat miscellaneous collection of utility functions used throughout the rest of the Cabal lib and in other tools that use the 
    160160  Cabal lib like CabalInstall. It has a very simple set of logging actions. It has low level functions for running programs, a bunch of wrappers 
    161161  for various directory and file functions that do extra logging. 
    162162 
    163  `Distribution/Simple/LocalBuildInfo.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/LocalBuildInfo.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-LocalBuildInfo.html docs]):: 
     163 `Distribution/Simple/LocalBuildInfo.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/LocalBuildInfo.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-LocalBuildInfo.html docs]):: 
    164164  Once a package has been configured we have resolved conditionals and dependencies, configured the compiler and other needed external programs. 
    165165  The `LocalBuildInfo` is used to hold all this information. It holds the install dirs, the compiler, the exact package dependencies, the 
     
    169169=== Particular phases or actions within the build process === 
    170170 
    171  `Distribution/Simple/Configure.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Configure.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Configure.html docs]):: 
     171 `Distribution/Simple/Configure.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Configure.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Configure.html docs]):: 
    172172  This deals with the ''configure'' phase. It provides the `configure` action which is given the package description and configure flags. It then 
    173173  tries to: 
     
    181181  the amount of information displayed depending on the verbosity level. 
    182182 
    183  `Distribution/Simple/Build.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Build.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Build.html docs]):: 
     183 `Distribution/Simple/Build.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Build.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Build.html docs]):: 
    184184  This is the entry point to actually building the modules in a package. It doesn't actually do much itself, most of the work is delegated 
    185185  to compiler-specific actions. It does do some non-compiler specific bits like running pre-processors. There's some stuff to do with generating 
     
    191191  module. 
    192192 
    193  `Distribution/Simple/Install.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Install.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Install.html docs]):: 
     193 `Distribution/Simple/Install.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Install.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Install.html docs]):: 
    194194  This is the entry point into installing a built package. It does the generic bits and then calls compiler-specific functions to do 
    195195  the rest. 
    196196 
    197  `Distribution/Simple/Haddock.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Haddock.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Haddock.html docs]):: 
     197 `Distribution/Simple/Haddock.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Haddock.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Haddock.html docs]):: 
    198198  This module deals with the haddock and hscolour commands. Sadly this is a rather complicated module. It deals with two versions 
    199199  of haddock (0.x and 2.x). It has to do pre-processing for haddock 0.x which involves 'unlit'ing and using -D__HADDOCK__ for any 
     
    201201  links. The hscolour support allows generating html versions of the original source, with coloured syntax highlighting. 
    202202 
    203  `Distribution/Simple/Register.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Register.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Register.html docs]):: 
     203 `Distribution/Simple/Register.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Register.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Register.html docs]):: 
    204204  This module deals with registering and unregistering packages. There are a couple ways it can do this, one is to do it directly. 
    205205  Another is to generate a script that can be run later to do it. The idea here being that the user is shielded from the details of 
     
    211211  unsatisfactory. The script generation and the unregister feature are not well used or tested. 
    212212 
    213  `Distribution/Simple/SrcDist.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/SrcDist.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-SrcDist.html docs]):: 
     213 `Distribution/Simple/SrcDist.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/SrcDist.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-SrcDist.html docs]):: 
    214214  This handles the `sdist` command. The module exports an `sdist` action but also some of the phases that make it up so that other 
    215215  tools can use just the bits they need. In particular the preparation of the tree of files to go into the source tarball is separated 
     
    220220=== Compiler-specific modules === 
    221221 
    222  `Distribution/Simple/GHC.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/GHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-GHC.html docs]):: 
     222 `Distribution/Simple/GHC.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/GHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-GHC.html docs]):: 
    223223  This is a fairly large module. It contains most of the GHC-specific code for configuring, building and installing packages. It also 
    224224  exports a function for finding out what packages are already installed. Configuring involves finding the `ghc` and `ghc-pkg` 
     
    233233  and thus what search dirs are used for various kinds of files. 
    234234 
    235  `Distribution/Simple/Hugs.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Hugs.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Hugs.html docs]):: 
    236  
    237  `Distribution/Simple/NHC.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/NHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-NHC.html docs]):: 
    238  
    239  `Distribution/Simple/UHC.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/UHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-UHC.html docs]):: 
     235 `Distribution/Simple/Hugs.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Hugs.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Hugs.html docs]):: 
     236 
     237 `Distribution/Simple/NHC.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/NHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-NHC.html docs]):: 
     238 
     239 `Distribution/Simple/UHC.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/UHC.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-UHC.html docs]):: 
    240240 
    241241=== Stuff related to the front end === 
    242242 
    243  `Distribution/Simple/UserHooks.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/UserHooks.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-UserHooks.html docs]):: 
     243 `Distribution/Simple/UserHooks.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/UserHooks.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-UserHooks.html docs]):: 
    244244  This defines the API that `Setup.hs` scripts can use to customise the way the build works. This module just defines the `UserHooks` 
    245245  type. The predefined sets of hooks that implement the `Simple`, `Make` and `Configure` build systems are defined in 
     
    251251  corresponding hook. At some point it will have to be replaced. 
    252252 
    253  `Distribution/Simple/Setup.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/Setup.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Setup.html docs]):: 
     253 `Distribution/Simple/Setup.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/Setup.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-Setup.html docs]):: 
    254254  This is a big module, but not very complicated. The code is very regular and repetitive. It defines the command line interface 
    255255  for all the Cabal commands. For each command (like `configure`, `build` etc) it defines a type that holds all the flags, the 
     
    260260  for managing sets of fields that can be read and written from files. This would allow us to save configure flags in config files. 
    261261 
    262  `Distribution/Simple/SetupWrapper.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple/SetupWrapper.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-SetupWrapper.html docs]):: 
     262 `Distribution/Simple/SetupWrapper.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple/SetupWrapper.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-SetupWrapper.html docs]):: 
    263263  This is a wrapper around calling `Setup.hs` scripts. It is slightly more cunning than just calling `runghc Setup.hs args...`. 
    264264  First of all, it checks the `.cabal` file and sees if it specifies any particular version of Cabal. It also checks the `build-type`. 
     
    269269  ghc. Nothing in the Cabal lib uses this module, it is provided for `cabal-install`. 
    270270 
    271  `Distribution/Simple.hs` ([http://darcs.haskell.org/cabal/Distribution/Simple.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple.html docs]):: 
     271 `Distribution/Simple.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Simple.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple.html docs]):: 
    272272  This is the command line front end to the `Simple` build system. The original idea was that there could be different build systems 
    273273  that all presented the same compatible command line interfaces. There is still a `Make` system (see below) but in practice no 
     
    276276  scripts can extend to add their own behaviour. 
    277277 
    278  `Distribution/Make.hs` ([http://darcs.haskell.org/cabal/Distribution/Make.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Make.html docs]):: 
     278 `Distribution/Make.hs` ([http://darcs.haskell.org/cabal/cabal/Distribution/Make.hs source]) ([http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Make.html docs]):: 
    279279  This is an alternative build system that delegates everything to the `make` program. All the commands just end up calling `make` with 
    280280  appropriate arguments. The intention was to allow preexisting packages that used makefiles to be wrapped into Cabal packages. In