@@ -6,14 +6,13 @@ import Distribution.Compiler as Compiler
66import Distribution.Nixpkgs.Fetch
77import Distribution.Nixpkgs.Haskell.Derivation
88import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
9−import Distribution.Nixpkgs.Haskell.FromStack.Package as FromStack
109import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
1110import Distribution.PackageDescription as PackageDescription
1211import Distribution.System as System
13−import Language.Nix as Nix
1412import Network.URI as URI
1513import Stack.Config
1614
15+
1716newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
1817 deriving (Eq, Ord, Show)
1918
@@ -22,24 +21,19 @@ makePrisms ''HackageDb
2221unHackageDb :: HackageDb -> String
2322unHackageDb = T.unpack . fromHackageDB
2423
25−data PackageConfig = PackageConfig
26− { _pcHaskellResolver :: !HaskellResolver
27− , _pcNixpkgsResolver :: !NixpkgsResolver
28− , _pcTargetPlatform :: !Platform
29− , _pcTargetCompiler :: !CompilerInfo
30− , _pcFlagAssignment :: !FlagAssignment
24+data StackPackagesConfig = StackPackagesConfig
25+ { _spcHaskellResolver :: !HaskellResolver
26+ , _spcNixpkgsResolver :: !NixpkgsResolver
27+ , _spcTargetPlatform :: !Platform
28+ , _spcTargetCompiler :: !CompilerInfo
29+ , _spcFlagAssignment :: !FlagAssignment
30+ , _spcDoCheckPackages :: !Bool
31+ , _spcDoHaddockPackages :: !Bool
32+ , _spcDoCheckStackage :: !Bool
33+ , _spcDoHaddockStackage :: !Bool
3134 }
3235
33−makeLenses ''PackageConfig
34−
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 = []
42− }
36+makeLenses ''StackPackagesConfig
4337
4438getStackPackageFromDb
4539 :: Maybe HackageDb
@@ -74,38 +68,31 @@ stackLocationToSource = \case
7468 , sourceCabalDir = mempty }
7569
7670packageDerivation
77− :: PackageConfig
71+ :: StackPackagesConfig
7872 -> Maybe HackageDb
7973 -> StackPackage
8074 -> IO Derivation
8175packageDerivation conf optHackageDb stackPackage = do
8276 pkg <- getStackPackageFromDb optHackageDb stackPackage
83− pure . overrideStackageDerivation
84− $ genericPackageDerivation conf pkg
85− & src .~ pkgSource pkg
86− & doCheck .~ False
87− & runHaddock .~ False
77+ let drv = genericPackageDerivation conf pkg & src .~ pkgSource pkg
78+ return $ if stackPackage ^. spExtraDep
79+ then drv
80+ & doCheck &&~ conf ^. spcDoCheckStackage
81+ & runHaddock &&~ conf ^. spcDoHaddockStackage
82+ else drv
83+ & doCheck &&~ conf ^. spcDoCheckPackages
84+ & runHaddock &&~ conf ^. spcDoHaddockPackages
8885
8986genericPackageDerivation
90− :: PackageConfig
87+ :: StackPackagesConfig
9188 -> Package
9289 -> Derivation
9390genericPackageDerivation conf pkg =
9491 FromCabal.fromGenericPackageDescription
95− (conf ^. pcHaskellResolver)
96− (conf ^. pcNixpkgsResolver)
97− (conf ^. pcTargetPlatform)
98− (conf ^. pcTargetCompiler)
99− (conf ^. pcFlagAssignment)
92+ (conf ^. spcHaskellResolver)
93+ (conf ^. spcNixpkgsResolver)
94+ (conf ^. spcTargetPlatform)
95+ (conf ^. spcTargetCompiler)
96+ (conf ^. spcFlagAssignment)
10097 []
10198 (pkgCabal pkg)
102−
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
107− & doCheck .~ False
108− & runHaddock .~ False
109−
110−overrideStackageNode :: Node -> Node
111−overrideStackageNode = over nodeDerivation overrideStackageDerivation