git.iko.soy/typeable/stackage2nix
on master help sign in
Assemble path to Stack build plan from repo dir
90ac1acDmitry Bushev
src/Runner.hs+17−11
@@ -6,6 +6,7 @@ import Distribution.Nixpkgs.Haskell.FromStack.Package
6import Distribution.Nixpkgs.Haskell.Stack
6import Distribution.Nixpkgs.Haskell.Stack
7import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
7import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
8import Distribution.Version (Version(..))
8import Distribution.Version (Version(..))
9+import System.FilePath as Path
9import Options.Applicative
10import Options.Applicative
10import Runner.Cli
11import Runner.Cli
11import Stack.Config
12import Stack.Config
@@ -20,26 +21,28 @@ import qualified Stackage2nix as S2n
20run :: IO ()
21run :: IO ()
21run = do
22run = do
22 opts <- execParser pinfo
23 opts <- execParser pinfo
23− stackYaml <- either fail pure =<< readStackConfig (opts ^. optStackYaml)
24+ stackConf <- either fail pure =<< readStackConfig (opts ^. optStackYaml)
25+ let
26+ s2nOpts = mkS2nOptions stackConf opts
24− (buildPlan, packageSetConfig) <- S2n.run $ mkS2nOptions opts
27+ (buildPlan, packageSetConfig) <- S2n.run s2nOpts
25 -- generate haskell packages override
28 -- generate haskell packages override
26 let
29 let
27 pkgConfig = mkPackageConfig (opts ^. optPlatform) (opts ^. optCompilerId)
30 pkgConfig = mkPackageConfig (opts ^. optPlatform) (opts ^. optCompilerId)
28 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
31 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
29 packages <- traverse (packageDerivation pkgConfig (opts ^. optHackageDb))
32 packages <- traverse (packageDerivation pkgConfig (opts ^. optHackageDb))
30− $ stackYaml ^. scPackages
33+ $ stackConf ^. scPackages
31 let
34 let
32 out = PP.overrideHaskellPackages overrideConfig packages
35 out = PP.overrideHaskellPackages overrideConfig packages
33 writeFile (opts ^. optOutFile) (show out)
36 writeFile (opts ^. optOutFile) (show out)
34 -- generate stackage packages
37 -- generate stackage packages
35− allNodes <- traverse (uncurry $ buildNodeM packageSetConfig)
38+ nodes <- traverse (uncurry $ buildNodeM packageSetConfig)
36 $ Map.toList (bpPackages buildPlan)
39 $ Map.toList (bpPackages buildPlan)
37− let nodes = reachableDependencies (mkNode <$> packages) allNodes
40+ -- let nodes = reachableDependencies (mkNode <$> packages) allNodes
38 withFile (opts ^. optStackageOutPackages) WriteMode $ \h -> do
41 withFile (opts ^. optStackageOutPackages) WriteMode $ \h -> do
39− hPutStrLn h ("# Generated by stack2nix from " ++ opts ^. optStackageBuildPlan)
42+ hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)
40 hPutStrLn h $ render $ pPrintOutPackages (nodeDerivation <$> nodes)
43 hPutStrLn h $ render $ pPrintOutPackages (nodeDerivation <$> nodes)
41 withFile (opts ^. optStackageOutConfig) WriteMode $ \h -> do
44 withFile (opts ^. optStackageOutConfig) WriteMode $ \h -> do
42− hPutStrLn h ("# Generated by stack2nix from " ++ opts ^. optStackageBuildPlan)
45+ hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)
43 hPutStrLn h $ render $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
46 hPutStrLn h $ render $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
44 putStrLn $ "Derivation was written to " ++ opts ^. optOutFile
47 putStrLn $ "Derivation was written to " ++ opts ^. optOutFile
45
48
@@ -49,10 +52,13 @@ mkOverrideConfig opts ghcVersion = OverrideConfig
49 , _ocStackagePackages = opts ^. optStackageOutPackages
52 , _ocStackagePackages = opts ^. optStackageOutPackages
50 , _ocStackageConfig = opts ^. optStackageOutConfig }
53 , _ocStackageConfig = opts ^. optStackageOutConfig }
51
54
52−mkS2nOptions :: Options -> S2n.Options
55+mkS2nOptions :: StackConfig -> Options -> S2n.Options
53−mkS2nOptions opts = S2n.Options
56+mkS2nOptions conf opts = S2n.Options
54− { S2n.optBuildPlanFile = opts ^. optStackageBuildPlan
57+ { S2n.optBuildPlanFile =
58+ (opts ^. optLtsHaskellPath) Path.</>
59+ (conf ^. scResolver . to unStackResolver) Path.<.>
60+ ".yaml"
55− , S2n.optAllCabalHashes = opts ^. optAllCabalHashes
61+ , S2n.optAllCabalHashes = opts ^. optAllCabalHashesPath
56 , S2n.optNixpkgsRepository = opts ^. optNixpkgsRepository
62 , S2n.optNixpkgsRepository = opts ^. optNixpkgsRepository
57 , S2n.optNixpkgsMap = Nothing
63 , S2n.optNixpkgsMap = Nothing
58 , S2n.optOutPackages = opts ^. optStackageOutPackages
64 , S2n.optOutPackages = opts ^. optStackageOutPackages
src/Runner/Cli.hs+13−7
@@ -19,8 +19,8 @@ data Options = Options
19 { _optOutFile :: !FilePath
19 { _optOutFile :: !FilePath
20 , _optHackageDb :: !(Maybe HackageDb)
20 , _optHackageDb :: !(Maybe HackageDb)
21 , _optNixpkgsRepository :: !FilePath
21 , _optNixpkgsRepository :: !FilePath
22− , _optStackageBuildPlan :: !FilePath
22+ , _optAllCabalHashesPath :: !FilePath
23− , _optAllCabalHashes :: !FilePath
23+ , _optLtsHaskellPath :: !FilePath
24 , _optStackageOutPackages :: !FilePath
24 , _optStackageOutPackages :: !FilePath
25 , _optStackageOutConfig :: !FilePath
25 , _optStackageOutConfig :: !FilePath
26 , _optCompilerId :: !CompilerId
26 , _optCompilerId :: !CompilerId
@@ -35,8 +35,8 @@ options = Options
35 <$> outFile
35 <$> outFile
36 <*> optional hackageDb
36 <*> optional hackageDb
37 <*> nixpkgsRepository
37 <*> nixpkgsRepository
38− <*> stackageBuildPlan
38+ <*> allCabalHashesPath
39− <*> allCabalHashes
39+ <*> ltsHaskellPath
40 <*> stackageOutPackages
40 <*> stackageOutPackages
41 <*> stackageOutConfig
41 <*> stackageOutConfig
42 <*> compilerId
42 <*> compilerId
@@ -72,11 +72,17 @@ stackageBuildPlan = option str
72 <> metavar "STACKAGE_BUILD_PLAN"
72 <> metavar "STACKAGE_BUILD_PLAN"
73 <> help "stackage build plan (YAML)" )
73 <> help "stackage build plan (YAML)" )
74
74
75−allCabalHashes :: Parser FilePath
75+allCabalHashesPath :: Parser FilePath
76−allCabalHashes = option str
76+allCabalHashesPath = option str
77 ( long "all-cabal-hashes"
77 ( long "all-cabal-hashes"
78 <> metavar "ALL_CABAL_HASHES"
78 <> metavar "ALL_CABAL_HASHES"
79− <> help "path to all-cabal-hashes repository" )
79+ <> help "path to commercialhaskell/all-cabal-hashes repository" )
80+
81+ltsHaskellPath :: Parser FilePath
82+ltsHaskellPath = option str
83+ ( long "lts-haskell"
84+ <> metavar "LTS_HASKELL_DIR"
85+ <> help "path to fpco/lts-haskell repository" )
80
86
81stackResolver :: Parser StackResolver
87stackResolver :: Parser StackResolver
82stackResolver = StackResolver <$>
88stackResolver = StackResolver <$>