diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index eac396f6d0e..c3b1b48acdc 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -209,6 +209,7 @@ library Distribution.Client.Types Distribution.Client.Types.AllowNewer Distribution.Client.Types.BuildResults + Distribution.Client.Types.CurrentCommand Distribution.Client.Types.ConfiguredId Distribution.Client.Types.ConfiguredPackage Distribution.Client.Types.Credentials diff --git a/cabal-install/src/Distribution/Client/CmdHaddock.hs b/cabal-install/src/Distribution/Client/CmdHaddock.hs index f9be5763b3b..4bf57f17909 100644 --- a/cabal-install/src/Distribution/Client/CmdHaddock.hs +++ b/cabal-install/src/Distribution/Client/CmdHaddock.hs @@ -34,7 +34,6 @@ import Distribution.Client.ProjectPlanning ) import Distribution.Client.Setup ( GlobalFlags - , InstallFlags (..) ) import Distribution.Client.TargetProblem ( TargetProblem (..) @@ -150,9 +149,7 @@ haddockAction relFlags targetStrings globalFlags = do let verbosity = cfgVerbosity normal flags - installDoc = fromFlagOrDefault True (installDocumentation installFlags) - flags' = flags{installFlags = installFlags{installDocumentation = Flag installDoc}} - cliConfig = commandLineFlagsToProjectConfig globalFlags flags' mempty -- ClientInstallFlags, not needed here + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here projCtx <- establishProjectBaseContext verbosity cliConfig HaddockCommand let relBaseCtx@ProjectBaseContext{projectConfig = relProjectConfig} diff --git a/cabal-install/src/Distribution/Client/Install.hs b/cabal-install/src/Distribution/Client/Install.hs index 635cd7e1689..ea475aa64d3 100644 --- a/cabal-install/src/Distribution/Client/Install.hs +++ b/cabal-install/src/Distribution/Client/Install.hs @@ -1263,7 +1263,7 @@ regenerateHaddockIndex | otherwise = return () where haddockIndexFileIsRequested = - fromFlag (installDocumentation installFlags) + fromFlagOrDefault False (installDocumentation installFlags) && isJust (flagToMaybe (installHaddockIndex installFlags)) -- We want to regenerate the index if some new documentation was actually @@ -1889,7 +1889,7 @@ installUnpackedPackage buildFlags vers = emptyBuildFlags{buildCommonFlags = commonFlags vers} - shouldHaddock = fromFlag (installDocumentation installFlags) + shouldHaddock = fromFlagOrDefault False (installDocumentation installFlags) haddockFlags' vers = haddockFlags{haddockCommonFlags = commonFlags vers} testsEnabled = diff --git a/cabal-install/src/Distribution/Client/ProjectOrchestration.hs b/cabal-install/src/Distribution/Client/ProjectOrchestration.hs index 9b12f570252..0f2f11596e3 100644 --- a/cabal-install/src/Distribution/Client/ProjectOrchestration.hs +++ b/cabal-install/src/Distribution/Client/ProjectOrchestration.hs @@ -135,7 +135,8 @@ import Distribution.Client.TargetSelector , reportTargetSelectorProblems ) import Distribution.Client.Types - ( DocsResult (..) + ( CurrentCommand (..) + , DocsResult (..) , GenericReadyPackage (..) , PackageLocation (..) , PackageSpecifier (..) @@ -230,11 +231,6 @@ import System.Posix.Signals (sigKILL, sigSEGV) #endif --- | Tracks what command is being executed, because we need to hide this somewhere --- for cases that need special handling (usually for error reporting). -data CurrentCommand = InstallCommand | HaddockCommand | BuildCommand | ReplCommand | OtherCommand - deriving (Show, Eq) - -- | This holds the context of a project prior to solving: the content of the -- @cabal.project@, @cabal/config@ and all the local package @.cabal@ files. data ProjectBaseContext = ProjectBaseContext @@ -286,6 +282,7 @@ establishProjectBaseContextWithRoot verbosity cliConfig projectRoot currentComma httpTransport distDirLayout cliConfig + currentCommand let ProjectConfigBuildOnly { projectConfigLogsDir diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 246585ca096..c7e1319b679 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -354,6 +354,7 @@ rebuildProjectConfig -> HttpTransport -> DistDirLayout -> ProjectConfig + -> CurrentCommand -> IO ( ProjectConfig , [PackageSpecifier UnresolvedSourcePackage] @@ -368,7 +369,8 @@ rebuildProjectConfig , distProjectCacheDirectory , distProjectFile } - cliConfig = do + cliConfig + currentCommand = do progsearchpath <- liftIO $ getSystemSearchPath let fileMonitorProjectConfig = newFileMonitor (distProjectCacheFile "config") @@ -415,7 +417,7 @@ rebuildProjectConfig notice (verboseStderr verbosity) . render . vcat $ text "Configuration is affected by the following files:" : configfiles - return (projectConfig <> cliConfig, localPackages) + return (commandDefaults currentCommand <> projectConfig <> cliConfig, localPackages) where ProjectConfigShared{projectConfigHcFlavor, projectConfigHcPath, projectConfigHcPkg, projectConfigIgnoreProject, projectConfigConfigFile} = projectConfigShared cliConfig @@ -423,6 +425,15 @@ rebuildProjectConfig PackageConfig{packageConfigProgramPaths, packageConfigProgramPathExtra} = projectConfigLocalPackages cliConfig + -- Some commands may require special defaults + commandDefaults HaddockCommand = + -- `cabal haddock` emplies --enable-documentation, #7462 + mempty + { projectConfigAllPackages = mempty{packageConfigDocumentation = pure True} + , projectConfigLocalPackages = mempty{packageConfigDocumentation = pure True} + } + commandDefaults _ = mempty + -- Read the cabal.project (or implicit config) and combine it with -- arguments from the command line -- diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index 81f2d69ff0a..1a5ffa53a03 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -2275,7 +2275,7 @@ instance Binary InstallFlags defaultInstallFlags :: InstallFlags defaultInstallFlags = InstallFlags - { installDocumentation = Flag False + { installDocumentation = mempty , installHaddockIndex = Flag docIndexFile , installDest = Flag Cabal.NoCopyDest , installDryRun = Flag False diff --git a/cabal-install/src/Distribution/Client/Types.hs b/cabal-install/src/Distribution/Client/Types.hs index 841a4dbc9d2..296d56a8622 100644 --- a/cabal-install/src/Distribution/Client/Types.hs +++ b/cabal-install/src/Distribution/Client/Types.hs @@ -17,6 +17,7 @@ -- Various common data types for the entire cabal-install system module Distribution.Client.Types ( module Distribution.Client.Types.AllowNewer + , module Distribution.Client.Types.CurrentCommand , module Distribution.Client.Types.ConfiguredId , module Distribution.Client.Types.ConfiguredPackage , module Distribution.Client.Types.BuildResults @@ -33,6 +34,7 @@ import Distribution.Client.Types.AllowNewer import Distribution.Client.Types.BuildResults import Distribution.Client.Types.ConfiguredId import Distribution.Client.Types.ConfiguredPackage +import Distribution.Client.Types.CurrentCommand import Distribution.Client.Types.PackageLocation import Distribution.Client.Types.PackageSpecifier import Distribution.Client.Types.ReadyPackage diff --git a/cabal-install/src/Distribution/Client/Types/CurrentCommand.hs b/cabal-install/src/Distribution/Client/Types/CurrentCommand.hs new file mode 100644 index 00000000000..9a464133574 --- /dev/null +++ b/cabal-install/src/Distribution/Client/Types/CurrentCommand.hs @@ -0,0 +1,6 @@ +module Distribution.Client.Types.CurrentCommand where + +-- | Tracks what command is being executed, because we need to hide this somewhere +-- for cases that need special handling (usually for error reporting). +data CurrentCommand = InstallCommand | HaddockCommand | BuildCommand | ReplCommand | OtherCommand + deriving (Show, Eq) diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index 69c4134f142..cbc910c717a 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -33,7 +33,8 @@ import Distribution.Client.Targets , UserConstraintScope (UserAnyQualifier) ) import Distribution.Client.Types - ( PackageLocation (..) + ( CurrentCommand (..) + , PackageLocation (..) , PackageSpecifier (..) , UnresolvedSourcePackage ) @@ -2186,6 +2187,7 @@ configureProject testdir cliConfig = do httpTransport distDirLayout cliConfig + OtherCommand let buildSettings = resolveBuildTimeSettings