@@ -3,32 +3,34 @@
4module Distribution.Nixpkgs.Haskell.FromCabal ( fromGenericPackageDescription, fromPackageDescription ) where
4module Distribution.Nixpkgs.Haskell.FromCabal ( fromGenericPackageDescription, fromPackageDescription ) where
6−import Distribution.Nixpkgs.Haskell.FromCabal.License
6+import Control.Arrow ( second )
7−import Distribution.Nixpkgs.Haskell.FromCabal.Name
8−import Distribution.Nixpkgs.Haskell.FromCabal.Normalize
9−import Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
11import Data.Maybe
7import Data.Maybe
12import qualified Data.Set as Set
8import qualified Data.Set as Set
13−import Distribution.Version
9+import Data.Set ( Set )
14import Distribution.Compiler
10import Distribution.Compiler
15−import qualified Distribution.PackageDescription as Cabal
16import Distribution.Nixpkgs.Haskell
11import Distribution.Nixpkgs.Haskell
17import qualified Distribution.Nixpkgs.Haskell as Nix
12import qualified Distribution.Nixpkgs.Haskell as Nix
13+import Distribution.Nixpkgs.Haskell.Constraint
14+import Distribution.Nixpkgs.Haskell.FromCabal.License
15+import Distribution.Nixpkgs.Haskell.FromCabal.Name
16+import Distribution.Nixpkgs.Haskell.FromCabal.Normalize
17+import Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
18import qualified Distribution.Nixpkgs.Meta as Nix
18import qualified Distribution.Nixpkgs.Meta as Nix
19import Distribution.Package
19import Distribution.Package
20import Distribution.PackageDescription
20import Distribution.PackageDescription
21+import qualified Distribution.PackageDescription as Cabal
21import Distribution.PackageDescription.Configuration
22import Distribution.PackageDescription.Configuration
22import Distribution.System
23import Distribution.System
24−import Distribution.Nixpkgs.Haskell.Constraint
25import Distribution.Text ( display )
24import Distribution.Text ( display )
25+import Distribution.Version
27type HaskellResolver = Dependency -> Bool
29type HaskellResolver = Dependency -> Bool
28type NixpkgsResolver = Identifier -> Maybe Binding
30type NixpkgsResolver = Identifier -> Maybe Binding
30fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
32fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
31−fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flags constraints descr' =
33+fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flags constraints descr'' =
32 case finalize haskellResolver of
34 case finalize haskellResolver of
33 Left mismatch -> case finalize jailbrokenResolver of
35 Left mismatch -> case finalize jailbrokenResolver of
34 Left missing -> case finalize (const True) of
36 Left missing -> case finalize (const True) of
@@ -47,6 +49,17 @@ fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flag
47 jailbrokenResolver :: HaskellResolver
49 jailbrokenResolver :: HaskellResolver
48 jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
50 jailbrokenResolver (Dependency pkg _) = haskellResolver (Dependency pkg anyVersion)
52+ -- A variant of the cabal file that has all test suites enabled to ensure
53+ -- that their dependencies are recognized by finalizePackageDescription.
54+ descr' :: GenericPackageDescription
55+ descr' = descr'' { condTestSuites = flaggedTests }
57+ flaggedTests :: [(String, CondTree ConfVar [Dependency] TestSuite)]
58+ flaggedTests = map (second (mapTreeData enableTest)) (condTestSuites descr'')
60+ enableTest :: TestSuite -> TestSuite
61+ enableTest t = t { testEnabled = True }
50fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
63fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
51fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ def
64fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ def
52 & isLibrary .~ isJust library
65 & isLibrary .~ isJust library