@@ -1,6 +1,8 @@
1module Runner ( run ) where
1module Runner ( run ) where
3import Control.Lens
3import Control.Lens
4+import Distribution.Nixpkgs.Haskell.FromStack
5+import Distribution.Nixpkgs.Haskell.FromStack.Package
4import Distribution.Nixpkgs.Haskell.Stack
6import Distribution.Nixpkgs.Haskell.Stack
5import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
7import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
6import Distribution.Version (Version(..))
8import Distribution.Version (Version(..))
@@ -8,7 +10,10 @@ import Options.Applicative
8import Runner.Cli
10import Runner.Cli
9import Stack.Config
11import Stack.Config
10import Stackage.Types
12import Stackage.Types
13+import System.IO (withFile, IOMode(..), hPutStrLn)
14+import Text.PrettyPrint.HughesPJClass (render)
16+import qualified Data.Map as Map
12import qualified Stackage2nix as S2n
17import qualified Stackage2nix as S2n
@@ -16,8 +21,7 @@ run :: IO ()
17 opts <- execParser pinfo
22 opts <- execParser pinfo
18 stackYaml <- either fail pure =<< readStackConfig (opts ^. optStackYaml)
23 stackYaml <- either fail pure =<< readStackConfig (opts ^. optStackYaml)
19− -- generate stackage packages
20− buildPlan <- S2n.run $ mkS2nOptions opts
24+ (buildPlan, packageSetConfig) <- S2n.run $ mkS2nOptions opts
21 -- generate haskell packages override
25 -- generate haskell packages override
23 pkgConfig = mkPackageConfig (opts ^. optPlatform) (opts ^. optCompilerId)
27 pkgConfig = mkPackageConfig (opts ^. optPlatform) (opts ^. optCompilerId)
@@ -27,7 +31,17 @@ run = do
28 out = PP.overrideHaskellPackages overrideConfig packages
32 out = PP.overrideHaskellPackages overrideConfig packages
29 writeFile (opts ^. optOutFile) (show out)
33 writeFile (opts ^. optOutFile) (show out)
34+ -- generate stackage packages
35+ allNodes <- traverse (uncurry $ buildNodeM packageSetConfig)
36+ $ Map.toList (bpPackages buildPlan)
37+ let nodes = reachableDependencies (mkNode <$> packages) allNodes
38+ withFile (opts ^. optStackageOutPackages) WriteMode $ \h -> do
39+ hPutStrLn h ("# Generated by stack2nix from " ++ opts ^. optStackageBuildPlan)
40+ hPutStrLn h $ render $ pPrintOutPackages (nodeDerivation <$> nodes)
41+ withFile (opts ^. optStackageOutConfig) WriteMode $ \h -> do
42+ hPutStrLn h ("# Generated by stack2nix from " ++ opts ^. optStackageBuildPlan)
43+ hPutStrLn h $ render $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
30− putStrLn $ "\nDerivation was written to " ++ opts ^. optOutFile
44+ putStrLn $ "Derivation was written to " ++ opts ^. optOutFile
32mkOverrideConfig :: Options -> Version -> OverrideConfig
46mkOverrideConfig :: Options -> Version -> OverrideConfig
33mkOverrideConfig opts ghcVersion = OverrideConfig
47mkOverrideConfig opts ghcVersion = OverrideConfig