Copyright |
Isaac Jones 2003-2004
Duncan Coutts 2007 |
---|---|
License | BSD3 |
Maintainer | cabal-devel@haskell.org |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
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_ :: Option' ( 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
- configFullyStaticExe :: 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 :: [ GivenComponent ]
- 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
- configAllowDependingOnPrivateLibs :: 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
{
- copyDest :: Flag CopyDest
- copyDistPref :: Flag FilePath
- copyVerbosity :: Flag Verbosity
- copyArgs :: [ String ]
- copyCabalFilePath :: Flag FilePath
- 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
- data ShowBuildInfoFlags = ShowBuildInfoFlags { }
- defaultShowBuildFlags :: ShowBuildInfoFlags
- showBuildInfoCommand :: ProgramDb -> CommandUI ShowBuildInfoFlags
-
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
{
- regPackageDB :: Flag PackageDB
- regGenScript :: Flag Bool
- regGenPkgConf :: Flag ( Maybe FilePath )
- regInPlace :: Flag Bool
- regDistPref :: Flag FilePath
- regPrintId :: Flag Bool
- regVerbosity :: Flag Verbosity
- regArgs :: [ String ]
- regCabalFilePath :: Flag FilePath
- 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
- = NoCopyDest
- | CopyTo FilePath
- | CopyToDb FilePath
- 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 ))]
- testOptions' :: ShowOrParseArgs -> [ OptionField TestFlags ]
- benchmarkOptions' :: ShowOrParseArgs -> [ OptionField BenchmarkFlags ]
- 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]
- 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
Documentation
data GlobalFlags Source #
Flags that apply at the top level, not to any sub-command.
Instances
globalCommand :: [ Command action] -> CommandUI GlobalFlags Source #
data ConfigFlags Source #
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
ConfigFlags | |
|
Instances
configPrograms :: WithCallStack ( ConfigFlags -> ProgramDb ) Source #
More convenient version of
configPrograms
. Results in an
error
if internal invariant is violated.
Flags to
copy
: (destdir, copy-prefix (backwards compat), verbosity)
CopyFlags | |
|
Instances
Show CopyFlags Source # | |
Generic CopyFlags Source # | |
Semigroup CopyFlags Source # | |
Monoid CopyFlags Source # | |
type Rep CopyFlags Source # | |
Defined in Distribution.Simple.Setup
type
Rep
CopyFlags
=
D1
('
MetaData
"CopyFlags" "Distribution.Simple.Setup" "Cabal-3.2.1.0-3w1fQQbNnuQ5xlFGwVXcPy" '
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 Source #
Flags to
install
: (package db, verbosity)
Instances
data DoctestFlags Source #
DoctestFlags | |
|
Instances
data HaddockTarget Source #
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
dist doc html/ 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
dist doc html/ id -docs
.
Instances
data HaddockFlags Source #
HaddockFlags | |
|
Instances
data HscolourFlags Source #
Instances
data BuildFlags Source #
BuildFlags | |
|
Instances
data ShowBuildInfoFlags Source #
Instances
Show ShowBuildInfoFlags Source # | |
Defined in Distribution.Simple.Setup |
ReplFlags | |
|
Instances
data CleanFlags Source #
Instances
data RegisterFlags Source #
Flags to
register
and
unregister
: (user package, gen-script,
in-place, verbosity)
RegisterFlags | |
|
Instances
data SDistFlags Source #
Flags to
sdist
: (snapshot, verbosity)
Instances
Instances
data TestShowDetails Source #
Instances
data BenchmarkFlags Source #
Instances
The location prefix for the copy command.
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 Source # | |
Show CopyDest Source # | |
Generic CopyDest Source # | |
Binary CopyDest Source # | |
type Rep CopyDest Source # | |
Defined in Distribution.Simple.InstallDirs
type
Rep
CopyDest
=
D1
('
MetaData
"CopyDest" "Distribution.Simple.InstallDirs" "Cabal-3.2.1.0-3w1fQQbNnuQ5xlFGwVXcPy" '
False
) (
C1
('
MetaCons
"NoCopyDest" '
PrefixI
'
False
) (
U1
::
Type
->
Type
)
:+:
(
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 ] Source #
Arguments to pass to a
configure
script, e.g. generated by
autoconf
.
configureOptions :: ShowOrParseArgs -> [ OptionField ConfigFlags ] Source #
buildOptions :: ProgramDb -> ShowOrParseArgs -> [ OptionField BuildFlags ] Source #
haddockOptions :: ShowOrParseArgs -> [ OptionField HaddockFlags ] Source #
installDirsOptions :: [ OptionField ( InstallDirs ( Flag PathTemplate ))] Source #
testOptions' :: ShowOrParseArgs -> [ OptionField TestFlags ] Source #
programDbOptions :: ProgramDb -> ShowOrParseArgs -> (flags -> [( String , [ String ])]) -> ([( String , [ String ])] -> flags -> flags) -> [ OptionField flags] Source #
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] Source #
Like
programDbPaths
, but allows to customise the option name.
replOptions :: ShowOrParseArgs -> [ OptionField [ String ]] Source #
splitArgs :: String -> [ String ] Source #
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 Source #
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
fromFlag :: WithCallStack ( Flag a -> a) Source #
fromFlagOrDefault :: a -> Flag a -> a Source #
flagToMaybe :: Flag a -> Maybe a Source #
flagToList :: Flag a -> [a] Source #
maybeToFlag :: Maybe a -> Flag a Source #
class BooleanFlag a where Source #
Types that represent boolean flags.
Instances
optionVerbosity :: (flags -> Flag Verbosity ) -> ( Flag Verbosity -> flags -> flags) -> OptionField flags Source #
optionNumJobs :: (flags -> Flag ( Maybe Int )) -> ( Flag ( Maybe Int ) -> flags -> flags) -> OptionField flags Source #