git.iko.soy/typeable/cabal2nix
on 44207c2 help sign in
256 lines 13 kB history raw
1{-# LANGUAGE RecordWildCards #-}
3module Cabal2Nix.PostProcess ( postProcess ) where
5import Data.List
6import Distribution.NixOS.Derivation.Cabal
7import Distribution.Text ( display )
9postProcess :: Derivation -> Derivation
10postProcess deriv@(MkDerivation {..})
11 | pname == "aeson" && version > Version [0,7] []
12 = deriv { buildDepends = "blaze-builder":buildDepends }
13 | pname == "Agda" = deriv { buildTools = "emacs":buildTools, phaseOverrides = agdaPostInstall }
14 | pname == "alex" && version < Version [3,1] []
15 = deriv { buildTools = "perl":buildTools }
16 | pname == "alex" && version >= Version [3,1] []
17 = deriv { buildTools = "perl":"happy":buildTools }
18 | pname == "apache-md5" = deriv { testDepends = delete "crypto" testDepends }
19 | pname == "bindings-GLFW" = deriv { extraLibs = "libXext":"libXfixes":extraLibs }
20 | pname == "bits-extras" = deriv { configureFlags = "--ghc-option=-lgcc_s":configureFlags, extraLibs = filter (/= "gcc_s") extraLibs }
21 | pname == "Cabal" = deriv { phaseOverrides = "preCheck = \"unset GHC_PACKAGE_PATH; export HOME=$NIX_BUILD_TOP\";" }
22 | pname == "cabal-bounds" = deriv { buildTools = "cabal-install":buildTools }
23 | pname == "cabal-install" && version >= Version [0,14] []
24 = deriv { phaseOverrides = cabalInstallPostInstall }
25 | pname == "cuda" = deriv { phaseOverrides = cudaConfigurePhase, extraLibs = "cudatoolkit":"nvidia_x11":"stdenv.cc":extraLibs }
26 | pname == "darcs" = deriv { phaseOverrides = darcsInstallPostInstall }
27 | pname == "dns" = deriv { testTarget = "spec" }
28 | pname == "editline" = deriv { extraLibs = "libedit":extraLibs }
29 | pname == "epic" = deriv { extraLibs = "gmp":"boehmgc":extraLibs, buildTools = "happy":buildTools }
30 | pname == "ghc-heap-view" = deriv { phaseOverrides = ghciPostInstall }
31 | pname == "ghc-mod" = deriv { phaseOverrides = ghcModPostInstall pname version, buildTools = "emacs":"makeWrapper":buildTools }
32 | pname == "ghc-parser" = deriv { buildTools = "cpphs":"happy":buildTools, phaseOverrides = ghcParserPatchPhase }
33 | pname == "ghc-paths" = deriv { phaseOverrides = ghcPathsPatches }
34 | pname == "ghc-vis" = deriv { phaseOverrides = ghciPostInstall }
35 | pname == "git-annex" = deriv { phaseOverrides = gitAnnexOverrides, buildTools = "git":"rsync":"gnupg1":"curl":"wget":"lsof":"openssh":"which":"bup":"perl":buildTools }
36 | pname == "github-backup" = deriv { buildTools = "git":buildTools }
37 | pname == "gloss-raster" = deriv { extraLibs = "llvm":extraLibs }
38 | pname == "GLUT" = deriv { extraLibs = "glut":"libSM":"libICE":"libXmu":"libXi":"mesa":extraLibs }
39 | pname == "gtkglext" = deriv { pkgConfDeps = "pangox_compat":pkgConfDeps }
40 | pname == "gtk2hs-buildtools"= deriv { buildDepends = "hashtables":buildDepends }
41 | pname == "haddock" && version < Version [2,14] []
42 = deriv { buildTools = "alex":"happy":buildTools }
43 | pname == "haddock" = deriv { phaseOverrides = haddockPreCheck }
44 | pname == "happy" = deriv { buildTools = "perl":buildTools }
45 | pname == "haskeline" = deriv { buildDepends = "utf8-string":buildDepends }
46 | pname == "haskell-src" = deriv { buildTools = "happy":buildTools }
47 | pname == "haskell-src-meta" = deriv { buildDepends = "uniplate":buildDepends }
48 | pname == "HFuse" = deriv { phaseOverrides = hfusePreConfigure }
49 | pname == "highlighting-kate"= highlightingKatePostProcessing deriv
50 | pname == "hlibgit2" = deriv { testDepends = "git":testDepends }
51 | pname == "HList" = deriv { buildTools = "diffutils":buildTools }
52 | pname == "hmatrix" = deriv { extraLibs = "liblapack":"blas": filter (/= "lapack") extraLibs }
53 | pname == "hmatrix-special" = deriv { extraLibs = "gsl":extraLibs }
54 | pname == "hoogle" = deriv { testTarget = "--test-option=--no-net" }
55 | pname == "hspec" = deriv { doCheck = False }
56 | pname == "GlomeVec" = deriv { buildTools = "llvm":buildTools }
57 | pname == "idris" = deriv { buildTools = "happy":buildTools, extraLibs = "gmp":"boehmgc":extraLibs }
58 | pname == "language-c-quote" = deriv { buildTools = "alex":"happy":buildTools }
59 | pname == "language-java" = deriv { buildDepends = "syb":buildDepends }
60 | pname == "leksah-server" = deriv { buildDepends = "process-leksah":buildDepends }
61 | pname == "lhs2tex" = deriv { extraLibs = "texLive":extraLibs, phaseOverrides = lhs2texPostInstall }
62 | pname == "libffi" = deriv { extraLibs = delete "ffi" extraLibs }
63 | pname == "liquid-fixpoint" = deriv { buildTools = "ocaml":buildTools }
64 | pname == "llvm-base" = deriv { extraLibs = "llvm":extraLibs }
65 | pname == "llvm-general" = deriv { doCheck = False }
66 | pname == "llvm-general-pure"= deriv { doCheck = False }
67 | pname == "MFlow" = deriv { buildTools = "cpphs":buildTools }
68 | pname == "multiarg" = deriv { buildDepends = "utf8-string":buildDepends }
69 | pname == "mime-mail" = deriv { extraFunctionArgs = ["sendmail ? \"sendmail\""], phaseOverrides = mimeMailConfigureFlags }
70 | pname == "mysql" = deriv { buildTools = "mysqlConfig":buildTools, extraLibs = "zlib":extraLibs }
71 | pname == "ncurses" = deriv { phaseOverrides = ncursesPatchPhase }
72 | pname == "Omega" = deriv { testDepends = delete "stdc++" testDepends }
73 | pname == "OpenAL" = deriv { extraLibs = "openal":extraLibs }
74 | pname == "OpenGL" = deriv { extraLibs = "mesa":"libX11":extraLibs }
75 | pname == "pandoc" = deriv { buildDepends = "alex":"happy":buildDepends }
76 | pname == "pcap" = deriv { extraLibs = "libpcap":extraLibs }
77 | pname == "persistent" = deriv { extraLibs = "sqlite3":extraLibs }
78 | pname == "purescript" = deriv { testDepends = "nodejs":testDepends }
79 | pname == "repa-algorithms" = deriv { extraLibs = "llvm":extraLibs }
80 | pname == "repa-examples" = deriv { extraLibs = "llvm":extraLibs }
81 | pname == "saltine" = deriv { extraLibs = map (\x -> if x == "sodium" then "libsodium" else x) extraLibs }
82 | pname == "SDL-image" = deriv { extraLibs = "SDL_image":extraLibs }
83 | pname == "SDL-mixer" = deriv { extraLibs = "SDL_mixer":extraLibs }
84 | pname == "SDL-ttf" = deriv { extraLibs = "SDL_ttf":extraLibs }
85 | pname == "sloane" = deriv { phaseOverrides = sloanePostInstall }
86 | pname == "structured-haskell-mode" = deriv { buildTools = "emacs":buildTools, phaseOverrides = structuredHaskellModePostInstall }
87 | pname == "terminfo" = deriv { extraLibs = "ncurses":extraLibs }
88 | pname == "threadscope" = deriv { configureFlags = "--ghc-options=-rtsopts":configureFlags }
89 | pname == "thyme" = deriv { buildTools = "cpphs":buildTools }
90 | pname == "tz" = deriv { extraFunctionArgs = ["tzdata"], phaseOverrides = "preConfigure = \"export TZDIR=${tzdata}/share/zoneinfo\";" }
91 | pname == "vacuum" = deriv { extraLibs = "ghc-paths":extraLibs }
92 | pname == "vector" = deriv { configureFlags = "${stdenv.lib.optionalString stdenv.isi686 \"--ghc-options=-msse2\"}":configureFlags }
93 | pname == "wxc" = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs, phaseOverrides = wxcPostInstall version }
94 | pname == "wxcore" = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs }
95 | pname == "X11" && version >= Version [1,6] []
96 = deriv { extraLibs = "libXinerama":"libXext":"libXrender":extraLibs }
97 | pname == "X11" = deriv { extraLibs = "libXinerama":"libXext":extraLibs }
98 | pname == "X11-xft" = deriv { extraLibs = "pkgconfig":"freetype":"fontconfig":extraLibs
99 , configureFlags = "--extra-include-dirs=${freetype}/include/freetype2":configureFlags
100 }
101 | pname == "xmonad" = deriv { phaseOverrides = xmonadPostInstall }
102 | otherwise = deriv
104cudaConfigurePhase :: String
105cudaConfigurePhase = unlines
106 [ "# The cudatoolkit provides both 64 and 32-bit versions of the"
107 , "# library. GHC's linker fails if the wrong version is found first."
108 , "# We solve this by eliminating lib64 from the path on 32-bit"
109 , "# platforms and putting lib64 first on 64-bit platforms."
110 , "configurePhase = ''"
111 , " for i in Setup.hs Setup.lhs; do"
112 , " test -f $i && ghc --make $i"
113 , " done"
114 , " for p in $extraBuildInputs $propagatedNativeBuildInputs; do"
115 , " if [ -d \"$p/include\" ]; then"
116 , " extraLibDirs=\"$extraLibDirs --extra-include-dir=$p/include\""
117 , " fi"
118 , " for d in ${if stdenv.is64bit then \"lib64 lib\" else \"lib\"}; do"
119 , " if [ -d \"$p/$d\" ]; then"
120 , " extraLibDirs=\"$extraLibDirs --extra-lib-dir=$p/$d\""
121 , " fi"
122 , " done"
123 , " done"
124 , " ./Setup configure --verbose --prefix=\"$out\" $libraryProfiling $extraLibDirs $configureFlags"
125 , "'';"
126 ]
128ghcModPostInstall :: String -> Version -> String
129ghcModPostInstall pname version = unlines
130 [ "configureFlags = \"--datasubdir=" ++ pname ++ "-" ++ display version ++ "\";"
131 , "postInstall = ''"
132 , " cd $out/share/" ++ pname ++ "-" ++ display version
133 , " make"
134 , " rm Makefile"
135 , " cd .."
136 , " ensureDir \"$out/share/emacs\""
137 , " mv " ++ pname ++ "-" ++ display version ++ " emacs/site-lisp"
138 , "'';"
139 ]
141wxcPostInstall :: Version -> String
142wxcPostInstall version = unlines
143 [ "postInstall = ''"
144 , " cp -v dist/build/libwxc.so." ++ display version ++ " $out/lib/libwxc.so"
145 , "'';"
146 ]
148cabalInstallPostInstall :: String
149cabalInstallPostInstall = unlines
150 [ "postInstall = ''"
151 , " mkdir $out/etc"
152 , " mv bash-completion $out/etc/bash_completion.d"
153 , "'';"
154 ]
156darcsInstallPostInstall :: String
157darcsInstallPostInstall = unlines
158 [ "postInstall = ''"
159 , " mkdir -p $out/etc/bash_completion.d"
160 , " mv contrib/darcs_completion $out/etc/bash_completion.d/darcs"
161 , "'';"
162 ]
164highlightingKatePostProcessing :: Derivation -> Derivation
165highlightingKatePostProcessing deriv@(MkDerivation {..}) = deriv
166 { phaseOverrides = "prePatch = \"sed -i -e 's|regex-pcre-builtin >= .*|regex-pcre|' highlighting-kate.cabal\";"
167 , buildDepends = "regex-pcre" : filter (/="regex-pcre-builtin") buildDepends
168 }
170xmonadPostInstall :: String
171xmonadPostInstall = unlines
172 [ "postInstall = ''"
173 , " shopt -s globstar"
174 , " mkdir -p $out/share/man/man1"
175 , " mv \"$out/\"**\"/man/\"*.1 $out/share/man/man1/"
176 , "'';"
177 ]
179gitAnnexOverrides :: String
180gitAnnexOverrides = unlines
181 [ "preConfigure = \"export HOME=$TEMPDIR\";"
182 , "checkPhase = ''"
183 , " cp dist/build/git-annex/git-annex git-annex"
184 , " ./git-annex test"
185 , "'';"
186 ]
188ghciPostInstall :: String
189ghciPostInstall = unlines
190 [ "postInstall = ''"
191 , " ensureDir \"$out/share/ghci\""
192 , " ln -s \"$out/share/$pname-$version/ghci\" \"$out/share/ghci/$pname\""
193 , "'';"
194 ]
196hfusePreConfigure :: String
197hfusePreConfigure = unlines
198 [ "preConfigure = ''"
199 , " sed -i -e \"s@ Extra-Lib-Dirs: /usr/local/lib@ Extra-Lib-Dirs: ${fuse}/lib@\" HFuse.cabal"
200 , "'';"
201 ]
203ghcPathsPatches :: String
204ghcPathsPatches = "patches = [ ./ghc-paths-nix.patch ];"
206lhs2texPostInstall :: String
207lhs2texPostInstall = unlines
208 [ "postInstall = ''"
209 , " mkdir -p \"$out/share/doc/$name\""
210 , " cp doc/Guide2.pdf $out/share/doc/$name"
211 , " mkdir -p \"$out/nix-support\""
212 , "'';"
213 ]
215ncursesPatchPhase :: String
216ncursesPatchPhase = "patchPhase = \"find . -type f -exec sed -i -e 's|ncursesw/||' {} \\\\;\";"
218agdaPostInstall :: String
219agdaPostInstall = unlines
220 [ "postInstall = ''"
221 , " $out/bin/agda -c --no-main $(find $out/share -name Primitive.agda)"
222 , " $out/bin/agda-mode compile"
223 , "'';"
224 ]
226structuredHaskellModePostInstall :: String
227structuredHaskellModePostInstall = unlines
228 [ "postInstall = ''"
229 , " emacs -L elisp --batch -f batch-byte-compile \"elisp/\"*.el"
230 , " install -d $out/share/emacs/site-lisp"
231 , " install \"elisp/\"*.el \"elisp/\"*.elc $out/share/emacs/site-lisp"
232 , "'';"
233 ]
235sloanePostInstall :: String
236sloanePostInstall = unlines
237 [ "postInstall = ''"
238 , " mkdir -p $out/share/man/man1"
239 , " cp sloane.1 $out/share/man/man1/"
240 , "'';"
241 ]
243mimeMailConfigureFlags :: String
244mimeMailConfigureFlags = unlines
245 [ "configureFlags = \"--ghc-option=-DMIME_MAIL_SENDMAIL_PATH=\\\"${sendmail}\\\"\";"
246 ]
248haddockPreCheck :: String
249haddockPreCheck = "preCheck = \"unset GHC_PACKAGE_PATH\";"
251ghcParserPatchPhase :: String
252ghcParserPatchPhase = unlines
253 [ "patchPhase = ''"
254 , " substituteInPlace build-parser.sh --replace \"/bin/bash\" \"$SHELL\""
255 , "'';"
256 ]