git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: include the test suite dependencies into the finalizePackageDescription process
commit66dc9c41f83691d5b565f2f550bdeb5b301b7e37 authorPeter Simons <simons@cryp.to> dateSun 4 Jan 2015, 23:19 (12 years ago) parent8a5ec34
1 file changed+31−23
src/hackage2nix.hs+31−23
src/hackage2nix.hs+31−23
@@ -94,10 +94,7 @@ generatePackage hackage resolver nixpkgs name version descr = do
9494 -- Currently, we add overrides that set "pkgname = null", but this is
9595 -- unsatisfactory because these dependencies may very well work when building
9696 -- the same package set with a different GHC version.
97− (missingDeps,drv') <- case cabal2nix resolver descr of
98− Left ds -> do let Right x = cabal2nix (const True) descr
99− return (ds,x)
100− Right x -> return ([],x)
97+ (missingDeps, _, drv') = cabal2nix resolver descr
10198
10299 let drv = drv' { src = srcSpec
103100 , editedCabalFile = if revision drv == 0 then "" else cabalFileHash
@@ -225,26 +222,37 @@ selectLatestMatchingPackage (Dependency (PackageName name) vrange) db =
225222-- <> header "hackage2nix -- convert the Hackage database into Nix build instructions"
226223-- )
227224
228−-- TODO: This function returns either a (minimal) list of missing dependencies
229−-- or a finalized package description of the build. Unfortunately, missing
230−-- dependencies for *testing* or *benchmarking* are not considered. I suppose,
231−-- we could turn test suites into executables for the processing to capture
232−-- their dependencies, and then add an automatic 'doCheck = false' if that
233−-- doesn't work. This whole are needs some cleanup.
234−
235−cabal2nix :: (Dependency -> Bool) -> GenericPackageDescription -> Either [Dependency] Derivation
236−cabal2nix resolver cabal = case finalize of
237− Left ds -> Left ds
238− Right (descr, flags) -> Right (cabal2nix' descr) { configureFlags = [ "-f" ++ (if b then "" else "-") ++ n | (FlagName n, b) <- flags ] }
225+cabal2nix :: (Dependency -> Bool) -> GenericPackageDescription -> ([Dependency], FlagAssignment, Derivation)
226+cabal2nix resolver cabal = (missingDeps, flags, drv)
239227 where
240− finalize :: Either [Dependency] (PackageDescription, FlagAssignment)
241− finalize = finalizePackageDescription
242− (configureCabalFlags (package (packageDescription cabal)))
243− resolver
244− (Platform X86_64 Linux) -- shouldn't be hardcoded
245− (CompilerId GHC (Version [7,8,4] [])) -- dito
246− []
247− cabal
228+ drv = (cabal2nix' descr) { configureFlags = [ "-f" ++ (if b then "" else "-") ++ n | (FlagName n, b) <- flags ] }
229+
230+ Right (descr, flags) = finalize (if null missingDeps then resolver else (const True)) cabal
231+
232+ missingDeps :: [Dependency]
233+ missingDeps = either id (const []) (finalize resolver cabal')
234+
235+ finalize :: (Dependency -> Bool) -> GenericPackageDescription -> Either [Dependency] (PackageDescription, FlagAssignment)
236+ finalize resolver' = finalizePackageDescription
237+ (configureCabalFlags (package (packageDescription cabal)))
238+ resolver'
239+ (Platform X86_64 Linux) -- shouldn't be hardcoded
240+ (CompilerId GHC (Version [7,8,4] [])) -- ditto
241+ [] -- no additional constraints
242+
243+ -- A variant of the cabal file that has all test suites enabled to ensure
244+ -- that their dependencies are recognized by finalizePackageDescription.
245+ cabal' :: GenericPackageDescription
246+ cabal' = cabal { condTestSuites = flaggedTests }
247+
248+ flaggedTests :: [(String, CondTree ConfVar [Dependency] TestSuite)]
249+ flaggedTests = map (\(n, t) -> (n, mapTreeData enableTest t)) (condTestSuites cabal)
250+
251+ enableTest :: TestSuite -> TestSuite
252+ enableTest t = t { testEnabled = True }
253+
254+
255+
248256
249257corePackages :: [PackageIdentifier] -- Core packages found on Hackageg
250258corePackages = map (\s -> maybe (error (show s ++ " is not a valid core package")) id (simpleParse s))