Skip to content

Commit 7aa1f1a

Browse files
committed
wip
1 parent 9621945 commit 7aa1f1a

File tree

8 files changed

+67
-5
lines changed

8 files changed

+67
-5
lines changed

hie.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
cradle:
2+
stack:
3+
- path: "."
4+
component: "stack:lib"

src/Stack/Build/ConstructPlan.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import Stack.Types.Compiler
4343
import Stack.Types.Config
4444
import Stack.Types.GhcPkgId
4545
import Stack.Types.NamedComponent
46+
import Stack.Types.PackageComponent (libraryPackage)
4647
import Stack.Types.Package
4748
import Stack.Types.SourceMap
4849
import Stack.Types.Version
@@ -200,7 +201,7 @@ constructPlan baseConfigOpts0 localDumpPkgs loadPackage0 sourceMap installedMap
200201
then do
201202
let toTask (_, ADRFound _ _) = Nothing
202203
toTask (name, ADRToInstall task) = Just (name, task)
203-
tasks = M.fromList $ mapMaybe toTask adrs
204+
tasks = first libraryPackage $ M.fromList $ mapMaybe toTask adrs
204205
takeSubset =
205206
case boptsCLIBuildSubset $ bcoBuildOptsCLI baseConfigOpts0 of
206207
BSAll -> pure

src/Stack/Build/Execute.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ import Stack.Types.Compiler
8282
import Stack.Types.Config
8383
import Stack.Types.GhcPkgId
8484
import Stack.Types.NamedComponent
85+
import Stack.Types.PackageComponent (forgetComponentName, PackageComponentName, getPackageNameLength)
8586
import Stack.Types.Package
8687
import Stack.Types.Version
8788
import qualified System.Directory as D
@@ -500,7 +501,7 @@ executePlan boptsCli baseConfigOpts locals globalPackages snapshotPackages local
500501
where
501502
mlargestPackageName =
502503
Set.lookupMax $
503-
Set.map (length . packageNameString) $
504+
Set.map getPackageNameLength $
504505
Map.keysSet (planTasks plan) <> Map.keysSet (planFinals plan)
505506

506507
copyExecutables
@@ -647,7 +648,7 @@ executePlan' installedMap0 targets plan ee@ExecuteEnv {..} = do
647648
when (boptsOpenHaddocks eeBuildOpts) $ do
648649
let planPkgs, localPkgs, installedPkgs, availablePkgs
649650
:: Map PackageName (PackageIdentifier, InstallLocation)
650-
planPkgs = Map.map (taskProvides &&& taskLocation) (planTasks plan)
651+
planPkgs = Map.mapKeys forgetComponentName $ Map.map (taskProvides &&& taskLocation) (planTasks plan)
651652
localPkgs =
652653
Map.fromList
653654
[(packageName p, (packageIdentifier p, Local)) | p <- map lpPackage eeLocals]

src/Stack/Types/Build.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import Stack.Types.Config
7070
import Stack.Types.GhcPkgId
7171
import Stack.Types.NamedComponent
7272
import Stack.Types.Package
73+
import Stack.Types.PackageComponent (PackageComponentName)
7374
import Stack.Types.Version
7475
import System.FilePath (pathSeparator)
7576
import RIO.Process (showProcessArgDebug)
@@ -513,8 +514,8 @@ installLocationIsMutable Local = Mutable
513514

514515
-- | A complete plan of what needs to be built and how to do it
515516
data Plan = Plan
516-
{ planTasks :: !(Map PackageName Task)
517-
, planFinals :: !(Map PackageName Task)
517+
{ planTasks :: !(Map PackageComponentName Task)
518+
, planFinals :: !(Map PackageComponentName Task)
518519
-- ^ Final actions to be taken (test, benchmark, etc)
519520
, planUnregisterLocal :: !(Map GhcPkgId (PackageIdentifier, Text))
520521
-- ^ Text is reason we're unregistering, for display only

src/Stack/Types/NamedComponent.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,20 @@ import qualified Data.Set as Set
2222
import qualified Data.Text as T
2323

2424
-- | A single, fully resolved component of a package
25+
-- This type is Cabal based, and follows the .cabal files
26+
-- possibilities.
27+
-- These options are build targets.
2528
data NamedComponent
2629
= CLib
30+
-- ^ The default library in a haskell project.
2731
| CInternalLib !Text
32+
-- ^ An optional (named) internal library.
2833
| CExe !Text
34+
-- ^ An executable.
2935
| CTest !Text
36+
-- ^ A test target.
3037
| CBench !Text
38+
-- ^ A benchmark target.
3139
deriving (Show, Eq, Ord)
3240

3341
renderComponent :: NamedComponent -> Text
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{-# LANGUAGE NoImplicitPrelude #-}
2+
{-# LANGUAGE DeriveFunctor #-}
3+
{-# LANGUAGE DeriveGeneric #-}
4+
{-# LANGUAGE DeriveDataTypeable #-}
5+
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
6+
{-# LANGUAGE OverloadedStrings #-}
7+
{-# LANGUAGE RankNTypes #-}
8+
{-# LANGUAGE FlexibleContexts #-}
9+
{-# LANGUAGE DataKinds #-}
10+
{-# LANGUAGE ConstraintKinds #-}
11+
12+
module Stack.Types.PackageComponent where
13+
14+
import Stack.Prelude
15+
import Stack.Types.NamedComponent (NamedComponent(CLib))
16+
17+
-- | Required for component-addressed build plans.
18+
-- Before introducing this, most packages were 'PackageName' addressed.
19+
-- See <https://github.com/commercialhaskell/stack/issues/4745 this issue>
20+
-- for more details.
21+
data PackageComponentName = PackageComponentName {
22+
packageName :: !PackageName,
23+
componentName :: !NamedComponent
24+
} deriving (Eq, Show, Ord)
25+
26+
-- | This is needed for computing the largest packageName length in a BuildPlan.
27+
-- See <../Build/Execute.hs#504 this file>
28+
getPackageNameLength :: PackageComponentName -> Int
29+
getPackageNameLength PackageComponentName{packageName=pn} = length . packageNameString $ pn
30+
31+
-- | This is the main case for most packages, you only depend on their default library.
32+
libraryPackage :: PackageName -> PackageComponentName
33+
libraryPackage pckName = PackageComponentName {
34+
packageName = pckName,
35+
componentName = CLib
36+
}
37+
38+
forgetComponentName :: PackageComponentName -> PackageName
39+
forgetComponentName = packageName

stack.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ library
218218
other-modules:
219219
Path.Extended
220220
Stack.Types.Cache
221+
Stack.Types.PackageComponent
221222
autogen-modules:
222223
Paths_stack
223224
hs-source-dirs:

stack.code-workspace

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"folders": [
3+
{
4+
"path": "."
5+
}
6+
]
7+
}

0 commit comments

Comments
 (0)