git.iko.soy/typeable/stackage2nix
on master help sign in
Generate stackage override
commitaac211172fdb3829c301e4891554a68b166978ad authorDmitry Bushev <bushevdv@gmail.com> dateTue 2 Jan 2018, 12:23 (9 years ago) parenta01f83b
3 files changed+37−7
src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+30−2 src/Runner.hs+5−3 src/Runner/Cli.hs+2−2
src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+30−2
@@ -15,6 +15,7 @@ import Distribution.Text
1515import Distribution.Version (Version)
1616import qualified Language.Nix.FilePath as Nix
1717import Language.Nix.PrettyPrinting as PP
18+import Stack.Config (StackResolver, unStackResolver)
1819
1920
2021data OverrideConfig = OverrideConfig
@@ -87,6 +88,28 @@ overrideHaskellPackages oc packages =
8788 , "}"
8889 ]
8990
91+overrideStackage :: StackResolver -> OverrideConfig -> NonEmpty Derivation -> Doc
92+overrideStackage stackResolver oc packages =
93+ let
94+ nixpkgs = if oc ^. ocNixpkgs . to fromString == systemNixpkgs
95+ then systemNixpkgs
96+ else (disp . (fromString :: FilePath -> Nix.FilePath)) (oc ^. ocNixpkgs)
97+ in vcat
98+ [ funargs
99+ [ "nixpkgs ? import " <> nixpkgs <> " {}"
100+ ]
101+ , ""
102+ , "let"
103+ , nest 2 $ vcat
104+ [ "stackPackages ="
105+ , nest 2 $ overridePackages packages <> semi
106+ ]
107+ , "in nixpkgs.haskell.packages.stackage." <> toNixStackResolver stackResolver <> ".override {"
108+ , nest 2
109+ $ attr "packageSetConfig" "self: super: stackPackages { inherit (nixpkgs) pkgs stdenv; inherit (self) callPackage; } super"
110+ , "}"
111+ ]
112+
90113pPrintHaskellPackages :: OverrideConfig -> Doc
91114pPrintHaskellPackages oc =
92115 let
@@ -114,5 +137,10 @@ pPrintHaskellPackages oc =
114137 ]
115138
116139toNixGhcVersion :: Version -> Doc
117−toNixGhcVersion =
118− (<>) "ghc" . text . L.filter (/= '.') . show . disp
140+toNixGhcVersion = (<>) "ghc" . toNixVersion . show . disp
141+
142+toNixStackResolver :: StackResolver -> Doc
143+toNixStackResolver = toNixVersion . unStackResolver
144+
145+toNixVersion :: String -> Doc
146+toNixVersion = text . L.filter (/= '.')
src/Runner.hs+5−3
@@ -85,9 +85,11 @@ run = do
8585 $ pPrintOutPackages (view nodeDerivation <$> nodes)
8686 writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
8787 $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
88− -- TODO: generate stackage override
89− writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
90− $ PP.overrideHaskellPackages overrideConfig stackConfPackages
88+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation) $
89+ if generateStackage
90+ then PP.overrideHaskellPackages overrideConfig stackConfPackages
91+ -- TODO: --lts-haskell and --all-cabal-caches unnecessary
92+ else PP.overrideStackage (stackConf ^. scResolver) overrideConfig stackConfPackages
9193
9294 -- Generate Stackage packages from resolver
9395 OriginResolver stackResolver -> do
src/Runner/Cli.hs+2−2
@@ -135,12 +135,12 @@ doHaddockPackages = flag True False
135135
136136withStackage :: Parser Bool
137137withStackage = switch
138− ( long "--with-stackage"
138+ ( long "with-stackage"
139139 <> help "generate full Stackage" )
140140
141141withStackageClosure :: Parser Bool
142142withStackageClosure = switch
143− ( long "--with-stackage-closure"
143+ ( long "with-stackage-closure"
144144 <> help "generate Stackage subset containing only build dependencies" )
145145
146146resolver :: Parser StackResolver