diff --git a/Cabal/src/Distribution/Simple/BuildPaths.hs b/Cabal/src/Distribution/Simple/BuildPaths.hs index 05a9c6c190f..0875de87c91 100644 --- a/Cabal/src/Distribution/Simple/BuildPaths.hs +++ b/Cabal/src/Distribution/Simple/BuildPaths.hs @@ -19,6 +19,9 @@ module Distribution.Simple.BuildPaths , srcPref , buildInfoPref , haddockDirName + , haddockLibraryDirPath + , haddockTestDirPath + , haddockBenchmarkDirPath , hscolourPref , haddockPref , autogenPackageModulesDir @@ -26,7 +29,11 @@ module Distribution.Simple.BuildPaths , autogenPathsModuleName , autogenPackageInfoModuleName , cppHeaderName - , haddockName + , haddockPath + , haddockPackageLibraryName + , haddockPackageLibraryName' + , haddockLibraryName + , haddockLibraryPath , mkGenericStaticLibName , mkLibName , mkProfLibName @@ -44,6 +51,8 @@ module Distribution.Simple.BuildPaths , getSourceFiles , getLibSourceFiles , getExeSourceFiles + , getTestSourceFiles + , getBenchmarkSourceFiles , getFLibSourceFiles , exeBuildDir , flibBuildDir @@ -92,10 +101,44 @@ buildInfoPref distPref = distPref makeRelativePathEx "build-info.json" -- | This is the name of the directory in which the generated haddocks -- should be stored. It does not include the @/doc/html@ prefix. +-- +-- It is also used by `haddock-project` when constructing its output directory. haddockDirName :: HaddockTarget -> PackageDescription -> FilePath haddockDirName ForDevelopment = prettyShow . packageName haddockDirName ForHackage = (++ "-docs") . prettyShow . packageId +-- | This is the name of the directory in which the generated haddocks for +-- a (sub)library should be stored. It does not include the @/doc/html@ +-- prefix. +-- +-- It is also used by `haddock-project` when constructing its output directory. +haddockLibraryDirPath + :: HaddockTarget + -> PackageDescription + -> Library + -> FilePath +haddockLibraryDirPath haddockTarget pkg_descr lib = + case libName lib of + LSubLibName sublib_name -> + haddockDirName haddockTarget pkg_descr prettyShow sublib_name + _ -> haddockDirName haddockTarget pkg_descr + +haddockTestDirPath + :: HaddockTarget + -> PackageDescription + -> TestSuite + -> FilePath +haddockTestDirPath haddockTarget pkg_descr test = + haddockDirName haddockTarget pkg_descr prettyShow (testName test) + +haddockBenchmarkDirPath + :: HaddockTarget + -> PackageDescription + -> Benchmark + -> FilePath +haddockBenchmarkDirPath haddockTarget pkg_descr bench = + haddockDirName haddockTarget pkg_descr prettyShow (benchmarkName bench) + -- | The directory to which generated haddock documentation should be written. haddockPref :: HaddockTarget @@ -139,8 +182,35 @@ autogenPackageInfoModuleName pkg_descr = fixchar '-' = '_' fixchar c = c -haddockName :: PackageDescription -> FilePath -haddockName pkg_descr = prettyShow (packageName pkg_descr) <.> "haddock" +haddockPath :: PackageDescription -> FilePath +haddockPath pkg_descr = prettyShow (packageName pkg_descr) <.> "haddock" + +-- | A name of a (sub)library used by haddock, in the form +-- `:` if it is a sublibrary, or `` if it is the +-- main library. +-- +-- Used by `haddock-project` and `Distribution.Simple.Haddock`. +haddockPackageLibraryName :: PackageDescription -> Library -> String +haddockPackageLibraryName pkg_descr lib = + haddockPackageLibraryName' (packageName pkg_descr) (libName lib) + +haddockPackageLibraryName' :: PackageName -> LibraryName -> String +haddockPackageLibraryName' pkg_name lib_name = + case lib_name of + LSubLibName sublib_name -> + prettyShow pkg_name ++ ":" ++ prettyShow sublib_name + LMainLibName -> prettyShow pkg_name + +-- | A name of a (sub)library used by haddock. +haddockLibraryName :: PackageDescription -> Library -> String +haddockLibraryName pkg_descr lib = + case libName lib of + LSubLibName sublib_name -> prettyShow sublib_name + LMainLibName -> prettyShow (packageName pkg_descr) + +-- | File path of the ".haddock" file. +haddockLibraryPath :: PackageDescription -> Library -> FilePath +haddockLibraryPath pkg_descr lib = haddockLibraryName pkg_descr lib <.> "haddock" -- ----------------------------------------------------------------------------- -- Source File helper @@ -184,6 +254,48 @@ getExeSourceFiles verbosity lbi exe clbi = do : coerceSymbolicPath (exeBuildDir lbi exe) : hsSourceDirs bi +getTestSourceFiles + :: Verbosity + -> LocalBuildInfo + -> TestSuite + -> ComponentLocalBuildInfo + -> IO [(ModuleName.ModuleName, SymbolicPath Pkg 'File)] +getTestSourceFiles verbosity lbi test@TestSuite{testInterface = TestSuiteExeV10 _ path} clbi = do + moduleFiles <- getSourceFiles verbosity mbWorkDir searchpaths modules + srcMainPath <- findFileCwd verbosity mbWorkDir (hsSourceDirs bi) path + return ((ModuleName.main, srcMainPath) : moduleFiles) + where + mbWorkDir = mbWorkDirLBI lbi + bi = testBuildInfo test + modules = otherModules bi + searchpaths = + autogenComponentModulesDir lbi clbi + : autogenPackageModulesDir lbi + : coerceSymbolicPath (testBuildDir lbi test) + : hsSourceDirs bi +getTestSourceFiles _ _ _ _ = return [] + +getBenchmarkSourceFiles + :: Verbosity + -> LocalBuildInfo + -> Benchmark + -> ComponentLocalBuildInfo + -> IO [(ModuleName.ModuleName, SymbolicPath Pkg 'File)] +getBenchmarkSourceFiles verbosity lbi bench@Benchmark{benchmarkInterface = BenchmarkExeV10 _ path} clbi = do + moduleFiles <- getSourceFiles verbosity mbWorkDir searchpaths modules + srcMainPath <- findFileCwd verbosity mbWorkDir (hsSourceDirs bi) path + return ((ModuleName.main, srcMainPath) : moduleFiles) + where + mbWorkDir = mbWorkDirLBI lbi + bi = benchmarkBuildInfo bench + modules = otherModules bi + searchpaths = + autogenComponentModulesDir lbi clbi + : autogenPackageModulesDir lbi + : coerceSymbolicPath (benchmarkBuildDir lbi bench) + : hsSourceDirs bi +getBenchmarkSourceFiles _ _ _ _ = return [] + getFLibSourceFiles :: Verbosity -> LocalBuildInfo diff --git a/Cabal/src/Distribution/Simple/Haddock.hs b/Cabal/src/Distribution/Simple/Haddock.hs index 657991e16b1..ba025a85549 100644 --- a/Cabal/src/Distribution/Simple/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Haddock.hs @@ -92,6 +92,7 @@ import Distribution.Verbosity import Distribution.Version import Control.Monad +import Data.Bool (bool) import Data.Either (rights) import System.Directory (doesDirectoryExist, doesFileExist) import System.FilePath (isAbsolute, normalise) @@ -107,6 +108,9 @@ data HaddockArgs = HaddockArgs -- ^ Path to the interface file, relative to argOutputDir, required. , argPackageName :: Flag PackageIdentifier -- ^ Package name, required. + , argComponentName :: Flag String + -- ^ Optional name used to construct haddock's `--package-name` option for + -- various components (tests suites, sublibriaries, etc). , argHideModules :: (All, [ModuleName.ModuleName]) -- ^ (Hide modules ?, modules to hide) , argIgnoreExports :: Any @@ -152,6 +156,8 @@ data HaddockArgs = HaddockArgs -- ^ Modules to process. , argResourcesDir :: Flag String -- ^ haddock's static \/ auxiliary files. + , argUseUnicode :: Flag Bool + -- ^ haddock's `--use-unicode` flag } deriving (Generic) @@ -369,8 +375,10 @@ haddock_setupHooks lbi' clbi htmlTemplate + haddockTarget + pkg_descr exe - let exeArgs' = commonArgs `mappend` exeArgs + commonArgs runHaddock verbosity mbWorkDir @@ -379,7 +387,7 @@ haddock_setupHooks platform haddockProg True - exeArgs' + exeArgs Nothing -> do warn verbosity @@ -406,9 +414,19 @@ haddock_setupHooks lbi' clbi htmlTemplate + haddockTarget + pkg_descr lib - let libArgs' = commonArgs `mappend` libArgs - runHaddock verbosity mbWorkDir tmpFileOpts comp platform haddockProg True libArgs' + commonArgs + runHaddock + verbosity + mbWorkDir + tmpFileOpts + comp + platform + haddockProg + True + libArgs inplaceDir <- absoluteWorkingDirLBI lbi let @@ -450,21 +468,78 @@ haddock_setupHooks lbi' clbi htmlTemplate + haddockTarget + pkg_descr flib - let libArgs' = commonArgs `mappend` flibArgs - runHaddock verbosity mbWorkDir tmpFileOpts comp platform haddockProg True libArgs' + commonArgs + runHaddock + verbosity + mbWorkDir + tmpFileOpts + comp + platform + haddockProg + True + flibArgs ) >> return index CExe _ -> when (flag haddockExecutables) (smsg >> doExe component) >> return index - CTest _ -> when (flag haddockTestSuites) (smsg >> doExe component) >> return index - CBench _ -> when (flag haddockBenchmarks) (smsg >> doExe component) >> return index + CTest test -> do + when (flag haddockTestSuites) $ do + smsg + testArgs <- + fromTest + verbosity + haddockArtifactsDirs + lbi' + clbi + htmlTemplate + haddockTarget + pkg_descr + test + commonArgs + runHaddock + verbosity + mbWorkDir + tmpFileOpts + comp + platform + haddockProg + True + testArgs + return index + CBench bench -> do + when (flag haddockBenchmarks) $ do + smsg + benchArgs <- + fromBenchmark + verbosity + haddockArtifactsDirs + lbi' + clbi + htmlTemplate + haddockTarget + pkg_descr + bench + commonArgs + runHaddock + verbosity + mbWorkDir + tmpFileOpts + comp + platform + haddockProg + True + benchArgs + return index return ipi for_ (extraDocFiles pkg_descr) $ \fpath -> do files <- matchDirFileGlob verbosity (specVersion pkg_descr) mbWorkDir fpath + let targetDir = Dir $ unDir' (argOutputDir commonArgs) haddockDirName haddockTarget pkg_descr for_ files $ - copyFileToCwd verbosity mbWorkDir (unDir $ argOutputDir commonArgs) + copyFileToCwd verbosity mbWorkDir (unDir targetDir) -- | Execute 'Haddock' configured with 'HaddocksFlags'. It is used to build -- index and contents for documentation of multiple packages. @@ -528,6 +603,7 @@ fromFlags env flags = os -> os , argOutputDir = maybe mempty (Dir . getSymbolicPath) . flagToMaybe $ setupDistPref commonFlags , argGhcOptions = mempty{ghcOptExtra = ghcArgs} + , argUseUnicode = haddockUseUnicode flags } where ghcArgs = fromMaybe [] . lookup "ghc" . haddockProgramArgs $ flags @@ -547,13 +623,11 @@ fromHaddockProjectFlags flags = } fromPackageDescription :: HaddockTarget -> PackageDescription -> HaddockArgs -fromPackageDescription haddockTarget pkg_descr = +fromPackageDescription _haddockTarget pkg_descr = mempty - { argInterfaceFile = Flag $ haddockName pkg_descr + { argInterfaceFile = Flag $ haddockPath pkg_descr , argPackageName = Flag $ packageId $ pkg_descr - , argOutputDir = - Dir $ - "doc" "html" haddockDirName haddockTarget pkg_descr + , argOutputDir = Dir $ "doc" "html" , argPrologue = Flag $ ShortText.fromShortText $ @@ -674,9 +748,13 @@ fromLibrary -> ComponentLocalBuildInfo -> Maybe PathTemplate -- ^ template for HTML location + -> HaddockTarget + -> PackageDescription -> Library + -> HaddockArgs + -- ^ common args -> IO HaddockArgs -fromLibrary verbosity haddockArtifactsDirs lbi clbi htmlTemplate lib = do +fromLibrary verbosity haddockArtifactsDirs lbi clbi htmlTemplate haddockTarget pkg_descr lib commonArgs = do inFiles <- map snd `fmap` getLibSourceFiles verbosity lbi lib clbi args <- mkHaddockArgs @@ -687,10 +765,30 @@ fromLibrary verbosity haddockArtifactsDirs lbi clbi htmlTemplate lib = do htmlTemplate inFiles (libBuildInfo lib) - return - args - { argHideModules = (mempty, otherModules (libBuildInfo lib)) - } + let args' = + commonArgs + <> args + { argOutputDir = + Dir $ haddockLibraryDirPath haddockTarget pkg_descr lib + , argInterfaceFile = Flag $ haddockLibraryPath pkg_descr lib + } + args'' = + args' + { argHideModules = (mempty, otherModules (libBuildInfo lib)) + , argTitle = Flag $ haddockPackageLibraryName pkg_descr lib + , argComponentName = toFlag (haddockPackageLibraryName' (pkgName (package pkg_descr)) (libName lib)) + , -- we need to accommodate for `argOutputDir`, see `haddockLibraryPath` + argBaseUrl = case (libName lib, argBaseUrl args') of + (LSubLibName _, Flag url) -> Flag $ ".." url + (_, a) -> a + , argContents = case (libName lib, argContents args') of + (LSubLibName _, Flag url) -> Flag $ ".." url + (_, a) -> a + , argIndex = case (libName lib, argIndex args') of + (LSubLibName _, Flag url) -> Flag $ ".." url + (_, a) -> a + } + return args'' fromExecutable :: Verbosity @@ -701,9 +799,13 @@ fromExecutable -> ComponentLocalBuildInfo -> Maybe PathTemplate -- ^ template for HTML location + -> HaddockTarget + -> PackageDescription -> Executable + -> HaddockArgs + -- ^ common args -> IO HaddockArgs -fromExecutable verbosity haddockArtifactsDirs lbi clbi htmlTemplate exe = do +fromExecutable verbosity haddockArtifactsDirs lbi clbi htmlTemplate haddockTarget pkg_descr exe commonArgs = do inFiles <- map snd `fmap` getExeSourceFiles verbosity lbi exe clbi args <- mkHaddockArgs @@ -714,10 +816,127 @@ fromExecutable verbosity haddockArtifactsDirs lbi clbi htmlTemplate exe = do htmlTemplate inFiles (buildInfo exe) + let args' = + commonArgs + <> args + { argOutputDir = + Dir $ + haddockDirName haddockTarget pkg_descr + unUnqualComponentName (exeName exe) + } return - args - { argOutputDir = Dir $ unUnqualComponentName $ exeName exe - , argTitle = Flag $ unUnqualComponentName $ exeName exe + args' + { argTitle = Flag $ unUnqualComponentName $ exeName exe + , -- we need to accommodate `argOutputDir` + argBaseUrl = case argBaseUrl args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argContents = case argContents args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argIndex = case argIndex args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + } + +fromTest + :: Verbosity + -> (SymbolicPath Pkg (Path.Dir Artifacts), SymbolicPath Pkg (Path.Dir Artifacts), SymbolicPath Pkg (Path.Dir Artifacts)) + -- ^ Directories for -hidir, -odir, and -stubdir to GHC through Haddock. + -- See Note [Hi Haddock Recompilation Avoidance] + -> LocalBuildInfo + -> ComponentLocalBuildInfo + -> Maybe PathTemplate + -- ^ template for HTML location + -> HaddockTarget + -> PackageDescription + -> TestSuite + -> HaddockArgs + -- ^ common args + -> IO HaddockArgs +fromTest verbosity haddockArtifactsDirs lbi clbi htmlTemplate haddockTarget pkg_descr test commonArgs = do + inFiles <- map snd `fmap` getTestSourceFiles verbosity lbi test clbi + args <- + mkHaddockArgs + verbosity + haddockArtifactsDirs + lbi + clbi + htmlTemplate + inFiles + (testBuildInfo test) + let args' = + commonArgs + <> args + { argOutputDir = + Dir $ + haddockDirName haddockTarget pkg_descr + unUnqualComponentName (testName test) + } + return + args' + { argTitle = Flag $ prettyShow (packageName pkg_descr) + , argComponentName = Flag $ prettyShow (packageName pkg_descr) ++ ":" ++ unUnqualComponentName (testName test) + , -- we need to accommodate `argOutputDir` + argBaseUrl = case argBaseUrl args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argContents = case argContents args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argIndex = case argIndex args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + } + +fromBenchmark + :: Verbosity + -> (SymbolicPath Pkg (Path.Dir Artifacts), SymbolicPath Pkg (Path.Dir Artifacts), SymbolicPath Pkg (Path.Dir Artifacts)) + -- ^ Directories for -hidir, -odir, and -stubdir to GHC through Haddock. + -- See Note [Hi Haddock Recompilation Avoidance] + -> LocalBuildInfo + -> ComponentLocalBuildInfo + -> Maybe PathTemplate + -- ^ template for HTML location + -> HaddockTarget + -> PackageDescription + -> Benchmark + -> HaddockArgs + -- ^ common args + -> IO HaddockArgs +fromBenchmark verbosity haddockArtifactsDirs lbi clbi htmlTemplate haddockTarget pkg_descr bench commonArgs = do + inFiles <- map snd `fmap` getBenchmarkSourceFiles verbosity lbi bench clbi + args <- + mkHaddockArgs + verbosity + haddockArtifactsDirs + lbi + clbi + htmlTemplate + inFiles + (benchmarkBuildInfo bench) + let args' = + commonArgs + <> args + { argOutputDir = + Dir $ + haddockDirName haddockTarget pkg_descr + unUnqualComponentName (benchmarkName bench) + } + return + args' + { argTitle = Flag $ prettyShow (packageName pkg_descr) + , argComponentName = Flag $ prettyShow (packageName pkg_descr) ++ ":" ++ unUnqualComponentName (benchmarkName bench) + , -- we need to accommodate `argOutputDir` + argBaseUrl = case argBaseUrl args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argContents = case argContents args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argIndex = case argIndex args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag } fromForeignLib @@ -729,9 +948,13 @@ fromForeignLib -> ComponentLocalBuildInfo -> Maybe PathTemplate -- ^ template for HTML location + -> HaddockTarget + -> PackageDescription -> ForeignLib + -> HaddockArgs + -- ^ common args -> IO HaddockArgs -fromForeignLib verbosity haddockArtifactsDirs lbi clbi htmlTemplate flib = do +fromForeignLib verbosity haddockArtifactsDirs lbi clbi htmlTemplate haddockTarget pkg_descr flib commonArgs = do inFiles <- map snd `fmap` getFLibSourceFiles verbosity lbi flib clbi args <- mkHaddockArgs @@ -742,10 +965,27 @@ fromForeignLib verbosity haddockArtifactsDirs lbi clbi htmlTemplate flib = do htmlTemplate inFiles (foreignLibBuildInfo flib) + let args' = + commonArgs + <> args + { argOutputDir = + Dir $ + haddockDirName haddockTarget pkg_descr + unUnqualComponentName (foreignLibName flib) + } return - args - { argOutputDir = Dir $ unUnqualComponentName $ foreignLibName flib - , argTitle = Flag $ unUnqualComponentName $ foreignLibName flib + args' + { argTitle = Flag $ unUnqualComponentName $ foreignLibName flib + , -- we need to accommodate `argOutputDir` + argBaseUrl = case argBaseUrl args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argContents = case argContents args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag + , argIndex = case argIndex args' of + Flag url -> Flag $ ".." url + NoFlag -> NoFlag } compToExe :: Component -> Maybe Executable @@ -900,20 +1140,18 @@ renderArgs verbosity mbWorkDir tmpFileOpts version comp platform args k = do renderedArgs (\responseFileName -> k ["@" ++ responseFileName] result) else k renderedArgs result - case argPrologue args of - Flag prologueText -> + case (argPrologueFile args, argPrologue args) of + (Flag pfile, _) -> + withPrologueArgs ["--prologue=" ++ pfile] + (_, Flag prologueText) -> withTempFileEx tmpFileOpts mbWorkDir outputDir "haddock-prologue.txt" $ \prologueFileName h -> do when haddockSupportsUTF8 (hSetEncoding h utf8) hPutStrLn h prologueText hClose h withPrologueArgs ["--prologue=" ++ u prologueFileName] - _ -> - withPrologueArgs - ( case argPrologueFile args of - Flag pfile -> ["--prologue=" ++ pfile] - _ -> [] - ) + (NoFlag, NoFlag) -> + withPrologueArgs [] where -- See Note [Symbolic paths] in Distribution.Utils.Path i = interpretSymbolicPath mbWorkDir @@ -962,7 +1200,10 @@ renderPureArgs version comp platform args = maybe [] ( \pkg -> - [ "--package-name=" ++ prettyShow (pkgName pkg) + [ "--package-name=" + ++ case argComponentName args of + Flag name -> name + _ -> prettyShow (pkgName pkg) , "--package-version=" ++ prettyShow (pkgVersion pkg) ] ) @@ -974,10 +1215,10 @@ renderPureArgs version comp platform args = , [ "--quickjump" | isVersion 2 19, True <- flagToList . argQuickJump $ args ] , ["--hyperlinked-source" | isHyperlinkedSource] - , (\(All b, xs) -> bool (map (("--hide=" ++) . prettyShow) xs) [] b) + , (\(All b, xs) -> bool [] (map (("--hide=" ++) . prettyShow) xs) b) . argHideModules $ args - , bool ["--ignore-all-exports"] [] . getAny . argIgnoreExports $ args + , bool [] ["--ignore-all-exports"] . getAny . argIgnoreExports $ args , -- Haddock's --source-* options are ignored once --hyperlinked-source is -- set. -- See https://haskell-haddock.readthedocs.io/en/latest/invoking.html#cmdoption-hyperlinked-source @@ -1001,11 +1242,11 @@ renderPureArgs version comp platform args = $ args , maybe [] ((: []) . ("--css=" ++)) . flagToMaybe . argCssFile $ args , maybe [] ((: []) . ("--use-contents=" ++)) . flagToMaybe . argContents $ args - , bool ["--gen-contents"] [] . fromFlagOrDefault False . argGenContents $ args + , bool [] ["--gen-contents"] . fromFlagOrDefault False . argGenContents $ args , maybe [] ((: []) . ("--use-index=" ++)) . flagToMaybe . argIndex $ args - , bool ["--gen-index"] [] . fromFlagOrDefault False . argGenIndex $ args + , bool [] ["--gen-index"] . fromFlagOrDefault False . argGenIndex $ args , maybe [] ((: []) . ("--base-url=" ++)) . flagToMaybe . argBaseUrl $ args - , bool [] [verbosityFlag] . getAny . argVerbose $ args + , bool [verbosityFlag] [] . getAny . argVerbose $ args , map (\o -> case o of Hoogle -> "--hoogle"; Html -> "--html") . fromFlagOrDefault [] . argOutput @@ -1017,8 +1258,8 @@ renderPureArgs version comp platform args = ( (: []) . ("--title=" ++) . ( bool - (++ " (internal documentation)") id + (++ " (internal documentation)") (getAny $ argIgnoreExports args) ) ) @@ -1040,6 +1281,7 @@ renderPureArgs version comp platform args = -- We pass this option by default to haddock to avoid recompilation -- See Note [Hi Haddock Recompilation Avoidance] ["--no-tmp-comp-dir" | version >= mkVersion [2, 28, 0]] + , bool [] ["--use-unicode"] . fromFlagOrDefault False . argUseUnicode $ args ] where -- See Note [Symbolic paths] in Distribution.Utils.Path @@ -1078,7 +1320,6 @@ renderPureArgs version comp platform args = ] ) - bool a b c = if c then a else b isVersion major minor = version >= mkVersion [major, minor] verbosityFlag | isVersion 2 5 = "--verbosity=1" @@ -1117,7 +1358,8 @@ haddockPackagePaths ipkgs mkHtmlPath = do interfaces <- sequenceA [ case interfaceAndHtmlPath ipkg of - Nothing -> return (Left (packageId ipkg)) + Nothing -> do + return (Left (packageId ipkg)) Just (interface, html) -> do (html', hypsrc') <- case html of diff --git a/Cabal/src/Distribution/Simple/Install.hs b/Cabal/src/Distribution/Simple/Install.hs index c46f28b3529..435d3fbbebc 100644 --- a/Cabal/src/Distribution/Simple/Install.hs +++ b/Cabal/src/Distribution/Simple/Install.hs @@ -38,7 +38,7 @@ import Distribution.Types.UnqualComponentName import Distribution.Package import Distribution.PackageDescription -import Distribution.Simple.BuildPaths (haddockName, haddockPref) +import Distribution.Simple.BuildPaths (haddockPath, haddockPref) import Distribution.Simple.BuildTarget import Distribution.Simple.Compiler ( CompilerFlavor (..) @@ -199,8 +199,8 @@ copyPackage verbosity pkg_descr lbi distPref copydest = do -- copy in htmlPref first. let haddockInterfaceFileSrc = haddockPref ForDevelopment distPref pkg_descr - makeRelativePathEx (haddockName pkg_descr) - haddockInterfaceFileDest = interfacePref haddockName pkg_descr + makeRelativePathEx (haddockPath pkg_descr) + haddockInterfaceFileDest = interfacePref haddockPath pkg_descr -- We only generate the haddock interface file for libs, So if the -- package consists only of executables there will not be one: exists <- doesFileExist $ i haddockInterfaceFileSrc diff --git a/Cabal/src/Distribution/Simple/Register.hs b/Cabal/src/Distribution/Simple/Register.hs index 78053111a4a..7648c867f99 100644 --- a/Cabal/src/Distribution/Simple/Register.hs +++ b/Cabal/src/Distribution/Simple/Register.hs @@ -548,7 +548,7 @@ generalInstalledPackageInfo adjustRelIncDirs pkg abi_hash lib lbi clbi installDi , IPI.ldOptions = ldOptions bi , IPI.frameworks = map getSymbolicPath $ frameworks bi , IPI.frameworkDirs = map getSymbolicPath $ extraFrameworkDirs bi - , IPI.haddockInterfaces = [haddockdir installDirs haddockName pkg] + , IPI.haddockInterfaces = [haddockdir installDirs haddockLibraryPath pkg lib] , IPI.haddockHTMLs = [htmldir installDirs] , IPI.pkgRoot = Nothing , IPI.libVisibility = libVisibility lib diff --git a/Cabal/src/Distribution/Simple/Setup/Haddock.hs b/Cabal/src/Distribution/Simple/Setup/Haddock.hs index 402544ce511..e8d7ba54a20 100644 --- a/Cabal/src/Distribution/Simple/Setup/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Setup/Haddock.hs @@ -115,6 +115,7 @@ data HaddockFlags = HaddockFlags , haddockBaseUrl :: Flag String , haddockResourcesDir :: Flag String , haddockOutputDir :: Flag FilePath + , haddockUseUnicode :: Flag Bool } deriving (Show, Generic, Typeable) @@ -170,6 +171,7 @@ defaultHaddockFlags = , haddockBaseUrl = NoFlag , haddockResourcesDir = NoFlag , haddockOutputDir = NoFlag + , haddockUseUnicode = Flag False } haddockCommand :: CommandUI HaddockFlags @@ -378,6 +380,13 @@ haddockOptions showOrParseArgs = haddockOutputDir (\v flags -> flags{haddockOutputDir = v}) (reqArgFlag "DIR") + , option + "" + ["use-unicode"] + "Pass --use-unicode option to haddock" + haddockUseUnicode + (\v flags -> flags{haddockUseUnicode = v}) + trueArg ] emptyHaddockFlags :: HaddockFlags @@ -441,7 +450,7 @@ data HaddockProjectFlags = HaddockProjectFlags , haddockProjectVerbosity :: Flag Verbosity , -- haddockBaseUrl is not supported, a fixed value is provided haddockProjectResourcesDir :: Flag String - , haddockProjectOutputDir :: Flag FilePath + , haddockProjectUseUnicode :: Flag Bool } deriving (Show, Generic, Typeable) @@ -465,8 +474,8 @@ defaultHaddockProjectFlags = , haddockProjectKeepTempFiles = Flag False , haddockProjectVerbosity = Flag normal , haddockProjectResourcesDir = NoFlag - , haddockProjectOutputDir = NoFlag , haddockProjectInterfaces = NoFlag + , haddockProjectUseUnicode = NoFlag } haddockProjectCommand :: CommandUI HaddockProjectFlags @@ -615,11 +624,11 @@ haddockProjectOptions _showOrParseArgs = (reqArgFlag "DIR") , option "" - ["output-dir"] - "Generate haddock documentation into this directory. This flag is provided as a technology preview and is subject to change in the next releases." - haddockProjectOutputDir - (\v flags -> flags{haddockProjectOutputDir = v}) - (reqArgFlag "DIR") + ["use-unicode"] + "Pass --use-unicode option to haddock" + haddockProjectUseUnicode + (\v flags -> flags{haddockProjectUseUnicode = v}) + trueArg ] emptyHaddockProjectFlags :: HaddockProjectFlags diff --git a/cabal-install/src/Distribution/Client/CmdHaddockProject.hs b/cabal-install/src/Distribution/Client/CmdHaddockProject.hs index 8c0c21a5427..f632e8b7caa 100644 --- a/cabal-install/src/Distribution/Client/CmdHaddockProject.hs +++ b/cabal-install/src/Distribution/Client/CmdHaddockProject.hs @@ -3,6 +3,7 @@ module Distribution.Client.CmdHaddockProject , haddockProjectAction ) where +import Control.Monad (mapM) import Distribution.Client.Compat.Prelude hiding (get) import Prelude () @@ -11,8 +12,8 @@ import qualified Distribution.Client.CmdHaddock as CmdHaddock import Distribution.Client.DistDirLayout ( CabalDirLayout (..) - , DistDirLayout (..) , StoreDirLayout (..) + , distBuildDirectory ) import Distribution.Client.InstallPlan (foldPlanPackage) import qualified Distribution.Client.InstallPlan as InstallPlan @@ -24,7 +25,6 @@ import Distribution.Client.ProjectOrchestration , ProjectBaseContext (..) , ProjectBuildContext (..) , TargetSelector (..) - , printPlan , pruneInstallPlanToTargets , resolveTargets , runProjectPreBuildPhase @@ -52,6 +52,14 @@ import Distribution.Client.Setup ) import Distribution.Client.TargetProblem (TargetProblem (..)) +import Distribution.Simple.BuildPaths + ( haddockBenchmarkDirPath + , haddockDirName + , haddockLibraryDirPath + , haddockLibraryPath + , haddockPath + , haddockTestDirPath + ) import Distribution.Simple.Command ( CommandUI (..) ) @@ -75,6 +83,7 @@ import Distribution.Simple.Program.Db import Distribution.Simple.Setup ( HaddockFlags (..) , HaddockProjectFlags (..) + , HaddockTarget (..) , Visibility (..) , defaultCommonSetupFlags , defaultHaddockFlags @@ -84,9 +93,11 @@ import Distribution.Simple.Utils ( copyDirectoryRecursive , createDirectoryIfMissingVerbose , dieWithException + , info , warn ) import Distribution.Types.InstalledPackageInfo (InstalledPackageInfo (..)) +import Distribution.Types.PackageDescription (PackageDescription (benchmarks, subLibraries, testSuites)) import Distribution.Types.PackageId (pkgName) import Distribution.Types.PackageName (unPackageName) import Distribution.Types.UnitId (unUnitId) @@ -98,7 +109,7 @@ import Distribution.Verbosity as Verbosity import Distribution.Client.Errors import System.Directory (doesDirectoryExist, doesFileExist) -import System.FilePath (normalise, takeDirectory, (<.>), ()) +import System.FilePath (normalise, takeDirectory, ()) haddockProjectAction :: HaddockProjectFlags -> [String] -> GlobalFlags -> IO () haddockProjectAction flags _extraArgs globalFlags = do @@ -149,7 +160,11 @@ haddockProjectAction flags _extraArgs globalFlags = do else NoFlag , haddockKeepTempFiles = haddockProjectKeepTempFiles flags , haddockResourcesDir = haddockProjectResourcesDir flags - , haddockOutputDir = haddockProjectOutputDir flags + , haddockUseUnicode = haddockProjectUseUnicode flags + -- NOTE: we don't pass `haddockOutputDir`. If we do, we'll need to + -- make sure `InstalledPackageInfo` contains the right path to + -- haddock interfaces. Instead we build documentation inside + -- `dist-newstyle` directory and copy it to the output directory. } nixFlags = (commandDefaultFlags CmdHaddock.haddockCommand) @@ -199,8 +214,6 @@ haddockProjectAction flags _extraArgs globalFlags = do elaboratedPlan return (elaboratedPlan', targets) - printPlan verbosity baseCtx buildCtx - let elaboratedPlan :: ElaboratedInstallPlan elaboratedPlan = elaboratedPlanOriginal buildCtx @@ -255,61 +268,84 @@ haddockProjectAction flags _extraArgs globalFlags = do packageInfos <- fmap (nub . concat) $ for pkgs $ \pkg -> case pkg of - Left _ - | not localStyle -> - return [] - Left package -> do - -- TODO: this might not work for public packages with sublibraries. - -- Issue #9026. + Left package | localStyle -> do let packageName = unPackageName (pkgName $ sourcePackageId package) destDir = outputDir packageName fmap catMaybes $ for (haddockInterfaces package) $ \interfacePath -> do let docDir = takeDirectory interfacePath a <- doesFileExist interfacePath case a of - True -> + True -> do copyDirectoryRecursive verbosity docDir destDir - >> return - ( Just - ( packageName - , interfacePath - , Hidden - ) - ) + return $ Just $ Right (packageName, interfacePath, Hidden) False -> return Nothing + Left _ -> return [] Right package -> case elabLocalToProject package of True -> do let distDirParams = elabDistDirParams sharedConfig' package - unitId = unUnitId (elabUnitId package) + pkg_descr = elabPkgDescription package + + packageName = pkgName $ elabPkgSourceId package + unitId = elabUnitId package + packageDir = haddockDirName ForDevelopment pkg_descr + destDir = outputDir packageDir + interfacePath = destDir haddockPath pkg_descr + buildDir = distBuildDirectory distLayout distDirParams - packageName = unPackageName (pkgName $ elabPkgSourceId package) - let docDir = + docDir = buildDir "doc" "html" - packageName - destDir = outputDir unitId - interfacePath = - destDir - packageName - <.> "haddock" + packageDir + a <- doesDirectoryExist docDir - case a of - True -> + if a + then do copyDirectoryRecursive verbosity docDir destDir - >> return - [ - ( unitId - , interfacePath - , Visible - ) - ] - False -> do + let infos :: [(String, FilePath, Visibility)] + infos = + (unPackageName packageName, interfacePath, Visible) + : [ (sublibDirPath, sublibInterfacePath, Visible) + | lib <- subLibraries pkg_descr + , let sublibDirPath = haddockLibraryDirPath ForDevelopment pkg_descr lib + sublibInterfacePath = + outputDir + sublibDirPath + haddockLibraryPath pkg_descr lib + ] + ++ [ (testPath, testInterfacePath, Visible) + | test <- testSuites pkg_descr + , let testPath = haddockTestDirPath ForDevelopment pkg_descr test + testInterfacePath = + outputDir + testPath + haddockPath pkg_descr + ] + ++ [ (benchPath, benchInterfacePath, Visible) + | bench <- benchmarks pkg_descr + , let benchPath = haddockBenchmarkDirPath ForDevelopment pkg_descr bench + benchInterfacePath = + outputDir + benchPath + haddockPath pkg_descr + ] + infos' <- + mapM + ( \x@(_, path, _) -> do + e <- doesFileExist path + return $ + if e + then Right x + else Left path + ) + infos + return infos' + else do warn verbosity ( "haddocks of " - ++ show unitId + ++ unUnitId unitId ++ " not found in the store" ) return [] @@ -317,57 +353,53 @@ haddockProjectAction flags _extraArgs globalFlags = do | not localStyle -> return [] False -> do - let packageName = unPackageName (pkgName $ elabPkgSourceId package) + let pkg_descr = elabPkgDescription package unitId = unUnitId (elabUnitId package) packageDir = storePackageDirectory (cabalStoreDirLayout cabalLayout) (pkgConfigCompiler sharedConfig') (elabUnitId package) + -- TODO: use `InstallDirTemplates` docDir = packageDir "share" "doc" "html" - destDir = outputDir packageName - interfacePath = - destDir - packageName - <.> "haddock" + destDir = outputDir haddockDirName ForDevelopment pkg_descr + interfacePath = destDir haddockPath pkg_descr a <- doesDirectoryExist docDir case a of - True -> + True -> do copyDirectoryRecursive verbosity docDir destDir - -- non local packages will be hidden in haddock's - -- generated contents page - >> return - [ - ( unitId - , interfacePath - , Hidden - ) - ] + -- non local packages will be hidden in haddock's + -- generated contents page + return [Right (unitId, interfacePath, Hidden)] False -> do - warn - verbosity - ( "haddocks of " - ++ show unitId - ++ " not found in the store" - ) - return [] + return [Left unitId] -- -- generate index, content, etc. -- + let (missingHaddocks, packageInfos') = partitionEithers packageInfos + when (not (null missingHaddocks)) $ do + warn verbosity "missing haddocks for some packages from the store" + -- Show the package list if `-v1` is passed; it's usually a long list. + -- One needs to add `package` stantza in `cabal.project` file for + -- `cabal` to include a version which has haddocks (or set + -- `documentation: True` in the global config). + info verbosity (intercalate "\n" missingHaddocks) + let flags' = flags { haddockProjectDir = Flag outputDir , haddockProjectInterfaces = Flag [ ( interfacePath - , Just name - , Just name + , Just url + , Just url , visibility ) - | (name, interfacePath, visibility) <- packageInfos + | (url, interfacePath, visibility) <- packageInfos' ] + , haddockProjectUseUnicode = NoFlag } createHaddockIndex verbosity diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 951155d365b..2faf9e1756d 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -634,6 +634,7 @@ instance Semigroup SavedConfig where , haddockBaseUrl = combine haddockBaseUrl , haddockResourcesDir = combine haddockResourcesDir , haddockOutputDir = combine haddockOutputDir + , haddockUseUnicode = combine haddockUseUnicode } where combine = combine' savedHaddockFlags diff --git a/cabal-install/src/Distribution/Client/PackageHash.hs b/cabal-install/src/Distribution/Client/PackageHash.hs index 2e7b9320e3d..1b30b125204 100644 --- a/cabal-install/src/Distribution/Client/PackageHash.hs +++ b/cabal-install/src/Distribution/Client/PackageHash.hs @@ -240,6 +240,7 @@ data PackageHashConfigInputs = PackageHashConfigInputs , pkgHashHaddockBaseUrl :: Maybe String , pkgHashHaddockResourcesDir :: Maybe String , pkgHashHaddockOutputDir :: Maybe FilePath + , pkgHashHaddockUseUnicode :: Bool -- TODO: [required eventually] pkgHashToolsVersions ? -- TODO: [required eventually] pkgHashToolsExtraOptions ? } @@ -349,6 +350,7 @@ renderPackageHashInputs , opt "haddock-base-url" Nothing (fromMaybe "") pkgHashHaddockBaseUrl , opt "haddock-resources-dir" Nothing (fromMaybe "") pkgHashHaddockResourcesDir , opt "haddock-output-dir" Nothing (fromMaybe "") pkgHashHaddockOutputDir + , opt "haddock-use-unicode" False prettyShow pkgHashHaddockUseUnicode ] ++ Map.foldrWithKey (\prog args acc -> opt (prog ++ "-options") [] unwords args : acc) [] pkgHashProgramArgs where diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index 0de745526c1..fe8ea884ccc 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -508,6 +508,7 @@ commandLineFlagsToProjectConfig globalFlags NixStyleFlags{..} clientInstallFlags , packageConfigHaddockInternal = packageConfigHaddockInternal pc , packageConfigHaddockQuickJump = packageConfigHaddockQuickJump pc , packageConfigHaddockLinkedSource = packageConfigHaddockLinkedSource pc + , packageConfigHaddockUseUnicode = packageConfigHaddockUseUnicode pc } ) @@ -824,6 +825,7 @@ convertLegacyPerPackageFlags , haddockBaseUrl = packageConfigHaddockBaseUrl , haddockResourcesDir = packageConfigHaddockResourcesDir , haddockOutputDir = packageConfigHaddockOutputDir + , haddockUseUnicode = packageConfigHaddockUseUnicode } = haddockFlags TestFlags @@ -1225,6 +1227,7 @@ convertToLegacyPerPackageConfig PackageConfig{..} = , haddockBaseUrl = packageConfigHaddockBaseUrl , haddockResourcesDir = packageConfigHaddockResourcesDir , haddockOutputDir = packageConfigHaddockOutputDir + , haddockUseUnicode = packageConfigHaddockUseUnicode } testFlags = @@ -1628,6 +1631,7 @@ legacyPackageConfigFieldDescrs = , "base-url" , "resources-dir" , "output-dir" + , "use-unicode" ] . commandOptionsToFields ) diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index 08c27b00a3d..4c2555c472c 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -308,6 +308,7 @@ data PackageConfig = PackageConfig , packageConfigHaddockBaseUrl :: Flag String -- TODO: [required eventually] use this , packageConfigHaddockResourcesDir :: Flag String -- TODO: [required eventually] use this , packageConfigHaddockOutputDir :: Flag FilePath -- TODO: [required eventually] use this + , packageConfigHaddockUseUnicode :: Flag Bool -- TODO: [required eventually] use this , packageConfigHaddockForHackage :: Flag HaddockTarget , -- Test options packageConfigTestHumanLog :: Flag PathTemplate diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 19f9907703c..23fed2c5bd1 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -2298,6 +2298,7 @@ elaborateInstallPlan elabHaddockBaseUrl = perPkgOptionMaybe pkgid packageConfigHaddockBaseUrl elabHaddockResourcesDir = perPkgOptionMaybe pkgid packageConfigHaddockResourcesDir elabHaddockOutputDir = perPkgOptionMaybe pkgid packageConfigHaddockOutputDir + elabHaddockUseUnicode = perPkgOptionFlag pkgid False packageConfigHaddockUseUnicode elabTestMachineLog = perPkgOptionMaybe pkgid packageConfigTestMachineLog elabTestHumanLog = perPkgOptionMaybe pkgid packageConfigTestHumanLog @@ -4244,6 +4245,7 @@ setupHsHaddockFlags , haddockBaseUrl = maybe mempty toFlag elabHaddockBaseUrl , haddockResourcesDir = maybe mempty toFlag elabHaddockResourcesDir , haddockOutputDir = maybe mempty toFlag elabHaddockOutputDir + , haddockUseUnicode = toFlag elabHaddockUseUnicode } setupHsHaddockArgs :: ElaboratedConfiguredPackage -> [String] @@ -4402,6 +4404,7 @@ packageHashConfigInputs shared@ElaboratedSharedConfig{..} pkg = , pkgHashHaddockBaseUrl = elabHaddockBaseUrl , pkgHashHaddockResourcesDir = elabHaddockResourcesDir , pkgHashHaddockOutputDir = elabHaddockOutputDir + , pkgHashHaddockUseUnicode = elabHaddockUseUnicode } where ElaboratedConfiguredPackage{..} = normaliseConfiguredPackage shared pkg diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs index 352e35d4150..e7efc4cc486 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs @@ -302,6 +302,7 @@ data ElaboratedConfiguredPackage = ElaboratedConfiguredPackage , elabHaddockBaseUrl :: Maybe String , elabHaddockResourcesDir :: Maybe String , elabHaddockOutputDir :: Maybe FilePath + , elabHaddockUseUnicode :: Bool , elabTestMachineLog :: Maybe PathTemplate , elabTestHumanLog :: Maybe PathTemplate , elabTestShowDetails :: Maybe TestShowDetails diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index a8db5c98106..8d594b2a414 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -2446,6 +2446,7 @@ haddockOptions showOrParseArgs = , "base-url" , "resources-dir" , "output-dir" + , "use-unicode" ] ] diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index b5b49053b6d..c4341ed72ef 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -2101,6 +2101,7 @@ testConfigOptionComments = do " -- base-url" @=? findLineWith True "base-url" defaultConfigFile " -- resources-dir" @=? findLineWith True "resources-dir" defaultConfigFile " -- output-dir" @=? findLineWith True "output-dir" defaultConfigFile + " -- use-unicode" @=? findLineWith True "use-unicode" defaultConfigFile " -- interactive" @=? findLineWith True "interactive" defaultConfigFile " -- quiet" @=? findLineWith True "quiet" defaultConfigFile diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 2c4de05a9a2..04dd86fc92a 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -727,6 +727,7 @@ instance Arbitrary PackageConfig where <*> arbitrary <*> arbitrary <*> arbitrary + <*> arbitrary <*> arbitraryFlag arbitraryShortToken <*> arbitrary <*> shortListOf 5 arbitrary @@ -795,6 +796,7 @@ instance Arbitrary PackageConfig where , packageConfigHaddockBaseUrl = x55 , packageConfigHaddockResourcesDir = x56 , packageConfigHaddockOutputDir = x57 + , packageConfigHaddockUseUnicode = x58 , packageConfigTestHumanLog = x44 , packageConfigTestMachineLog = x45 , packageConfigTestShowDetails = x46 @@ -859,6 +861,7 @@ instance Arbitrary PackageConfig where , packageConfigHaddockBaseUrl = x55' , packageConfigHaddockResourcesDir = x56' , packageConfigHaddockOutputDir = x57' + , packageConfigHaddockUseUnicode = x58' , packageConfigTestHumanLog = x44' , packageConfigTestMachineLog = x45' , packageConfigTestShowDetails = x46' @@ -881,6 +884,7 @@ instance Arbitrary PackageConfig where , (x44', x45', x46', x47', x48', x49', x51', x52', x54', x55') , x56' , x57' + , x58' ) ) <- shrink @@ -906,6 +910,7 @@ instance Arbitrary PackageConfig where , (x44, x45, x46, x47, x48, x49, x51, x52, x54, x55) , x56 , x57 + , x58 ) ) ] diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.cabal.out b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.cabal.out index cb4f8288291..0448dac63ff 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.cabal.out @@ -8,7 +8,7 @@ for mylib-0.1.0.0... Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = for mylib-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -22,7 +22,7 @@ Building library for mysql-0.1.0.0... # Setup haddock Preprocessing library for mysql-0.1.0.0... Running Haddock on library for mysql-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/mysql/dist/doc/html/mysql/ +Documentation created: ../setup-external.cabal.dist/work/mysql/dist/doc/html/mysql # Setup copy Installing library in # Setup register @@ -35,7 +35,7 @@ Building library for postgresql-0.1.0.0... # Setup haddock Preprocessing library for postgresql-0.1.0.0... Running Haddock on library for postgresql-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/postgresql/dist/doc/html/postgresql/ +Documentation created: ../setup-external.cabal.dist/work/postgresql/dist/doc/html/postgresql # Setup copy Installing library in # Setup register @@ -51,7 +51,7 @@ Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = mysql-0.1.0.0:Database.MySQL for mylib-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -69,7 +69,7 @@ Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = postgresql-0.1.0.0:Database.PostgreSQL for mylib-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.cabal.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -84,7 +84,7 @@ Building library for src-0.1.0.0... # Setup haddock Preprocessing library for src-0.1.0.0... Running Haddock on library for src-0.1.0.0... -Documentation created: ../setup-external.cabal.dist/work/src/dist/doc/html/src/ +Documentation created: ../setup-external.cabal.dist/work/src/dist/doc/html/src # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.out b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.out index 299d6a831b3..19a089db14f 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-external.out @@ -8,7 +8,7 @@ for mylib-0.1.0.0... Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = for mylib-0.1.0.0... -Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -22,7 +22,7 @@ Building library for mysql-0.1.0.0... # Setup haddock Preprocessing library for mysql-0.1.0.0... Running Haddock on library for mysql-0.1.0.0... -Documentation created: ../setup-external.dist/work/mysql/dist/doc/html/mysql/ +Documentation created: ../setup-external.dist/work/mysql/dist/doc/html/mysql # Setup copy Installing library in # Setup register @@ -35,7 +35,7 @@ Building library for postgresql-0.1.0.0... # Setup haddock Preprocessing library for postgresql-0.1.0.0... Running Haddock on library for postgresql-0.1.0.0... -Documentation created: ../setup-external.dist/work/postgresql/dist/doc/html/postgresql/ +Documentation created: ../setup-external.dist/work/postgresql/dist/doc/html/postgresql # Setup copy Installing library in # Setup register @@ -51,7 +51,7 @@ Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = mysql-0.1.0.0:Database.MySQL for mylib-0.1.0.0... -Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -69,7 +69,7 @@ Preprocessing library for mylib-0.1.0.0... Running Haddock on library instantiated with Database = postgresql-0.1.0.0:Database.PostgreSQL for mylib-0.1.0.0... -Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib/ +Documentation created: ../setup-external.dist/work/mylib/dist/doc/html/mylib # Setup copy Installing library in # Setup register @@ -84,7 +84,7 @@ Building library for src-0.1.0.0... # Setup haddock Preprocessing library for src-0.1.0.0... Running Haddock on library for src-0.1.0.0... -Documentation created: ../setup-external.dist/work/src/dist/doc/html/src/ +Documentation created: ../setup-external.dist/work/src/dist/doc/html/src # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.out b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.out index 01888faed97..36c406d8584 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.out @@ -8,7 +8,7 @@ for Includes2-0.1.0.0... Preprocessing library 'mylib' for Includes2-0.1.0.0... Running Haddock on library 'mylib' instantiated with Database = for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/mylib # Setup copy Installing internal library mylib in # Setup register @@ -22,7 +22,7 @@ Building library 'mysql' for Includes2-0.1.0.0... # Setup haddock Preprocessing library 'mysql' for Includes2-0.1.0.0... Running Haddock on library 'mysql' for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/mysql # Setup copy Installing internal library mysql in # Setup register @@ -35,7 +35,7 @@ Building library 'postgresql' for Includes2-0.1.0.0... # Setup haddock Preprocessing library 'postgresql' for Includes2-0.1.0.0... Running Haddock on library 'postgresql' for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/postgresql # Setup copy Installing internal library postgresql in # Setup register @@ -54,7 +54,7 @@ Preprocessing library 'mylib' for Includes2-0.1.0.0... Running Haddock on library 'mylib' instantiated with Database = mysql-0.1.0.0:Database.MySQL for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/mylib # Setup copy Installing internal library mylib in # Setup register @@ -75,7 +75,7 @@ Preprocessing library 'mylib' for Includes2-0.1.0.0... Running Haddock on library 'mylib' instantiated with Database = postgresql-0.1.0.0:Database.PostgreSQL for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/mylib # Setup copy Installing internal library mylib in # Setup register @@ -90,7 +90,7 @@ Building library for Includes2-0.1.0.0... # Setup haddock Preprocessing library for Includes2-0.1.0.0... Running Haddock on library for Includes2-0.1.0.0... -Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2/ +Documentation created: ../setup-per-component.dist/work/Includes2/dist/doc/html/Includes2 # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-explicit.out b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-explicit.out index b27b2d8eb1a..72bf091632d 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-explicit.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-explicit.out @@ -8,7 +8,7 @@ for sigs-0.1.0.0... Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = for sigs-0.1.0.0... -Documentation created: ../../setup-external-explicit.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: ../../setup-external-explicit.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs # Setup copy Installing library in # Setup register @@ -24,7 +24,7 @@ for indef-0.1.0.0... Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = for indef-0.1.0.0... -Documentation created: ../../setup-external-explicit.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: ../../setup-external-explicit.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.cabal.out b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.cabal.out index 6d0abf817af..34e7a1204b5 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.cabal.out @@ -8,7 +8,7 @@ for sigs-0.1.0.0... Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = for sigs-0.1.0.0... -Documentation created: ../../setup-external-ok.cabal.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: ../../setup-external-ok.cabal.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs # Setup copy Installing library in # Setup register @@ -24,7 +24,7 @@ for indef-0.1.0.0... Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = for indef-0.1.0.0... -Documentation created: ../../setup-external-ok.cabal.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: ../../setup-external-ok.cabal.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef # Setup copy Installing library in # Setup register @@ -41,7 +41,7 @@ Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = containers-:Data.Map for sigs-0.1.0.0... -Documentation created: ../../setup-external-ok.cabal.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: ../../setup-external-ok.cabal.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs # Setup copy Installing library in # Setup register @@ -58,7 +58,7 @@ Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = containers-:Data.Map for indef-0.1.0.0... -Documentation created: ../../setup-external-ok.cabal.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: ../../setup-external-ok.cabal.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.out b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.out index 8fc173d40f0..630edbba1a2 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/setup-external-ok.out @@ -8,7 +8,7 @@ for sigs-0.1.0.0... Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = for sigs-0.1.0.0... -Documentation created: ../../setup-external-ok.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: ../../setup-external-ok.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs # Setup copy Installing library in # Setup register @@ -24,7 +24,7 @@ for indef-0.1.0.0... Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = for indef-0.1.0.0... -Documentation created: ../../setup-external-ok.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: ../../setup-external-ok.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef # Setup copy Installing library in # Setup register @@ -41,7 +41,7 @@ Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = containers-:Data.Map for sigs-0.1.0.0... -Documentation created: ../../setup-external-ok.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: ../../setup-external-ok.dist/work/repo/sigs-0.1.0.0/dist/doc/html/sigs # Setup copy Installing library in # Setup register @@ -58,7 +58,7 @@ Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = containers-:Data.Map for indef-0.1.0.0... -Documentation created: ../../setup-external-ok.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: ../../setup-external-ok.dist/work/repo/indef-0.1.0.0/dist/doc/html/indef # Setup copy Installing library in # Setup register diff --git a/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.cabal.out b/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.cabal.out index 1c8de306e5d..6cdb5760236 100644 --- a/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.cabal.out @@ -6,7 +6,7 @@ Building library for p-0.1.0.0... # Setup haddock Preprocessing library for p-0.1.0.0... Running Haddock on library for p-0.1.0.0... -Documentation created: ../setup.cabal.dist/work/p/dist/doc/html/p/ +Documentation created: ../setup.cabal.dist/work/p/dist/doc/html/p # Setup copy Installing library in # Setup register @@ -19,4 +19,4 @@ Building library for q-0.1.0.0... # Setup haddock Preprocessing library for q-0.1.0.0... Running Haddock on library for q-0.1.0.0... -Documentation created: ../setup.cabal.dist/work/q/dist/doc/html/q/ +Documentation created: ../setup.cabal.dist/work/q/dist/doc/html/q diff --git a/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.out b/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.out index ee41d01148b..ba66136d02a 100644 --- a/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.out +++ b/cabal-testsuite/PackageTests/Backpack/Reexport1/setup.out @@ -6,7 +6,7 @@ Building library for p-0.1.0.0... # Setup haddock Preprocessing library for p-0.1.0.0... Running Haddock on library for p-0.1.0.0... -Documentation created: ../setup.dist/work/p/dist/doc/html/p/ +Documentation created: ../setup.dist/work/p/dist/doc/html/p # Setup copy Installing library in # Setup register @@ -19,4 +19,4 @@ Building library for q-0.1.0.0... # Setup haddock Preprocessing library for q-0.1.0.0... Running Haddock on library for q-0.1.0.0... -Documentation created: ../setup.dist/work/q/dist/doc/html/q/ +Documentation created: ../setup.dist/work/q/dist/doc/html/q diff --git a/cabal-testsuite/PackageTests/Haddock/setup.cabal.out b/cabal-testsuite/PackageTests/Haddock/setup.cabal.out index a13ae638ac4..a55ef1a732a 100644 --- a/cabal-testsuite/PackageTests/Haddock/setup.cabal.out +++ b/cabal-testsuite/PackageTests/Haddock/setup.cabal.out @@ -3,4 +3,4 @@ Configuring Haddock-0.1... # Setup haddock Preprocessing library for Haddock-0.1... Running Haddock on library for Haddock-0.1... -Documentation created: setup.cabal.dist/work/dist/doc/html/Haddock/ +Documentation created: setup.cabal.dist/work/dist/doc/html/Haddock diff --git a/cabal-testsuite/PackageTests/Haddock/setup.out b/cabal-testsuite/PackageTests/Haddock/setup.out index a16722bc65c..550d84c45ae 100644 --- a/cabal-testsuite/PackageTests/Haddock/setup.out +++ b/cabal-testsuite/PackageTests/Haddock/setup.out @@ -3,4 +3,4 @@ Configuring Haddock-0.1... # Setup haddock Preprocessing library for Haddock-0.1... Running Haddock on library for Haddock-0.1... -Documentation created: setup.dist/work/dist/doc/html/Haddock/ +Documentation created: setup.dist/work/dist/doc/html/Haddock diff --git a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out index f81b0b94852..c892ec8e80a 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out +++ b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out @@ -14,7 +14,7 @@ for sigs-0.1.0.0... Preprocessing library for sigs-0.1.0.0... Running Haddock on library instantiated with Data.Map = for sigs-0.1.0.0... -Documentation created: /quickjump.dist/work/./dist//sigs-0.1.0.0/dist/doc/html/sigs/ +Documentation created: /quickjump.dist/work/./dist//sigs-0.1.0.0/dist/doc/html/sigs Installing library in Configuring library for indef-0.1.0.0... Preprocessing library for indef-0.1.0.0... @@ -23,7 +23,7 @@ for indef-0.1.0.0... Preprocessing library for indef-0.1.0.0... Running Haddock on library instantiated with Data.Map = for indef-0.1.0.0... -Documentation created: /quickjump.dist/work/./dist//indef-0.1.0.0/dist/doc/html/indef/ +Documentation created: /quickjump.dist/work/./dist//indef-0.1.0.0/dist/doc/html/indef Installing library in Configuring library for example-1.0... Preprocessing library for example-1.0... @@ -32,4 +32,4 @@ for example-1.0... Preprocessing library for example-1.0... Running Haddock on library instantiated with Data.Map = for example-1.0... -Documentation created: /quickjump.dist/work/dist/build//ghc-/example-1.0/doc/html/example/ +Documentation created: /quickjump.dist/work/dist/build//ghc-/example-1.0/doc/html/example diff --git a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out index 64f999e4368..8eff18e3d6c 100644 --- a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out +++ b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out @@ -17,11 +17,11 @@ Preprocessing library for lib-1... Building library for lib-1... Preprocessing library for lib-1... Running Haddock on library for lib-1... -Documentation created: /cabal.dist/work/./dist//lib-1/dist/doc/html/lib/ +Documentation created: /cabal.dist/work/./dist//lib-1/dist/doc/html/lib Installing library in Configuring library for a-0.1.0.0... Preprocessing library for a-0.1.0.0... Building library for a-0.1.0.0... Preprocessing library for a-0.1.0.0... Running Haddock on library for a-0.1.0.0... -Documentation created: /cabal.dist/work/dist/build//ghc-/a-0.1.0.0/doc/html/a/ +Documentation created: /cabal.dist/work/dist/build//ghc-/a-0.1.0.0/doc/html/a diff --git a/cabal-testsuite/PackageTests/HaddockNewline/setup.cabal.out b/cabal-testsuite/PackageTests/HaddockNewline/setup.cabal.out index 7db9a69eefe..57539271f24 100644 --- a/cabal-testsuite/PackageTests/HaddockNewline/setup.cabal.out +++ b/cabal-testsuite/PackageTests/HaddockNewline/setup.cabal.out @@ -3,4 +3,4 @@ Configuring HaddockNewline-0.1.0.0... # Setup haddock Preprocessing library for HaddockNewline-0.1.0.0... Running Haddock on library for HaddockNewline-0.1.0.0... -Documentation created: setup.cabal.dist/work/dist/doc/html/HaddockNewline/ +Documentation created: setup.cabal.dist/work/dist/doc/html/HaddockNewline diff --git a/cabal-testsuite/PackageTests/HaddockNewline/setup.out b/cabal-testsuite/PackageTests/HaddockNewline/setup.out index 57908512556..f18bb263e04 100644 --- a/cabal-testsuite/PackageTests/HaddockNewline/setup.out +++ b/cabal-testsuite/PackageTests/HaddockNewline/setup.out @@ -3,4 +3,4 @@ Configuring HaddockNewline-0.1.0.0... # Setup haddock Preprocessing library for HaddockNewline-0.1.0.0... Running Haddock on library for HaddockNewline-0.1.0.0... -Documentation created: setup.dist/work/dist/doc/html/HaddockNewline/ +Documentation created: setup.dist/work/dist/doc/html/HaddockNewline diff --git a/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out b/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out index 50ede874c75..bfa16bf91c5 100644 --- a/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out +++ b/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out @@ -4,10 +4,6 @@ Downloading the latest package list from test-local-repo Warning: haddock-project command is experimental, it might break in the future Resolving dependencies... Build profile: -w ghc- -O1 -In order, the following will be built: - - async-2.2.4 (lib) (requires build) - - a-0.1.0.0 (lib) (first run) -Build profile: -w ghc- -O1 In order, the following will be built: - async-2.2.4 (lib) (requires build) - a-0.1.0.0 (lib) (configuration changed) @@ -16,10 +12,10 @@ Preprocessing library for async-2.2.4... Building library for async-2.2.4... Preprocessing library for async-2.2.4... Running Haddock on library for async-2.2.4... -Documentation created: /dist-newstyle//async-2.2.4/dist/doc/html/async/ +Documentation created: /dist-newstyle//async-2.2.4/dist/doc/html/async Installing library in Configuring library for a-0.1.0.0... Preprocessing library for a-0.1.0.0... Running Haddock on library for a-0.1.0.0... -Documentation created: /dist-newstyle/build//ghc-/a-0.1.0.0/doc/html/a/ +Documentation created: /dist-newstyle/build//ghc-/a-0.1.0.0/doc/html/a Documentation created: haddocks/index.html diff --git a/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.cabal.out b/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.cabal.out index bdc57a81bfd..dbd8c26e948 100644 --- a/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.cabal.out +++ b/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.cabal.out @@ -18,10 +18,10 @@ Registering library 'foo-internal-after' for foo-0.1.0.0... # Setup haddock Preprocessing library 'foo-internal-before' for foo-0.1.0.0... Running Haddock on library 'foo-internal-before' for foo-0.1.0.0... -Documentation created: haddock.cabal.dist/work/dist/doc/html/foo/ +Documentation created: haddock.cabal.dist/work/dist/doc/html/foo/foo-internal-before Preprocessing library for foo-0.1.0.0... Running Haddock on library for foo-0.1.0.0... -Documentation created: haddock.cabal.dist/work/dist/doc/html/foo/ +Documentation created: haddock.cabal.dist/work/dist/doc/html/foo Preprocessing library 'foo-internal-after' for foo-0.1.0.0... Running Haddock on library 'foo-internal-after' for foo-0.1.0.0... -Documentation created: haddock.cabal.dist/work/dist/doc/html/foo/ +Documentation created: haddock.cabal.dist/work/dist/doc/html/foo/foo-internal-after diff --git a/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.out b/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.out index 44ee7824244..6259fcfeb0c 100644 --- a/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.out +++ b/cabal-testsuite/PackageTests/InternalLibraries/Haddock/haddock.out @@ -18,10 +18,10 @@ Registering library 'foo-internal-after' for foo-0.1.0.0... # Setup haddock Preprocessing library 'foo-internal-before' for foo-0.1.0.0... Running Haddock on library 'foo-internal-before' for foo-0.1.0.0... -Documentation created: haddock.dist/work/dist/doc/html/foo/ +Documentation created: haddock.dist/work/dist/doc/html/foo/foo-internal-before Preprocessing library for foo-0.1.0.0... Running Haddock on library for foo-0.1.0.0... -Documentation created: haddock.dist/work/dist/doc/html/foo/ +Documentation created: haddock.dist/work/dist/doc/html/foo Preprocessing library 'foo-internal-after' for foo-0.1.0.0... Running Haddock on library 'foo-internal-after' for foo-0.1.0.0... -Documentation created: haddock.dist/work/dist/doc/html/foo/ +Documentation created: haddock.dist/work/dist/doc/html/foo/foo-internal-after diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out index ac34ca8e161..0683a3921ce 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out @@ -13,4 +13,4 @@ Installing library in Configuring library for B-0.1.0.0... Preprocessing library for B-0.1.0.0... Running Haddock on library for B-0.1.0.0... -Documentation created: /cabal.dist/work/dist/build//ghc-/B-0.1.0.0/doc/html/B/ +Documentation created: /cabal.dist/work/dist/build//ghc-/B-0.1.0.0/doc/html/B diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out index e17593a966c..5a0ba914174 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out @@ -6,5 +6,5 @@ In order, the following will be built: Configuring library for A-0.0.0... Preprocessing library for A-0.0.0... Running Haddock on library for A-0.0.0... -Documentation created: /cabal.dist/work/dist/build//ghc-/A-0.0.0/doc/html/A-0.0.0-docs/, /cabal.dist/work/dist/build//ghc-/A-0.0.0/doc/html/A-0.0.0-docs/A.txt +Documentation created: /cabal.dist/work/dist/build//ghc-/A-0.0.0/doc/html/A-0.0.0-docs, /cabal.dist/work/dist/build//ghc-/A-0.0.0/doc/html/A-0.0.0-docs/A.txt Documentation tarball created: /cabal.dist/work/./dist/A-0.0.0-docs.tar.gz diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out index 38e56384678..38614b49b84 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out @@ -8,4 +8,4 @@ In order, the following will be built: Configuring library for A-0.0.0... Preprocessing library for A-0.0.0... Running Haddock on library for A-0.0.0... -Documentation created: /docs/ +Documentation created: /docs/A diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.test.hs b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.test.hs index 1bfe939dab9..de59c2f90ee 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.test.hs @@ -8,4 +8,4 @@ main = cabalTest . withRepo "repo" $ do let docsDir = testDir "docs" liftIO (removePathForcibly docsDir) r <- cabal' "haddock" ["--haddock-output-dir=docs", "A"] - assertFindInFile "A minimal test package for testing haddock." (docsDir "index.html") + assertFindInFile "A minimal test package for testing haddock." (docsDir "A" "index.html") diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out index 38e56384678..38614b49b84 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out @@ -8,4 +8,4 @@ In order, the following will be built: Configuring library for A-0.0.0... Preprocessing library for A-0.0.0... Running Haddock on library for A-0.0.0... -Documentation created: /docs/ +Documentation created: /docs/A diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.test.hs b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.test.hs index ba3a957ef60..db5b6d493a2 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.test.hs @@ -8,4 +8,4 @@ main = cabalTest . withRepo "repo" $ do let docsDir = testDir "docs" liftIO (removePathForcibly docsDir) r <- cabal' "haddock" ["A"] - assertFindInFile "A minimal test package for testing haddock." (docsDir "index.html") + assertFindInFile "A minimal test package for testing haddock." (docsDir "A" "index.html") diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out index 07fc04a1119..32f39065358 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out @@ -11,9 +11,9 @@ Preprocessing library for A-0.1.0.0... Building library for A-0.1.0.0... Preprocessing library for A-0.1.0.0... Running Haddock on library for A-0.1.0.0... -Documentation created: /cabal.dist/work/./dist//A-0.1.0.0/dist/doc/html/A/ +Documentation created: /cabal.dist/work/./dist//A-0.1.0.0/dist/doc/html/A Installing library in Configuring library for B-0.1.0.0... Preprocessing library for B-0.1.0.0... Running Haddock on library for B-0.1.0.0... -Documentation created: /cabal.dist/work/dist/build//ghc-/B-0.1.0.0/doc/html/B/ +Documentation created: /cabal.dist/work/dist/build//ghc-/B-0.1.0.0/doc/html/B diff --git a/changelog.d/pr-9821 b/changelog.d/pr-9821 new file mode 100644 index 00000000000..bc3e9dcae50 --- /dev/null +++ b/changelog.d/pr-9821 @@ -0,0 +1,21 @@ +synopsis: `haddock-project` support for subcomponents +packages: cabal-install +prs: #9821 +issues: +significance: significant + +description: { + +- `haddock-project` handles sublibraries, test suites and benchmarks. +- `haddock` receives `--package-name` flag whcih allows to set names of + components which are included in the main `index.html` file. +- added `--use-unicode` flag to `haddock` and `haddock-project` commands. +- The directory structure of `./dist-newstyle` has changed. `haddock` + subcommand will install `package:sublib` component in a directory + `package/sublib` under `l/sublib/doc/html/`. This is important for + `haddock-project` command and in the future might will be useful for hackage + support of sublibraries. See + https://github.com/haskell/cabal/pull/9821#discussion_r1548557115. + +} + diff --git a/doc/cabal-project-description-file.rst b/doc/cabal-project-description-file.rst index cd80cd3ab72..c2f224cf421 100644 --- a/doc/cabal-project-description-file.rst +++ b/doc/cabal-project-description-file.rst @@ -1616,6 +1616,12 @@ running ``setup haddock``. This flag is provided as a technology preview and is subject to change in the next releases. +.. cfg-field:: haddock-use-unicode: boolean + --haddock-use-unicode + :synopsis: Pass --use-unicode option to haddock. + + Generate HTML documentation which contains unicode characters. + .. cfg-field:: haddock-resources-dir: DIR --haddock-resources-dir=DIR :synopsis: Location of Haddock's static/auxiliary files. diff --git a/test/IntegrationTests2/config/default-config b/test/IntegrationTests2/config/default-config index e74a2c97764..57ae6f847ec 100644 --- a/test/IntegrationTests2/config/default-config +++ b/test/IntegrationTests2/config/default-config @@ -143,6 +143,7 @@ haddock -- base-url: -- resources-dir: -- output-dir: + -- use-unicode: False init -- interactive: False diff --git a/test/IntegrationTests2/nix-config/default-config b/test/IntegrationTests2/nix-config/default-config index e74a2c97764..57ae6f847ec 100644 --- a/test/IntegrationTests2/nix-config/default-config +++ b/test/IntegrationTests2/nix-config/default-config @@ -143,6 +143,7 @@ haddock -- base-url: -- resources-dir: -- output-dir: + -- use-unicode: False init -- interactive: False diff --git a/tests/IntegrationTests2/config/default-config b/tests/IntegrationTests2/config/default-config index 8d5b2ea1df6..94a10d9c113 100644 --- a/tests/IntegrationTests2/config/default-config +++ b/tests/IntegrationTests2/config/default-config @@ -145,6 +145,7 @@ haddock -- base-url: -- resources-dir: -- output-dir: + -- use-unicode: False init -- interactive: False diff --git a/tests/IntegrationTests2/nix-config/default-config b/tests/IntegrationTests2/nix-config/default-config index e74a2c97764..57ae6f847ec 100644 --- a/tests/IntegrationTests2/nix-config/default-config +++ b/tests/IntegrationTests2/nix-config/default-config @@ -143,6 +143,7 @@ haddock -- base-url: -- resources-dir: -- output-dir: + -- use-unicode: False init -- interactive: False