git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: add known package maintainers to the configuration

The file src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs contains a list of maintainers, and for each of them we know the set of packages they'd like to be subscribed to. This patch resolves https://github.com/NixOS/cabal2nix/issues/193.

commitdadc3b0280d414b566e35e73f64deba924c8bfba authorPeter Simons <simons@cryp.to> dateFri 28 Aug 2015, 12:03 (11 years ago) parent5da2d35
9 files changed+59−37
src/Distribution/Nixpkgs/Haskell/BuildInfo.hs+4−4 src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs+7 src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs+7−2 src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs+21 src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs−15 src/Distribution/Nixpkgs/Meta.hs+13−12 src/Internal/PrettyPrinting.hs+2−2 src/cabal2nix.hs+1−1 src/hackage2nix.hs+4−1
src/Distribution/Nixpkgs/Haskell/BuildInfo.hs+4−4
@@ -38,8 +38,8 @@ instance NFData BuildInfo where rnf = genericRnf
3838
3939pPrintBuildInfo :: String -> BuildInfo -> Doc
4040pPrintBuildInfo prefix bi = vcat
41− [ setattr (prefix++"HaskellDepends") (setOf (haskell.folded.localName.ident) bi)
42− , setattr (prefix++"SystemDepends") (setOf (system.folded.localName.ident) bi)
43− , setattr (prefix++"PkgconfigDepends") (setOf (pkgconfig.folded.localName.ident) bi)
44− , setattr (prefix++"ToolDepends") (setOf (tool.folded.localName.ident) bi)
41+ [ setattr (prefix++"HaskellDepends") empty (setOf (haskell.folded.localName.ident) bi)
42+ , setattr (prefix++"SystemDepends") empty (setOf (system.folded.localName.ident) bi)
43+ , setattr (prefix++"PkgconfigDepends") empty (setOf (pkgconfig.folded.localName.ident) bi)
44+ , setattr (prefix++"ToolDepends") empty (setOf (tool.folded.localName.ident) bi)
4545 ]
src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs+7
@@ -5,6 +5,7 @@ module Distribution.Nixpkgs.Haskell.FromCabal.Configuration
55 , module Distribution.Compiler
66 , module Distribution.Nixpkgs.Haskell.Constraint
77 , module Distribution.Version
8+ , module Language.Nix.Identifier
89 ) where
910
1011import Data.Set
@@ -13,6 +14,8 @@ import Distribution.System
1314import Distribution.Compiler
1415import Distribution.Nixpkgs.Haskell.Constraint
1516import Distribution.Version
17+import Data.Map
18+import Language.Nix.Identifier
1619
1720data Configuration = Configuration
1821 {
@@ -42,5 +45,9 @@ data Configuration = Configuration
4245 -- meta.hydraPlatforms attribute to avoid cluttering our Hydra output with
4346 -- lots of failure messages.
4447 , dontDistributePackages :: Set PackageName
48+
49+ -- |This information is used by the @hackage2nix@ utility to determine the
50+ -- 'maintainers' for a given Haskell package.
51+ , packageMaintainers :: Map PackageName (Set Identifier)
4552 }
4653 deriving (Show)
src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs+7−2
@@ -1,8 +1,11 @@
1−module Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102 ( Configuration(..), ghc7102 ) where
1+module Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
2+ ( Configuration(..), ghc7102
3+ ) where
24
35import Data.Maybe ( fromMaybe )
46import qualified Data.Set as Set
57import Distribution.Nixpkgs.Haskell.FromCabal.Configuration
8+import Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers
69import Distribution.Text ( simpleParse )
710
811ghc7102 :: Configuration
@@ -11,6 +14,8 @@ ghc7102 = Configuration
1114
1215 , compilerInfo = unknownCompilerInfo (CompilerId GHC (Version [7,10,2] [])) NoAbiTag
1316
17+ , packageMaintainers = globalPackageMaintainers
18+
1419 , defaultPackageOverrides = map (\s -> fromMaybe (error (show s ++ " is not a valid override selector")) (simpleParse s))
1520 [ "HUnit < 1.3.0.0" -- newer versions break test-framework-hunit-0.3.0.1
1621 ]
@@ -3676,4 +3681,4 @@ ghc7102 = Configuration
36763681 , "wai-middleware-metrics"
36773682 ]
36783683
3679−}
3684+ }
src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hsnew file+21
@@ -0,0 +1,21 @@
1+module Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers ( globalPackageMaintainers ) where
2+
3+import Data.Map as Map
4+import Data.Set as Set
5+import Distribution.Nixpkgs.Haskell.FromCabal.Configuration
6+import Internal.Lens
7+
8+globalPackageMaintainers :: Map PackageName (Set Identifier)
9+globalPackageMaintainers = Map.unionsWith Set.union [ Map.singleton p (Set.singleton m) | (m,ps) <- maintainedPackages, p <- ps ]
10+
11+maintainedPackages :: [(Identifier, [PackageName])]
12+maintainedPackages =
13+ [ "simons" |->
14+ [ "archlinux", "cabal2arch", "cabal2nix", "funcmp", "hackage-db", "halipeto"
15+ , "hledger-interest", "hopenssl", "hsdns", "hsemail", "hsyslog", "jailbreak-cabal"
16+ , "language-nix", "streamproc"
17+ ]
18+ ]
19+
20+(|->) :: String -> [String] -> (Identifier,[PackageName])
21+(|->) m ps = (create ident m, Prelude.map PackageName ps)
src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs−15
@@ -12,7 +12,6 @@ import Distribution.Package
1212import Distribution.PackageDescription ( FlagAssignment, FlagName(..) )
1313import Distribution.Simple.Utils ( lowercase )
1414import Internal.Lens
15−import Internal.Regex ( regsubmatch )
1615import Language.Nix hiding ( quote )
1716
1817normalize :: Derivation -> Derivation
@@ -41,7 +40,6 @@ normalizeBuildInfo (PackageName pname) bi = bi
4140
4241normalizeMeta :: Meta -> Meta
4342normalizeMeta = over description normalizeSynopsis
44− . over maintainers normalizeMaintainers
4543 . over platforms normalizePlatforms
4644
4745normalizeSynopsis :: String -> String
@@ -68,19 +66,6 @@ normalizeSet = Set.filter (not . null)
6866-- normalizeNixBuildTools :: Set Identifier -> Set Identifier
6967-- normalizeNixBuildTools = Set.fromList . concatMap buildToolNixName . Set.toList
7068
71−-- |Strip any kind of path prefix from maintainer names, filter duplicates, and
72−-- sort the resulting list alphabetically.
73−--
74−-- >>> normalizeMaintainers $ Set.fromList ["self.stdenv.lib.maintainers.foobar", "foobar"]
75−-- fromList ["foobar"]
76−--
77−-- >>> normalizeMaintainers $ Set.fromList ["any.prefix.is.recognized.yo", "abc.def"]
78−-- fromList ["def","yo"]
79−
80−normalizeMaintainers :: Set String -> Set String
81−normalizeMaintainers = normalizeSet . Set.map
82− (\m -> (m `regsubmatch` "^([^.].*\\.)?([^.]+)$") !! 1)
83−
8469normalizePlatforms :: Set String -> Set String
8570normalizePlatforms = normalizeSet . Set.map
8671 (\p -> if '.' `elem` p then p else "stdenv.lib.platforms." ++ p)
src/Distribution/Nixpkgs/Meta.hs+13−12
@@ -13,12 +13,13 @@ module Distribution.Nixpkgs.Meta
1313
1414
1515import Control.DeepSeq.Generics
16−import Internal.Lens
17−import Distribution.Nixpkgs.License
18−import Internal.PrettyPrinting
19−import GHC.Generics ( Generic )
2016import Data.Set ( Set )
2117import qualified Data.Set as Set
18+import Distribution.Nixpkgs.License
19+import GHC.Generics ( Generic )
20+import Internal.Lens
21+import Internal.PrettyPrinting
22+import Language.Nix.Identifier
2223
2324-- | A representation of the @meta@ section used in Nix expressions.
2425--
@@ -41,13 +42,13 @@ import qualified Data.Set as Set
4142-- but no parsing as of now!
4243
4344data Meta = Meta
44− { _homepage :: String -- ^ URL of the package homepage
45− , _description :: String -- ^ short description of the package
46− , _license :: License -- ^ licensing terms
47− , _platforms :: Set String -- ^ list of supported platforms (from @pkgs\/lib\/platforms.nix@)
48− , _hydraPlatforms :: Set String -- ^ list of platforms built by Hydra (from @pkgs\/lib\/platforms.nix@)
49− , _maintainers :: Set String -- ^ list of maintainers from @pkgs\/lib\/maintainers.nix@
50− , _broken :: Bool -- ^ set to @true@ if the build is known to fail
45+ { _homepage :: String -- ^ URL of the package homepage
46+ , _description :: String -- ^ short description of the package
47+ , _license :: License -- ^ licensing terms
48+ , _platforms :: Set String -- ^ list of supported platforms (from @pkgs\/lib\/platforms.nix@)
49+ , _hydraPlatforms :: Set String -- ^ list of platforms built by Hydra (from @pkgs\/lib\/platforms.nix@)
50+ , _maintainers :: Set Identifier -- ^ list of maintainers from @pkgs\/lib\/maintainers.nix@
51+ , _broken :: Bool -- ^ set to @true@ if the build is known to fail
5152 }
5253 deriving (Show, Eq, Ord, Generic)
5354
@@ -64,7 +65,7 @@ instance Pretty Meta where
6465 [ text "platforms" <+> equals, renderPlatformList (Set.toAscList _platforms) ]
6566 , onlyIf (not (Set.null _hydraPlatforms)) $ sep
6667 [ text "hydraPlatforms" <+> equals, renderPlatformList (Set.toAscList _hydraPlatforms) ]
67− , listattr "maintainers" (text "with stdenv.lib.maintainers;") (Set.toAscList _maintainers)
68+ , setattr "maintainers" (text "with stdenv.lib.maintainers;") (Set.map (view ident) _maintainers)
6869 , boolattr "broken" _broken _broken
6970 ]
7071
src/Internal/PrettyPrinting.hs+2−2
@@ -38,8 +38,8 @@ listattr n prefix vs = onlyIf (not (null vs)) $
3838 rbrack <> semi
3939 ]
4040
41−setattr :: String -> Set String -> Doc
42−setattr name set = listattr name empty (toAscList set)
41+setattr :: String -> Doc -> Set String -> Doc
42+setattr name prefix set = listattr name prefix (toAscList set)
4343
4444toAscList :: Set String -> [String]
4545toAscList = sortBy (compare `on` map toLower) . Set.toList
src/cabal2nix.hs+1−1
@@ -107,7 +107,7 @@ main = bracket (return ()) (\() -> hFlush stdout >> hFlush stderr) $ \() -> do
107107 & hyperlinkSource .~ optHyperlinkSource
108108 & enableLibraryProfiling .~ (fromMaybe False optEnableProfiling || optEnableLibraryProfiling)
109109 & enableExecutableProfiling .~ (fromMaybe False optEnableProfiling || optEnableExecutableProfiling)
110− & metaSection.maintainers .~ Set.fromList optMaintainer
110+ & metaSection.maintainers .~ Set.fromList (map (create ident) optMaintainer)
111111 & metaSection.platforms .~ Set.fromList optPlatform
112112 & doCheck &&~ optDoCheck
113113 & extraFunctionArgs . contains "stdenv" .~ True
src/hackage2nix.hs+4−1
@@ -163,9 +163,12 @@ generatePackageSet config hackage nixpkgs = do
163163 srcSpec <- liftIO $ sourceFromHackage (Certain sha256) (name ++ "-" ++ display pkgversion)
164164
165165 let drv = drv' & src .~ srcSpec
166− & metaSection.hydraPlatforms .~ (if PackageName name `Set.member` brokenPackages config
166+ & metaSection.hydraPlatforms .~ (if PackageName name `Set.member` dontDistributePackages config
167167 then Set.singleton "stdenv.lib.platforms.none"
168168 else drv'^.metaSection.hydraPlatforms)
169+ & metaSection.maintainers .~ fromMaybe Set.empty (Map.lookup (PackageName name) (packageMaintainers config))
170+
171+
169172
170173 isFromHackage :: Binding -> Bool
171174 isFromHackage b = case view (reference . path) b of