@@ -1,19 +1,21 @@
1−{-# LANGUAGE PatternGuards #-}
1+{-# LANGUAGE PatternGuards, CPP #-}
3 Module : Distribution.NixOS.Derivation.Cabal
3 Module : Distribution.NixOS.Derivation.Cabal
4− Copyright : Peter Simons, Andres Loeh
5 License : BSD3
4 License : BSD3
7 Maintainer : nix-dev@cs.uu.nl
6 Maintainer : nix-dev@cs.uu.nl
8 Stability : provisional
7 Stability : provisional
9− Portability : portable
8+ Portability : PatternGuards
10+ A represtation of Nix expressions based on Cabal builder defined in
11+ @pkgs\/development\/libraries\/haskell\/cabal\/cabal.nix@.
12module Distribution.NixOS.Derivation.Cabal
14module Distribution.NixOS.Derivation.Cabal
13 ( Derivation(..)
15 ( Derivation(..)
14 , parseDerivation
16 , parseDerivation
15 , module Distribution.NixOS.Derivation.Meta
17 , module Distribution.NixOS.Derivation.Meta
16− , Version(..)
18+ , module Data.Version
@@ -21,11 +23,21 @@ import Distribution.NixOS.Derivation.Meta
21import Distribution.NixOS.PrettyPrinting
23import Distribution.NixOS.PrettyPrinting
22import Distribution.Text
24import Distribution.Text
23import Distribution.Package
25import Distribution.Package
27+import Distribution.PackageDescription ( PackageDescription )
24import Data.Version
29import Data.Version
25import Data.List
30import Data.List
26import Data.Char
31import Data.Char
27import Text.Regex.Posix
32import Text.Regex.Posix
34+-- | A represtation of Nix expressions for building Haskell packages.
35+-- The data type correspond closely to the definition of
36+-- 'PackageDescription' from Cabal.
38+-- Note that the "Text" instance definition provides pretty-printing,
39+-- but no parsing as of now!
29data Derivation = MkDerivation
41data Derivation = MkDerivation
30 { pname :: String
42 { pname :: String
31 , version :: Version
43 , version :: Version
@@ -73,6 +85,10 @@ renderDerivation deriv = funargs (map text ("cabal" : inputs)) $$ vcat
73 filter (/="cabal") $ filter (/="Cabal") $
85 filter (/="cabal") $ filter (/="Cabal") $
74 buildDepends deriv ++ buildTools deriv ++ extraLibs deriv ++ pkgConfDeps deriv
86 buildDepends deriv ++ buildTools deriv ++ extraLibs deriv ++ pkgConfDeps deriv
88+-- | A very incomplete parser that extracts 'pname', 'version',
89+-- 'sha256', 'platforms', 'maintainers', and 'runHaddock' from the given
76parseDerivation :: String -> Maybe Derivation
92parseDerivation :: String -> Maybe Derivation
77parseDerivation buf
93parseDerivation buf
78 | buf =~ "cabal.mkDerivation"
94 | buf =~ "cabal.mkDerivation"