Skip to content

Commit b1487b4

Browse files
committed
Implement "tool-depends" in Cabal, and legacy "build-tools" via desugar
1 parent f835a5c commit b1487b4

File tree

7 files changed

+35
-30
lines changed

7 files changed

+35
-30
lines changed

Cabal/Distribution/Backpack/ComponentsGraph.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ import Distribution.PackageDescription as PD hiding (Flag)
1212
import Distribution.Simple.LocalBuildInfo
1313
import Distribution.Types.ComponentRequestedSpec
1414
import Distribution.Types.Dependency
15+
import Distribution.Types.ExeDependency
1516
import Distribution.Types.LegacyExeDependency
1617
import Distribution.Types.UnqualComponentName
1718
import Distribution.Simple.Utils
1819
import Distribution.Compat.Graph (Node(..))
20+
import Distribution.FooBar
1921
import qualified Distribution.Compat.Graph as Graph
2022

2123
import Distribution.Text
@@ -55,9 +57,8 @@ toComponentsGraph enabled pkg_descr =
5557
-- The dependencies for the given component
5658
componentDeps component =
5759
[ CExeName toolname
58-
| LegacyExeDependency name _ <- buildTools bi
59-
, let toolname = mkUnqualComponentName name
60-
, toolname `elem` map exeName (executables pkg_descr) ]
60+
| (ExeDependency _ toolname _)
61+
<- getAllInternalToolDependencies pkg_descr bi ]
6162

6263
++ [ if pkgname == packageName pkg_descr
6364
then CLibName

Cabal/Distribution/Backpack/ConfiguredComponent.hs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Distribution.Compat.Prelude hiding ((<>))
1919
import Distribution.Backpack.Id
2020

2121
import Distribution.Types.Dependency
22-
import Distribution.Types.LegacyExeDependency
22+
import Distribution.Types.ExeDependency
2323
import Distribution.Types.IncludeRenaming
2424
import Distribution.Types.Mixin
2525
import Distribution.Types.UnqualComponentName
@@ -28,6 +28,7 @@ import Distribution.PackageDescription as PD hiding (Flag)
2828
import Distribution.Simple.Setup as Setup
2929
import Distribution.Simple.LocalBuildInfo
3030
import Distribution.Version
31+
import Distribution.FooBar
3132

3233
import qualified Data.Set as Set
3334
import qualified Data.Map as Map
@@ -143,8 +144,9 @@ toConfiguredComponent pkg_descr this_cid
143144
| otherwise
144145
= Map.toList external_lib_map
145146
exe_deps = [ cid
146-
| LegacyExeDependency name _ <- buildTools bi
147-
, Just cid <- [ Map.lookup (mkUnqualComponentName name) exe_map ] ]
147+
| (ExeDependency _ toolName _)
148+
<- getAllInternalToolDependencies pkg_descr bi
149+
, Just cid <- [ Map.lookup toolName exe_map ] ]
148150

149151
-- | Also computes the 'ComponentId', and sets cc_public if necessary.
150152
-- This is Cabal-only; cabal-install won't use this.

Cabal/Distribution/Backpack/LinkedComponent.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ data LinkedComponent
5151
lc_insts :: [(ModuleName, OpenModule)],
5252
lc_component :: Component,
5353
lc_shape :: ModuleShape,
54-
-- | Local buildTools dependencies
54+
-- | Local "build-tools" and "tool-depends" dependencies
5555
lc_internal_build_tools :: [OpenUnitId],
5656
lc_public :: Bool,
5757
lc_includes :: [(OpenUnitId, ModuleRenaming)],

Cabal/Distribution/FooBar.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,14 @@ getAllToolDependencies pkg bi =
5757
-- conditions.
5858
isInternal :: PackageDescription -> ExeDependency -> Bool
5959
isInternal pkg (ExeDependency n _ _) = n == packageName pkg
60+
61+
62+
-- | Get internal "tool-depends", along with internal "build-tools"
63+
--
64+
-- This is a tiny function, but used in a number of places. The same
65+
-- restrictions that apply to `isInternal` also apply to this function.
66+
getAllInternalToolDependencies :: PackageDescription
67+
-> BuildInfo
68+
-> [ExeDependency]
69+
getAllInternalToolDependencies pkg bi =
70+
filter (isInternal pkg) $ getAllToolDependencies pkg bi

Cabal/Distribution/PackageDescription/Check.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,7 @@ checkFields pkg =
602602
internalExeDeps =
603603
[ dep
604604
| bi <- allBuildInfo pkg
605-
, dep <- getAllToolDependencies pkg bi
606-
, isInternal pkg dep
605+
, dep <- getAllInternalToolDependencies pkg bi
607606
]
608607

609608
depInternalLibraryWithExtraVersion =

Cabal/Distribution/Simple/Build.hs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import Prelude ()
3030
import Distribution.Compat.Prelude
3131

3232
import Distribution.Types.Dependency
33-
import Distribution.Types.LegacyExeDependency
33+
import Distribution.Types.ExeDependency
3434
import Distribution.Types.LocalBuildInfo
3535
import Distribution.Types.TargetInfo
3636
import Distribution.Types.ComponentRequestedSpec
@@ -72,12 +72,12 @@ import Distribution.Simple.Utils
7272
import Distribution.System
7373
import Distribution.Text
7474
import Distribution.Verbosity
75+
import Distribution.FooBar
7576

7677
import Distribution.Compat.Graph (IsNode(..))
7778

7879
import Control.Monad
7980
import qualified Data.Set as Set
80-
import Data.List ( intersect )
8181
import System.FilePath ( (</>), (<.>), takeDirectory )
8282
import System.Directory ( getCurrentDirectory )
8383

@@ -534,14 +534,10 @@ addInternalBuildTools pkg lbi bi progs =
534534
foldr updateProgram progs internalBuildTools
535535
where
536536
internalBuildTools =
537-
[ simpleConfiguredProgram toolName (FoundOnSystem toolLocation)
538-
| toolName <- toolNames
539-
, let toolLocation = buildDir lbi </> toolName </> toolName <.> exeExtension ]
540-
toolNames = intersect buildToolNames internalExeNames
541-
internalExeNames = map (unUnqualComponentName . exeName) (executables pkg)
542-
buildToolNames = map buildToolName (buildTools bi)
543-
where
544-
buildToolName (LegacyExeDependency pname _) = pname
537+
[ simpleConfiguredProgram toolName' (FoundOnSystem toolLocation)
538+
| ExeDependency _ toolName _ <- getAllInternalToolDependencies pkg bi
539+
, let toolName' = unUnqualComponentName toolName
540+
, let toolLocation = buildDir lbi </> toolName' </> toolName' <.> exeExtension ]
545541

546542

547543
-- TODO: build separate libs in separate dirs so that we can build

Cabal/Distribution/Simple/Configure.hs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ import Distribution.Simple.Setup as Setup
8080
import Distribution.Simple.BuildTarget
8181
import Distribution.Simple.LocalBuildInfo
8282
import Distribution.Types.Dependency
83+
import Distribution.Types.ExeDependency
8384
import Distribution.Types.LegacyExeDependency
8485
import Distribution.Types.PkgconfigDependency
8586
import Distribution.Types.LocalBuildInfo
@@ -99,6 +100,7 @@ import Distribution.Backpack.Configure
99100
import Distribution.Backpack.PreExistingComponent
100101
import Distribution.Backpack.ConfiguredComponent (newPackageDepsBehaviour)
101102
import Distribution.Backpack.Id
103+
import Distribution.FooBar
102104
import Distribution.Utils.LogProgress
103105

104106
import qualified Distribution.Simple.GHC as GHC
@@ -566,17 +568,11 @@ configure (pkg_descr0', pbi) cfg = do
566568
--
567569
-- TODO: Factor this into a helper package.
568570
let requiredBuildTools =
569-
[ buildTool
570-
| let exeNames = map (unUnqualComponentName . exeName) (executables pkg_descr)
571-
, bi <- enabledBuildInfos pkg_descr enabled
572-
, buildTool@(LegacyExeDependency toolPName reqVer)
573-
<- buildTools bi
574-
, let isInternal =
575-
toolPName `elem` exeNames
576-
-- we assume all internal build-tools are
577-
-- versioned with the package:
578-
&& packageVersion pkg_descr `withinRange` reqVer
579-
, not isInternal ]
571+
[ LegacyExeDependency (unUnqualComponentName eName) versionRange
572+
| bi <- enabledBuildInfos pkg_descr enabled
573+
, buildTool@(ExeDependency _ eName versionRange)
574+
<- getAllToolDependencies pkg_descr bi
575+
, not $ isInternal pkg_descr buildTool ]
580576

581577
programDb' <-
582578
configureAllKnownPrograms (lessVerbose verbosity) programDb

0 commit comments

Comments
 (0)