@@ -12,6 +12,7 @@ import Control.Monad.Trans
1212import Data.Map ( Map )
1313import qualified Data.Map as Map
1414import Data.Monoid
15+import Data.Set ( Set )
1516import qualified Data.Set as Set
1617import Distribution.Hackage.DB ( Hackage, readHackage, GenericPackageDescription )
1718import Distribution.NixOS.Derivation.Cabal
@@ -22,10 +23,12 @@ main :: IO ()
2223main = readHackage >>= runParIO . generatePackageSet
2324
2425nixAttr :: String -> Version -> String
25−nixAttr name ver = name -- ++ "_" ++ [ if c == '.' then '_' else c | c <- display ver ]
26+nixAttr name _ = name -- ++ "_" ++ [ if c == '.' then '_' else c | c <- display ver ]
2627
2728generatePackageSet :: Hackage -> ParIO ()
2829generatePackageSet db = do
30+ let selectHackageNames :: Set String -> Set String
31+ selectHackageNames = Set.intersection (Map.keysSet db)
2932 pkgs <- parMapM generatePackage (Map.toList db)
3033 liftIO $ putStrLn "/* hackage-packages.nix is an auto-generated file -- DO NOT EDIT! */"
3134 liftIO $ putStrLn ""
@@ -34,12 +37,15 @@ generatePackageSet db = do
3437 liftIO $ putStrLn "self: {"
3538 liftIO $ putStrLn ""
3639 forM_ pkgs $ \(name, version, nixExpr) -> do
40+ let conflicts = Set.toAscList $ selectHackageNames $ Set.fromList (extraLibs nixExpr ++ pkgConfDeps nixExpr)
41+ overrides | null conflicts = empty
42+ | otherwise = text " inherit (pkgs) " <> hsep (map text conflicts) <> text "; "
3743 -- when (name /= toNixName' name) $
3844 -- liftIO $ print $ nest 2 $ (string (toNixName' name) <+> equals <+> text ("self." ++ show (nixAttr name version))) <> semi
3945 -- liftIO $ print $ nest 2 $ (string (toNixName' name) <+> equals <+> text ("self." ++ show (nixAttr name version))) <> semi
4046 -- when (name /= toNixName' name) $
4147 -- liftIO $ print $ nest 2 $ (string name <+> equals <+> text ("self." ++ show (nixAttr name version))) <> semi
42− liftIO $ print $ nest 2 $ hang (string (nixAttr name version) <+> equals <+> text "callPackage") 2 (parens (disp nixExpr)) <+> (text "{}" <> semi)
48+ liftIO $ print $ nest 2 $ hang (string (nixAttr name version) <+> equals <+> text "callPackage") 2 (parens (disp nixExpr)) <+> (braces overrides <> semi)
4349 liftIO $ putStrLn ""
4450 liftIO $ putStrLn "}"
4551