@@ -7,7 +7,6 @@ module Distribution.Nixpkgs.Haskell.FromCabal
77 )
88 where
99
10−import Control.Arrow ( second )
1110import Control.Lens
1211import Data.Maybe
1312import Data.Set ( Set )
@@ -24,7 +23,10 @@ import qualified Distribution.Nixpkgs.Meta as Nix
2423import Distribution.Package
2524import Distribution.PackageDescription
2625import qualified Distribution.PackageDescription as Cabal
27−import Distribution.PackageDescription.Configuration
26+import Distribution.Types.LegacyExeDependency as Cabal
27+import Distribution.Types.PkgconfigDependency as Cabal
28+import Distribution.PackageDescription.Configuration as Cabal
29+import Distribution.Types.ComponentRequestedSpec as Cabal
2830import Distribution.System
2931import Distribution.Text ( display )
3032import Distribution.Version
@@ -40,7 +42,13 @@ fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flag
4042 -- We have to call the Cabal finalizer several times with different resolver
4143 -- functions, and this convenience function makes our code shorter.
4244 finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
43− finalize resolver = finalizePackageDescription flags resolver arch compiler constraints (enableBenchmarks (enableTests genDesc))
45+ finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
46+
47+ requestedComponents :: ComponentRequestedSpec
48+ requestedComponents = defaultComponentRequestedSpec
49+ { testsRequested = True
50+ , benchmarksRequested = True
51+ }
4452
4553 descr :: PackageDescription; missingDeps :: [Dependency]
4654 (descr,missingDeps) = case finalize jailbrokenResolver of
@@ -93,7 +101,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
93101 xrev = maybe 0 read (lookup "x-revision" customFieldsPD)
94102
95103 resolveInHackage :: Identifier -> Binding
96− resolveInHackage i | (i^.ident) `elem` [ n | (Dependency (PackageName n) _) <- missingDeps ] = bindNull i
104+ resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _) <- missingDeps ] = bindNull i
97105 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
98106
99107 goodScopes :: Set [Identifier]
@@ -109,15 +117,15 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
109117 | otherwise = bindNull i
110118
111119 resolveInHackageThenNixpkgs :: Identifier -> Binding
112− resolveInHackageThenNixpkgs i | haskellResolver (Dependency (PackageName (i^.ident)) anyVersion) = resolveInHackage i
120+ resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion) = resolveInHackage i
113121 | otherwise = resolveInNixpkgs i
114122
115123 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
116124 convertBuildInfo Cabal.BuildInfo {..} = mempty
117125 & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends ]
118126 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
119− & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | Dependency (PackageName x) _ <- pkgconfigDepends, y <- libNixName x ]
120− & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | Dependency (PackageName x) _ <- buildTools, y <- buildToolNixName x ]
127+ & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
128+ & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | LegacyExeDependency x _ <- buildTools, y <- buildToolNixName x ]
121129
122130 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
123131 convertSetupBuildInfo bi = mempty
@@ -125,21 +133,3 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
125133
126134bindNull :: Identifier -> Binding
127135bindNull i = binding # (i, path # ["null"])
128−
129−enableTests :: GenericPackageDescription -> GenericPackageDescription
130−enableTests gd = gd { condTestSuites = flaggedTests }
131− where
132− flaggedTests :: [(String, CondTree ConfVar [Dependency] TestSuite)]
133− flaggedTests = map (second (mapTreeData enableTest)) (condTestSuites gd)
134−
135− enableTest :: TestSuite -> TestSuite
136− enableTest t = t { testEnabled = True }
137−
138−enableBenchmarks :: GenericPackageDescription -> GenericPackageDescription
139−enableBenchmarks gd = gd { condBenchmarks = flaggedBenchmarks }
140− where
141− flaggedBenchmarks :: [(String, CondTree ConfVar [Dependency] Benchmark)]
142− flaggedBenchmarks = map (second (mapTreeData enableBenchmark)) (condBenchmarks gd)
143−
144− enableBenchmark :: Benchmark -> Benchmark
145− enableBenchmark t = t { benchmarkEnabled = True }