git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: split core packages into those that are known to Hackage and those that are not
73e861ePeter Simons
src/hackage2nix.hs+12−8
@@ -48,7 +48,7 @@ generatePackageSet hackage nixpkgs = do
48
48
49 resolver :: Dependency -> Bool
49 resolver :: Dependency -> Bool
50 resolver dep@(Dependency (PackageName pkg) vrange) =
50 resolver dep@(Dependency (PackageName pkg) vrange) =
51− any (`matches` dep) corePackages ||
51+ any (`matches` dep) (corePackages ++ hardCorePackages) ||
52 maybe False (not . Map.null . Map.filterWithKey (\k _ -> k `withinRange` vrange)) (Map.lookup pkg defaultPackageSet)
52 maybe False (not . Map.null . Map.filterWithKey (\k _ -> k `withinRange` vrange)) (Map.lookup pkg defaultPackageSet)
53
53
54 forM_ (Map.assocs defaultPackageSet) $ \(name, vdb) ->
54 forM_ (Map.assocs defaultPackageSet) $ \(name, vdb) ->
@@ -104,10 +104,10 @@ generatePackage hackage resolver nixpkgs name version descr = do
104 }
104 }
105
105
106 selectHackageNames :: Set String -> Set String
106 selectHackageNames :: Set String -> Set String
107− selectHackageNames = Set.intersection (Map.keysSet hackage `Set.union` Set.fromList [ n | PackageIdentifier (PackageName n) _ <- corePackages ])
107+ selectHackageNames = Set.intersection (Map.keysSet hackage `Set.union` Set.fromList [ n | PackageIdentifier (PackageName n) _ <- corePackages ++ hardCorePackages ])
108
108
109 selectMissingHackageNames :: Set String -> Set String
109 selectMissingHackageNames :: Set String -> Set String
110− selectMissingHackageNames = flip Set.difference (Map.keysSet hackage `Set.union` Set.fromList [ n | PackageIdentifier (PackageName n) _ <- corePackages ])
110+ selectMissingHackageNames = flip Set.difference (Map.keysSet hackage `Set.union` Set.fromList [ n | PackageIdentifier (PackageName n) _ <- corePackages ++ hardCorePackages ])
111
111
112 conflicts :: Set String
112 conflicts :: Set String
113 conflicts = Set.difference (selectHackageNames $ Set.fromList (extraLibs drv ++ pkgConfDeps drv)) missing
113 conflicts = Set.difference (selectHackageNames $ Set.fromList (extraLibs drv ++ pkgConfDeps drv)) missing
@@ -130,7 +130,7 @@ generatePackage hackage resolver nixpkgs name version descr = do
130 overrides :: Doc
130 overrides :: Doc
131 overrides = conflictOverrides $+$ missingOverrides
131 overrides = conflictOverrides $+$ missingOverrides
132
132
133− return $ (drv { metaSection = (metaSection drv) { broken = not (Set.null missing) || not (null missingDeps) } }, overrides)
133+ return (drv, overrides)
134
134
135isKnownNixpkgAttribute :: PackageMap -> Hackage -> String -> Bool
135isKnownNixpkgAttribute :: PackageMap -> Hackage -> String -> Bool
136isKnownNixpkgAttribute nixpkgs hackage name
136isKnownNixpkgAttribute nixpkgs hackage name
@@ -246,19 +246,17 @@ cabal2nix resolver cabal = case finalize of
246 []
246 []
247 cabal
247 cabal
248
248
249−corePackages :: [PackageIdentifier]
249+corePackages :: [PackageIdentifier] -- Core packages found on Hackageg
250corePackages = map (\s -> maybe (error (show s ++ " is not a valid core package")) id (simpleParse s))
250corePackages = map (\s -> maybe (error (show s ++ " is not a valid core package")) id (simpleParse s))
251 [ "Cabal-1.18.1.5"
251 [ "Cabal-1.18.1.5"
252 , "array-0.5.0.0"
252 , "array-0.5.0.0"
253 , "base-4.7.0.2"
253 , "base-4.7.0.2"
254− , "bin-package-db-0.0.0.0"
255 , "binary-0.7.1.0"
254 , "binary-0.7.1.0"
256 , "bytestring-0.10.4.0"
255 , "bytestring-0.10.4.0"
257 , "containers-0.5.5.1"
256 , "containers-0.5.5.1"
258 , "deepseq-1.3.0.2"
257 , "deepseq-1.3.0.2"
259 , "directory-1.2.1.0"
258 , "directory-1.2.1.0"
260 , "filepath-1.3.0.2"
259 , "filepath-1.3.0.2"
261− , "ghc-7.8.4"
262 , "ghc-prim-0.3.1.0"
260 , "ghc-prim-0.3.1.0"
263 , "haskeline-0.7.1.2"
261 , "haskeline-0.7.1.2"
264 , "haskell2010-1.1.2.0"
262 , "haskell2010-1.1.2.0"
@@ -270,7 +268,6 @@ corePackages = map (\s -> maybe (error (show s ++ " is not a valid core package"
270 , "old-time-1.1.0.2"
268 , "old-time-1.1.0.2"
271 , "pretty-1.1.1.1"
269 , "pretty-1.1.1.1"
272 , "process-1.2.0.0"
270 , "process-1.2.0.0"
273− , "rts-1.0"
274 , "template-haskell-2.9.0.0"
271 , "template-haskell-2.9.0.0"
275 , "terminfo-0.4.0.0"
272 , "terminfo-0.4.0.0"
276 , "time-1.4.2"
273 , "time-1.4.2"
@@ -278,3 +275,10 @@ corePackages = map (\s -> maybe (error (show s ++ " is not a valid core package"
278 , "unix-2.7.0.1"
275 , "unix-2.7.0.1"
279 , "xhtml-3000.2.1"
276 , "xhtml-3000.2.1"
280 ]
277 ]
278+
279+hardCorePackages :: [PackageIdentifier] -- Core packages not found on Hackage.
280+hardCorePackages = map (\s -> maybe (error (show s ++ " is not a valid core package")) id (simpleParse s))
281+ [ "bin-package-db-0.0.0.0"
282+ , "ghc-7.8.4"
283+ , "rts-1.0"
284+ ]