Skip to content

Commit 751d2a6

Browse files
committed
Use packageSubLibDeps :: !(Map MungedPackageName DepValue)
This then follows `packageDeps :: !(Map PackageName DepValue)`. `Stack.Build.ConstructPlan.addDep` is now type `MungedPackageName -> _` and `Stack.Build.ConstructPlan.addPackagesDeps` considers both `packageDeps` and `packageSubLibDeps`.
1 parent 09da0cf commit 751d2a6

File tree

4 files changed

+36
-31
lines changed

4 files changed

+36
-31
lines changed

src/Stack/Build/ConstructPlan.hs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import Data.Monoid.Map ( MonoidMap(..) )
1616
import qualified Data.Set as Set
1717
import qualified Data.Text as T
1818
import Distribution.Types.BuildType ( BuildType (Configure) )
19+
import Distribution.Types.MungedPackageName
20+
( encodeCompatPackageName )
1921
import Distribution.Types.PackageName ( mkPackageName )
2022
import Generics.Deriving.Monoid ( memptydefault, mappenddefault )
2123
import Path ( parent )
@@ -238,7 +240,7 @@ constructPlan baseConfigOpts0 localDumpPkgs loadPackage0 sourceMap installedMap
238240
sources <- getSources globalCabalVersion
239241
mcur <- view $ buildConfigL.to bcCurator
240242

241-
let onTarget = void . addDep
243+
let onTarget = void . addDep . toMungedPackageName
242244
let inner = mapM_ onTarget $ Map.keys (smtTargets $ smTargets sourceMap)
243245
pathEnvVar' <- liftIO $ maybe mempty T.pack <$> lookupEnv "PATH"
244246
let ctx = mkCtx econfig globalCabalVersion sources mcur pathEnvVar'
@@ -515,11 +517,12 @@ addFinal lp package isAllInOne buildHaddocks = do
515517
-- marked as a dependency, even if it is directly wanted. This makes sense - if
516518
-- we left out packages that are deps, it would break the --only-dependencies
517519
-- build plan.
518-
addDep :: PackageName
520+
addDep :: MungedPackageName
519521
-> M (Either ConstructPlanException AddDepRes)
520-
addDep name = do
522+
addDep mungedName = do
521523
ctx <- ask
522524
m <- get
525+
let name = encodeCompatPackageName mungedName
523526
case Map.lookup name m of
524527
Just res -> do
525528
planDebug $
@@ -803,6 +806,9 @@ addEllipsis t
803806
| T.length t < 100 = t
804807
| otherwise = T.take 97 t <> "..."
805808

809+
toMungedPackageName :: PackageName -> MungedPackageName
810+
toMungedPackageName pn = MungedPackageName pn LMainLibName
811+
806812
-- | Given a package, recurses into all of its dependencies. The results
807813
-- indicate which packages are missing, meaning that their 'GhcPkgId's will be
808814
-- figured out during the build, after they've been built. The 2nd part of the
@@ -824,9 +830,12 @@ addPackageDeps ::
824830
addPackageDeps package = do
825831
ctx <- ask
826832
checkAndWarnForUnknownTools package
827-
let deps' = packageDeps package
828-
deps <- forM (Map.toList deps') $ \(depname, DepValue range depType) -> do
829-
eres <- addDep depname
833+
let deps' =
834+
map (first toMungedPackageName) (Map.toList $ packageDeps package) <>
835+
Map.toList (packageSubLibDeps package)
836+
deps <- forM deps' $ \(mungedDepname, DepValue range depType) -> do
837+
let MungedPackageName depname depLib = mungedDepname
838+
eres <- addDep mungedDepname
830839
let getLatestApplicableVersionAndRev :: M (Maybe (Version, BlobKey))
831840
getLatestApplicableVersionAndRev = do
832841
vsAndRevs <-

src/Stack/Package.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,13 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg
251251
(setupBuildInfo pkg)
252252

253253
-- TODO: Should merge this calculation with deps.
254-
subLibDeps = S.fromList $ concatMap
255-
(\(Dependency n _ libs) -> mapMaybe (getSubLibName n) (NES.toList libs))
254+
subLibDeps = M.fromList $ concatMap
255+
(\(Dependency n vr libs) -> mapMaybe (getSubLibName n vr) (NES.toList libs))
256256
(concatMap targetBuildDepends (allBuildInfo' pkg))
257-
getSubLibName pn lib@(LSubLibName _) = Just (MungedPackageName pn lib)
258-
getSubLibName _ _ = Nothing
257+
258+
getSubLibName pn vr lib@(LSubLibName _) =
259+
Just (MungedPackageName pn lib, asLibrary vr)
260+
getSubLibName _ _ _ = Nothing
259261

260262
asLibrary range = DepValue
261263
{ dvVersionRange = range

src/Stack/Types/Build.hs

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ import Database.Persist.Sql
6161
import qualified Distribution.Package as C
6262
import Distribution.System ( Arch )
6363
import qualified Distribution.Text as C
64+
import Distribution.Types.MungedPackageName
65+
( decodeCompatPackageName )
6466
import Distribution.Types.PackageName ( mkPackageName, unPackageName )
6567
import Distribution.Types.TestSuiteInterface ( TestSuiteInterface )
6668
import Distribution.Types.UnqualComponentName
@@ -1214,28 +1216,20 @@ configureOptsNoDir econfig bco deps isLocal package = concat
12141216
-- --exact-configuration.
12151217
flags = packageFlags package `Map.union` packageDefaultFlags package
12161218

1217-
sublibDeps = flip mapMaybe (Set.toList (packageSubLibDeps package)) $ \sublib ->
1218-
let deps' = Map.toList deps
1219-
MungedPackageName subPkgName lib = sublib
1220-
subname = mkPackageName $ case lib of
1219+
depOptions = map toDepOption (Map.toList deps)
1220+
1221+
toDepOption (PackageIdentifier name _, gid) =
1222+
let MungedPackageName subPkgName lib = decodeCompatPackageName name
1223+
depOptionKey = case lib of
1224+
LMainLibName -> unPackageName name
12211225
LSubLibName cn ->
12221226
unPackageName subPkgName <> ":" <> unUnqualComponentName cn
1223-
LMainLibName -> throwM $ LibraryNotSubLibraryBug subPkgName
1224-
hasSubPkgName :: (PackageIdentifier, GhcPkgId) -> Bool
1225-
hasSubPkgName (ident, _) = C.packageName ident == subPkgName
1226-
in case find hasSubPkgName deps' of
1227-
Just (PackageIdentifier _ v, gid) ->
1228-
Just (PackageIdentifier subname v, gid)
1229-
_ -> Nothing
1230-
1231-
depOptions = map (uncurry toDepOption) (Map.toList deps <> sublibDeps)
1232-
1233-
toDepOption (PackageIdentifier name _) gid = concat
1234-
[ "--dependency="
1235-
, packageNameString name
1236-
, "="
1237-
, ghcPkgIdString gid
1238-
]
1227+
in concat
1228+
[ "--dependency="
1229+
, depOptionKey
1230+
, "="
1231+
, ghcPkgIdString gid
1232+
]
12391233

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

src/Stack/Types/Package.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ data Package = Package
165165
, packageAllDeps :: !(Set PackageName)
166166
-- ^ Original dependencies (not sieved).
167167
-- FIXME: Having `packageDeps`, `packageAllDeps`, and `packageSubLibDeps` seem redundant.
168-
, packageSubLibDeps :: !(Set MungedPackageName)
168+
, packageSubLibDeps :: !(Map MungedPackageName DepValue)
169169
-- ^ Original sub-library dependencies (not sieved).
170170
, packageGhcOptions :: ![Text]
171171
-- ^ Ghc options used on package.

0 commit comments

Comments
 (0)