git.iko.soy/typeable/cabal2nix
on master help sign in
distribution-nixpkgs: re-factoring and cleanup
commit6eebcd6e60dac667cf54bdeaca093df17319f968 authorPeter Simons <simons@cryp.to> dateThu 3 Sep 2015, 17:26 (11 years ago) parente5485a5
9 files changed+58−89
distribution-nixpkgs/distribution-nixpkgs.cabal+1−3 distribution-nixpkgs/package.yaml−1 distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Derivation.hs+26−27 distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal.hs+5−6 distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs+2−2 distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs+4−5 distribution-nixpkgs/src/Distribution/Nixpkgs/Meta.hs+11−12 distribution-nixpkgs/src/Distribution/Nixpkgs/PackageMap.hs+2−3 distribution-nixpkgs/test/Main.hs+7−30
distribution-nixpkgs/distribution-nixpkgs.cabal+1−3
@@ -1,4 +1,4 @@
1−-- This file has been generated from package.yaml by hpack version 0.5.4.
1+-- This file has been generated from package.yaml by hpack version 0.7.0.
22--
33-- see: https://github.com/sol/hpack
44
@@ -38,7 +38,6 @@ library
3838 , hspec
3939 , language-nix
4040 , lens
41− , lens-construction-helper
4241 , pretty >= 1.1.2
4342 , process
4443 , SHA
@@ -93,7 +92,6 @@ test-suite spec
9392 , hspec
9493 , language-nix
9594 , lens
96− , lens-construction-helper
9795 , pretty >= 1.1.2
9896 , process
9997 , SHA
distribution-nixpkgs/package.yaml−1
@@ -24,7 +24,6 @@ dependencies:
2424 - hspec
2525 - language-nix
2626 - lens
27− - lens-construction-helper
2827 - pretty >= 1.1.2
2928 - process
3029 - SHA
distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Derivation.hs+26−27
@@ -4,7 +4,7 @@
44{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
55
66module Distribution.Nixpkgs.Haskell.Derivation
7− ( Derivation, pkgid, revision, src, isLibrary, isExecutable
7+ ( Derivation, nullDerivation, pkgid, revision, src, isLibrary, isExecutable
88 , extraFunctionArgs, libraryDepends, executableDepends, testDepends, configureFlags
99 , cabalFlags, runHaddock, jailbreak, doCheck, testTarget, hyperlinkSource, enableSplitObjs
1010 , enableLibraryProfiling, enableExecutableProfiling, phaseOverrides, editedCabalFile, metaSection
@@ -25,7 +25,6 @@ import Distribution.Package
2525import Distribution.PackageDescription ( FlagAssignment, FlagName(..) )
2626import GHC.Generics ( Generic )
2727import Language.Nix
28−import Control.Lens.Create
2928import Text.PrettyPrint.HughesPJClass
3029import Control.Lens
3130import Internal.PrettyPrinting
@@ -60,31 +59,31 @@ data Derivation = MkDerivation
6059 }
6160 deriving (Show, Eq, Generic)
6261
63−instance Default Derivation where
64− def = MkDerivation
65− { _pkgid = error "undefined Derivation.pkgid"
66− , _revision = error "undefined Derivation.revision"
67− , _src = error "undefined Derivation.src"
68− , _isLibrary = error "undefined Derivation.isLibrary"
69− , _isExecutable = error "undefined Derivation.isExecutable"
70− , _extraFunctionArgs = error "undefined Derivation.extraFunctionArgs"
71− , _libraryDepends = error "undefined Derivation.libraryDepends"
72− , _executableDepends = error "undefined Derivation.executableDepends"
73− , _testDepends = error "undefined Derivation.testDepends"
74− , _configureFlags = error "undefined Derivation.configureFlags"
75− , _cabalFlags = error "undefined Derivation.cabalFlags"
76− , _runHaddock = error "undefined Derivation.runHaddock"
77− , _jailbreak = error "undefined Derivation.jailbreak"
78− , _doCheck = error "undefined Derivation.doCheck"
79− , _testTarget = error "undefined Derivation.testTarget"
80− , _hyperlinkSource = error "undefined Derivation.hyperlinkSource"
81− , _enableLibraryProfiling = error "undefined Derivation.enableLibraryProfiling"
82− , _enableExecutableProfiling = error "undefined Derivation.enableExecutableProfiling"
83− , _enableSplitObjs = error "undefined Derivation.enableSplitObjs"
84− , _phaseOverrides = error "undefined Derivation.phaseOverrides"
85− , _editedCabalFile = error "undefined Derivation.editedCabalFile"
86− , _metaSection = error "undefined Derivation.metaSection"
87− }
62+nullDerivation :: Derivation
63+nullDerivation = MkDerivation
64+ { _pkgid = error "undefined Derivation.pkgid"
65+ , _revision = error "undefined Derivation.revision"
66+ , _src = error "undefined Derivation.src"
67+ , _isLibrary = error "undefined Derivation.isLibrary"
68+ , _isExecutable = error "undefined Derivation.isExecutable"
69+ , _extraFunctionArgs = error "undefined Derivation.extraFunctionArgs"
70+ , _libraryDepends = error "undefined Derivation.libraryDepends"
71+ , _executableDepends = error "undefined Derivation.executableDepends"
72+ , _testDepends = error "undefined Derivation.testDepends"
73+ , _configureFlags = error "undefined Derivation.configureFlags"
74+ , _cabalFlags = error "undefined Derivation.cabalFlags"
75+ , _runHaddock = error "undefined Derivation.runHaddock"
76+ , _jailbreak = error "undefined Derivation.jailbreak"
77+ , _doCheck = error "undefined Derivation.doCheck"
78+ , _testTarget = error "undefined Derivation.testTarget"
79+ , _hyperlinkSource = error "undefined Derivation.hyperlinkSource"
80+ , _enableLibraryProfiling = error "undefined Derivation.enableLibraryProfiling"
81+ , _enableExecutableProfiling = error "undefined Derivation.enableExecutableProfiling"
82+ , _enableSplitObjs = error "undefined Derivation.enableSplitObjs"
83+ , _phaseOverrides = error "undefined Derivation.phaseOverrides"
84+ , _editedCabalFile = error "undefined Derivation.editedCabalFile"
85+ , _metaSection = error "undefined Derivation.metaSection"
86+ }
8887
8988makeLenses ''Derivation
9089
distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal.hs+5−6
@@ -9,7 +9,6 @@ module Distribution.Nixpkgs.Haskell.FromCabal
99
1010import Control.Arrow ( second )
1111import Control.Lens
12−import Control.Lens.Create
1312import Data.Maybe
1413import Data.Set ( Set )
1514import qualified Data.Set as Set
@@ -67,7 +66,7 @@ fromGenericPackageDescription haskellResolver nixpkgsResolver arch compiler flag
6766 enableTest t = t { testEnabled = True }
6867
6968fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
70−fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ def
69+fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ nullDerivation
7170 & isLibrary .~ isJust library
7271 & pkgid .~ package
7372 & revision .~ xrev
@@ -91,7 +90,7 @@ fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDep
9190 & editedCabalFile .~ (if xrev > 0
9291 then fromMaybe (error (display package ++ ": X-Cabal-File-Hash field is missing")) (lookup "X-Cabal-File-Hash" customFieldsPD)
9392 else "")
94− & metaSection .~ ( def
93+ & metaSection .~ ( Nix.nullMeta
9594 & Nix.homepage .~ homepage
9695 & Nix.description .~ synopsis
9796 & Nix.license .~ fromCabalLicense license
@@ -105,14 +104,14 @@ fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDep
105104
106105 resolveInHackage :: Identifier -> Binding
107106 resolveInHackage i | (i^.ident) `elem` [ n | (Dependency (PackageName n) _) <- missingDeps ] = bindNull i
108− | otherwise = create binding (i, create path ["self",i]) -- TODO: "self" shouldn't be hardcoded.
107+ | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
109108
110109 goodScopes :: Set [Identifier]
111110 goodScopes = Set.fromList (map ("pkgs":) [[], ["xlibs"], ["gnome"], ["gnome3"], ["kde4"]])
112111
113112 resolveInNixpkgs :: Identifier -> Binding
114113 resolveInNixpkgs i
115− | i `elem` ["clang","lldb","llvm"] = create binding (i,create path ["self","llvmPackages",i]) -- TODO: evil!
114+ | i `elem` ["clang","lldb","llvm"] = binding # (i, path # ["self","llvmPackages",i]) -- TODO: evil!
116115 | Just p <- nixpkgsResolver i, init (view (reference . path) p) `Set.member` goodScopes = p
117116 | otherwise = bindNull i
118117
@@ -128,4 +127,4 @@ fromPackageDescription haskellResolver nixpkgsResolver mismatchedDeps missingDep
128127 & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | Dependency (PackageName x) _ <- buildTools, y <- buildToolNixName x ]
129128
130129bindNull :: Identifier -> Binding
131−bindNull i = create binding (i, create path ["null"])
130+bindNull i = binding # (i, path # ["null"])
distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs+2−2
@@ -1,9 +1,9 @@
11module Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers ( globalPackageMaintainers ) where
22
3+import Control.Lens
34import Data.Map as Map
45import Data.Set as Set
56import Distribution.Nixpkgs.Haskell.FromCabal.Configuration
6−import Control.Lens.Create
77
88globalPackageMaintainers :: Map PackageName (Set Identifier)
99globalPackageMaintainers = Map.unionsWith Set.union [ Map.singleton p (Set.singleton m) | (m,ps) <- maintainedPackages, p <- ps ]
@@ -24,4 +24,4 @@ maintainedPackages =
2424 ]
2525
2626(|->) :: String -> [String] -> (Identifier,[PackageName])
27−(|->) m ps = (create ident m, Prelude.map PackageName ps)
27+(|->) m ps = (ident # m, Prelude.map PackageName ps)
distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs+4−5
@@ -3,7 +3,6 @@
33module Distribution.Nixpkgs.Haskell.FromCabal.PostProcess ( postProcess ) where
44
55import Control.Lens
6−import Control.Lens.Create
76import Data.List.Split
87import Data.Set ( Set )
98import qualified Data.Set as Set
@@ -28,7 +27,7 @@ fixGtkBuilds drv = drv & dependencies . pkgconfig %~ Set.filter (not . collidesW
2827 collidesWithHaskellName b = view localName b `Set.member` buildDeps
2928
3029 myName :: Identifier
31− myName = create ident n where PackageName n = packageName drv
30+ myName = ident # n where PackageName n = packageName drv
3231
3332 buildDeps :: Set Identifier
3433 buildDeps = Set.delete myName (setOf (dependencies . haskell . folded . localName) drv)
@@ -68,15 +67,15 @@ hooks =
6867 ]
6968
7069pkg :: Identifier -> Binding
71−pkg i = create binding (i, create path ["pkgs",i])
70+pkg i = binding # (i, path # ["pkgs",i])
7271
7372pkgs :: [Identifier] -> Set Binding
7473pkgs = Set.fromList . map pkg
7574
7675bind :: String -> Binding
77−bind s = create binding (i, create path is)
76+bind s = binding # (i, path # is)
7877 where
79− is = map (create ident) (splitOn "." s)
78+ is = map (review ident) (splitOn "." s)
8079 i = last is
8180
8281-- TODO: I need to figure out how to conveniently replace a binding in a set.
distribution-nixpkgs/src/Distribution/Nixpkgs/Meta.hs+11−12
@@ -8,13 +8,12 @@
88 -}
99
1010module Distribution.Nixpkgs.Meta
11− ( Meta
11+ ( Meta, nullMeta
1212 , homepage, description, license, platforms, hydraPlatforms, maintainers, broken
1313 ) where
1414
1515import Control.DeepSeq.Generics
1616import Control.Lens
17−import Control.Lens.Create
1817import Data.Set ( Set )
1918import qualified Data.Set as Set
2019import Distribution.Nixpkgs.Haskell.FromCabal.Configuration ( allPlatforms )
@@ -78,13 +77,13 @@ renderPlatforms field ps
7877 , rbrack <> semi
7978 ]
8079
81−instance Default Meta where
82− def = Meta
83− { _homepage = error "undefined Meta.homepage"
84− , _description = error "undefined Meta.description"
85− , _license = error "undefined Meta.license"
86− , _platforms = error "undefined Meta.platforms"
87− , _hydraPlatforms = error "undefined Meta.hydraPlatforms"
88− , _maintainers = error "undefined Meta.maintainers"
89− , _broken = error "undefined Meta.broken"
90− }
80+nullMeta :: Meta
81+nullMeta = Meta
82+ { _homepage = error "undefined Meta.homepage"
83+ , _description = error "undefined Meta.description"
84+ , _license = error "undefined Meta.license"
85+ , _platforms = error "undefined Meta.platforms"
86+ , _hydraPlatforms = error "undefined Meta.hydraPlatforms"
87+ , _maintainers = error "undefined Meta.maintainers"
88+ , _broken = error "undefined Meta.broken"
89+ }
distribution-nixpkgs/src/Distribution/Nixpkgs/PackageMap.hs+2−3
@@ -13,7 +13,6 @@ import Data.Map.Strict ( Map )
1313import Data.Maybe
1414import Data.Set ( Set )
1515import qualified Data.Set as Set
16−import Control.Lens.Create
1716import Text.PrettyPrint.HughesPJClass
1817import Language.Nix
1918import System.Process
@@ -47,13 +46,13 @@ parsePackage :: String -> Maybe (Identifier, Path)
4746parsePackage x | null x = error "Distribution.Nixpkgs.PackageMap.parsepackage: empty string is no valid identifier"
4847 | xs <- splitOn "." x = if needsQuoting (head xs)
4948 then Nothing
50− else Just (create ident (last xs), create path (map (create ident) xs))
49+ else Just (ident # last xs, path # map (review ident) xs)
5150
5251resolve :: PackageMap -> Identifier -> Maybe Binding
5352resolve nixpkgs i = case Map.lookup i nixpkgs of
5453 Nothing -> Nothing
5554 Just ps -> let p = chooseShortestPath (Set.toList ps)
56− in Just $ create binding (i,p)
55+ in Just $ binding # (i,p)
5756
5857chooseShortestPath :: [Path] -> Path
5958chooseShortestPath [] = error "chooseShortestPath: called with empty list argument"
distribution-nixpkgs/test/Main.hs+7−30
@@ -3,7 +3,6 @@ module Main ( main ) where
33import Control.DeepSeq
44import Control.Exception
55import Control.Lens
6−import Control.Lens.Create
76import qualified Data.Map as Map
87import qualified Data.Set as Set
98import Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
@@ -14,40 +13,18 @@ import Test.Hspec
1413
1514main :: IO ()
1615main = do
17− doctest [ "-isrc", "-optP-include", "-optPdist/build/autogen/cabal_macros.h"
18− , "src/Distribution/Nixpkgs/Fetch.hs"
19− , "src/Distribution/Nixpkgs/Haskell.hs"
20− , "src/Distribution/Nixpkgs/Haskell/BuildInfo.hs"
21− , "src/Distribution/Nixpkgs/Haskell/Constraint.hs"
22− , "src/Distribution/Nixpkgs/Haskell/Derivation.hs"
23− , "src/Distribution/Nixpkgs/Haskell/FromCabal.hs"
24− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs"
25− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs"
26− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs"
27− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs"
28− , "src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs"
29− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs"
30− , "src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs"
31− , "src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs"
32− , "src/Distribution/Nixpkgs/Haskell/Hackage.hs"
33− , "src/Distribution/Nixpkgs/Haskell/HackageGit.hs"
34− , "src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs"
35− , "src/Distribution/Nixpkgs/License.hs"
36− , "src/Distribution/Nixpkgs/Meta.hs"
37− , "src/Distribution/Nixpkgs/PackageMap.hs"
38− , "src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs"
39− ]
16+ doctest [ "-isrc", "-optP-include", "-optPdist/build/autogen/cabal_macros.h", "src" ]
4017
4118 hspec $ do
4219 describe "DeepSeq instances work properly for" $ do
4320 it "License" $ mapM_ hitsBottom [Known undefined, Unknown (Just undefined)]
4421 it "Meta" $ mapM_ hitsBottom
45− [ def & homepage .~ undefined
46− , def & description .~ undefined
47− , def & license .~ undefined
48− , def & platforms .~ undefined
49− , def & maintainers .~ undefined
50− , def & broken .~ undefined
22+ [ nullMeta &homepage .~ undefined
23+ , nullMeta &description .~ undefined
24+ , nullMeta &license .~ undefined
25+ , nullMeta &platforms .~ undefined
26+ , nullMeta &maintainers .~ undefined
27+ , nullMeta &broken .~ undefined
5128 ]
5229
5330 describe "Configuration records are consistent" $