@@ -2,7 +2,7 @@
3module Cabal2Nix.PostProcess ( postProcess ) where
3module Cabal2Nix.PostProcess ( postProcess ) where
5−import Data.List
5+import qualified Data.Set as Set
6import Distribution.NixOS.Derivation.Cabal
6import Distribution.NixOS.Derivation.Cabal
7import Distribution.Text ( display )
7import Distribution.Text ( display )
@@ -10,105 +10,116 @@ postProcess :: Derivation -> Derivation
10postProcess = postProcess' . fixGtkBuilds
10postProcess = postProcess' . fixGtkBuilds
12fixGtkBuilds :: Derivation -> Derivation
12fixGtkBuilds :: Derivation -> Derivation
13−fixGtkBuilds deriv@(MkDerivation {..}) = deriv { pkgConfDeps = pkgConfDeps \\ buildDepends }
13+fixGtkBuilds deriv@(MkDerivation {..}) = deriv { pkgConfDeps = pkgConfDeps `Set.difference` buildDepends }
15postProcess' :: Derivation -> Derivation
15postProcess' :: Derivation -> Derivation
16postProcess' deriv@(MkDerivation {..})
16postProcess' deriv@(MkDerivation {..})
17 | pname == "aeson" && version > Version [0,7] []
17 | pname == "aeson" && version > Version [0,7] []
18− = deriv { buildDepends = "blaze-builder":buildDepends }
18+ = deriv { buildDepends = Set.insert "blaze-builder" buildDepends }
19− | pname == "Agda" = deriv { buildTools = "emacs":buildTools, phaseOverrides = agdaPostInstall }
19+ | pname == "Agda" = deriv { buildTools = Set.insert "emacs" buildTools, phaseOverrides = agdaPostInstall }
20 | pname == "alex" && version < Version [3,1] []
20 | pname == "alex" && version < Version [3,1] []
21− = deriv { buildTools = "perl":buildTools }
21+ = deriv { buildTools = Set.insert "perl" buildTools }
22 | pname == "alex" && version >= Version [3,1] []
22 | pname == "alex" && version >= Version [3,1] []
23− = deriv { buildTools = "perl":"happy":buildTools }
23+ = deriv { buildTools = Set.insert "perl" (Set.insert "happy" buildTools) }
24− | pname == "apache-md5" = deriv { testDepends = delete "crypto" testDepends }
24+ | pname == "apache-md5" = deriv { testDepends = Set.delete "crypto" testDepends }
25− | pname == "bindings-GLFW" = deriv { extraLibs = "libXext":"libXfixes":extraLibs }
25+ | pname == "bindings-GLFW" = deriv { extraLibs = Set.insert "libXext" (Set.insert "libXfixes" extraLibs) }
26− | pname == "bits-extras" = deriv { configureFlags = "--ghc-option=-lgcc_s":configureFlags, extraLibs = filter (/= "gcc_s") extraLibs }
26+ | pname == "bits-extras" = deriv { configureFlags = Set.insert "--ghc-option=-lgcc_s" configureFlags
27+ , extraLibs = Set.filter (/= "gcc_s") extraLibs
27 | pname == "Cabal" = deriv { phaseOverrides = "preCheck = \"unset GHC_PACKAGE_PATH; export HOME=$NIX_BUILD_TOP\";" }
29 | pname == "Cabal" = deriv { phaseOverrides = "preCheck = \"unset GHC_PACKAGE_PATH; export HOME=$NIX_BUILD_TOP\";" }
28− | pname == "cabal-bounds" = deriv { buildTools = "cabal-install":buildTools }
30+ | pname == "cabal-bounds" = deriv { buildTools = Set.insert "cabal-install" buildTools }
29 | pname == "cabal-install" && version >= Version [0,14] []
31 | pname == "cabal-install" && version >= Version [0,14] []
30 = deriv { phaseOverrides = cabalInstallPostInstall }
32 = deriv { phaseOverrides = cabalInstallPostInstall }
31 | pname == "darcs" = deriv { phaseOverrides = darcsInstallPostInstall }
33 | pname == "darcs" = deriv { phaseOverrides = darcsInstallPostInstall }
32 | pname == "dns" = deriv { testTarget = "spec" }
34 | pname == "dns" = deriv { testTarget = "spec" }
33− | pname == "editline" = deriv { extraLibs = "libedit":extraLibs }
35+ | pname == "editline" = deriv { extraLibs = Set.insert "libedit" extraLibs }
34− | pname == "epic" = deriv { extraLibs = "gmp":"boehmgc":extraLibs, buildTools = "happy":buildTools }
36+ | pname == "epic" = deriv { extraLibs = Set.insert "gmp" (Set.insert "boehmgc" extraLibs)
37+ , buildTools = Set.insert "happy" buildTools
35 | pname == "ghc-heap-view" = deriv { phaseOverrides = ghciPostInstall }
39 | pname == "ghc-heap-view" = deriv { phaseOverrides = ghciPostInstall }
36− | pname == "ghc-mod" = deriv { phaseOverrides = ghcModPostInstall pname version, buildTools = "emacs":"makeWrapper":buildTools }
40+ | pname == "ghc-mod" = deriv { phaseOverrides = ghcModPostInstall pname version
41+ , buildTools = Set.insert "emacs" (Set.insert "makeWrapper" buildTools) }
37− | pname == "ghc-parser" = deriv { buildTools = "cpphs":"happy":buildTools, phaseOverrides = ghcParserPatchPhase }
42+ | pname == "ghc-parser" = deriv { buildTools = Set.insert "cpphs" (Set.insert "happy" buildTools)
43+ , phaseOverrides = ghcParserPatchPhase }
38 | pname == "ghc-paths" = deriv { phaseOverrides = ghcPathsPatches }
44 | pname == "ghc-paths" = deriv { phaseOverrides = ghcPathsPatches }
39 | pname == "ghc-vis" = deriv { phaseOverrides = ghciPostInstall }
45 | pname == "ghc-vis" = deriv { phaseOverrides = ghciPostInstall }
46+ | pname == "git-annex" = deriv { phaseOverrides = gitAnnexOverrides
40− | pname == "git-annex" = deriv { phaseOverrides = gitAnnexOverrides, buildTools = "git":"rsync":"gnupg1":"curl":"wget":"lsof":"openssh":"which":"bup":"perl":buildTools }
47+ , buildTools = Set.fromList ["git","rsync","gnupg1","curl","wget","lsof","openssh","which","bup","perl"] `Set.union` buildTools }
41− | pname == "github-backup" = deriv { buildTools = "git":buildTools }
48+ | pname == "github-backup" = deriv { buildTools = Set.insert "git" buildTools }
42− | pname == "gloss-raster" = deriv { extraLibs = "llvm":extraLibs }
49+ | pname == "gloss-raster" = deriv { extraLibs = Set.insert "llvm" extraLibs }
43− | pname == "GLUT" = deriv { extraLibs = "glut":"libSM":"libICE":"libXmu":"libXi":"mesa":extraLibs }
50+ | pname == "GLUT" = deriv { extraLibs = Set.fromList ["glut","libSM","libICE","libXmu","libXi","mesa"] `Set.union` extraLibs }
44− | pname == "gtkglext" = deriv { pkgConfDeps = "pangox_compat":pkgConfDeps }
51+ | pname == "gtkglext" = deriv { pkgConfDeps = Set.insert "pangox_compat" pkgConfDeps }
45− | pname == "gtk2hs-buildtools"= deriv { buildDepends = "hashtables":buildDepends }
52+ | pname == "gtk2hs-buildtools"= deriv { buildDepends = Set.insert "hashtables" buildDepends }
46 | pname == "haddock" && version < Version [2,14] []
53 | pname == "haddock" && version < Version [2,14] []
47− = deriv { buildTools = "alex":"happy":buildTools }
54+ = deriv { buildTools = Set.insert "alex" (Set.insert "happy" buildTools) }
48 | pname == "haddock" = deriv { phaseOverrides = haddockPreCheck }
55 | pname == "haddock" = deriv { phaseOverrides = haddockPreCheck }
49− | pname == "happy" = deriv { buildTools = "perl":buildTools }
56+ | pname == "happy" = deriv { buildTools = Set.insert "perl" buildTools }
50− | pname == "haskeline" = deriv { buildDepends = "utf8-string":buildDepends }
57+ | pname == "haskeline" = deriv { buildDepends = Set.insert "utf8-string" buildDepends }
51− | pname == "haskell-src" = deriv { buildTools = "happy":buildTools }
58+ | pname == "haskell-src" = deriv { buildTools = Set.insert "happy" buildTools }
52− | pname == "haskell-src-meta" = deriv { buildDepends = "uniplate":buildDepends }
59+ | pname == "haskell-src-meta" = deriv { buildDepends = Set.insert "uniplate" buildDepends }
53 | pname == "HFuse" = deriv { phaseOverrides = hfusePreConfigure }
60 | pname == "HFuse" = deriv { phaseOverrides = hfusePreConfigure }
54 | pname == "highlighting-kate"= highlightingKatePostProcessing deriv
61 | pname == "highlighting-kate"= highlightingKatePostProcessing deriv
55− | pname == "hlibgit2" = deriv { buildTools = "git":buildTools }
62+ | pname == "hlibgit2" = deriv { buildTools = Set.insert "git" buildTools }
56− | pname == "HList" = deriv { buildTools = "diffutils":buildTools }
63+ | pname == "HList" = deriv { buildTools = Set.insert "diffutils" buildTools }
57− | pname == "hmatrix" = deriv { extraLibs = "liblapack":"blas": filter (/= "lapack") extraLibs }
64+ | pname == "hmatrix" = deriv { extraLibs = Set.insert "liblapack" (Set.insert "blas" (Set.filter (/= "lapack") extraLibs)) }
58− | pname == "hmatrix-special" = deriv { extraLibs = "gsl":extraLibs }
65+ | pname == "hmatrix-special" = deriv { extraLibs = Set.insert "gsl" extraLibs }
59 | pname == "hoogle" = deriv { testTarget = "--test-option=--no-net" }
66 | pname == "hoogle" = deriv { testTarget = "--test-option=--no-net" }
60 | pname == "hspec" = deriv { doCheck = False }
67 | pname == "hspec" = deriv { doCheck = False }
61− | pname == "GlomeVec" = deriv { buildTools = "llvm":buildTools }
68+ | pname == "GlomeVec" = deriv { buildTools = Set.insert "llvm" buildTools }
62− | pname == "idris" = deriv { buildTools = "happy":buildTools, extraLibs = "gmp":"boehmgc":extraLibs }
69+ | pname == "idris" = deriv { buildTools = Set.insert "happy" buildTools, extraLibs = Set.insert "gmp" (Set.insert "boehmgc" extraLibs) }
63− | pname == "language-c-quote" = deriv { buildTools = "alex":"happy":buildTools }
70+ | pname == "language-c-quote" = deriv { buildTools = Set.insert "alex" (Set.insert "happy" buildTools) }
64− | pname == "language-java" = deriv { buildDepends = "syb":buildDepends }
71+ | pname == "language-java" = deriv { buildDepends = Set.insert "syb" buildDepends }
65− | pname == "leksah-server" = deriv { buildDepends = "process-leksah":buildDepends }
72+ | pname == "leksah-server" = deriv { buildDepends = Set.insert "process-leksah" buildDepends }
66− | pname == "lhs2tex" = deriv { extraLibs = "texLive":extraLibs, phaseOverrides = lhs2texPostInstall }
73+ | pname == "lhs2tex" = deriv { extraLibs = Set.insert "texLive" extraLibs, phaseOverrides = lhs2texPostInstall }
67− | pname == "libffi" = deriv { extraLibs = delete "ffi" extraLibs }
74+ | pname == "libffi" = deriv { extraLibs = Set.delete "ffi" extraLibs }
68− | pname == "liquid-fixpoint" = deriv { buildTools = "ocaml":buildTools }
75+ | pname == "liquid-fixpoint" = deriv { buildTools = Set.insert "ocaml" buildTools }
69− | pname == "llvm-base" = deriv { extraLibs = "llvm":extraLibs }
76+ | pname == "llvm-base" = deriv { extraLibs = Set.insert "llvm" extraLibs }
70 | pname == "llvm-general" = deriv { doCheck = False }
77 | pname == "llvm-general" = deriv { doCheck = False }
71 | pname == "llvm-general-pure"= deriv { doCheck = False }
78 | pname == "llvm-general-pure"= deriv { doCheck = False }
72− | pname == "MFlow" = deriv { buildTools = "cpphs":buildTools }
79+ | pname == "MFlow" = deriv { buildTools = Set.insert "cpphs" buildTools }
73− | pname == "multiarg" = deriv { buildDepends = "utf8-string":buildDepends }
80+ | pname == "multiarg" = deriv { buildDepends = Set.insert "utf8-string" buildDepends }
74− | pname == "mysql" = deriv { buildTools = "mysqlConfig":buildTools, extraLibs = "zlib":extraLibs }
81+ | pname == "mysql" = deriv { buildTools = Set.insert "mysqlConfig" buildTools, extraLibs = Set.insert "zlib" extraLibs }
75 | pname == "ncurses" = deriv { phaseOverrides = ncursesPatchPhase }
82 | pname == "ncurses" = deriv { phaseOverrides = ncursesPatchPhase }
76− | pname == "Omega" = deriv { testDepends = delete "stdc++" testDepends }
83+ | pname == "Omega" = deriv { testDepends = Set.delete "stdc++" testDepends }
77− | pname == "OpenAL" = deriv { extraLibs = "openal":extraLibs }
84+ | pname == "OpenAL" = deriv { extraLibs = Set.insert "openal" extraLibs }
78− | pname == "OpenGL" = deriv { extraLibs = "mesa":"libX11":extraLibs }
85+ | pname == "OpenGL" = deriv { extraLibs = Set.insert "mesa" (Set.insert "libX11" extraLibs) }
79− | pname == "pandoc" = deriv { buildDepends = "alex":"happy":buildDepends }
86+ | pname == "pandoc" = deriv { buildDepends = Set.insert "alex" (Set.insert "happy" buildDepends) }
80− | pname == "pcap" = deriv { extraLibs = "libpcap":extraLibs }
87+ | pname == "pcap" = deriv { extraLibs = Set.insert "libpcap" extraLibs }
81− | pname == "persistent" = deriv { extraLibs = "sqlite3":extraLibs }
88+ | pname == "persistent" = deriv { extraLibs = Set.insert "sqlite3" extraLibs }
82− | pname == "purescript" = deriv { buildTools = "nodejs":buildTools }
89+ | pname == "purescript" = deriv { buildTools = Set.insert "nodejs" buildTools }
83− | pname == "repa-algorithms" = deriv { extraLibs = "llvm":extraLibs }
90+ | pname == "repa-algorithms" = deriv { extraLibs = Set.insert "llvm" extraLibs }
84− | pname == "repa-examples" = deriv { extraLibs = "llvm":extraLibs }
91+ | pname == "repa-examples" = deriv { extraLibs = Set.insert "llvm" extraLibs }
85− | pname == "saltine" = deriv { extraLibs = map (\x -> if x == "sodium" then "libsodium" else x) extraLibs }
92+ | pname == "saltine" = deriv { extraLibs = Set.map (\x -> if x == "sodium" then "libsodium" else x) extraLibs }
86− | pname == "SDL-image" = deriv { extraLibs = "SDL_image":extraLibs }
93+ | pname == "SDL-image" = deriv { extraLibs = Set.insert "SDL_image" extraLibs }
87− | pname == "SDL-mixer" = deriv { extraLibs = "SDL_mixer":extraLibs }
94+ | pname == "SDL-mixer" = deriv { extraLibs = Set.insert "SDL_mixer" extraLibs }
88− | pname == "SDL-ttf" = deriv { extraLibs = "SDL_ttf":extraLibs }
95+ | pname == "SDL-ttf" = deriv { extraLibs = Set.insert "SDL_ttf" extraLibs }
89 | pname == "sloane" = deriv { phaseOverrides = sloanePostInstall }
96 | pname == "sloane" = deriv { phaseOverrides = sloanePostInstall }
90− | pname == "structured-haskell-mode" = deriv { buildTools = "emacs":buildTools, phaseOverrides = structuredHaskellModePostInstall }
97+ | pname == "structured-haskell-mode" = deriv { buildTools = Set.insert "emacs" buildTools
98+ , phaseOverrides = structuredHaskellModePostInstall
91− | pname == "terminfo" = deriv { extraLibs = "ncurses":extraLibs }
100+ | pname == "terminfo" = deriv { extraLibs = Set.insert "ncurses" extraLibs }
92− | pname == "threadscope" = deriv { configureFlags = "--ghc-options=-rtsopts":configureFlags }
101+ | pname == "threadscope" = deriv { configureFlags = Set.insert "--ghc-options=-rtsopts" configureFlags }
93− | pname == "thyme" = deriv { buildTools = "cpphs":buildTools }
102+ | pname == "thyme" = deriv { buildTools = Set.insert "cpphs" buildTools }
94− | pname == "vacuum" = deriv { extraLibs = "ghc-paths":extraLibs }
103+ | pname == "vacuum" = deriv { extraLibs = Set.insert "ghc-paths" extraLibs }
95− | pname == "wxc" = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs, phaseOverrides = wxcPostInstall version }
104+ | pname == "wxc" = deriv { extraLibs = Set.fromList ["wxGTK","mesa","libX11"] `Set.union` extraLibs
105+ , phaseOverrides = wxcPostInstall version
96− | pname == "wxcore" = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs }
107+ | pname == "wxcore" = deriv { extraLibs = Set.fromList ["wxGTK","mesa","libX11"] `Set.union` extraLibs }
97 | pname == "X11" && version >= Version [1,6] []
108 | pname == "X11" && version >= Version [1,6] []
98− = deriv { extraLibs = "libXinerama":"libXext":"libXrender":extraLibs }
109+ = deriv { extraLibs = Set.fromList ["libXinerama","libXext","libXrender"] `Set.union` extraLibs }
99− | pname == "X11" = deriv { extraLibs = "libXinerama":"libXext":extraLibs }
110+ | pname == "X11" = deriv { extraLibs = Set.insert "libXinerama" (Set.insert "libXext" extraLibs) }
100− | pname == "X11-xft" = deriv { extraLibs = "pkgconfig":"freetype":"fontconfig":extraLibs
111+ | pname == "X11-xft" = deriv { extraLibs = Set.fromList ["pkgconfig","freetype","fontconfig"] `Set.union` extraLibs
101− , configureFlags = "--extra-include-dirs=${freetype}/include/freetype2":configureFlags
112+ , configureFlags = Set.insert "--extra-include-dirs=${freetype}/include/freetype2" configureFlags
103 | pname == "xmonad" = deriv { phaseOverrides = xmonadPostInstall }
114 | pname == "xmonad" = deriv { phaseOverrides = xmonadPostInstall }
105-- Unbreak packages during hackage2nix generation:
116-- Unbreak packages during hackage2nix generation:
107− | pname == "hnetcdf" = deriv { testDepends = delete "netcdf" testDepends }
118+ | pname == "hnetcdf" = deriv { testDepends = Set.delete "netcdf" testDepends }
108− | pname == "SDL2-ttf" = deriv { buildDepends = delete "SDL2" buildDepends }
119+ | pname == "SDL2-ttf" = deriv { buildDepends = Set.delete "SDL2" buildDepends }
109− | pname == "jsaddle" = deriv { buildDepends = delete "ghcjs-base" buildDepends, testDepends = delete "ghcjs-base" testDepends }
120+ | pname == "jsaddle" = deriv { buildDepends = Set.delete "ghcjs-base" buildDepends, testDepends = Set.delete "ghcjs-base" testDepends }
110− | pname == "hzk" = deriv { testDepends = delete "zookeeper_mt" testDepends, buildTools = "zookeeper_mt":buildTools }
121+ | pname == "hzk" = deriv { testDepends = Set.delete "zookeeper_mt" testDepends, buildTools = Set.insert "zookeeper_mt" buildTools }
111− | pname == "zip-archive" = deriv { testDepends = delete "zip" testDepends, buildTools = "zip":buildTools }
122+ | pname == "zip-archive" = deriv { testDepends = Set.delete "zip" testDepends, buildTools = Set.insert "zip" buildTools }
112 | otherwise = deriv
123 | otherwise = deriv
114ghcModPostInstall :: String -> Version -> String
125ghcModPostInstall :: String -> Version -> String
@@ -150,7 +161,7 @@ darcsInstallPostInstall = unlines
150highlightingKatePostProcessing :: Derivation -> Derivation
161highlightingKatePostProcessing :: Derivation -> Derivation
151highlightingKatePostProcessing deriv@(MkDerivation {..}) = deriv
162highlightingKatePostProcessing deriv@(MkDerivation {..}) = deriv
152 { phaseOverrides = "prePatch = \"sed -i -e 's|regex-pcre-builtin >= .*|regex-pcre|' highlighting-kate.cabal\";"
163 { phaseOverrides = "prePatch = \"sed -i -e 's|regex-pcre-builtin >= .*|regex-pcre|' highlighting-kate.cabal\";"
153− , buildDepends = "regex-pcre" : filter (/="regex-pcre-builtin") buildDepends
164+ , buildDepends = Set.insert "regex-pcre" (Set.delete "regex-pcre-builtin" buildDepends)
156xmonadPostInstall :: String
167xmonadPostInstall :: String