@@ -64,6 +64,7 @@ import qualified Distribution.Types.CondTree as Cabal
6464import qualified Distribution.Types.ExeDependency as Cabal
6565import Distribution.Types.ForeignLib
6666import qualified Distribution.Types.LegacyExeDependency as Cabal
67+ import Distribution.Types.MungedPackageName
6768import qualified Distribution.Types.UnqualComponentName as Cabal
6869import qualified Distribution.Verbosity as D
6970import Lens.Micro (lens )
@@ -279,6 +280,7 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
279280 | null extraLibNames -> NoLibraries
280281 | otherwise -> error " Package has buildable sublibraries but no buildable libraries, I'm giving up"
281282 Just _ -> HasLibraries foreignLibNames
283+ , packageInternalLibraries = subLibNames
282284 , packageTests = M. fromList
283285 [(T. pack (Cabal. unUnqualComponentName $ testName t), testInterface t)
284286 | t <- testSuites pkgNoMod
@@ -299,8 +301,13 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
299301 , packageOpts = GetPackageOpts $
300302 \ sourceMap installedMap omitPkgs addPkgs cabalfp ->
301303 do (componentsModules,componentFiles,_,_) <- getPackageFiles pkgFiles cabalfp
304+ let internals = S. toList $ internalLibComponents $ M. keysSet componentsModules
305+ excludedInternals <- mapM parsePackageName internals
306+ mungedInternals <- mapM (parsePackageName . toInternalPackageMungedName) internals
302307 componentsOpts <-
303- generatePkgDescOpts sourceMap installedMap omitPkgs addPkgs cabalfp pkg componentFiles
308+ generatePkgDescOpts sourceMap installedMap
309+ (excludedInternals ++ omitPkgs) (mungedInternals ++ addPkgs)
310+ cabalfp pkg componentFiles
304311 return (componentsModules,componentFiles,componentsOpts)
305312 , packageHasExposedModules = maybe
306313 False
@@ -325,6 +332,10 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
325332 $ filter (buildable . foreignLibBuildInfo)
326333 $ foreignLibs pkg
327334
335+ toInternalPackageMungedName
336+ = T. pack . unMungedPackageName . computeCompatPackageName (pkgName pkgId)
337+ . Just . Cabal. mkUnqualComponentName . T. unpack
338+
328339 -- Gets all of the modules, files, build files, and data files that
329340 -- constitute the package. This is primarily used for dirtiness
330341 -- checking during build, as well as use by "stack ghci"
@@ -411,6 +422,12 @@ generatePkgDescOpts sourceMap installedMap omitPkgs addPkgs cabalfp pkg componen
411422 []
412423 (return . generate CLib . libBuildInfo)
413424 (library pkg)
425+ , mapMaybe
426+ (\ sublib -> do
427+ let maybeLib = CInternalLib . T. pack . Cabal. unUnqualComponentName <$> libName sublib
428+ flip generate (libBuildInfo sublib) <$> maybeLib
429+ )
430+ (subLibraries pkg)
414431 , fmap
415432 (\ exe ->
416433 generate
@@ -698,7 +715,7 @@ packageDescModulesAndFiles
698715 :: PackageDescription
699716 -> RIO Ctx (Map NamedComponent (Map ModuleName (Path Abs File )), Map NamedComponent (Set DotCabalPath ), Set (Path Abs File ), [PackageWarning ])
700717packageDescModulesAndFiles pkg = do
701- (libraryMods,libDotCabalFiles,libWarnings) <- -- FIXME add in sub libraries
718+ (libraryMods,libDotCabalFiles,libWarnings) <-
702719 maybe
703720 (return (M. empty, M. empty, [] ))
704721 (asModuleAndFileMap libComponent libraryFiles)
0 commit comments