git.iko.soy/typeable/cabal2nix
on master help sign in
Merge pull request #295 from 4e6/from-cabal-finalize
53777efPeter Simons
src/Distribution/Nixpkgs/Haskell/FromCabal.hs+27−24
@@ -3,9 +3,8 @@
3
3
4module Distribution.Nixpkgs.Haskell.FromCabal
4module Distribution.Nixpkgs.Haskell.FromCabal
5 ( HaskellResolver, NixpkgsResolver
5 ( HaskellResolver, NixpkgsResolver
6− , fromGenericPackageDescription , fromPackageDescription
6+ , fromGenericPackageDescription , finalizeGenericPackageDescription , fromPackageDescription
7− )
8− where
7+ ) where
9
8
10import Control.Lens
9import Control.Lens
11import Data.Maybe
10import Data.Maybe
@@ -35,30 +34,34 @@ import Language.Nix
35type HaskellResolver = Dependency -> Bool
34type HaskellResolver = Dependency -> Bool
36type NixpkgsResolver = Identifier -> Maybe Binding
35type NixpkgsResolver = Identifier -> Maybe Binding
37
36
38−fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
37+fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
39fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flags constraints genDesc =
38fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flags constraints genDesc =
40 fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags descr
39 fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags descr
41 where
40 where
41+ (descr, missingDeps) = finalizeGenericPackageDescription haskellResolver arch compiler flags constraints genDesc
42+
43+finalizeGenericPackageDescription :: HaskellResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> (PackageDescription, [Dependency])
44+finalizeGenericPackageDescription haskellResolver arch compiler flags constraints genDesc =
45+ let
42− -- We have to call the Cabal finalizer several times with different resolver
46+ -- We have to call the Cabal finalizer several times with different resolver
43− -- functions, and this convenience function makes our code shorter.
47+ -- functions, and this convenience function makes our code shorter.
44− finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
48+ finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
45− finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
49+ finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
46−
50+
47− requestedComponents :: ComponentRequestedSpec
51+ requestedComponents :: ComponentRequestedSpec
48− requestedComponents = defaultComponentRequestedSpec
52+ requestedComponents = defaultComponentRequestedSpec
49− { testsRequested = True
53+ { testsRequested = True
50− , benchmarksRequested = True
54+ , benchmarksRequested = True
51− }
55+ }
52−
56+
53− descr :: PackageDescription; missingDeps :: [Dependency]
57+ jailbrokenResolver :: HaskellResolver
58+ jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
59+
54− (descr,missingDeps) = case finalize jailbrokenResolver of
60+ in case finalize jailbrokenResolver of
55− Left m -> case finalize (const True) of
61+ Left m -> case finalize (const True) of
56− Left _ -> error ("Cabal cannot finalize " ++ display (packageId genDesc))
62+ Left _ -> error ("Cabal cannot finalize " ++ display (packageId genDesc))
57− Right (d,_) -> (d,m)
63+ Right (d,_) -> (d,m)
58− Right (d,_) -> (d,[])
64+ Right (d,_) -> (d,[])
59−
60− jailbrokenResolver :: HaskellResolver
61− jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
62
65
63fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
66fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
64fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ nullDerivation
67fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ nullDerivation