git.iko.soy/typeable/stackage2nix
on master help sign in
Get latest cabal revision for override deps
96e0576Dmitry Bushev
src/Runner.hs+13−1
@@ -1,6 +1,7 @@
1module Runner ( run ) where
1module Runner ( run ) where
2
2
3import Control.Lens
3import Control.Lens
4+import Data.Foldable as F
4import Data.Functor
5import Data.Functor
5import Distribution.Nixpkgs.Haskell.FromStack
6import Distribution.Nixpkgs.Haskell.FromStack
6import Distribution.Nixpkgs.Haskell.FromStack.Package
7import Distribution.Nixpkgs.Haskell.FromStack.Package
@@ -8,6 +9,7 @@ import Distribution.Nixpkgs.Haskell.Stack
8import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
9import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
9import Distribution.Version (Version(..))
10import Distribution.Version (Version(..))
10import Distribution.Compiler (AbiTag(..), unknownCompilerInfo)
11import Distribution.Compiler (AbiTag(..), unknownCompilerInfo)
12+import Distribution.Package (PackageName(..), pkgName)
11import Language.Nix as Nix
13import Language.Nix as Nix
12import Options.Applicative
14import Options.Applicative
13import Runner.Cli
15import Runner.Cli
@@ -18,6 +20,7 @@ import System.FilePath as Path
18import System.IO (withFile, IOMode(..), hPutStrLn, hPrint)
20import System.IO (withFile, IOMode(..), hPutStrLn, hPrint)
19import Text.PrettyPrint.HughesPJClass (render)
21import Text.PrettyPrint.HughesPJClass (render)
20
22
23+import qualified Data.Set as Set
21import qualified Data.Map as Map
24import qualified Data.Map as Map
22import qualified Stackage2nix as S2n
25import qualified Stackage2nix as S2n
23
26
@@ -52,8 +55,17 @@ run = do
52 withFile (opts ^. optOutDerivation) WriteMode $ \h -> do
55 withFile (opts ^. optOutDerivation) WriteMode $ \h -> do
53 hPutStrLn h ("# Generated by stack2nix from " ++ stackYaml ^. syFilePath)
56 hPutStrLn h ("# Generated by stack2nix from " ++ stackYaml ^. syFilePath)
54 hPrint h out
57 hPrint h out
58+ let
59+ reachable = fmap PackageName
60+ $ F.toList . F.foldr1 Set.union
61+ $ nodeDepends . mkNode <$> packages
62+ s2nLoader mHash pkgId =
63+ if pkgName pkgId `elem` reachable
64+ then packageLoader packageSetConfig Nothing pkgId
65+ else packageLoader packageSetConfig mHash pkgId
66+ s2nPackageSetConfig = packageSetConfig { packageLoader = s2nLoader }
55 -- generate stackage packages
67 -- generate stackage packages
56− nodes <- traverse (uncurry (buildNodeM packageSetConfig))
68+ nodes <- traverse (uncurry (buildNodeM s2nPackageSetConfig))
57 $ Map.toList (bpPackages buildPlan)
69 $ Map.toList (bpPackages buildPlan)
58 withFile (opts ^. optOutStackagePackages) WriteMode $ \h -> do
70 withFile (opts ^. optOutStackagePackages) WriteMode $ \h -> do
59 hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)
71 hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)