@@ -15,61 +15,8 @@ import Distribution.Nixpkgs.Haskell.Derivation
15import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
15import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
16import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
16import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
17import Language.Nix
17import Language.Nix
18−import Language.Nix.PrettyPrinting
19import Stack.Config
18import Stack.Config
21−data OverrideConfig = OverrideConfig
22− { stackageCompilerConfig :: FilePath
23− -- ^ Nixpkgs compiler config for Stackage packages set
24− , stackagePackagesConfig :: FilePath
25− -- ^ Nixpkgs packages config for Stackage packages set
26− , haskellPackagesOverride :: Identifier
27− -- ^ 'pkgs.haskell.packages.<compiler>' to override
30−overrideConfigFixture :: OverrideConfig
31−overrideConfigFixture = OverrideConfig
32− { stackageCompilerConfig = "./haskell-modules/configuration-6_30.nix"
33− , stackagePackagesConfig = "./haskell-modules/packages-6_30.nix"
34− , haskellPackagesOverride = "ghc7103" }
36−stackageCompilerConfigFun :: FilePath -> Doc
37−stackageCompilerConfigFun p =
38− funargs [text "superPkgs"] $$ "import" <+> string p
40− <+> text "inherit (superPkgs) pkgs;"
43−nixLet :: [Doc] -> Doc
49−nixpkgsOverride :: OverrideConfig -> Doc
50−nixpkgsOverride OverrideConfig {..} = vcat
51− [ text "{ nixpkgs ? import <nixpkgs> {}, compiler ? \"default\" }: "
54− [ text "inherit (nixpkgs.stdenv.lib) extends;"
55− , attr "stackageCompilerConfig" $ stackageCompilerConfigFun stackageCompilerConfig
56− , attr "stackagePackagesConfig" $ stackageCompilerConfigFun stackagePackagesConfig
57− , text "packageOverrides = super: let self = super.pkgs; in"
59− , text " pkgs = super.pkgs // {"
60− , text " haskell = super.pkgs.haskell // {"
61− , text " packages = super.pkgs.haskell.packages // {"
62− , text " \"${compiler}\" = super.pkgs.haskell.packages." <> disp haskellPackagesOverride <> ".override {};"
67− , text "in packageOverrides nixpkgs"
71−-- TODO: maybe move to module Stack.Derivation
73newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
20newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
74 deriving (Eq, Ord, Show)
21 deriving (Eq, Ord, Show)
@@ -78,6 +25,25 @@ makePrisms ''HackageDb
78unHackageDb :: HackageDb -> String
25unHackageDb :: HackageDb -> String
79unHackageDb = T.unpack . fromHackageDB
26unHackageDb = T.unpack . fromHackageDB
28+data PackageConfig = PackageConfig
29+ { _pcHaskellResolver :: HaskellResolver
30+ , _pcNixpkgsResolver :: NixpkgsResolver
31+ , _pcTargetPlatform :: Platform
32+ , _pcTargetCompiler :: CompilerInfo
33+ , _pcFlagAssignment :: FlagAssignment
36+makeLenses ''PackageConfig
38+mkPackageConfig :: Platform -> CompilerId -> FlagAssignment -> PackageConfig
39+mkPackageConfig platform compilerId flagAssignment = PackageConfig
40+ { _pcHaskellResolver = const True
41+ , _pcNixpkgsResolver = \i -> Just (binding # (i, path # [i]))
42+ , _pcTargetPlatform = platform
43+ , _pcTargetCompiler = unknownCompilerInfo compilerId NoAbiTag
44+ , _pcFlagAssignment = flagAssignment
81-- Thin wrapper around private stack2nix 'PackageSourceSpec.fromDB' method.
47-- Thin wrapper around private stack2nix 'PackageSourceSpec.fromDB' method.
82getStackPackageFromDb
48getStackPackageFromDb
83 :: Maybe HackageDb
49 :: Maybe HackageDb
@@ -104,21 +70,25 @@ stackLocationToSource = \case
104 , sourceHash = UnknownHash }
70 , sourceHash = UnknownHash }
106packageDerivation
72packageDerivation
107− :: Maybe HackageDb
74+ -> Maybe HackageDb
109− -> Compiler.CompilerId
110− -> PackageDescription.FlagAssignment
111 -> StackPackage
75 -> StackPackage
112 -> IO Derivation
76 -> IO Derivation
113−packageDerivation optHackageDb optPlatform optCompilerId optFlagAssignment sed = do
77+packageDerivation conf optHackageDb stackPackage = do
114− pkg <- getStackPackageFromDb optHackageDb sed
78+ pkg <- getStackPackageFromDb optHackageDb stackPackage
115− pure
79+ pure $ genericPackageDerivation conf pkg
116− $ FromCabal.fromGenericPackageDescription
118− (\i -> Just (binding # (i, path # [i])))
120− (unknownCompilerInfo optCompilerId NoAbiTag)
124 & src .~ pkgSource pkg
80 & src .~ pkgSource pkg
82+genericPackageDerivation
86+genericPackageDerivation conf pkg =
87+ FromCabal.fromGenericPackageDescription
88+ (conf ^. pcHaskellResolver)
89+ (conf ^. pcNixpkgsResolver)
90+ (conf ^. pcTargetPlatform)
91+ (conf ^. pcTargetCompiler)
92+ (conf ^. pcFlagAssignment)