@@ -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