@@ -14,17 +14,18 @@ import Cabal2Nix.License
14import Cabal2Nix.Name
14import Cabal2Nix.Name
15import Cabal2Nix.CorePackages
15import Cabal2Nix.CorePackages
17−type PkgName = String
17+type PkgName = String
18−type PkgVersion = [Int]
18+type PkgVersion = [Int]
19−type PkgSHA256 = String
19+type PkgSHA256 = String
20−type PkgURL = String
20+type PkgURL = String
21−type PkgDescription = String
21+type PkgDescription = String
22−type PkgLicense = License
22+type PkgLicense = License
23−type PkgDependencies = [Dependency] -- [CondTree ConfVar [Dependency] ()]
23+type PkgDependencies = [Dependency] -- [CondTree ConfVar [Dependency] ()]
24−type PkgBuildTools = [Dependency]
24+type PkgBuildTools = [Dependency]
25−type PkgExtraLibs = [String]
25+type PkgExtraLibs = [String]
26+type PkgPkgconfigDeps = [String]
26−type PkgPlatforms = [String]
27+type PkgPlatforms = [String]
27−type PkgMaintainers = [String]
28+type PkgMaintainers = [String]
29data Pkg = Pkg PkgName
30data Pkg = Pkg PkgName
30 PkgVersion
31 PkgVersion
@@ -35,6 +36,7 @@ data Pkg = Pkg PkgName
35 PkgDependencies
36 PkgDependencies
36 PkgBuildTools
37 PkgBuildTools
37 PkgExtraLibs
38 PkgExtraLibs
38 PkgPlatforms
40 PkgPlatforms
39 PkgMaintainers
41 PkgMaintainers
40 deriving (Show)
42 deriving (Show)
@@ -45,7 +47,7 @@ prepunctuate p (d:ds) = d : map (p <>) ds
47showNixPkg :: Pkg -> String
49showNixPkg :: Pkg -> String
48−showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintainers) = render doc
50+showNixPkg (Pkg name ver sha256 url desc lic deps tools libs pcs platforms maintainers) = render doc
50 doc = sep [
52 doc = sep [
51 lbrace <+> (fcat $ prepunctuate (comma <> text " ") $
53 lbrace <+> (fcat $ prepunctuate (comma <> text " ") $
@@ -61,18 +63,10 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
61 attr "pname" $ doubleQuotes (text name),
63 attr "pname" $ doubleQuotes (text name),
62 attr "version" $ doubleQuotes showVer,
64 attr "version" $ doubleQuotes showVer,
63 attr "sha256" $ doubleQuotes (text sha256),
65 attr "sha256" $ doubleQuotes (text sha256),
64− onlyIf pkgBuildTools $
66+ listattr "buildDepends" pkgDeps,
66− text "extraBuildInputs" <+> equals <+> lbrack,
67− nest 2 $ fsep $ map text pkgBuildTools,
67+ listattr "buildTools" pkgBuildTools,
68− rbrack <> semi
68+ listattr "extraLibraries" pkgLibs,
69− ],
69+ listattr "pkgconfigDepends" pkgPCs,
72− text "propagatedBuildInputs" <+> equals <+> lbrack,
73− nest 2 $ fsep $ map text pkgDeps,
77 text "meta" <+> equals <+> lbrace,
71 text "meta" <+> equals <+> lbrace,
78 nest 2 $ vcat [
72 nest 2 $ vcat [
@@ -84,13 +78,8 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
84 text "platforms" <+> equals,
78 text "platforms" <+> equals,
85 nest 2 ((fsep $ punctuate (text " ++") $ map text platforms)) <> semi
79 nest 2 ((fsep $ punctuate (text " ++") $ map text platforms)) <> semi
87− onlyIf maintainers $
81+ listattr "maintainers" maintainers
89− text "maintainers" <+> equals <+> lbrack,
90− nest 2 $ fsep $ map text maintainers,
94 rbrace <> semi
83 rbrace <> semi
@@ -99,12 +88,16 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
100 attr n v = text n <+> equals <+> v <> semi
89 attr n v = text n <+> equals <+> v <> semi
101 onlyIf p d = if not (null p) then d else empty
90 onlyIf p d = if not (null p) then d else empty
91+ listattr n vs = onlyIf vs $ sep [
92+ text n <+> equals <+> lbrack,
93+ nest 2 $ fsep $ map text vs,
102 showVer = hcat (punctuate (text ".") (map int ver))
96 showVer = hcat (punctuate (text ".") (map int ver))
104− pkgDeps = (nub $ sort $ concatMap libNixName libs) ++
97+ pkgLibs = nub $ sort $ concatMap libNixName libs
98+ pkgPCs = nub $ sort $ concatMap libNixName pcs
105− (nub $ sort $ map toNixName $
99+ pkgDeps = nub $ sort $ map toNixName $
106− filter (`notElem` (name : corePackages)) $ map unDep deps)
100+ filter (`notElem` (name : corePackages)) $ map unDep deps
107− pkgBuildTools :: [String]
108 pkgBuildTools = nub $ sort $ map toNixName $
101 pkgBuildTools = nub $ sort $ map toNixName $
109 filter (`notElem` coreBuildTools) $ map unDep tools
102 filter (`notElem` coreBuildTools) $ map unDep tools
@@ -115,6 +108,7 @@ cabal2nix cabal sha256 platforms maintainers =
115 (buildDepends tpkg)
108 (buildDepends tpkg)
118 [ "self.stdenv.lib.platforms." ++ p | p <- platforms ]
112 [ "self.stdenv.lib.platforms." ++ p | p <- platforms ]
119 [ "self.stdenv.lib.maintainers." ++ m | m <- maintainers ]
113 [ "self.stdenv.lib.maintainers." ++ m | m <- maintainers ]
@@ -134,12 +128,9 @@ cabal2nix cabal sha256 platforms maintainers =
135 libDeps = map libBuildInfo $ maybeToList (library tpkg)
129 libDeps = map libBuildInfo $ maybeToList (library tpkg)
136 exeDeps = map buildInfo $ executables tpkg
130 exeDeps = map buildInfo $ executables tpkg
137− libsExtra = concatMap extraLibs (libDeps ++ exeDeps)
131+ libs = concatMap extraLibs (libDeps ++ exeDeps)
138− libsPkgCfg = map unDep $ concatMap pkgconfigDepends (libDeps ++ exeDeps)
132+ pcs = map unDep $ concatMap pkgconfigDepends (libDeps ++ exeDeps)
139− tools = concatMap buildTools (libDeps ++ exeDeps)
133+ tools = concatMap buildTools (libDeps ++ exeDeps)
140− -- add pkgconfig as an extra dependency if there are any pkgconfig deps
141− libs = libsExtra ++ (if null libsPkgCfg then []
142− else ("pkgconfig" : libsPkgCfg))
144unDep :: Dependency -> String
135unDep :: Dependency -> String
145unDep (Dependency (PackageName x) _) = x
136unDep (Dependency (PackageName x) _) = x