Skip to content

Commit c1e0360

Browse files
authored
Merge pull request #6063 from commercialhaskell/sublibdeps
Add sub-library dependencies to Package type
2 parents 93820ae + 99436d4 commit c1e0360

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

src/Stack/Package.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import qualified Data.Map.Strict as M
2525
import qualified Data.Set as S
2626
import qualified Data.Text as T
2727
import Distribution.CabalSpecVersion ( cabalSpecToVersionDigits )
28+
import qualified Distribution.Compat.NonEmptySet as NES
2829
import Distribution.Compiler
2930
( CompilerFlavor (..), PerCompilerFlavor (..) )
3031
import Distribution.Package ( mkPackageName )
@@ -126,6 +127,7 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
126127
, packageDefaultFlags = M.fromList
127128
[(flagName flag, flagDefault flag) | flag <- pkgFlags]
128129
, packageAllDeps = M.keysSet deps
130+
, packageSubLibDeps = subLibDeps
129131
, packageLibraries =
130132
let mlib = do
131133
lib <- library pkg
@@ -244,10 +246,19 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
244246
, asLibrary <$> fromMaybe M.empty msetupDeps
245247
, knownTools
246248
])
249+
247250
msetupDeps = fmap
248251
(M.fromList . map (depPkgName &&& depVerRange) . setupDepends)
249252
(setupBuildInfo pkg)
250253

254+
subLibDeps = M.fromList $ concatMap
255+
(\(Dependency n vr libs) -> mapMaybe (getSubLibName n vr) (NES.toList libs))
256+
(concatMap targetBuildDepends (allBuildInfo' pkg))
257+
258+
getSubLibName pn vr lib@(LSubLibName _) =
259+
Just (MungedPackageName pn lib, asLibrary vr)
260+
getSubLibName _ _ _ = Nothing
261+
251262
asLibrary range = DepValue
252263
{ dvVersionRange = range
253264
, dvType = AsLibrary

src/Stack/Types/Build.hs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,14 @@ import Database.Persist.Sql
5858
( PersistField (..), PersistFieldSql (..)
5959
, PersistValue (PersistText), SqlType (SqlString)
6060
)
61-
import Distribution.PackageDescription
62-
( TestSuiteInterface, mkPackageName )
6361
import Distribution.System ( Arch )
6462
import qualified Distribution.Text as C
63+
import Distribution.Types.MungedPackageName
64+
( decodeCompatPackageName )
65+
import Distribution.Types.PackageName ( mkPackageName, unPackageName )
66+
import Distribution.Types.TestSuiteInterface ( TestSuiteInterface )
67+
import Distribution.Types.UnqualComponentName
68+
( unUnqualComponentName )
6569
import qualified Distribution.Version as C
6670
import Path ( parseRelDir, (</>), parent )
6771
import Path.Extra ( toFilePathNoTrailingSep )
@@ -1207,14 +1211,20 @@ configureOptsNoDir econfig bco deps isLocal package = concat
12071211
-- --exact-configuration.
12081212
flags = packageFlags package `Map.union` packageDefaultFlags package
12091213

1210-
depOptions = map (uncurry toDepOption) $ Map.toList deps
1214+
depOptions = map toDepOption $ Map.toList deps
12111215

1212-
toDepOption (PackageIdentifier name _) gid = concat
1216+
toDepOption (PackageIdentifier name _, gid) = concat
12131217
[ "--dependency="
1214-
, packageNameString name
1218+
, depOptionKey
12151219
, "="
12161220
, ghcPkgIdString gid
12171221
]
1222+
where
1223+
MungedPackageName subPkgName lib = decodeCompatPackageName name
1224+
depOptionKey = case lib of
1225+
LMainLibName -> unPackageName name
1226+
LSubLibName cn ->
1227+
unPackageName subPkgName <> ":" <> unUnqualComponentName cn
12181228

12191229
-- | Get set of wanted package names from locals.
12201230
wantedLocalPackages :: [LocalPackage] -> Set PackageName

src/Stack/Types/Package.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ data Package = Package
164164
-- the hard-coded lookup.
165165
, packageAllDeps :: !(Set PackageName)
166166
-- ^ Original dependencies (not sieved).
167+
, packageSubLibDeps :: !(Map MungedPackageName DepValue)
168+
-- ^ Original sub-library dependencies (not sieved).
167169
, packageGhcOptions :: ![Text]
168170
-- ^ Ghc options used on package.
169171
, packageCabalConfigOpts :: ![Text]

0 commit comments

Comments
 (0)