git.iko.soy/typeable/cabal2nix
on master help sign in
Distribution.NixOS: simplified and re-factored the data types
commit6bba006abcab3de3ae1e05cee3d8cee34c5f9616 authorPeter Simons <simons@cryp.to> dateMon 15 Aug 2011, 10:54 (15 years ago) parent71a1fe9
7 files changed+63−21
cabal2nix.cabal+5−5 src/Cabal2Nix/Package.hs+1−1 src/Distribution/NixOS/Derivation/Cabal.hs+18−7 src/Distribution/NixOS/Derivation/License.hs+10 src/Distribution/NixOS/Derivation/Meta.hs+11−2 src/Distribution/NixOS/Derivation/PrettyPrinting.hs → src/Distribution/NixOS/PrettyPrinting.hs+12−1 src/Hackage4Nix.hs+6−5
cabal2nix.cabal+5−5
@@ -1,6 +1,6 @@
11Name: cabal2nix
2−Version: 1.11
3−Copyright: (c) 2011 Peter Simons and Andres Loeh
2+Version: 1.12
3+Copyright: Peter Simons, Andres Loeh
44License: BSD3
55License-File: LICENSE
66Author: Peter Simons <simons@cryp.to>, Andres Loeh <mail@andres-loeh.de>
@@ -49,7 +49,7 @@ Library
4949 Exposed-Modules: Distribution.NixOS.Derivation.Cabal
5050 Distribution.NixOS.Derivation.License
5151 Distribution.NixOS.Derivation.Meta
52− other-modules: Distribution.NixOS.Derivation.PrettyPrinting
52+ Distribution.NixOS.PrettyPrinting
5353
5454Executable cabal2nix
5555 main-is: Cabal2Nix.hs
@@ -65,7 +65,7 @@ Executable cabal2nix
6565 Distribution.NixOS.Derivation.Cabal
6666 Distribution.NixOS.Derivation.License
6767 Distribution.NixOS.Derivation.Meta
68− Distribution.NixOS.Derivation.PrettyPrinting
68+ Distribution.NixOS.PrettyPrinting
6969
7070Executable hackage4nix
7171 main-is: Hackage4Nix.hs
@@ -80,4 +80,4 @@ Executable hackage4nix
8080 Distribution.NixOS.Derivation.Cabal
8181 Distribution.NixOS.Derivation.License
8282 Distribution.NixOS.Derivation.Meta
83− Distribution.NixOS.Derivation.PrettyPrinting
83+ Distribution.NixOS.PrettyPrinting
src/Cabal2Nix/Package.hs+1−1
@@ -15,7 +15,7 @@ import Data.Char
1515
1616cabal2nix :: Cabal.GenericPackageDescription -> Derivation
1717cabal2nix cabal = MkDerivation
18− { pname = Cabal.pkgName pkg
18+ { pname = let Cabal.PackageName x = Cabal.pkgName pkg in x
1919 , version = Cabal.pkgVersion pkg
2020 , sha256 = "cabal2nix left the she256 field undefined"
2121 , isLibrary = isJust (Cabal.library tpkg)
src/Distribution/NixOS/Derivation/Cabal.hs+18−7
@@ -1,26 +1,34 @@
11{-# LANGUAGE PatternGuards #-}
2+{- |
3+ Module : Distribution.NixOS.Derivation.Cabal
4+ Copyright : Peter Simons, Andres Loeh
5+ License : BSD3
6+
7+ Maintainer : nix-dev@cs.uu.nl
8+ Stability : provisional
9+ Portability : portable
10+-}
211
312module Distribution.NixOS.Derivation.Cabal
413 ( Derivation(..)
514 , parseDerivation
615 , module Distribution.NixOS.Derivation.Meta
7− , Version(..), PackageName(..)
16+ , Version(..)
817 )
918 where
1019
11−import Distribution.NixOS.Derivation.PrettyPrinting
1220import Distribution.NixOS.Derivation.Meta
13−import Distribution.Package
21+import Distribution.NixOS.PrettyPrinting
1422import Distribution.Text
23+import Distribution.Package
1524import Data.Version
1625import Data.List
1726import Data.Char
18−import Text.PrettyPrint
1927import Text.ParserCombinators.ReadP ( readP_to_S )
2028import Text.Regex.Posix
2129
2230data Derivation = MkDerivation
23− { pname :: PackageName
31+ { pname :: String
2432 , version :: Version
2533 , sha256 :: String
2634 , isLibrary :: Bool
@@ -38,12 +46,15 @@ instance Text Derivation where
3846 disp = renderDerivation
3947 parse = error "parsing Distribution.NixOS.Derivation.Cabal.Derivation is not supported yet"
4048
49+instance Package Derivation where
50+ packageId deriv = PackageIdentifier (PackageName (pname deriv)) (version deriv)
51+
4152renderDerivation :: Derivation -> Doc
4253renderDerivation deriv = funargs (map text ("cabal" : inputs)) $$ vcat
4354 [ text ""
4455 , text "cabal.mkDerivation" <+> lparen <> text "self" <> colon <+> lbrace
4556 , nest 2 $ vcat
46− [ attr "pname" $ doubleQuotes (disp (pname deriv))
57+ [ attr "pname" $ string (pname deriv)
4758 , attr "version" $ doubleQuotes (disp (version deriv))
4859 , attr "sha256" $ string (sha256 deriv)
4960 , boolattr "isLibrary" (not (isLibrary deriv) || (isExecutable deriv)) (isLibrary deriv)
@@ -73,7 +84,7 @@ parseDerivation buf
7384 , maint <- buf `regsubmatch` "maintainers *= *\\[([^\"]+)]"
7485 , noHaddock <- buf `regsubmatch` "noHaddock *= *(true|false) *;"
7586 = Just $ MkDerivation
76− { pname = PackageName name
87+ { pname = name
7788 , version = readVersion vers
7889 , sha256 = sha
7990 , isLibrary = False
src/Distribution/NixOS/Derivation/License.hs+10
@@ -1,3 +1,13 @@
1+{- |
2+ Module : Distribution.NixOS.Derivation.License
3+ Copyright : Peter Simons, Andres Loeh
4+ License : BSD3
5+
6+ Maintainer : nix-dev@cs.uu.nl
7+ Stability : provisional
8+ Portability : portable
9+-}
10+
111module Distribution.NixOS.Derivation.License
212 ( License(..)
313 , fromCabalLicense
src/Distribution/NixOS/Derivation/Meta.hs+11−2
@@ -1,13 +1,22 @@
1+{- |
2+ Module : Distribution.NixOS.Derivation.Meta
3+ Copyright : Peter Simons, Andres Loeh
4+ License : BSD3
5+
6+ Maintainer : nix-dev@cs.uu.nl
7+ Stability : provisional
8+ Portability : portable
9+-}
10+
111module Distribution.NixOS.Derivation.Meta
212 ( Meta(..)
313 , module Distribution.NixOS.Derivation.License
414 )
515 where
616
7−import Distribution.NixOS.Derivation.PrettyPrinting
17+import Distribution.NixOS.PrettyPrinting
818import Distribution.NixOS.Derivation.License
919import Distribution.Text
10−import Text.PrettyPrint
1120
1221data Meta = Meta
1322 { homepage :: String
src/Distribution/NixOS/Derivation/PrettyPrinting.hs → src/Distribution/NixOS/PrettyPrinting.hsrenamed+12−1
@@ -1,10 +1,21 @@
1−module Distribution.NixOS.Derivation.PrettyPrinting
1+{- |
2+ Module : Distribution.NixOS.PrettyPrinting
3+ Copyright : Peter Simons, Andres Loeh
4+ License : BSD3
5+
6+ Maintainer : nix-dev@cs.uu.nl
7+ Stability : provisional
8+ Portability : portable
9+-}
10+
11+module Distribution.NixOS.PrettyPrinting
212 ( onlyIf
313 , listattr
414 , boolattr
515 , attr
616 , string
717 , funargs
18+ , module Text.PrettyPrint
819 )
920 where
1021
src/Hackage4Nix.hs+6−5
@@ -13,6 +13,7 @@ import Text.Regex.Posix
1313import Data.Version
1414import Text.ParserCombinators.ReadP ( readP_to_S )
1515import Distribution.PackageDescription.Parse ( parsePackageDescription, ParseResult(..) )
16+import Distribution.Package
1617import Distribution.PackageDescription ( GenericPackageDescription() )
1718import Distribution.Text
1819import System.Console.GetOpt ( OptDescr(..), ArgDescr(..), ArgOrder(..), usageInfo, getOpt )
@@ -75,7 +76,7 @@ discoverNixFiles yield dirOrFile
7576 (False,_) -> io (readDirectory dirOrFile) >>= mapM_ (discoverNixFiles yield . (dirOrFile </>))
7677
7778regenerateDerivation :: Derivation -> String -> Bool
78−regenerateDerivation deriv buf = not (display (pname deriv) `elem` patchedPackages) &&
79+regenerateDerivation deriv buf = not (pname deriv `elem` patchedPackages) &&
7980 not (buf =~ "preConfigure|configureFlags|postInstall|patchPhase")
8081
8182readVersion :: String -> Version
@@ -129,7 +130,7 @@ updateNixPkgs paths = do
129130 plats'
130131 | null plats && not (null maints) = ["self.ghc.meta.platforms"]
131132 | otherwise = plats
132− pkg <- readCabalFile (display (pname deriv)) (display (version deriv))
133+ pkg <- readCabalFile (pname deriv) (display (version deriv))
133134 let deriv' = (cabal2nix pkg) { sha256 = sha256 deriv, runHaddock = runHaddock deriv }
134135 deriv'' = deriv' { metaSection = (metaSection deriv')
135136 { maintainers = maints'
@@ -140,7 +141,7 @@ updateNixPkgs paths = do
140141 pkgset <- gets (selectLatestVersions . _pkgset)
141142 updates' <- flip mapM (Set.elems pkgset) $ \pkg -> do
142143 let Pkg deriv _ _ = pkg
143− updates <- discoverUpdates (display (pname deriv)) (display (version deriv))
144+ updates <- discoverUpdates (pname deriv) (display (version deriv))
144145 return (pkg,updates)
145146 let updates = [ u | u@(_,(_:_)) <- updates' ]
146147 when (not (null updates)) $ do
@@ -148,7 +149,7 @@ updateNixPkgs paths = do
148149 flip mapM_ updates $ \(pkg,versions) -> do
149150 let Pkg deriv path regenerate = pkg
150151 msgInfo ""
151− msgInfo $ (display (pname deriv)) ++ "-" ++ (display (version deriv)) ++ ":"
152+ msgInfo $ (display (packageId deriv)) ++ ":"
152153 flip mapM_ versions $ \newVersion -> do
153154 let deriv' = deriv { version = readVersion newVersion }
154155 msgInfo $ " " ++ genCabal2NixCmdline (Pkg deriv' path regenerate)
@@ -159,7 +160,7 @@ genCabal2NixCmdline (Pkg deriv path _) = unwords $ ["cabal2nix"] ++ opts ++ [">"
159160 where
160161 meta = metaSection deriv
161162 opts = [cabal] ++ maints' ++ plats' ++ if runHaddock deriv then [] else ["--no-haddock"]
162− cabal = "cabal://" ++ display (pname deriv) ++ "-" ++ display (version deriv)
163+ cabal = "cabal://" ++ display (packageId deriv)
163164 maints' = [ "--maintainer=" ++ normalizeMaintainer m | m <- maintainers meta ]
164165 plats'
165166 | ["self.ghc.meta.platforms"] == platforms meta = []