@@ -7,7 +7,6 @@ module Distribution.Nixpkgs.Haskell.FromCabal
10−import Control.Arrow ( second )
11import Control.Lens
10import Control.Lens
12import Data.Maybe
11import Data.Maybe
13import Data.Set ( Set )
12import Data.Set ( Set )
@@ -24,7 +23,10 @@ import qualified Distribution.Nixpkgs.Meta as Nix
24import Distribution.Package
23import Distribution.Package
25import Distribution.PackageDescription
24import Distribution.PackageDescription
26import qualified Distribution.PackageDescription as Cabal
25import qualified Distribution.PackageDescription as Cabal
26+import Distribution.Types.LegacyExeDependency as Cabal
27+import Distribution.Types.PkgconfigDependency as Cabal
27−import Distribution.PackageDescription.Configuration
28+import Distribution.PackageDescription.Configuration as Cabal
29+import Distribution.Types.ComponentRequestedSpec as Cabal
28import Distribution.System
30import Distribution.System
29import Distribution.Text ( display )
31import Distribution.Text ( display )
30import Distribution.Version
32import Distribution.Version
@@ -40,7 +42,13 @@ fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flag
40 -- We have to call the Cabal finalizer several times with different resolver
42 -- We have to call the Cabal finalizer several times with different resolver
41 -- functions, and this convenience function makes our code shorter.
43 -- functions, and this convenience function makes our code shorter.
42 finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
44 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
47+ requestedComponents :: ComponentRequestedSpec
48+ requestedComponents = defaultComponentRequestedSpec
49+ { testsRequested = True
50+ , benchmarksRequested = True
45 descr :: PackageDescription; missingDeps :: [Dependency]
53 descr :: PackageDescription; missingDeps :: [Dependency]
46 (descr,missingDeps) = case finalize jailbrokenResolver of
54 (descr,missingDeps) = case finalize jailbrokenResolver of
@@ -93,7 +101,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
93 xrev = maybe 0 read (lookup "x-revision" customFieldsPD)
101 xrev = maybe 0 read (lookup "x-revision" customFieldsPD)
95 resolveInHackage :: Identifier -> Binding
103 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
97 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
105 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
99 goodScopes :: Set [Identifier]
107 goodScopes :: Set [Identifier]
@@ -109,15 +117,15 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
109 | otherwise = bindNull i
117 | otherwise = bindNull i
111 resolveInHackageThenNixpkgs :: Identifier -> Binding
119 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
113 | otherwise = resolveInNixpkgs i
121 | otherwise = resolveInNixpkgs i
115 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
123 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
116 convertBuildInfo Cabal.BuildInfo {..} = mempty
124 convertBuildInfo Cabal.BuildInfo {..} = mempty
117 & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends ]
125 & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends ]
118 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
126 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
119− & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | Dependency (PackageName x) _ <- pkgconfigDepends, y <- libNixName x ]
127+ & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
120− & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | Dependency (PackageName x) _ <- buildTools, y <- buildToolNixName x ]
128+ & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | LegacyExeDependency x _ <- buildTools, y <- buildToolNixName x ]
122 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
130 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
123 convertSetupBuildInfo bi = mempty
131 convertSetupBuildInfo bi = mempty
@@ -125,21 +133,3 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
126bindNull :: Identifier -> Binding
134bindNull :: Identifier -> Binding
127bindNull i = binding # (i, path # ["null"])
135bindNull i = binding # (i, path # ["null"])
129−enableTests :: GenericPackageDescription -> GenericPackageDescription
130−enableTests gd = gd { condTestSuites = flaggedTests }
132− flaggedTests :: [(String, CondTree ConfVar [Dependency] TestSuite)]
133− flaggedTests = map (second (mapTreeData enableTest)) (condTestSuites gd)
135− enableTest :: TestSuite -> TestSuite
136− enableTest t = t { testEnabled = True }
138−enableBenchmarks :: GenericPackageDescription -> GenericPackageDescription
139−enableBenchmarks gd = gd { condBenchmarks = flaggedBenchmarks }
141− flaggedBenchmarks :: [(String, CondTree ConfVar [Dependency] Benchmark)]
142− flaggedBenchmarks = map (second (mapTreeData enableBenchmark)) (condBenchmarks gd)
144− enableBenchmark :: Benchmark -> Benchmark
145− enableBenchmark t = t { benchmarkEnabled = True }