@@ -7,8 +7,8 @@ import Cabal2Nix.Hackage ( readHashedHackage, Hackage )
7-- import Cabal2Nix.Name
7-- import Cabal2Nix.Name
8import Cabal2Nix.Package
8import Cabal2Nix.Package
9import Control.Monad
9import Control.Monad
10−-- import Control.Monad.Par.Combinator
10+import Control.Monad.Par.Combinator
11−-- import Control.Monad.Par.IO
11+import Control.Monad.Par.IO
12-- import Control.Monad.RWS
12-- import Control.Monad.RWS
13import Control.Monad.Trans
13import Control.Monad.Trans
14-- import Data.Map ( Map )
14-- import Data.Map ( Map )
@@ -31,9 +31,9 @@ main :: IO ()
32 hackage <- readHashedHackage
32 hackage <- readHashedHackage
33 nixpkgs <- readNixpkgPackageMap
33 nixpkgs <- readNixpkgPackageMap
34− generatePackageSet hackage nixpkgs
34+ runParIO (generatePackageSet hackage nixpkgs)
36−generatePackageSet :: Hackage -> PackageMap -> IO ()
36+generatePackageSet :: Hackage -> PackageMap -> ParIO ()
37generatePackageSet hackage nixpkgs = do
37generatePackageSet hackage nixpkgs = do
38 let db = buildPackageSet hackage
38 let db = buildPackageSet hackage
39 liftIO $ do putStrLn "/* hackage-packages.nix is an auto-generated file -- DO NOT EDIT! */"
39 liftIO $ do putStrLn "/* hackage-packages.nix is an auto-generated file -- DO NOT EDIT! */"
@@ -42,26 +42,31 @@ generatePackageSet hackage nixpkgs = do
42 putStrLn ""
42 putStrLn ""
43 putStrLn "self: {"
43 putStrLn "self: {"
44 putStrLn ""
44 putStrLn ""
45− forM_ (Map.toList db) $ \(name, versions) -> do
45+ pkgs <- (flip parMapM) (Map.toList db) $ \(name, versions) -> do
46 let multiVersionPackage :: Bool
46 let multiVersionPackage :: Bool
47 multiVersionPackage = Map.size versions > 1
47 multiVersionPackage = Map.size versions > 1
49 latestVersion :: Version
49 latestVersion :: Version
50 latestVersion = fst (Map.findMax versions)
50 latestVersion = fst (Map.findMax versions)
52− forM_ (Map.toList versions) $ \(version, descr) -> do
52+ pkg <- forM (Map.toList versions) $ \(version, descr) -> do
53 (drv, overrides) <- generatePackage db nixpkgs name version descr
53 (drv, overrides) <- generatePackage db nixpkgs name version descr
55 let nixAttr = name ++ if multiVersionPackage then "_" ++ [ if c == '.' then '_' else c | c <- display version ] else ""
55 let nixAttr = name ++ if multiVersionPackage then "_" ++ [ if c == '.' then '_' else c | c <- display version ] else ""
57− liftIO $ do print $ nest 2 $ hang ((string nixAttr) <+> equals <+> text "callPackage") 2 (parens (disp drv)) <+> (braces overrides <> semi)
57+ let def = nest 2 $ hang ((string nixAttr) <+> equals <+> text "callPackage") 2 (parens (disp drv)) <+> (braces overrides <> semi)
59− when (multiVersionPackage && version == latestVersion) $
58+ let overr = if multiVersionPackage && version == latestVersion
60− liftIO $ print $ nest 2 $ (string name <+> equals <+> text ("self." ++ show nixAttr)) <> semi
59+ then nest 2 $ (string name <+> equals <+> text ("self." ++ show nixAttr)) <> semi
62+ return (def $+$ overr)
64+ return (render (vcat pkg $+$ text ""))
66+ liftIO $ mapM_ putStrLn pkgs
62 liftIO $ putStrLn "}"
67 liftIO $ putStrLn "}"
64−generatePackage :: Hackage -> PackageMap -> String -> Version -> GenericPackageDescription -> IO (Derivation, Doc)
69+generatePackage :: Hackage -> PackageMap -> String -> Version -> GenericPackageDescription -> ParIO (Derivation, Doc)
65generatePackage hackage nixpkgs name version descr = do
70generatePackage hackage nixpkgs name version descr = do
66 srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display version)
71 srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display version)
67 let Just cabalFileHash = lookup "x-cabal-file-hash" (customFieldsPD (packageDescription descr))
72 let Just cabalFileHash = lookup "x-cabal-file-hash" (customFieldsPD (packageDescription descr))