| Cabal-1.6.0.3: A framework for packaging Haskell software | Source code | Contents | Index

Distribution.Simple.Setup

Portability | portable
Maintainer | cabal-devel@haskell.org

Description

This is a big module, but not very complicated. The code is very regular and repetitive. It defines the command line interface for all the Cabal commands. For each command (like `configure`, `build` etc) it defines a type that holds all the flags, the default set of flags and a `CommandUI` that maps command line flags to and from the corresponding flags type.

All the flags types are instances of `Monoid`, see http://www.haskell.org/pipermail/cabal-devel/2007-December/001509.html for an explanation.

The types defined here get used in the front end and especially in `cabal-install` which has to do quite a bit of manipulating sets of command line flags.

This is actually relatively nice, it works quite well. The main change it needs is to unify it with the code for managing sets of fields that can be read and written from files. This would allow us to save configure flags in config files.

Synopsis

data GlobalFlags = GlobalFlags {

globalVersion :: Flag Bool
globalNumericVersion :: Flag Bool

}

emptyGlobalFlags :: GlobalFlags
defaultGlobalFlags :: GlobalFlags
globalCommand :: CommandUI GlobalFlags

data ConfigFlags = ConfigFlags {

configPrograms :: ProgramConfiguration
configProgramPaths :: [(String, FilePath)]
configProgramArgs :: [(String, [String])]
configHcFlavor :: Flag CompilerFlavor
configHcPath :: Flag FilePath
configHcPkg :: Flag FilePath
configVanillaLib :: Flag Bool
configProfLib :: Flag Bool
configSharedLib :: Flag Bool
configProfExe :: Flag Bool
configConfigureArgs :: [String]
configOptimization :: Flag OptimisationLevel
configProgPrefix :: Flag PathTemplate
configProgSuffix :: Flag PathTemplate
configInstallDirs :: InstallDirs (Flag PathTemplate)
configScratchDir :: Flag FilePath
configExtraLibDirs :: [FilePath]
configExtraIncludeDirs :: [FilePath]
configDistPref :: Flag FilePath
configVerbosity :: Flag Verbosity
configUserInstall :: Flag Bool
configPackageDB :: Flag PackageDB
configGHCiLib :: Flag Bool
configSplitObjs :: Flag Bool
configStripExes :: Flag Bool
configConstraints :: [Dependency]
configConfigurationsFlags :: FlagAssignment

}

emptyConfigFlags :: ConfigFlags
defaultConfigFlags :: ProgramConfiguration -> ConfigFlags
configureCommand :: ProgramConfiguration -> CommandUI ConfigFlags

data CopyFlags = CopyFlags {

copyDest :: Flag CopyDest
copyDistPref :: Flag FilePath
copyUseWrapper :: Flag Bool
copyInPlace :: Flag Bool
copyVerbosity :: Flag Verbosity

}

emptyCopyFlags :: CopyFlags
defaultCopyFlags :: CopyFlags
copyCommand :: CommandUI CopyFlags

data InstallFlags = InstallFlags {

installPackageDB :: Flag PackageDB
installDistPref :: Flag FilePath
installUseWrapper :: Flag Bool
installInPlace :: Flag Bool
installVerbosity :: Flag Verbosity

}

emptyInstallFlags :: InstallFlags
defaultInstallFlags :: InstallFlags
installCommand :: CommandUI InstallFlags

data HaddockFlags = HaddockFlags {

haddockProgramPaths :: [(String, FilePath)]
haddockProgramArgs :: [(String, [String])]
haddockHoogle :: Flag Bool
haddockHtmlLocation :: Flag String
haddockExecutables :: Flag Bool
haddockInternal :: Flag Bool
haddockCss :: Flag FilePath
haddockHscolour :: Flag Bool
haddockHscolourCss :: Flag FilePath
haddockDistPref :: Flag FilePath
haddockVerbosity :: Flag Verbosity

}

emptyHaddockFlags :: HaddockFlags
defaultHaddockFlags :: HaddockFlags
haddockCommand :: CommandUI HaddockFlags

data HscolourFlags = HscolourFlags {

hscolourCSS :: Flag FilePath
hscolourExecutables :: Flag Bool
hscolourDistPref :: Flag FilePath
hscolourVerbosity :: Flag Verbosity

}

emptyHscolourFlags :: HscolourFlags
defaultHscolourFlags :: HscolourFlags
hscolourCommand :: CommandUI HscolourFlags

data BuildFlags = BuildFlags {

buildProgramPaths :: [(String, FilePath)]
buildProgramArgs :: [(String, [String])]
buildDistPref :: Flag FilePath
buildVerbosity :: Flag Verbosity

}

emptyBuildFlags :: BuildFlags
defaultBuildFlags :: BuildFlags
buildCommand :: ProgramConfiguration -> CommandUI BuildFlags
buildVerbose :: BuildFlags -> Verbosity

data CleanFlags = CleanFlags {

cleanSaveConf :: Flag Bool
cleanDistPref :: Flag FilePath
cleanVerbosity :: Flag Verbosity

}

emptyCleanFlags :: CleanFlags
defaultCleanFlags :: CleanFlags
cleanCommand :: CommandUI CleanFlags

data MakefileFlags = MakefileFlags {

makefileFile :: Flag FilePath
makefileDistPref :: Flag FilePath
makefileVerbosity :: Flag Verbosity

}

emptyMakefileFlags :: MakefileFlags
defaultMakefileFlags :: MakefileFlags
makefileCommand :: CommandUI MakefileFlags

data RegisterFlags = RegisterFlags {

regPackageDB :: Flag PackageDB
regGenScript :: Flag Bool
regGenPkgConf :: Flag (Maybe FilePath)
regInPlace :: Flag Bool
regDistPref :: Flag FilePath
regVerbosity :: Flag Verbosity

}

emptyRegisterFlags :: RegisterFlags
defaultRegisterFlags :: RegisterFlags
registerCommand :: CommandUI RegisterFlags
unregisterCommand :: CommandUI RegisterFlags

data SDistFlags = SDistFlags {

sDistSnapshot :: Flag Bool
sDistDistPref :: Flag FilePath
sDistVerbosity :: Flag Verbosity

}

emptySDistFlags :: SDistFlags
defaultSDistFlags :: SDistFlags
sdistCommand :: CommandUI SDistFlags

data TestFlags = TestFlags {

testDistPref :: Flag FilePath
testVerbosity :: Flag Verbosity

}

emptyTestFlags :: TestFlags
defaultTestFlags :: TestFlags
testCommand :: CommandUI TestFlags

data CopyDest

= NoCopyDest
| CopyTo FilePath
| CopyPrefix FilePath

configureArgs :: Bool -> ConfigFlags -> [String]
configureOptions :: ShowOrParseArgs -> [OptionField ConfigFlags]
installDirsOptions :: [OptionField (InstallDirs (Flag PathTemplate))]
defaultDistPref :: FilePath

data Flag a

= Flag a
| NoFlag

toFlag :: a -> Flag a
fromFlag :: Flag a -> a
fromFlagOrDefault :: a -> Flag a -> a
flagToMaybe :: Flag a -> Maybe a
flagToList :: Flag a -> [a]
boolOpt :: SFlags -> SFlags -> MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
boolOpt' :: OptFlags -> OptFlags -> MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg :: SFlags -> LFlags -> Description -> (b -> Flag Bool) -> (Flag Bool -> b -> b) -> OptDescr b
falseArg :: SFlags -> LFlags -> Description -> (b -> Flag Bool) -> (Flag Bool -> b -> b) -> OptDescr b
optionVerbosity :: (flags -> Flag Verbosity) -> (Flag Verbosity -> flags -> flags) -> OptionField flags

Documentation

data GlobalFlags | Source

Flags that apply at the top level, not to any sub-command.
Constructors

GlobalFlags |

globalVersion :: Flag Bool |
globalNumericVersion :: Flag Bool |

Instances

Monoid GlobalFlags

emptyGlobalFlags :: GlobalFlags | Source

defaultGlobalFlags :: GlobalFlags | Source

globalCommand :: CommandUI GlobalFlags | Source

data ConfigFlags | Source

Flags to `configure` command
Constructors

ConfigFlags |

configPrograms :: ProgramConfiguration | All programs that cabal may run
configProgramPaths :: [(String, FilePath)] | user specifed programs paths
configProgramArgs :: [(String, [String])] | user specifed programs args
configHcFlavor :: Flag CompilerFlavor | The "flavor" of the compiler, sugh as GHC or Hugs.
configHcPath :: Flag FilePath | given compiler location
configHcPkg :: Flag FilePath | given hc-pkg location
configVanillaLib :: Flag Bool | Enable vanilla library
configProfLib :: Flag Bool | Enable profiling in the library
configSharedLib :: Flag Bool | Build shared library
configProfExe :: Flag Bool | Enable profiling in the executables.
configConfigureArgs :: [String] | Extra arguments to `configure`
configOptimization :: Flag OptimisationLevel | Enable optimization.
configProgPrefix :: Flag PathTemplate | Installed executable prefix.
configProgSuffix :: Flag PathTemplate | Installed executable suffix.
configInstallDirs :: InstallDirs (Flag PathTemplate) | Installation paths
configScratchDir :: Flag FilePath |
configExtraLibDirs :: [FilePath] | path to search for extra libraries
configExtraIncludeDirs :: [FilePath] | path to search for header files
configDistPref :: Flag FilePath | dist prefix
configVerbosity :: Flag Verbosity | verbosity level
configUserInstall :: Flag Bool | The --user/--global flag
configPackageDB :: Flag PackageDB | Which package DB to use
configGHCiLib :: Flag Bool | Enable compiling library for GHCi
configSplitObjs :: Flag Bool | Enable -split-objs with GHC
configStripExes :: Flag Bool | Enable executable stripping
configConstraints :: [Dependency] | Additional constraints for dependencies
configConfigurationsFlags :: FlagAssignment |

Instances

Show ConfigFlags
Monoid ConfigFlags

emptyConfigFlags :: ConfigFlags | Source

defaultConfigFlags :: ProgramConfiguration -> ConfigFlags | Source

configureCommand :: ProgramConfiguration -> CommandUI ConfigFlags | Source

data CopyFlags | Source

Flags to `copy`: (destdir, copy-prefix (backwards compat), verbosity)
Constructors

CopyFlags |

copyDest :: Flag CopyDest |
copyDistPref :: Flag FilePath |
copyUseWrapper :: Flag Bool |
copyInPlace :: Flag Bool |
copyVerbosity :: Flag Verbosity |

Instances

Show CopyFlags
Monoid CopyFlags

emptyCopyFlags :: CopyFlags | Source

defaultCopyFlags :: CopyFlags | Source

copyCommand :: CommandUI CopyFlags | Source

data InstallFlags | Source

Flags to `install`: (package db, verbosity)
Constructors

InstallFlags |

installPackageDB :: Flag PackageDB |
installDistPref :: Flag FilePath |
installUseWrapper :: Flag Bool |
installInPlace :: Flag Bool |
installVerbosity :: Flag Verbosity |

Instances

Show InstallFlags
Monoid InstallFlags

emptyInstallFlags :: InstallFlags | Source

defaultInstallFlags :: InstallFlags | Source

installCommand :: CommandUI InstallFlags | Source

data HaddockFlags | Source

Constructors

HaddockFlags |

haddockProgramPaths :: [(String, FilePath)] |
haddockProgramArgs :: [(String, [String])] |
haddockHoogle :: Flag Bool |
haddockHtmlLocation :: Flag String |
haddockExecutables :: Flag Bool |
haddockInternal :: Flag Bool |
haddockCss :: Flag FilePath |
haddockHscolour :: Flag Bool |
haddockHscolourCss :: Flag FilePath |
haddockDistPref :: Flag FilePath |
haddockVerbosity :: Flag Verbosity |

Instances

Show HaddockFlags
Monoid HaddockFlags

emptyHaddockFlags :: HaddockFlags | Source

defaultHaddockFlags :: HaddockFlags | Source

haddockCommand :: CommandUI HaddockFlags | Source

data HscolourFlags | Source

Constructors

HscolourFlags |

hscolourCSS :: Flag FilePath |
hscolourExecutables :: Flag Bool |
hscolourDistPref :: Flag FilePath |
hscolourVerbosity :: Flag Verbosity |

Instances

Show HscolourFlags
Monoid HscolourFlags

emptyHscolourFlags :: HscolourFlags | Source

defaultHscolourFlags :: HscolourFlags | Source

hscolourCommand :: CommandUI HscolourFlags | Source

data BuildFlags | Source

Constructors

BuildFlags |

buildProgramPaths :: [(String, FilePath)] |
buildProgramArgs :: [(String, [String])] |
buildDistPref :: Flag FilePath |
buildVerbosity :: Flag Verbosity |

Instances

Show BuildFlags
Monoid BuildFlags

emptyBuildFlags :: BuildFlags | Source

defaultBuildFlags :: BuildFlags | Source

buildCommand :: ProgramConfiguration -> CommandUI BuildFlags | Source

buildVerbose :: BuildFlags -> Verbosity | Source

data CleanFlags | Source

Constructors

CleanFlags |

cleanSaveConf :: Flag Bool |
cleanDistPref :: Flag FilePath |
cleanVerbosity :: Flag Verbosity |

Instances

Show CleanFlags
Monoid CleanFlags

emptyCleanFlags :: CleanFlags | Source

defaultCleanFlags :: CleanFlags | Source

cleanCommand :: CommandUI CleanFlags | Source

data MakefileFlags | Source

Constructors

MakefileFlags |

makefileFile :: Flag FilePath |
makefileDistPref :: Flag FilePath |
makefileVerbosity :: Flag Verbosity |

Instances

Show MakefileFlags
Monoid MakefileFlags

emptyMakefileFlags :: MakefileFlags | Source

defaultMakefileFlags :: MakefileFlags | Source

makefileCommand :: CommandUI MakefileFlags | Source

data RegisterFlags | Source

Flags to `register` and `unregister`: (user package, gen-script, in-place, verbosity)
Constructors

RegisterFlags |

regPackageDB :: Flag PackageDB |
regGenScript :: Flag Bool |
regGenPkgConf :: Flag (Maybe FilePath) |
regInPlace :: Flag Bool |
regDistPref :: Flag FilePath |
regVerbosity :: Flag Verbosity |

Instances

Show RegisterFlags
Monoid RegisterFlags

emptyRegisterFlags :: RegisterFlags | Source

defaultRegisterFlags :: RegisterFlags | Source

registerCommand :: CommandUI RegisterFlags | Source

unregisterCommand :: CommandUI RegisterFlags | Source

data SDistFlags | Source

Flags to `sdist`: (snapshot, verbosity)
Constructors

SDistFlags |

sDistSnapshot :: Flag Bool |
sDistDistPref :: Flag FilePath |
sDistVerbosity :: Flag Verbosity |

Instances

Show SDistFlags
Monoid SDistFlags

emptySDistFlags :: SDistFlags | Source

defaultSDistFlags :: SDistFlags | Source

sdistCommand :: CommandUI SDistFlags | Source

data TestFlags | Source

Constructors

TestFlags |

testDistPref :: Flag FilePath |
testVerbosity :: Flag Verbosity |

Instances

Show TestFlags
Monoid TestFlags

emptyTestFlags :: TestFlags | Source

defaultTestFlags :: TestFlags | Source

testCommand :: CommandUI TestFlags | Source

data CopyDest | Source

The location prefix for the copy command.
Constructors

NoCopyDest |
CopyTo FilePath |
CopyPrefix FilePath |

Instances

Eq CopyDest
Show CopyDest

configureArgs :: Bool -> ConfigFlags -> [String] | Source

Arguments to pass to a `configure` script, e.g. generated by `autoconf`.

configureOptions :: ShowOrParseArgs -> [OptionField ConfigFlags] | Source

installDirsOptions :: [OptionField (InstallDirs (Flag PathTemplate))] | Source

defaultDistPref :: FilePath | Source

data Flag a | Source

All flags are monoids, they come in two flavours:

1. list flags eg

     --ghc-option=foo --ghc-option=bar

gives us all the values [foo, bar]

2. singular value flags, eg:

     --enable-foo --disable-foo

gives us Just False So this Flag type is for the latter singular kind of flag. Its monoid instance gives us the behaviour where it starts out as `NoFlag` and later flags override earlier ones.

Constructors

Flag a |
NoFlag |

Instances

Functor Flag
Bounded a => Bounded (Flag a)
Enum a => Enum (Flag a)
Eq a => Eq (Flag a)
Show a => Show (Flag a)
Monoid (Flag a)

toFlag :: a -> Flag a | Source

fromFlag :: Flag a -> a | Source

fromFlagOrDefault :: a -> Flag a -> a | Source

flagToMaybe :: Flag a -> Maybe a | Source

flagToList :: Flag a -> [a] | Source

boolOpt :: SFlags -> SFlags -> MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a | Source

boolOpt' :: OptFlags -> OptFlags -> MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a | Source

trueArg :: SFlags -> LFlags -> Description -> (b -> Flag Bool) -> (Flag Bool -> b -> b) -> OptDescr b | Source

falseArg :: SFlags -> LFlags -> Description -> (b -> Flag Bool) -> (Flag Bool -> b -> b) -> OptDescr b | Source

optionVerbosity :: (flags -> Flag Verbosity) -> (Flag Verbosity -> flags -> flags) -> OptionField flags | Source

Produced by Haddock version 2.4.2