@@ -3,9 +3,8 @@
33
44module Distribution.Nixpkgs.Haskell.FromCabal
55 ( HaskellResolver, NixpkgsResolver
6− , fromGenericPackageDescription , fromPackageDescription
7− )
8− where
6+ , fromGenericPackageDescription , finalizeGenericPackageDescription , fromPackageDescription
7+ ) where
98
109import Control.Lens
1110import Data.Maybe
@@ -35,30 +34,34 @@ import Language.Nix
3534type HaskellResolver = Dependency -> Bool
3635type NixpkgsResolver = Identifier -> Maybe Binding
3736
38−fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
37+fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
3938fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flags constraints genDesc =
4039 fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags descr
4140 where
42− -- We have to call the Cabal finalizer several times with different resolver
43− -- functions, and this convenience function makes our code shorter.
44− finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
45− finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
46−
47− requestedComponents :: ComponentRequestedSpec
48− requestedComponents = defaultComponentRequestedSpec
49− { testsRequested = True
50− , benchmarksRequested = True
51− }
52−
53− descr :: PackageDescription; missingDeps :: [Dependency]
54− (descr,missingDeps) = case finalize jailbrokenResolver of
55− Left m -> case finalize (const True) of
56− Left _ -> error ("Cabal cannot finalize " ++ display (packageId genDesc))
57− Right (d,_) -> (d,m)
58− Right (d,_) -> (d,[])
59−
60− jailbrokenResolver :: HaskellResolver
61− jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
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
46+ -- We have to call the Cabal finalizer several times with different resolver
47+ -- functions, and this convenience function makes our code shorter.
48+ finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
49+ finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
50+
51+ requestedComponents :: ComponentRequestedSpec
52+ requestedComponents = defaultComponentRequestedSpec
53+ { testsRequested = True
54+ , benchmarksRequested = True
55+ }
56+
57+ jailbrokenResolver :: HaskellResolver
58+ jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
59+
60+ in case finalize jailbrokenResolver of
61+ Left m -> case finalize (const True) of
62+ Left _ -> error ("Cabal cannot finalize " ++ display (packageId genDesc))
63+ Right (d,_) -> (d,m)
64+ Right (d,_) -> (d,[])
6265
6366fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
6467fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ nullDerivation