Copyright | Isaac Jones 2003-2004 Duncan Coutts 2007 |
---|---|
License | BSD3 |
Maintainer | cabal-devel@haskell.org |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Distribution.Simple.Setup
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 {}
- emptyGlobalFlags :: GlobalFlags
- defaultGlobalFlags :: GlobalFlags
- globalCommand :: [Command action] -> CommandUI GlobalFlags
- data ConfigFlags = ConfigFlags {
- configArgs :: [String]
- configPrograms_ :: Last' ProgramDb
- configProgramPaths :: [(String, FilePath)]
- configProgramArgs :: [(String, [String])]
- configProgramPathExtra :: NubList FilePath
- configHcFlavor :: Flag CompilerFlavor
- configHcPath :: Flag FilePath
- configHcPkg :: Flag FilePath
- configVanillaLib :: Flag Bool
- configProfLib :: Flag Bool
- configSharedLib :: Flag Bool
- configStaticLib :: Flag Bool
- configDynExe :: Flag Bool
- configProfExe :: Flag Bool
- configProf :: Flag Bool
- configProfDetail :: Flag ProfDetailLevel
- configProfLibDetail :: Flag ProfDetailLevel
- configConfigureArgs :: [String]
- configOptimization :: Flag OptimisationLevel
- configProgPrefix :: Flag PathTemplate
- configProgSuffix :: Flag PathTemplate
- configInstallDirs :: InstallDirs (Flag PathTemplate)
- configScratchDir :: Flag FilePath
- configExtraLibDirs :: [FilePath]
- configExtraFrameworkDirs :: [FilePath]
- configExtraIncludeDirs :: [FilePath]
- configIPID :: Flag String
- configCID :: Flag ComponentId
- configDeterministic :: Flag Bool
- configDistPref :: Flag FilePath
- configCabalFilePath :: Flag FilePath
- configVerbosity :: Flag Verbosity
- configUserInstall :: Flag Bool
- configPackageDBs :: [Maybe PackageDB]
- configGHCiLib :: Flag Bool
- configSplitSections :: Flag Bool
- configSplitObjs :: Flag Bool
- configStripExes :: Flag Bool
- configStripLibs :: Flag Bool
- configConstraints :: [Dependency]
- configDependencies :: [(PackageName, ComponentId)]
- configInstantiateWith :: [(ModuleName, Module)]
- configConfigurationsFlags :: FlagAssignment
- configTests :: Flag Bool
- configBenchmarks :: Flag Bool
- configCoverage :: Flag Bool
- configLibCoverage :: Flag Bool
- configExactConfiguration :: Flag Bool
- configFlagError :: Flag String
- configRelocatable :: Flag Bool
- configDebugInfo :: Flag DebugInfoLevel
- configUseResponseFiles :: Flag Bool
- emptyConfigFlags :: ConfigFlags
- defaultConfigFlags :: ProgramDb -> ConfigFlags
- configureCommand :: ProgramDb -> CommandUI ConfigFlags
- configPrograms :: WithCallStack (ConfigFlags -> ProgramDb)
- configAbsolutePaths :: ConfigFlags -> NoCallStackIO ConfigFlags
- readPackageDbList :: String -> [Maybe PackageDB]
- showPackageDbList :: [Maybe PackageDB] -> [String]
- data CopyFlags = CopyFlags {}
- emptyCopyFlags :: CopyFlags
- defaultCopyFlags :: CopyFlags
- copyCommand :: CommandUI CopyFlags
- data InstallFlags = InstallFlags {}
- emptyInstallFlags :: InstallFlags
- defaultInstallFlags :: InstallFlags
- installCommand :: CommandUI InstallFlags
- data DoctestFlags = DoctestFlags {
- doctestProgramPaths :: [(String, FilePath)]
- doctestProgramArgs :: [(String, [String])]
- doctestDistPref :: Flag FilePath
- doctestVerbosity :: Flag Verbosity
- emptyDoctestFlags :: DoctestFlags
- defaultDoctestFlags :: DoctestFlags
- doctestCommand :: CommandUI DoctestFlags
- data HaddockTarget
- data HaddockFlags = HaddockFlags {
- haddockProgramPaths :: [(String, FilePath)]
- haddockProgramArgs :: [(String, [String])]
- haddockHoogle :: Flag Bool
- haddockHtml :: Flag Bool
- haddockHtmlLocation :: Flag String
- haddockForHackage :: Flag HaddockTarget
- haddockExecutables :: Flag Bool
- haddockTestSuites :: Flag Bool
- haddockBenchmarks :: Flag Bool
- haddockForeignLibs :: Flag Bool
- haddockInternal :: Flag Bool
- haddockCss :: Flag FilePath
- haddockLinkedSource :: Flag Bool
- haddockQuickJump :: Flag Bool
- haddockHscolourCss :: Flag FilePath
- haddockContents :: Flag PathTemplate
- haddockDistPref :: Flag FilePath
- haddockKeepTempFiles :: Flag Bool
- haddockVerbosity :: Flag Verbosity
- haddockCabalFilePath :: Flag FilePath
- haddockArgs :: [String]
- emptyHaddockFlags :: HaddockFlags
- defaultHaddockFlags :: HaddockFlags
- haddockCommand :: CommandUI HaddockFlags
- data HscolourFlags = HscolourFlags {}
- emptyHscolourFlags :: HscolourFlags
- defaultHscolourFlags :: HscolourFlags
- hscolourCommand :: CommandUI HscolourFlags
- data BuildFlags = BuildFlags {
- buildProgramPaths :: [(String, FilePath)]
- buildProgramArgs :: [(String, [String])]
- buildDistPref :: Flag FilePath
- buildVerbosity :: Flag Verbosity
- buildNumJobs :: Flag (Maybe Int)
- buildArgs :: [String]
- buildCabalFilePath :: Flag FilePath
- emptyBuildFlags :: BuildFlags
- defaultBuildFlags :: BuildFlags
- buildCommand :: ProgramDb -> CommandUI BuildFlags
- buildVerbose :: BuildFlags -> Verbosity
- data ReplFlags = ReplFlags {
- replProgramPaths :: [(String, FilePath)]
- replProgramArgs :: [(String, [String])]
- replDistPref :: Flag FilePath
- replVerbosity :: Flag Verbosity
- replReload :: Flag Bool
- replReplOptions :: [String]
- defaultReplFlags :: ReplFlags
- replCommand :: ProgramDb -> CommandUI ReplFlags
- data CleanFlags = CleanFlags {}
- emptyCleanFlags :: CleanFlags
- defaultCleanFlags :: CleanFlags
- cleanCommand :: CommandUI CleanFlags
- data RegisterFlags = RegisterFlags {}
- emptyRegisterFlags :: RegisterFlags
- defaultRegisterFlags :: RegisterFlags
- registerCommand :: CommandUI RegisterFlags
- unregisterCommand :: CommandUI RegisterFlags
- data SDistFlags = SDistFlags {}
- emptySDistFlags :: SDistFlags
- defaultSDistFlags :: SDistFlags
- sdistCommand :: CommandUI SDistFlags
- data TestFlags = TestFlags {}
- emptyTestFlags :: TestFlags
- defaultTestFlags :: TestFlags
- testCommand :: CommandUI TestFlags
- data TestShowDetails
- data BenchmarkFlags = BenchmarkFlags {}
- emptyBenchmarkFlags :: BenchmarkFlags
- defaultBenchmarkFlags :: BenchmarkFlags
- benchmarkCommand :: CommandUI BenchmarkFlags
- data CopyDest
- configureArgs :: Bool -> ConfigFlags -> [String]
- configureOptions :: ShowOrParseArgs -> [OptionField ConfigFlags]
- configureCCompiler :: Verbosity -> ProgramDb -> IO (FilePath, [String])
- configureLinker :: Verbosity -> ProgramDb -> IO (FilePath, [String])
- buildOptions :: ProgramDb -> ShowOrParseArgs -> [OptionField BuildFlags]
- haddockOptions :: ShowOrParseArgs -> [OptionField HaddockFlags]
- installDirsOptions :: [OptionField (InstallDirs (Flag PathTemplate))]
- programDbOptions :: ProgramDb -> ShowOrParseArgs -> (flags -> [(String, [String])]) -> ([(String, [String])] -> flags -> flags) -> [OptionField flags]
- programDbPaths' :: (String -> String) -> ProgramDb -> ShowOrParseArgs -> (flags -> [(String, FilePath)]) -> ([(String, FilePath)] -> flags -> flags) -> [OptionField flags]
- programConfigurationOptions :: ProgramDb -> ShowOrParseArgs -> (flags -> [(String, [String])]) -> ([(String, [String])] -> flags -> flags) -> [OptionField flags]
- programConfigurationPaths' :: (String -> String) -> ProgramDb -> ShowOrParseArgs -> (flags -> [(String, FilePath)]) -> ([(String, FilePath)] -> flags -> flags) -> [OptionField flags]
- programFlagsDescription :: ProgramDb -> String
- replOptions :: ShowOrParseArgs -> [OptionField [String]]
- splitArgs :: String -> [String]
- defaultDistPref :: FilePath
- optionDistPref :: (flags -> Flag FilePath) -> (Flag FilePath -> flags -> flags) -> ShowOrParseArgs -> OptionField flags
- data Flag a
- toFlag :: a -> Flag a
- fromFlag :: WithCallStack (Flag a -> a)
- fromFlagOrDefault :: a -> Flag a -> a
- flagToMaybe :: Flag a -> Maybe a
- flagToList :: Flag a -> [a]
- maybeToFlag :: Maybe a -> Flag a
- class BooleanFlag a where
- 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 :: MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
- falseArg :: MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
- optionVerbosity :: (flags -> Flag Verbosity) -> (Flag Verbosity -> flags -> flags) -> OptionField flags
- optionNumJobs :: (flags -> Flag (Maybe Int)) -> (Flag (Maybe Int) -> flags -> flags) -> OptionField flags
- readPToMaybe :: ReadP a a -> String -> Maybe a
Documentation
data GlobalFlags #
Flags that apply at the top level, not to any sub-command.
Constructors
GlobalFlags | |
Fields |
Instances
Generic GlobalFlags # | |
Defined in Distribution.Simple.Setup Associated Types type Rep GlobalFlags :: * -> * # | |
Semigroup GlobalFlags # | |
Defined in Distribution.Simple.Setup Methods (<>) :: GlobalFlags -> GlobalFlags -> GlobalFlags # sconcat :: NonEmpty GlobalFlags -> GlobalFlags # stimes :: Integral b => b -> GlobalFlags -> GlobalFlags # | |
Monoid GlobalFlags # | |
Defined in Distribution.Simple.Setup Methods mempty :: GlobalFlags # mappend :: GlobalFlags -> GlobalFlags -> GlobalFlags # mconcat :: [GlobalFlags] -> GlobalFlags # | |
type Rep GlobalFlags # | |
Defined in Distribution.Simple.Setup type Rep GlobalFlags = D1 (MetaData "GlobalFlags" "Distribution.Simple.Setup" "Cabal-2.4.0.1-4dDrY0nmi936kgccwkOPil" False) (C1 (MetaCons "GlobalFlags" PrefixI True) (S1 (MetaSel (Just "globalVersion") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag Bool)) :*: S1 (MetaSel (Just "globalNumericVersion") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag Bool)))) |
globalCommand :: [Command action] -> CommandUI GlobalFlags #
data ConfigFlags #
Flags to configure
command.
IMPORTANT: every time a new flag is added, filterConfigureFlags
should be updated.
IMPORTANT: every time a new flag is added, it should be added to the Eq instance
Constructors
ConfigFlags | |
Fields
|
Instances
configPrograms :: WithCallStack (ConfigFlags -> ProgramDb) #
More convenient version of configPrograms
. Results in an
error
if internal invariant is violated.
readPackageDbList :: String -> [Maybe PackageDB] #
showPackageDbList :: [Maybe PackageDB] -> [String] #
Flags to copy
: (destdir, copy-prefix (backwards compat), verbosity)
Constructors
CopyFlags | |
Fields
|
Instances
Show CopyFlags # | |
Generic CopyFlags # | |
Semigroup CopyFlags # | |
Monoid CopyFlags # | |
type Rep CopyFlags # | |
Defined in Distribution.Simple.Setup type Rep CopyFlags = D1 (MetaData "CopyFlags" "Distribution.Simple.Setup" "Cabal-2.4.0.1-4dDrY0nmi936kgccwkOPil" False) (C1 (MetaCons "CopyFlags" PrefixI True) ((S1 (MetaSel (Just "copyDest") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag CopyDest)) :*: S1 (MetaSel (Just "copyDistPref") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag FilePath))) :*: (S1 (MetaSel (Just "copyVerbosity") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag Verbosity)) :*: (S1 (MetaSel (Just "copyArgs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]) :*: S1 (MetaSel (Just "copyCabalFilePath") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag FilePath)))))) |
data InstallFlags #
Flags to install
: (package db, verbosity)
Constructors
InstallFlags | |
Fields |
Instances
data DoctestFlags #
Constructors
DoctestFlags | |
Fields
|
Instances
data HaddockTarget #
When we build haddock documentation, there are two cases:
- We build haddocks only for the current development version,
intended for local use and not for distribution. In this case,
we store the generated documentation in
distdochtml/name
. - We build haddocks for intended for uploading them to hackage.
In this case, we need to follow the layout that hackage expects
from documentation tarballs, and we might also want to use different
flags than for development builds, so in this case we store the generated
documentation in
distdochtml/id-docs
.
Constructors
ForHackage | |
ForDevelopment |
Instances
Eq HaddockTarget # | |
Defined in Distribution.Simple.Setup Methods (==) :: HaddockTarget -> HaddockTarget -> Bool # (/=) :: HaddockTarget -> HaddockTarget -> Bool # | |
Show HaddockTarget # | |
Defined in Distribution.Simple.Setup Methods showsPrec :: Int -> HaddockTarget -> ShowS # show :: HaddockTarget -> String # showList :: [HaddockTarget] -> ShowS # | |
Generic HaddockTarget # | |
Defined in Distribution.Simple.Setup Associated Types type Rep HaddockTarget :: * -> * # | |
Binary HaddockTarget # | |
Defined in Distribution.Simple.Setup | |
Text HaddockTarget # | |
Defined in Distribution.Simple.Setup | |
type Rep HaddockTarget # | |
data HaddockFlags #
Constructors
HaddockFlags | |
Fields
|
Instances
data HscolourFlags #
Constructors
HscolourFlags | |
Instances
data BuildFlags #
Constructors
BuildFlags | |
Fields
|
Instances
buildVerbose :: BuildFlags -> Verbosity #
Deprecated: Use buildVerbosity instead
Constructors
ReplFlags | |
Fields
|
Instances
Show ReplFlags # | |
Generic ReplFlags # | |
Semigroup ReplFlags # | |
Monoid ReplFlags # | |
type Rep ReplFlags # | |
Defined in Distribution.Simple.Setup type Rep ReplFlags = D1 (MetaData "ReplFlags" "Distribution.Simple.Setup" "Cabal-2.4.0.1-4dDrY0nmi936kgccwkOPil" False) (C1 (MetaCons "ReplFlags" PrefixI True) ((S1 (MetaSel (Just "replProgramPaths") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(String, FilePath)]) :*: (S1 (MetaSel (Just "replProgramArgs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(String, [String])]) :*: S1 (MetaSel (Just "replDistPref") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag FilePath)))) :*: (S1 (MetaSel (Just "replVerbosity") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag Verbosity)) :*: (S1 (MetaSel (Just "replReload") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Flag Bool)) :*: S1 (MetaSel (Just "replReplOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]))))) |
replCommand :: ProgramDb -> CommandUI ReplFlags #
data CleanFlags #
Constructors
CleanFlags | |
Fields |
Instances
data RegisterFlags #
Flags to register
and unregister
: (user package, gen-script,
in-place, verbosity)
Constructors
RegisterFlags | |
Fields
|
Instances
data SDistFlags #
Flags to sdist
: (snapshot, verbosity)
Constructors
SDistFlags | |
Fields |
Instances
Constructors
TestFlags | |
Fields |
Instances
data TestShowDetails #
Instances
data BenchmarkFlags #
Constructors
BenchmarkFlags | |
Fields |
Instances
The location prefix for the copy command.
Constructors
NoCopyDest | |
CopyTo FilePath | |
CopyToDb FilePath | when using the ${pkgroot} as prefix. The CopyToDb will adjust the paths to be relative to the provided package database when copying / installing. |
Instances
Eq CopyDest # | |
Show CopyDest # | |
Generic CopyDest # | |
Binary CopyDest # | |
type Rep CopyDest # | |
Defined in Distribution.Simple.InstallDirs type Rep CopyDest = D1 (MetaData "CopyDest" "Distribution.Simple.InstallDirs" "Cabal-2.4.0.1-4dDrY0nmi936kgccwkOPil" False) (C1 (MetaCons "NoCopyDest" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "CopyTo" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 FilePath)) :+: C1 (MetaCons "CopyToDb" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 FilePath)))) |
configureArgs :: Bool -> ConfigFlags -> [String] #
Arguments to pass to a configure
script, e.g. generated by
autoconf
.
buildOptions :: ProgramDb -> ShowOrParseArgs -> [OptionField BuildFlags] #
programDbOptions :: ProgramDb -> ShowOrParseArgs -> (flags -> [(String, [String])]) -> ([(String, [String])] -> flags -> flags) -> [OptionField flags] #
For each known program PROG
in progDb
, produce a PROG-options
OptionField
.
programDbPaths' :: (String -> String) -> ProgramDb -> ShowOrParseArgs -> (flags -> [(String, FilePath)]) -> ([(String, FilePath)] -> flags -> flags) -> [OptionField flags] #
Like programDbPaths
, but allows to customise the option name.
programConfigurationOptions :: ProgramDb -> ShowOrParseArgs -> (flags -> [(String, [String])]) -> ([(String, [String])] -> flags -> flags) -> [OptionField flags] #
Deprecated: Use programDbOptions instead
For each known program PROG
in progDb
, produce a PROG-options
OptionField
.
programConfigurationPaths' :: (String -> String) -> ProgramDb -> ShowOrParseArgs -> (flags -> [(String, FilePath)]) -> ([(String, FilePath)] -> flags -> flags) -> [OptionField flags] #
Deprecated: Use programDbPaths' instead
Like programDbPaths
, but allows to customise the option name.
replOptions :: ShowOrParseArgs -> [OptionField [String]] #
splitArgs :: String -> [String] #
Helper function to split a string into a list of arguments. It's supposed to handle quoted things sensibly, eg:
splitArgs "--foo=\"C:/Program Files/Bar/" --baz" = ["--foo=C:/Program Files/Bar", "--baz"]
splitArgs "\"-DMSGSTR=\\\"foo bar\\\"\" --baz" = ["-DMSGSTR=\"foo bar\"","--baz"]
optionDistPref :: (flags -> Flag FilePath) -> (Flag FilePath -> flags -> flags) -> ShowOrParseArgs -> OptionField flags #
All flags are monoids, they come in two flavours:
- list flags eg
--ghc-option=foo --ghc-option=bar
gives us all the values ["foo", "bar"]
- 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.
Instances
Functor Flag # | |
Applicative Flag # | |
Bounded a => Bounded (Flag a) # | |
Enum a => Enum (Flag a) # | |
Defined in Distribution.Simple.Flag | |
Eq a => Eq (Flag a) # | |
Read a => Read (Flag a) # | |
Show a => Show (Flag a) # | |
Generic (Flag a) # | |
Semigroup (Flag a) # | |
Monoid (Flag a) # | |
Binary a => Binary (Flag a) # | |
type Rep (Flag a) # | |
Defined in Distribution.Simple.Flag type Rep (Flag a) = D1 (MetaData "Flag" "Distribution.Simple.Flag" "Cabal-2.4.0.1-4dDrY0nmi936kgccwkOPil" False) (C1 (MetaCons "Flag" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)) :+: C1 (MetaCons "NoFlag" PrefixI False) (U1 :: * -> *)) |
fromFlag :: WithCallStack (Flag a -> a) #
fromFlagOrDefault :: a -> Flag a -> a #
flagToMaybe :: Flag a -> Maybe a #
flagToList :: Flag a -> [a] #
maybeToFlag :: Maybe a -> Flag a #
class BooleanFlag a where #
Types that represent boolean flags.
Minimal complete definition
Instances
BooleanFlag Bool # | |
Defined in Distribution.Simple.Flag |
optionVerbosity :: (flags -> Flag Verbosity) -> (Flag Verbosity -> flags -> flags) -> OptionField flags #
optionNumJobs :: (flags -> Flag (Maybe Int)) -> (Flag (Maybe Int) -> flags -> flags) -> OptionField flags #
readPToMaybe :: ReadP a a -> String -> Maybe a #