@@ -5,47 +5,21 @@ module Main ( main ) where
55import Cabal2Nix.Generate
66-- import Cabal2Nix.Name
77import Cabal2Nix.Package
8+import Cabal2Nix.Hackage ( readHashedHackage, Hackage )
89import Control.Monad
910import Control.Monad.Par.Combinator
1011import Control.Monad.Par.IO
1112import Control.Monad.Trans
12−import Data.ByteString.Lazy ( ByteString )
13−import Data.Digest.Pure.SHA ( sha256, showDigest )
1413import Data.Map ( Map )
1514import qualified Data.Map as Map
1615import Data.Monoid
1716import Data.Set ( Set )
1817import qualified Data.Set as Set
19−import Distribution.Hackage.DB ( Hackage )
20−import qualified Distribution.Hackage.DB.Parsed as Unparsed ( parsePackage )
21−import qualified Distribution.Hackage.DB.Unparsed as Unparsed
2218import Distribution.NixOS.Derivation.Cabal
2319import Distribution.NixOS.PrettyPrinting hiding ( (<>) )
2420import Distribution.PackageDescription hiding ( buildDepends, extraLibs, buildTools )
2521import Distribution.Text
2622
27−-- | A variant of 'readHackage' that adds the SHA256 digest of the
28−-- original Cabal file to the parsed 'GenericPackageDescription'. That
29−-- hash is required to build packages with an "edited" cabal file,
30−-- because Nix needs to download the edited file and patch it into the
31−-- original tarball.
32−
33−readHashedHackage :: IO Hackage
34−readHashedHackage = fmap parseUnparsedHackage Unparsed.readHackage
35− where
36− parseUnparsedHackage :: Unparsed.Hackage -> Hackage
37− parseUnparsedHackage = Map.mapWithKey (Map.mapWithKey . parsePackage)
38−
39− parsePackage :: String -> Version -> ByteString -> GenericPackageDescription
40− parsePackage name version buf =
41− let pkg = Unparsed.parsePackage name version buf
42− hash = showDigest (sha256 buf)
43− in
44− pkg { packageDescription = (packageDescription pkg) {
45− customFieldsPD = ("x-cabal-file-hash", hash) : (customFieldsPD (packageDescription pkg))
46− }
47− }
48−
4923main :: IO ()
5024main = readHashedHackage >>= runParIO . generatePackageSet
5125