git.iko.soy/typeable/stackage2nix
on master help sign in
Generate simple derivation
commit1688638f48df232ab1da6bfe28082ebdfca35e18 authorDmitry Bushev <bushevdv@gmail.com> dateSat 27 May 2017, 22:40 (9 years ago) parent39640c9
4 files changed+54−45
src/Distribution/Nixpkgs/Haskell/Stack.hs+35−23 src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+7−5 src/Runner.hs+3−4 src/Stack/Config.hs+9−13
src/Distribution/Nixpkgs/Haskell/Stack.hs+35−23
@@ -1,6 +1,7 @@
1−{-# LANGUAGE TemplateHaskell #-}
1+{-# LANGUAGE LambdaCase #-}
22{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving #-}
33{-# LANGUAGE RecordWildCards #-}
4+{-# LANGUAGE TemplateHaskell #-}
45
56module Distribution.Nixpkgs.Haskell.Stack where
67
@@ -78,35 +79,46 @@ unHackageDb :: HackageDb -> String
7879unHackageDb = T.unpack . fromHackageDB
7980
8081-- Thin wrapper around private stack2nix 'PackageSourceSpec.fromDB' method.
81−getPackageFromDb
82+getStackPackageFromDb
8283 :: Maybe HackageDb
83− -> StackExtraDep
84+ -> StackPackage
8485 -> IO Package
85−getPackageFromDb optHackageDb stackExtraDep =
86− PackageSourceSpec.getPackage (unHackageDb <$> optHackageDb) (sourceFromExtraDep stackExtraDep)
86+getStackPackageFromDb optHackageDb stackPackage =
87+ PackageSourceSpec.getPackage
88+ (unHackageDb <$> optHackageDb)
89+ (stackLocationToSource $ stackPackage ^. spSource)
8790
88−sourceFromExtraDep :: StackExtraDep -> Source
89−sourceFromExtraDep sed = Source{..}
90− where
91− sourceUrl = "cabal://" ++ unExtraDep sed
92− sourceRevision = mempty
93− sourceHash = UnknownHash
91+stackLocationToSource :: StackLocation -> Source
92+stackLocationToSource = \case
93+ HackagePackage p -> Source
94+ { sourceUrl = "cabal://" ++ T.unpack p
95+ , sourceRevision = mempty
96+ , sourceHash = UnknownHash }
97+ StackPath p -> Source
98+ { sourceUrl = T.unpack p
99+ , sourceRevision = mempty
100+ , sourceHash = UnknownHash }
101+ StackRepoGit rg -> Source
102+ { sourceUrl = T.unpack $ rg ^. rgUri
103+ , sourceRevision = T.unpack $ rg ^. rgCommit
104+ , sourceHash = UnknownHash }
94105
95−extraDepDerivation
106+packageDerivation
96107 :: Maybe HackageDb
97108 -> System.Platform
98109 -> Compiler.CompilerId
99110 -> PackageDescription.FlagAssignment
100− -> StackExtraDep
111+ -> StackPackage
101112 -> IO Derivation
102−extraDepDerivation optHackageDb optPlatform optCompilerId optFlagAssignment sed = do
103− pkg <- getPackageFromDb optHackageDb sed
104− pure $ FromCabal.fromGenericPackageDescription
105− (const True)
106− (\i -> Just (binding # (i, path # [i])))
107− optPlatform
108− (unknownCompilerInfo optCompilerId NoAbiTag)
109− optFlagAssignment
110− []
111− (pkgCabal pkg)
113+packageDerivation optHackageDb optPlatform optCompilerId optFlagAssignment sed = do
114+ pkg <- getStackPackageFromDb optHackageDb sed
115+ pure
116+ $ FromCabal.fromGenericPackageDescription
117+ (const True)
118+ (\i -> Just (binding # (i, path # [i])))
119+ optPlatform
120+ (unknownCompilerInfo optCompilerId NoAbiTag)
121+ optFlagAssignment
122+ []
123+ (pkgCabal pkg)
112124 & src .~ pkgSource pkg
src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+7−5
@@ -10,27 +10,29 @@ import Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting as PP
1010import Language.Nix.PrettyPrinting as PP
1111
1212
13−overrideExtraDeps :: [Derivation] -> Doc
14−overrideExtraDeps deps = PP.packageSetConfig . PP.cat $ callPackage <$> deps
13+overridePackages :: [Derivation] -> Doc
14+overridePackages deps = PP.packageSetConfig . PP.cat $ callPackage <$> deps
1515 where
1616 drvNameString = PP.doubleQuotes . disp . pkgName . view pkgid
1717 callPackage drv = vcat
1818 [ drvNameString drv <> " = callPackage",
1919 nest 2 (PP.parens $ PP.pPrint drv) <+> "{};"]
2020
21−overrideHaskellPackages :: [Derivation] -> Doc -> Doc
22−overrideHaskellPackages extraDeps ghc = vcat
21+overrideHaskellPackages :: Doc -> [Derivation] -> Doc
22+overrideHaskellPackages ghc packages = vcat
2323 [ funargs ["nixpkgs ? import <nixpkgs> {}"]
2424 , ""
2525 , "with nixpkgs;"
2626 , "let"
2727 , nest 2 $ vcat
2828 [ "extraDepsPackages ="
29− , overrideExtraDeps extraDeps <> semi
29+ , nest 2 $ overridePackages packages <> semi
30+ , ""
3031 , "pkgOverrides = self: extraDepsPackages {"
3132 , nest 2 "inherit pkgs stdenv;"
3233 , nest 2 "inherit (self) callPackage;"
3334 , "};"
35+ , ""
3436 ]
3537 , "in pkgs.haskell.packages." <> ghc <> ".override {"
3638 , nest 2 $ vcat
src/Runner.hs+3−4
@@ -23,8 +23,7 @@ run :: IO ()
2323run = do
2424 Options{..} <- execParser pinfo
2525 stackYaml <- either fail pure =<< readStackConfig optStackYaml
26− derivations <- traverse (extraDepDerivation optHackageDb optPlatform optCompilerId (readFlagList optFlags))
27− $ stackYaml ^. scExtraDeps
28− let out = PP.overrideHaskellPackages derivations (PP.text "ghc802")
26+ packages <- traverse (packageDerivation optHackageDb optPlatform optCompilerId (readFlagList optFlags))
27+ $ stackYaml ^. scPackages
28+ let out = PP.overrideHaskellPackages (PP.text "ghc802") packages
2929 print out
30− --print $ nixpkgsOverride overrideConfigFixture
src/Stack/Config.hs+9−13
@@ -29,31 +29,23 @@ data RepoGit = RepoGit
2929makeLenses ''RepoGit
3030
3131data StackLocation
32− = StackPath Text
32+ = HackagePackage Text
33+ | StackPath Text
3334 | StackRepoGit RepoGit
3435 deriving (Eq, Ord, Show)
3536
3637makePrisms ''StackLocation
3738
3839data StackPackage = StackPackage
39− { _spLocation :: StackLocation
40+ { _spSource :: StackLocation
4041 , _spExtraDep :: Bool
4142 } deriving (Eq, Ord, Show)
4243
4344makeLenses ''StackPackage
4445
45−newtype StackExtraDep = StackExtraDep { fromStackExtraDep :: Text }
46− deriving (Eq, Ord, Show)
47−
48−makePrisms ''StackExtraDep
49−
50−unExtraDep :: StackExtraDep -> String
51−unExtraDep = T.unpack . fromStackExtraDep
52−
5346data StackConfig = StackConfig
5447 { _scResolver :: StackResolver
5548 , _scPackages :: [StackPackage]
56− , _scExtraDeps :: [StackExtraDep]
5749 } deriving (Eq, Ord, Show)
5850
5951makeLenses ''StackConfig
@@ -62,8 +54,9 @@ fromYamlConfig :: Yaml.Config -> StackConfig
6254fromYamlConfig c = StackConfig{..}
6355 where
6456 _scResolver = coerce $ c ^. cResolver
65− _scPackages = fromYamlPackage <$> c ^. cPackages
66− _scExtraDeps = StackExtraDep <$> c ^. cExtraDeps
57+ _scPackages =
58+ (fromYamlPackage <$> c ^. cPackages) ++
59+ (fromYamlExtraDep <$> c ^. cExtraDeps)
6760
6861fromYamlPackage :: Yaml.Package -> StackPackage
6962fromYamlPackage = \case
@@ -74,6 +67,9 @@ fromYamlPackage = \case
7467 Yaml.LocationGit (Location git extraDep) ->
7568 StackPackage (StackRepoGit $ fromYamlGit git) (fromMaybe False extraDep)
7669
70+fromYamlExtraDep :: Text -> StackPackage
71+fromYamlExtraDep = flip StackPackage True . HackagePackage
72+
7773fromYamlGit :: Yaml.Git -> RepoGit
7874fromYamlGit yg = RepoGit{..}
7975 where