@@ -45,6 +45,7 @@ import Distribution.Text
45data Derivation = MkDerivation
45data Derivation = MkDerivation
46 { pname :: String
46 { pname :: String
47 , version :: Version
47 , version :: Version
48 , src :: DerivationSource
49 , src :: DerivationSource
49 , isLibrary :: Bool
50 , isLibrary :: Bool
50 , isExecutable :: Bool
51 , isExecutable :: Bool
@@ -63,6 +64,7 @@ data Derivation = MkDerivation
63 , hyperlinkSource :: Bool
64 , hyperlinkSource :: Bool
64 , enableSplitObjs :: Bool
65 , enableSplitObjs :: Bool
65 , phaseOverrides :: String
66 , phaseOverrides :: String
67+ , editedCabalFile :: String
66 , metaSection :: Meta
68 , metaSection :: Meta
68 deriving (Show, Eq, Ord)
70 deriving (Show, Eq, Ord)
@@ -75,10 +77,11 @@ instance Package Derivation where
75 packageId deriv = PackageIdentifier (PackageName (pname deriv)) (version deriv)
77 packageId deriv = PackageIdentifier (PackageName (pname deriv)) (version deriv)
77instance NFData Derivation where
79instance NFData Derivation where
78− rnf (MkDerivation a b c d e f g h i j k l m n o p q r t u v) =
80+ rnf (MkDerivation a b c d e f g h i j k l m n o p q r t u v w x) =
79 a `deepseq` b `deepseq` c `deepseq` d `deepseq` e `deepseq` f `deepseq` g `deepseq`
81 a `deepseq` b `deepseq` c `deepseq` d `deepseq` e `deepseq` f `deepseq` g `deepseq`
80− h `deepseq` i `deepseq` j `deepseq` k `deepseq` l `deepseq` m `deepseqFlagAssignment` n `deepseq`
82+ h `deepseq` i `deepseq` j `deepseq` k `deepseq` l `deepseq` m `deepseq` n `deepseqFlagAssignment`
81− o `deepseq` p `deepseq` q `deepseq` r `deepseq` t `deepseq` u `deepseq` v `deepseq` ()
83+ o `deepseq` p `deepseq` q `deepseq` r `deepseq` t `deepseq` u `deepseq` v `deepseq`
84+ w `deepseq` x `deepseq` ()
83-- FlagName has no NFData instance in old version of Cabal.
86-- FlagName has no NFData instance in old version of Cabal.
84deepseqFlagAssignment :: FlagAssignment -> a -> a
87deepseqFlagAssignment :: FlagAssignment -> a -> a
@@ -93,6 +96,7 @@ renderDerivation deriv =
93 [ attr "pname" $ string (pname deriv)
96 [ attr "pname" $ string (pname deriv)
94 , attr "version" $ doubleQuotes (disp (version deriv))
97 , attr "version" $ doubleQuotes (disp (version deriv))
95 , sourceAttr (src deriv)
98 , sourceAttr (src deriv)
99+ , onlyIf (not (null (editedCabalFile deriv))) $ attr "editedCabalFile" $ string (editedCabalFile deriv)
96 , boolattr "isLibrary" (not (isLibrary deriv) || isExecutable deriv) (isLibrary deriv)
100 , boolattr "isLibrary" (not (isLibrary deriv) || isExecutable deriv) (isLibrary deriv)
97 , boolattr "isExecutable" (not (isLibrary deriv) || isExecutable deriv) (isExecutable deriv)
101 , boolattr "isExecutable" (not (isLibrary deriv) || isExecutable deriv) (isExecutable deriv)
98 , listattr "buildDepends" empty (buildDepends deriv)
102 , listattr "buildDepends" empty (buildDepends deriv)
@@ -153,9 +157,11 @@ parseDerivation buf
153 , docheck <- buf `regsubmatch` "doCheck *= *(true|false) *;"
157 , docheck <- buf `regsubmatch` "doCheck *= *(true|false) *;"
154 , hyperlSrc <- buf `regsubmatch` "hyperlinkSource *= *(true|false) *;"
158 , hyperlSrc <- buf `regsubmatch` "hyperlinkSource *= *(true|false) *;"
155 , splitObj <- buf `regsubmatch` "enableSplitObjs *= *(true|false) *;"
159 , splitObj <- buf `regsubmatch` "enableSplitObjs *= *(true|false) *;"
160+ , edtdCabal <- buf `regsubmatch` "editedCabalFile *= *\"([^\"]+)\""
156 = Just MkDerivation
161 = Just MkDerivation
157 { pname = name
162 { pname = name
158 , version = vers
163 , version = vers
159 , src = case (sr,url) of
165 , src = case (sr,url) of
160 ([] , _ ) -> DerivationSource "url" ("mirror://hackage/" ++ name ++ "-" ++ vers' ++ ".tar.gz") "" $ head sha
166 ([] , _ ) -> DerivationSource "url" ("mirror://hackage/" ++ name ++ "-" ++ vers' ++ ".tar.gz") "" $ head sha
161 (sr':_, [] ) -> DerivationSource "" sr' "" ""
167 (sr':_, [] ) -> DerivationSource "" sr' "" ""
@@ -179,6 +185,7 @@ parseDerivation buf
179 , hyperlinkSource = hyperlSrc == ["true"] || null hyperlSrc
185 , hyperlinkSource = hyperlSrc == ["true"] || null hyperlSrc
180 , enableSplitObjs = splitObj /= ["false"]
186 , enableSplitObjs = splitObj /= ["false"]
181 , phaseOverrides = ""
187 , phaseOverrides = ""
188+ , editedCabalFile = if null edtdCabal then [] else head edtdCabal
182 , metaSection = Meta
189 , metaSection = Meta
183 { homepage = ""
190 { homepage = ""
184 , description = ""
191 , description = ""