@@ -7,8 +7,8 @@ import Cabal2Nix.Hackage ( readHashedHackage, Hackage )
77-- import Cabal2Nix.Name
88import Cabal2Nix.Package
99import Control.Monad
10−-- import Control.Monad.Par.Combinator
11−-- import Control.Monad.Par.IO
10+import Control.Monad.Par.Combinator
11+import Control.Monad.Par.IO
1212-- import Control.Monad.RWS
1313import Control.Monad.Trans
1414-- import Data.Map ( Map )
@@ -31,9 +31,9 @@ main :: IO ()
3131main = do
3232 hackage <- readHashedHackage
3333 nixpkgs <- readNixpkgPackageMap
34− generatePackageSet hackage nixpkgs
34+ runParIO (generatePackageSet hackage nixpkgs)
3535
36−generatePackageSet :: Hackage -> PackageMap -> IO ()
36+generatePackageSet :: Hackage -> PackageMap -> ParIO ()
3737generatePackageSet hackage nixpkgs = do
3838 let db = buildPackageSet hackage
3939 liftIO $ do putStrLn "/* hackage-packages.nix is an auto-generated file -- DO NOT EDIT! */"
@@ -42,26 +42,31 @@ generatePackageSet hackage nixpkgs = do
4242 putStrLn ""
4343 putStrLn "self: {"
4444 putStrLn ""
45− forM_ (Map.toList db) $ \(name, versions) -> do
45+ pkgs <- (flip parMapM) (Map.toList db) $ \(name, versions) -> do
4646 let multiVersionPackage :: Bool
4747 multiVersionPackage = Map.size versions > 1
4848
4949 latestVersion :: Version
5050 latestVersion = fst (Map.findMax versions)
5151
52− forM_ (Map.toList versions) $ \(version, descr) -> do
52+ pkg <- forM (Map.toList versions) $ \(version, descr) -> do
5353 (drv, overrides) <- generatePackage db nixpkgs name version descr
5454
5555 let nixAttr = name ++ if multiVersionPackage then "_" ++ [ if c == '.' then '_' else c | c <- display version ] else ""
5656
57− liftIO $ do print $ nest 2 $ hang ((string nixAttr) <+> equals <+> text "callPackage") 2 (parens (disp drv)) <+> (braces overrides <> semi)
58− putStrLn ""
59− when (multiVersionPackage && version == latestVersion) $
60− liftIO $ print $ nest 2 $ (string name <+> equals <+> text ("self." ++ show nixAttr)) <> semi
57+ let def = nest 2 $ hang ((string nixAttr) <+> equals <+> text "callPackage") 2 (parens (disp drv)) <+> (braces overrides <> semi)
58+ let overr = if multiVersionPackage && version == latestVersion
59+ then nest 2 $ (string name <+> equals <+> text ("self." ++ show nixAttr)) <> semi
60+ else empty
6161
62+ return (def $+$ overr)
63+
64+ return (render (vcat pkg $+$ text ""))
65+
66+ liftIO $ mapM_ putStrLn pkgs
6267 liftIO $ putStrLn "}"
6368
64−generatePackage :: Hackage -> PackageMap -> String -> Version -> GenericPackageDescription -> IO (Derivation, Doc)
69+generatePackage :: Hackage -> PackageMap -> String -> Version -> GenericPackageDescription -> ParIO (Derivation, Doc)
6570generatePackage hackage nixpkgs name version descr = do
6671 srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display version)
6772 let Just cabalFileHash = lookup "x-cabal-file-hash" (customFieldsPD (packageDescription descr))