@@ -14,17 +14,18 @@ import Cabal2Nix.License
1414import Cabal2Nix.Name
1515import Cabal2Nix.CorePackages
1616
17−type PkgName = String
18−type PkgVersion = [Int]
19−type PkgSHA256 = String
20−type PkgURL = String
21−type PkgDescription = String
22−type PkgLicense = License
23−type PkgDependencies = [Dependency] -- [CondTree ConfVar [Dependency] ()]
24−type PkgBuildTools = [Dependency]
25−type PkgExtraLibs = [String]
26−type PkgPlatforms = [String]
27−type PkgMaintainers = [String]
17+type PkgName = String
18+type PkgVersion = [Int]
19+type PkgSHA256 = String
20+type PkgURL = String
21+type PkgDescription = String
22+type PkgLicense = License
23+type PkgDependencies = [Dependency] -- [CondTree ConfVar [Dependency] ()]
24+type PkgBuildTools = [Dependency]
25+type PkgExtraLibs = [String]
26+type PkgPkgconfigDeps = [String]
27+type PkgPlatforms = [String]
28+type PkgMaintainers = [String]
2829
2930data Pkg = Pkg PkgName
3031 PkgVersion
@@ -35,6 +36,7 @@ data Pkg = Pkg PkgName
3536 PkgDependencies
3637 PkgBuildTools
3738 PkgExtraLibs
39+ PkgPkgconfigDeps
3840 PkgPlatforms
3941 PkgMaintainers
4042 deriving (Show)
@@ -45,7 +47,7 @@ prepunctuate p (d:ds) = d : map (p <>) ds
4547
4648
4749showNixPkg :: 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
4951 where
5052 doc = sep [
5153 lbrace <+> (fcat $ prepunctuate (comma <> text " ") $
@@ -61,18 +63,10 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
6163 attr "pname" $ doubleQuotes (text name),
6264 attr "version" $ doubleQuotes showVer,
6365 attr "sha256" $ doubleQuotes (text sha256),
64− onlyIf pkgBuildTools $
65− sep [
66− text "extraBuildInputs" <+> equals <+> lbrack,
67− nest 2 $ fsep $ map text pkgBuildTools,
68− rbrack <> semi
69− ],
70− onlyIf pkgDeps $
71− sep [
72− text "propagatedBuildInputs" <+> equals <+> lbrack,
73− nest 2 $ fsep $ map text pkgDeps,
74− rbrack <> semi
75− ],
66+ listattr "buildDepends" pkgDeps,
67+ listattr "buildTools" pkgBuildTools,
68+ listattr "extraLibraries" pkgLibs,
69+ listattr "pkgconfigDepends" pkgPCs,
7670 vcat [
7771 text "meta" <+> equals <+> lbrace,
7872 nest 2 $ vcat [
@@ -84,13 +78,8 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
8478 text "platforms" <+> equals,
8579 nest 2 ((fsep $ punctuate (text " ++") $ map text platforms)) <> semi
8680 ],
87− onlyIf maintainers $
88− sep [
89− text "maintainers" <+> equals <+> lbrack,
90− nest 2 $ fsep $ map text maintainers,
91− rbrack <> semi
92− ]
93− ],
81+ listattr "maintainers" maintainers
82+ ],
9483 rbrace <> semi
9584 ]
9685 ],
@@ -99,12 +88,16 @@ showNixPkg (Pkg name ver sha256 url desc lic deps tools libs platforms maintaine
9988 ]
10089 attr n v = text n <+> equals <+> v <> semi
10190 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,
94+ rbrack <> semi
95+ ]
10296 showVer = hcat (punctuate (text ".") (map int ver))
103− pkgDeps :: [String]
104− pkgDeps = (nub $ sort $ concatMap libNixName libs) ++
105− (nub $ sort $ map toNixName $
106− filter (`notElem` (name : corePackages)) $ map unDep deps)
107− pkgBuildTools :: [String]
97+ pkgLibs = nub $ sort $ concatMap libNixName libs
98+ pkgPCs = nub $ sort $ concatMap libNixName pcs
99+ pkgDeps = nub $ sort $ map toNixName $
100+ filter (`notElem` (name : corePackages)) $ map unDep deps
108101 pkgBuildTools = nub $ sort $ map toNixName $
109102 filter (`notElem` coreBuildTools) $ map unDep tools
110103
@@ -115,6 +108,7 @@ cabal2nix cabal sha256 platforms maintainers =
115108 (buildDepends tpkg)
116109 tools
117110 libs
111+ pcs
118112 [ "self.stdenv.lib.platforms." ++ p | p <- platforms ]
119113 [ "self.stdenv.lib.maintainers." ++ m | m <- maintainers ]
120114 where
@@ -134,12 +128,9 @@ cabal2nix cabal sha256 platforms maintainers =
134128 [] cabal
135129 libDeps = map libBuildInfo $ maybeToList (library tpkg)
136130 exeDeps = map buildInfo $ executables tpkg
137− libsExtra = concatMap extraLibs (libDeps ++ exeDeps)
138− libsPkgCfg = map unDep $ concatMap pkgconfigDepends (libDeps ++ exeDeps)
139− 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))
131+ libs = concatMap extraLibs (libDeps ++ exeDeps)
132+ pcs = map unDep $ concatMap pkgconfigDepends (libDeps ++ exeDeps)
133+ tools = concatMap buildTools (libDeps ++ exeDeps)
143134
144135unDep :: Dependency -> String
145136unDep (Dependency (PackageName x) _) = x