git.iko.soy/typeable/cabal2nix
on master help sign in
Fix build, put hpack in build tools
59f1e2fTom Smalley
cabal2nix.cabal−4
@@ -111,7 +111,6 @@ library
111 , text
111 , text
112 , time
112 , time
113 , transformers
113 , transformers
114− , utf8-string
115 , yaml
114 , yaml
116 exposed-modules:
115 exposed-modules:
117 Cabal2nix
116 Cabal2nix
@@ -162,7 +161,6 @@ executable cabal2nix
162 , text
161 , text
163 , time
162 , time
164 , transformers
163 , transformers
165− , utf8-string
166 , yaml
164 , yaml
167 , cabal2nix
165 , cabal2nix
168 other-modules:
166 other-modules:
@@ -197,7 +195,6 @@ executable hackage2nix
197 , text
195 , text
198 , time
196 , time
199 , transformers
197 , transformers
200− , utf8-string
201 , yaml
198 , yaml
202 , cabal2nix
199 , cabal2nix
203 , monad-par
200 , monad-par
@@ -239,7 +236,6 @@ test-suite doctests
239 , text
236 , text
240 , time
237 , time
241 , transformers
238 , transformers
242− , utf8-string
243 , yaml
239 , yaml
244 , doctest
240 , doctest
245 default-language: Haskell2010
241 default-language: Haskell2010
package.yaml−1
@@ -102,7 +102,6 @@ dependencies:
102 - text
102 - text
103 - time
103 - time
104 - transformers
104 - transformers
105− - utf8-string
106 - yaml
105 - yaml
107
106
108library:
107library:
src/Cabal2nix.hs+2−2
@@ -122,8 +122,8 @@ main = bracket (return ()) (\() -> hFlush stdout >> hFlush stderr) $ \() ->
122 cabal2nix =<< getArgs
122 cabal2nix =<< getArgs
123
123
124hpackOverrides :: Derivation -> Derivation
124hpackOverrides :: Derivation -> Derivation
125−hpackOverrides = over phaseOverrides (++ "preConfigure = \"${hpack}/bin/hpack;\";")
125+hpackOverrides = over phaseOverrides (++ "preConfigure = \"hpack\";")
126− . set (libraryDepends . pkgconfig . contains (PP.pkg "hpack")) True
126+ . set (libraryDepends . tool . contains (PP.pkg "hpack")) True
127
127
128cabal2nix' :: [String] -> IO (Either Doc Derivation)
128cabal2nix' :: [String] -> IO (Either Doc Derivation)
129cabal2nix' args = do
129cabal2nix' args = do
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+9−14
@@ -6,8 +6,6 @@ import qualified Control.Exception as Exception
6import Control.Monad
6import Control.Monad
7import Control.Monad.IO.Class
7import Control.Monad.IO.Class
8import Control.Monad.Trans.Maybe
8import Control.Monad.Trans.Maybe
9−import qualified Data.ByteString.Lazy.Char8 as LBS8
10−import qualified Data.ByteString.Lazy.UTF8 as UTF8
11import Data.List ( isSuffixOf, isPrefixOf )
9import Data.List ( isSuffixOf, isPrefixOf )
12import qualified Data.Map as DB
10import qualified Data.Map as DB
13import Data.Maybe
11import Data.Maybe
@@ -44,7 +42,9 @@ getPackage optHpack optHackageDB source = do
44fetchOrFromDB :: Bool -- ^ Whether hpack should regenerate the cabal file
42fetchOrFromDB :: Bool -- ^ Whether hpack should regenerate the cabal file
45 -> Maybe FilePath -> Source -> IO (Maybe DerivationSource, Bool, Cabal.GenericPackageDescription)
43 -> Maybe FilePath -> Source -> IO (Maybe DerivationSource, Bool, Cabal.GenericPackageDescription)
46fetchOrFromDB optHpack optHackageDB src
44fetchOrFromDB optHpack optHackageDB src
45+ | "cabal://" `isPrefixOf` sourceUrl src = do
47− | "cabal://" `isPrefixOf` sourceUrl src = fromDB optHackageDB . drop (length "cabal://") $ sourceUrl src
46+ (msrc, pkgDesc) <- fromDB optHackageDB . drop (length "cabal://") $ sourceUrl src
47+ return (msrc, False, pkgDesc)
48 | otherwise = do
48 | otherwise = do
49 r <- fetch (\dir -> cabalFromPath optHpack (dir </> sourceCabalDir src)) src
49 r <- fetch (\dir -> cabalFromPath optHpack (dir </> sourceCabalDir src)) src
50 case r of
50 case r of
@@ -168,18 +168,13 @@ hpackDirectory dir = do
168 Left err -> liftIO $ hPutStrLn stderr ("*** hpack error: " ++ show err ++ ". Exiting.") >> exitFailure
168 Left err -> liftIO $ hPutStrLn stderr ("*** hpack error: " ++ show err ++ ". Exiting.") >> exitFailure
169 Right (_, pkg') -> do
169 Right (_, pkg') -> do
170 let hpackOutput = Hpack.renderPackage Hpack.defaultRenderSettings 2 [] [] pkg'
170 let hpackOutput = Hpack.renderPackage Hpack.defaultRenderSettings 2 [] [] pkg'
171− buf = UTF8.fromString hpackOutput
172− hash = printSHA256 $ digest (digestByName "sha256") buf
171+ hash = printSHA256 $ digestString (digestByName "sha256") hpackOutput
173− case parsePackage' buf of
172+ case parseGenericPackageDescription hpackOutput of
174− Left msg -> liftIO $ do
173+ ParseFailed perr -> liftIO $ do
175− hPutStrLn stderr $ "*** cannot parse hpack output: " ++ msg
174+ hPutStrLn stderr $ "*** cannot parse hpack output: " ++ show perr
176 hPutStrLn stderr $ "*** hpack output:\n" ++ hpackOutput
175 hPutStrLn stderr $ "*** hpack output:\n" ++ hpackOutput
177− hPutStrLn stderr "*** Exiting."
176+ fail "*** Exiting."
178− exitFailure
179− Right pkg -> MaybeT $ return $ Just $ (,) True $ pkg
177+ ParseOk _ pkg -> MaybeT $ return $ Just $ (,) True $ setCabalFileHash hash pkg
180− { packageDescription = (packageDescription pkg)
181− { customFieldsPD = ("X-Cabal-File-Hash", hash) : customFieldsPD (packageDescription pkg)
182− } }
183
178
184cabalFromFile :: Bool -> FilePath -> MaybeT IO Cabal.GenericPackageDescription
179cabalFromFile :: Bool -> FilePath -> MaybeT IO Cabal.GenericPackageDescription
185cabalFromFile failHard file =
180cabalFromFile failHard file =