@@ -24,7 +24,7 @@ import Distribution.Types.PkgconfigDependency
24
24
import Distribution.Types.PkgconfigName
25
25
import Distribution.Types.VersionRange
26
26
import Distribution.Compiler
27
- import Distribution.Types.PackageName (PackageName , mkPackageName )
27
+ import Distribution.Types.PackageName (PackageName , mkPackageName , unPackageName )
28
28
import Distribution.Simple.BuildToolDepends (desugarBuildTool )
29
29
import Distribution.ModuleName (ModuleName )
30
30
import qualified Distribution.ModuleName as ModuleName
@@ -44,6 +44,7 @@ import Cabal2Nix.Util (quoted, selectOr, mkThrow)
44
44
45
45
data Src
46
46
= Path FilePath
47
+ | PrivateHackage String
47
48
| Git String String (Maybe String ) (Maybe String )
48
49
deriving Show
49
50
@@ -97,14 +98,18 @@ cabal2nix isLocal fileDetails src = \case
97
98
(_, Right desc) -> pure desc
98
99
99
100
gpd2nix :: Bool -> CabalDetailLevel -> Maybe Src -> Maybe NExpr -> GenericPackageDescription -> NExpr
100
- gpd2nix isLocal fileDetails src extra gpd = mkLets errorFunctions $ mkFunction args $ toNixGenericPackageDescription isLocal fileDetails gpd $//? (toNix <$> src) $//? extra
101
+ gpd2nix isLocal fileDetails src extra gpd =
102
+ mkLets errorFunctions $ mkFunction args $ toNixGenericPackageDescription isLocal fileDetails gpd
103
+ $//? (srcToNix (package $ packageDescription gpd) <$> src)
104
+ $//? extra
101
105
where args :: Params NExpr
102
106
args = mkParamset [ (" system" , Nothing )
103
107
, (" compiler" , Nothing )
104
108
, (" flags" , Nothing )
105
109
, (pkgs, Nothing )
106
110
, (hsPkgs, Nothing )
107
- , (pkgconfPkgs, Nothing )]
111
+ , (pkgconfPkgs, Nothing )
112
+ , (" config" , Nothing )]
108
113
True
109
114
110
115
errorFunctions :: [Binding NExpr ]
@@ -216,22 +221,6 @@ class ToNixExpr a where
216
221
class ToNixBinding a where
217
222
toNixBinding :: a -> Binding NExpr
218
223
219
- instance ToNixExpr Src where
220
- toNix (Path p) = mkRecSet [ " src" $= applyMkDefault (mkRelPath p) ]
221
- toNix (Git url rev mbSha256 mbPath)
222
- = mkNonRecSet $
223
- [ " src" $= applyMkDefault (mkSym pkgs @. " fetchgit" @@ mkNonRecSet
224
- [ " url" $= mkStr (fromString url)
225
- , " rev" $= mkStr (fromString rev)
226
- , " sha256" $= case mbSha256 of
227
- Just sha256 -> mkStr (fromString sha256)
228
- Nothing -> mkNull
229
- ])
230
- ] <>
231
- [ " postUnpack"
232
- $= mkStr (fromString $ " sourceRoot+=/" <> root <> " ; echo source root reset to $sourceRoot" )
233
- | Just root <- [mbPath] ]
234
-
235
224
applyMkDefault :: NExpr -> NExpr
236
225
applyMkDefault expr = mkSym pkgs @. " lib" @. " mkDefault" @@ expr
237
226
@@ -272,6 +261,35 @@ toNixPackageDescription isLocal detailLevel pd = mkNonRecSet $
272
261
, " extraDocFiles" $= toNix (extraDocFiles pd)
273
262
]
274
263
264
+ srcToNix :: PackageIdentifier -> Src -> NExpr
265
+ srcToNix _ (Path p) = mkRecSet [ " src" $= applyMkDefault (mkRelPath p) ]
266
+ srcToNix pi' (PrivateHackage url)
267
+ = mkNonRecSet $
268
+ [ " src" $= applyMkDefault (mkSym pkgs @. " fetchurl" @@ mkNonRecSet
269
+ [ " url" $= mkStr (fromString $ mkPrivateHackageUrl url pi')
270
+ , " sha256" $= (mkSym " config" @. " sha256" )
271
+ ])
272
+ ]
273
+ srcToNix _ (Git url rev mbSha256 mbPath)
274
+ = mkNonRecSet $
275
+ [ " src" $= applyMkDefault (mkSym pkgs @. " fetchgit" @@ mkNonRecSet
276
+ [ " url" $= mkStr (fromString url)
277
+ , " rev" $= mkStr (fromString rev)
278
+ , " sha256" $= case mbSha256 of
279
+ Just sha256 -> mkStr (fromString sha256)
280
+ Nothing -> mkNull
281
+ ])
282
+ ] <>
283
+ [ " postUnpack"
284
+ $= mkStr (fromString $ " sourceRoot+=/" <> root <> " ; echo source root reset to $sourceRoot" )
285
+ | Just root <- [mbPath] ]
286
+
287
+ mkPrivateHackageUrl :: String -> PackageIdentifier -> String
288
+ mkPrivateHackageUrl hackageUrl pi' =
289
+ hackageUrl <> " /package/" <> pkgNameVersion <> " /" <> pkgNameVersion <> " .tar.gz"
290
+ where
291
+ pkgNameVersion = unPackageName (pkgName pi') <> " -" <> show (disp (pkgVersion pi'))
292
+
275
293
newtype SysDependency = SysDependency { unSysDependency :: String } deriving (Show , Eq , Ord )
276
294
newtype BuildToolDependency = BuildToolDependency { unBuildToolDependency :: PackageName } deriving (Show , Eq , Ord )
277
295
0 commit comments