Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/Distribution/Server/Packages/Render.hs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import Distribution.Types.VersionInterval.Legacy
-- I criticized this unfortunate development at length at:
-- https://github.com/haskell/cabal/issues/7916
import Distribution.ModuleName as ModuleName
import Distribution.Types.LibraryVisibility (LibraryVisibility(LibraryVisibilityPublic))

-- hackage-server
import Distribution.Server.Framework.CacheControl (ETag)
Expand Down Expand Up @@ -148,14 +149,18 @@ doPackageRender users info = PackageRender
else NotBuildable

renderModules :: Maybe TarIndex -> [(LibraryName, ModSigIndex)]
renderModules docindex = flip fmap (allLibraries flatDesc) $ \lib ->
renderModules docindex = flip fmap (filter isPublicLibrary $ allLibraries flatDesc) $ \lib ->
let mod_ix = mkForest $ exposedModules lib
-- Assumes that there is an HTML per reexport
++ map moduleReexportName (reexportedModules lib)
++ virtualModules (libBuildInfo lib)
sig_ix = mkForest $ signatures lib
mkForest = moduleForest . map (\m -> (m, moduleHasDocs docindex m))
in (libName lib, ModSigIndex { modIndex = mod_ix, sigIndex = sig_ix })
where
-- Only show main library or internal libraries with public visibility
isPublicLibrary lib = libName lib == LMainLibName
|| libVisibility lib == LibraryVisibilityPublic

moduleHasDocs :: Maybe TarIndex -> ModuleName -> Bool
moduleHasDocs Nothing = const False
Expand Down Expand Up @@ -189,8 +194,15 @@ doPackageRender users info = PackageRender
renderComponentName name@(CNotLibName _) = componentNameRaw name

allCondLibs :: GenericPackageDescription -> [(LibraryName, CondTree ConfVar [Dependency] Library)]
allCondLibs desc = maybeToList ((LMainLibName,) <$> condLibrary desc)
allCondLibs desc = filter (isPublicCondLib . snd) $
maybeToList ((LMainLibName,) <$> condLibrary desc)
++ (first LSubLibName <$> condSubLibraries desc)
where
-- Check if a conditional library tree contains a public library
-- We check the root node since visibility is a property of the library itself
isPublicCondLib condTree =
let lib = condTreeData condTree
in libName lib == LMainLibName || libVisibility lib == LibraryVisibilityPublic

type DependencyTree = CondTree ConfVar [Dependency] IsBuildable

Expand Down