@@ -6,14 +6,13 @@ import Distribution.Compiler as Compiler
6import Distribution.Nixpkgs.Fetch
6import Distribution.Nixpkgs.Fetch
7import Distribution.Nixpkgs.Haskell.Derivation
7import Distribution.Nixpkgs.Haskell.Derivation
8import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
8import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
9−import Distribution.Nixpkgs.Haskell.FromStack.Package as FromStack
10import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
9import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
11import Distribution.PackageDescription as PackageDescription
10import Distribution.PackageDescription as PackageDescription
12import Distribution.System as System
11import Distribution.System as System
13−import Language.Nix as Nix
14import Network.URI as URI
12import Network.URI as URI
15import Stack.Config
13import Stack.Config
17newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
16newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
18 deriving (Eq, Ord, Show)
17 deriving (Eq, Ord, Show)
@@ -22,24 +21,19 @@ makePrisms ''HackageDb
22unHackageDb :: HackageDb -> String
21unHackageDb :: HackageDb -> String
23unHackageDb = T.unpack . fromHackageDB
22unHackageDb = T.unpack . fromHackageDB
25−data PackageConfig = PackageConfig
24+data StackPackagesConfig = StackPackagesConfig
26− { _pcHaskellResolver :: !HaskellResolver
25+ { _spcHaskellResolver :: !HaskellResolver
27− , _pcNixpkgsResolver :: !NixpkgsResolver
26+ , _spcNixpkgsResolver :: !NixpkgsResolver
28− , _pcTargetPlatform :: !Platform
27+ , _spcTargetPlatform :: !Platform
29− , _pcTargetCompiler :: !CompilerInfo
28+ , _spcTargetCompiler :: !CompilerInfo
30− , _pcFlagAssignment :: !FlagAssignment
29+ , _spcFlagAssignment :: !FlagAssignment
30+ , _spcDoCheckPackages :: !Bool
31+ , _spcDoHaddockPackages :: !Bool
32+ , _spcDoCheckStackage :: !Bool
33+ , _spcDoHaddockStackage :: !Bool
33−makeLenses ''PackageConfig
36+makeLenses ''StackPackagesConfig
35−mkPackageConfig :: Platform -> CompilerId -> PackageConfig
36−mkPackageConfig platform compilerId = PackageConfig
37− { _pcHaskellResolver = const True
38− , _pcNixpkgsResolver = \i -> Just (Nix.binding # (i, Nix.path # [i]))
39− , _pcTargetPlatform = platform
40− , _pcTargetCompiler = unknownCompilerInfo compilerId NoAbiTag
41− , _pcFlagAssignment = []
44getStackPackageFromDb
38getStackPackageFromDb
45 :: Maybe HackageDb
39 :: Maybe HackageDb
@@ -74,38 +68,31 @@ stackLocationToSource = \case
74 , sourceCabalDir = mempty }
68 , sourceCabalDir = mempty }
76packageDerivation
70packageDerivation
77− :: PackageConfig
71+ :: StackPackagesConfig
78 -> Maybe HackageDb
72 -> Maybe HackageDb
79 -> StackPackage
73 -> StackPackage
80 -> IO Derivation
74 -> IO Derivation
81packageDerivation conf optHackageDb stackPackage = do
75packageDerivation conf optHackageDb stackPackage = do
82 pkg <- getStackPackageFromDb optHackageDb stackPackage
76 pkg <- getStackPackageFromDb optHackageDb stackPackage
83− pure . overrideStackageDerivation
84− $ genericPackageDerivation conf pkg
77+ let drv = genericPackageDerivation conf pkg & src .~ pkgSource pkg
85− & src .~ pkgSource pkg
78+ return $ if stackPackage ^. spExtraDep
86− & doCheck .~ False
79+ then drv
80+ & doCheck &&~ conf ^. spcDoCheckStackage
81+ & runHaddock &&~ conf ^. spcDoHaddockStackage
83+ & doCheck &&~ conf ^. spcDoCheckPackages
87− & runHaddock .~ False
84+ & runHaddock &&~ conf ^. spcDoHaddockPackages
89genericPackageDerivation
86genericPackageDerivation
90− :: PackageConfig
87+ :: StackPackagesConfig
91 -> Package
88 -> Package
92 -> Derivation
89 -> Derivation
93genericPackageDerivation conf pkg =
90genericPackageDerivation conf pkg =
94 FromCabal.fromGenericPackageDescription
91 FromCabal.fromGenericPackageDescription
95− (conf ^. pcHaskellResolver)
92+ (conf ^. spcHaskellResolver)
96− (conf ^. pcNixpkgsResolver)
93+ (conf ^. spcNixpkgsResolver)
97− (conf ^. pcTargetPlatform)
94+ (conf ^. spcTargetPlatform)
98− (conf ^. pcTargetCompiler)
95+ (conf ^. spcTargetCompiler)
99− (conf ^. pcFlagAssignment)
96+ (conf ^. spcFlagAssignment)
101 (pkgCabal pkg)
98 (pkgCabal pkg)
103−-- Stackage packages set only consistent for packages with their library and
104−-- executable dependencies and completely ignores test dependencies.
105−overrideStackageDerivation :: Derivation -> Derivation
106−overrideStackageDerivation node = node
108− & runHaddock .~ False
110−overrideStackageNode :: Node -> Node
111−overrideStackageNode = over nodeDerivation overrideStackageDerivation