@@ -12,8 +12,9 @@ import Prelude hiding (pi)
12
12
import Distribution.Compiler
13
13
import Distribution.InstalledPackageInfo as IPI
14
14
import Distribution.Package -- from Cabal
15
+ import Distribution.Simple.BuildToolDepends -- from Cabal
15
16
import Distribution.Types.Dependency -- from Cabal
16
- import Distribution.Types.LegacyExeDependency -- from Cabal
17
+ import Distribution.Types.ExeDependency -- from Cabal
17
18
import Distribution.Types.PkgconfigDependency -- from Cabal
18
19
import Distribution.Types.UnqualComponentName -- from Cabal
19
20
import Distribution.PackageDescription as PD -- from Cabal
@@ -131,7 +132,7 @@ convGPD os arch cinfo strfl sexes pi
131
132
132
133
conv :: Mon. Monoid a => Component -> (a -> BuildInfo ) ->
133
134
CondTree ConfVar [Dependency ] a -> FlaggedDeps Component PN
134
- conv comp getInfo = convCondTree os arch cinfo pi fds comp getInfo ipns sexes .
135
+ conv comp getInfo = convCondTree pkg os arch cinfo pi fds comp getInfo ipns sexes .
135
136
PDC. addBuildableCondition getInfo
136
137
137
138
flagged_deps
@@ -178,47 +179,33 @@ filterIPNs ipns (Dependency pn _) fd
178
179
-- | Convert condition trees to flagged dependencies. Mutually
179
180
-- recursive with 'convBranch'. See 'convBranch' for an explanation
180
181
-- of all arguments preceeding the input 'CondTree'.
181
- convCondTree :: OS -> Arch -> CompilerInfo -> PI PN -> FlagInfo ->
182
+ convCondTree :: PackageDescription -> OS -> Arch -> CompilerInfo -> PI PN -> FlagInfo ->
182
183
Component ->
183
184
(a -> BuildInfo ) ->
184
185
IPNs ->
185
186
SolveExecutables ->
186
187
CondTree ConfVar [Dependency ] a -> FlaggedDeps Component PN
187
- convCondTree os arch cinfo pi @ (PI pn _) fds comp getInfo ipns sexes@ (SolveExecutables sexes') (CondNode info ds branches) =
188
+ convCondTree pkg os arch cinfo pi @ (PI pn _) fds comp getInfo ipns sexes@ (SolveExecutables sexes') (CondNode info ds branches) =
188
189
concatMap
189
190
(\ d -> filterIPNs ipns d (D. Simple (convLibDep pn d) comp))
190
191
ds -- unconditional package dependencies
191
192
++ L. map (\ e -> D. Simple (Ext e) comp) (PD. allExtensions bi) -- unconditional extension dependencies
192
193
++ L. map (\ l -> D. Simple (Lang l) comp) (PD. allLanguages bi) -- unconditional language dependencies
193
194
++ L. map (\ (PkgconfigDependency pkn vr) -> D. Simple (Pkg pkn vr) comp) (PD. pkgconfigDepends bi) -- unconditional pkg-config dependencies
194
- ++ concatMap (convBranch os arch cinfo pi fds comp getInfo ipns sexes) branches
195
+ ++ concatMap (convBranch pkg os arch cinfo pi fds comp getInfo ipns sexes) branches
195
196
-- build-tools dependencies
196
197
-- NB: Only include these dependencies if SolveExecutables
197
198
-- is True. It might be false in the legacy solver
198
199
-- codepath, in which case there won't be any record of
199
200
-- an executable we need.
200
- ++ [ D. Simple (convExeDep pn ( Dependency pn' vr) ) comp
201
+ ++ [ D. Simple (convExeDep pn exeDep ) comp
201
202
| sexes'
202
- , LegacyExeDependency exe vr <- PD. buildTools bi
203
- , Just pn' <- return $ packageProvidingBuildTool exe
203
+ , exeDep <- getAllToolDependencies pkg bi
204
+ , not $ isInternal pkg exeDep
204
205
]
205
206
where
206
207
bi = getInfo info
207
208
208
- -- | This function maps known @build-tools@ entries to Haskell package
209
- -- names which provide them. This mapping corresponds exactly to
210
- -- those build-tools that Cabal understands by default
211
- -- ('builtinPrograms'), and are cabal install'able. This mapping is
212
- -- purely for legacy; for other executables, @tool-depends@ should be
213
- -- used instead.
214
- --
215
- packageProvidingBuildTool :: String -> Maybe PackageName
216
- packageProvidingBuildTool s =
217
- if s `elem` [" hscolour" , " haddock" , " happy" , " alex" , " hsc2hs" ,
218
- " c2hs" , " cpphs" , " greencard" ]
219
- then Just (mkPackageName s)
220
- else Nothing
221
-
222
209
-- | Branch interpreter. Mutually recursive with 'convCondTree'.
223
210
--
224
211
-- Here, we try to simplify one of Cabal's condition tree branches into the
@@ -250,7 +237,7 @@ packageProvidingBuildTool s =
250
237
--
251
238
-- 6. The set of package names which should be considered internal
252
239
-- dependencies, and thus not handled as dependencies.
253
- convBranch :: OS -> Arch -> CompilerInfo ->
240
+ convBranch :: PackageDescription -> OS -> Arch -> CompilerInfo ->
254
241
PI PN -> FlagInfo ->
255
242
Component ->
256
243
(a -> BuildInfo ) ->
@@ -259,9 +246,9 @@ convBranch :: OS -> Arch -> CompilerInfo ->
259
246
(Condition ConfVar ,
260
247
CondTree ConfVar [Dependency ] a ,
261
248
Maybe (CondTree ConfVar [Dependency ] a )) -> FlaggedDeps Component PN
262
- convBranch os arch cinfo pi @ (PI pn _) fds comp getInfo ipns sexes (c', t', mf') =
263
- go c' ( convCondTree os arch cinfo pi fds comp getInfo ipns sexes t')
264
- (maybe [] (convCondTree os arch cinfo pi fds comp getInfo ipns sexes) mf')
249
+ convBranch pkg os arch cinfo pi @ (PI pn _) fds comp getInfo ipns sexes (c', t', mf') =
250
+ go c' ( convCondTree pkg os arch cinfo pi fds comp getInfo ipns sexes t')
251
+ (maybe [] (convCondTree pkg os arch cinfo pi fds comp getInfo ipns sexes) mf')
265
252
where
266
253
go :: Condition ConfVar ->
267
254
FlaggedDeps Component PN -> FlaggedDeps Component PN -> FlaggedDeps Component PN
@@ -313,8 +300,9 @@ convLibDep :: PN -> Dependency -> Dep PN
313
300
convLibDep pn' (Dependency pn vr) = Dep False {- not exe -} pn (Constrained [(vr, P pn')])
314
301
315
302
-- | Convert a Cabal dependency on a executable (build-tools) to a solver-specific dependency.
316
- convExeDep :: PN -> Dependency -> Dep PN
317
- convExeDep pn' (Dependency pn vr) = Dep True pn (Constrained [(vr, P pn')])
303
+ -- TODO do something about the name of the exe component itself
304
+ convExeDep :: PN -> ExeDependency -> Dep PN
305
+ convExeDep pn' (ExeDependency pn _ vr) = Dep True pn (Constrained [(vr, P pn')])
318
306
319
307
-- | Convert setup dependencies
320
308
convSetupBuildInfo :: PI PN -> SetupBuildInfo -> FlaggedDeps Component PN
0 commit comments