1{ pkgs, fetchgit, php }:
2
3let
4 self = with self; {
5 buildPecl = import ../build-support/build-pecl.nix {
6 inherit php;
7 inherit (pkgs) stdenv autoreconfHook fetchurl;
8 };
9 isPhpOlder55 = pkgs.lib.versionOlder php.version "5.5";
10 isPhp7 = pkgs.lib.versionAtLeast php.version "7.0";
11
12 apcu = if isPhp7 then apcu51 else apcu40;
13
14 apcu40 = assert !isPhp7; buildPecl {
15 name = "apcu-4.0.7";
16 sha256 = "1mhbz56mbnq7dryf2d64l84lj3fpr5ilmg2424glans3wcg772hp";
17 buildInputs = [ pkgs.pcre ];
18 };
19
20 apcu51 = assert isPhp7; buildPecl {
21 name = "apcu-5.1.8";
22 sha256 = "01dfbf0245d8cc0f51ba16467a60b5fad08e30b28df7846e0dd213da1143ecce";
23 buildInputs = [ pkgs.pcre ];
24 doCheck = true;
25 checkTarget = "test";
26 checkFlagsArray = ["REPORT_EXIT_STATUS=1" "NO_INTERACTION=1"];
27 };
28
29 ast = assert isPhp7; buildPecl {
30 name = "ast-0.1.5";
31
32 sha256 = "0vv2w5fkkw9n7qdmi5aq50416zxmvyzjym8kb6j1v8kd4xcsjjgw";
33 };
34
35 couchbase = buildPecl rec {
36 name = "couchbase-${version}";
37 version = "2.3.4";
38
39 buildInputs = [ pkgs.libcouchbase pkgs.zlib igbinary pcs ];
40
41 src = pkgs.fetchFromGitHub {
42 owner = "couchbase";
43 repo = "php-couchbase";
44 rev = "v${version}";
45 sha256 = "0rdlrl7vh4kbxxj9yxp54xpnnrxydpa9fab7dy4nas474j5vb2bp";
46 };
47
48 configureFlags = [ "--with-couchbase" ];
49
50 patches = [
51 (pkgs.writeText "php-couchbase.patch" ''
52 --- a/config.m4
53 +++ b/config.m4
54 @@ -9,7 +9,7 @@ if test "$PHP_COUCHBASE" != "no"; then
55 LIBCOUCHBASE_DIR=$PHP_COUCHBASE
56 else
57 AC_MSG_CHECKING(for libcouchbase in default path)
58 - for i in /usr/local /usr; do
59 + for i in ${pkgs.libcouchbase}; do
60 if test -r $i/include/libcouchbase/couchbase.h; then
61 LIBCOUCHBASE_DIR=$i
62 AC_MSG_RESULT(found in $i)
63 @@ -154,6 +154,8 @@ COUCHBASE_FILES=" \
64 igbinary_inc_path="$phpincludedir"
65 elif test -f "$phpincludedir/ext/igbinary/igbinary.h"; then
66 igbinary_inc_path="$phpincludedir"
67 + elif test -f "${igbinary.dev}/include/ext/igbinary/igbinary.h"; then
68 + igbinary_inc_path="${igbinary.dev}/include"
69 fi
70 if test "$igbinary_inc_path" = ""; then
71 AC_MSG_WARN([Cannot find igbinary.h])
72 '')
73 ];
74 };
75
76 php_excel = assert isPhp7; buildPecl rec {
77 name = "php_excel";
78 version = "1.0.2";
79 phpVersion = "php7";
80
81 buildInputs = [ pkgs.libxl ];
82
83 src = pkgs.fetchurl {
84 url = "https://github.com/iliaal/${name}/releases/download/Excel-1.0.2-PHP7/excel-${version}-${phpVersion}.tgz";
85 sha256 = "0dpvih9gpiyh1ml22zi7hi6kslkilzby00z1p8x248idylldzs2n";
86 };
87
88 configureFlags = [ "--with-excel" "--with-libxl-incdir=${pkgs.libxl}/include_c" "--with-libxl-libdir=${pkgs.libxl}/lib" ];
89 };
90
91 igbinary = buildPecl {
92 name = "igbinary-2.0.4";
93
94 configureFlags = [ "--enable-igbinary" ];
95
96 makeFlags = [ "phpincludedir=$(dev)/include" ];
97
98 outputs = [ "out" "dev" ];
99
100 sha256 = "0a55l4f0bgbf3f6sh34njd14niwagg829gfkvb8n5fs69xqab67d";
101 };
102
103 mailparse = assert isPhp7; buildPecl {
104 name = "mailparse-3.0.2";
105
106 sha256 = "0fw447ralqihsjnn0fm2hkaj8343cvb90v0d1wfclgz49256y6nq";
107 };
108
109 imagick = buildPecl {
110 name = "imagick-3.4.3RC1";
111 sha256 = "0siyxpszjz6s095s2g2854bhprjq49rf22v6syjiwvndg1pc9fsh";
112 configureFlags = "--with-imagick=${pkgs.imagemagick.dev}";
113 nativeBuildInputs = [ pkgs.pkgconfig ];
114 buildInputs = [ pkgs.pcre ];
115 };
116
117 # No support for PHP 7 yet
118 memcache = assert !isPhp7; buildPecl {
119 name = "memcache-3.0.8";
120
121 sha256 = "04c35rj0cvq5ygn2jgmyvqcb0k8d03v4k642b6i37zgv7x15pbic";
122
123 configureFlags = "--with-zlib-dir=${pkgs.zlib.dev}";
124
125 makeFlags = [ "CFLAGS=-fgnu89-inline" ];
126 };
127
128 memcached = if isPhp7 then memcachedPhp7 else memcached22;
129
130 memcached22 = assert !isPhp7; buildPecl {
131 name = "memcached-2.2.0";
132
133 sha256 = "0n4z2mp4rvrbmxq079zdsrhjxjkmhz6mzi7mlcipz02cdl7n1f8p";
134
135 configureFlags = [
136 "--with-zlib-dir=${pkgs.zlib.dev}"
137 "--with-libmemcached-dir=${pkgs.libmemcached}"
138 ];
139
140 nativeBuildInputs = [ pkgs.pkgconfig ];
141 buildInputs = with pkgs; [ cyrus_sasl zlib ];
142 };
143
144 # Not released yet
145 memcachedPhp7 = assert isPhp7; buildPecl rec {
146 name = "memcached-php7";
147
148 src = fetchgit {
149 url = "https://github.com/php-memcached-dev/php-memcached";
150 rev = "e573a6e8fc815f12153d2afd561fc84f74811e2f";
151 sha256 = "0asfi6rsspbwbxhwmkxxnapd8w01xvfmwr1n9qsr2pryfk0w6y07";
152 };
153
154 configureFlags = [
155 "--with-zlib-dir=${pkgs.zlib.dev}"
156 "--with-libmemcached-dir=${pkgs.libmemcached}"
157 ];
158
159 nativeBuildInputs = [ pkgs.pkgconfig ];
160 buildInputs = with pkgs; [ cyrus_sasl zlib ];
161 };
162
163 pcs = buildPecl rec {
164 name = "pcs-1.3.3";
165
166 sha256 = "0d4p1gpl8gkzdiv860qzxfz250ryf0wmjgyc8qcaaqgkdyh5jy5p";
167 };
168
169 # No support for PHP 7 yet (and probably never will be)
170 spidermonkey = assert !isPhp7; buildPecl rec {
171 name = "spidermonkey-1.0.0";
172
173 sha256 = "1ywrsp90w6rlgq3v2vmvp2zvvykkgqqasab7h9bf3vgvgv3qasbg";
174
175 configureFlags = [
176 "--with-spidermonkey=${pkgs.spidermonkey_1_8_5}"
177 ];
178
179 buildInputs = [ pkgs.spidermonkey_1_8_5 ];
180 };
181
182 xdebug = if isPhp7 then xdebug26 else xdebug23;
183
184 xdebug23 = assert !isPhp7; buildPecl {
185 name = "xdebug-2.3.1";
186
187 sha256 = "0k567i6w7cw14m13s7ip0946pvy5ii16cjwjcinnviw9c24na0xm";
188
189 doCheck = true;
190 checkTarget = "test";
191 };
192
193 xdebug26 = assert isPhp7; buildPecl {
194 name = "xdebug-2.6.0";
195
196 sha256 = "1p6b54ypi5lq4ka3pyy2gswdf1d5vjb9y8lp9fqcp3zn7g04q9mm";
197
198 doCheck = true;
199 checkTarget = "test";
200 };
201
202 yaml = if isPhp7 then yaml20 else yaml13;
203
204 yaml13 = assert !isPhp7; buildPecl {
205 name = "yaml-1.3.1";
206
207 sha256 = "1fbmgsgnd6l0d4vbjaca0x9mrfgl99yix5yf0q0pfcqzfdg4bj8q";
208
209 configureFlags = [
210 "--with-yaml=${pkgs.libyaml}"
211 ];
212
213 nativeBuildInputs = [ pkgs.pkgconfig ];
214 };
215
216 yaml20 = assert isPhp7; buildPecl {
217 name = "yaml-2.0.2";
218
219 sha256 = "0f80zy79kyy4hn6iigpgfkwppwldjfj5g7s4gddklv3vskdb1by3";
220
221 configureFlags = [
222 "--with-yaml=${pkgs.libyaml}"
223 ];
224
225 nativeBuildInputs = [ pkgs.pkgconfig ];
226 };
227
228 # Since PHP 5.5 OPcache is integrated in the core and has to be enabled via --enable-opcache during compilation.
229 zendopcache = assert isPhpOlder55; buildPecl {
230 name = "zendopcache-7.0.3";
231
232 sha256 = "0qpfbkfy4wlnsfq4vc4q5wvaia83l89ky33s08gqrcfp3p1adn88";
233 };
234
235 zmq = buildPecl {
236 name = "zmq-1.1.3";
237
238 sha256 = "1kj487vllqj9720vlhfsmv32hs2dy2agp6176mav6ldx31c3g4n4";
239
240 configureFlags = [
241 "--with-zmq=${pkgs.zeromq}"
242 ];
243
244 nativeBuildInputs = [ pkgs.pkgconfig ];
245 };
246
247 # No support for PHP 7 and probably never will be
248 xcache = assert !isPhp7; buildPecl rec {
249 name = "xcache-${version}";
250
251 version = "3.2.0";
252
253 src = pkgs.fetchurl {
254 url = "http://xcache.lighttpd.net/pub/Releases/${version}/${name}.tar.bz2";
255 sha256 = "1gbcpw64da9ynjxv70jybwf9y88idm01kb16j87vfagpsp5s64kx";
256 };
257
258 doCheck = true;
259 checkTarget = "test";
260
261 configureFlags = [
262 "--enable-xcache"
263 "--enable-xcache-coverager"
264 "--enable-xcache-optimizer"
265 "--enable-xcache-assembler"
266 "--enable-xcache-encoder"
267 "--enable-xcache-decoder"
268 ];
269
270 buildInputs = [ pkgs.m4 ];
271 };
272
273 #pthreads requires a build of PHP with ZTS (Zend Thread Safety) enabled
274 #--enable-maintainer-zts or --enable-zts on Windows
275 pthreads = if isPhp7 then pthreads31 else pthreads20;
276
277 pthreads20 = assert (pkgs.config.php.zts or false) && (!isPhp7); buildPecl {
278 name = "pthreads-2.0.10";
279 sha256 = "1xlcb1b1g10jd0xhm3c01a06yqpb5qln47pd1k522138324qvpwb";
280 };
281
282 pthreads31 = assert (pkgs.config.php.zts or false) && isPhp7; buildPecl {
283 name = "pthreads-3.1.5";
284 sha256 = "1ziap0py3zrc7qj9lw4nzq6wx1viyj8v9y1babchizzan014x6p5";
285 };
286
287 # No support for PHP 7 yet
288 geoip = assert !isPhp7; buildPecl {
289 name = "geoip-1.1.0";
290 sha256 = "1fcqpsvwba84gqqmwyb5x5xhkazprwkpsnn4sv2gfbsd4svxxil2";
291
292 configureFlags = [ "--with-geoip=${pkgs.geoip}" ];
293
294 buildInputs = [ pkgs.geoip ];
295 };
296
297 redis = if isPhp7 then redis31 else redis22;
298
299 redis22 = assert !isPhp7; buildPecl {
300 name = "redis-2.2.7";
301 sha256 = "00n9dpk9ak0bl35sbcd3msr78sijrxdlb727nhg7f2g7swf37rcm";
302 };
303
304 redis31 = assert isPhp7; buildPecl {
305 name = "redis-3.1.4";
306 sha256 = "0rgjdrqfif8pfn3ipk1v4gyjkkdcdrdk479qbpda89w25vaxzsxd";
307 };
308
309 v8 = assert isPhp7; buildPecl rec {
310 version = "0.1.9";
311 name = "v8-${version}";
312
313 sha256 = "0bj77dfmld5wfwl4wgqnpa0i4f3mc1mpsp9dmrwqv050gs84m7h1";
314
315 buildInputs = [ pkgs.v8_6_x ];
316 configureFlags = [ "--with-v8=${pkgs.v8_6_x}" ];
317 };
318
319 v8js = assert isPhp7; buildPecl rec {
320 version = "1.4.1";
321 name = "v8js-${version}";
322
323 sha256 = "0k5dc395gzva4l6n9mzvkhkjq914460cwk1grfandcqy73j6m89q";
324
325 buildInputs = [ pkgs.v8_6_x ];
326 configureFlags = [ "--with-v8js=${pkgs.v8_6_x}" ];
327 };
328
329 composer = pkgs.stdenv.mkDerivation rec {
330 name = "composer-${version}";
331 version = "1.6.3";
332
333 src = pkgs.fetchurl {
334 url = "https://getcomposer.org/download/${version}/composer.phar";
335 sha256 = "1dna9ng77nw002l7hq60b6vz0f1snmnsxj1l7cg4f877msxppjsj";
336 };
337
338 unpackPhase = ":";
339
340 buildInputs = [ pkgs.makeWrapper ];
341
342 installPhase = ''
343 mkdir -p $out/bin
344 install -D $src $out/libexec/composer/composer.phar
345 makeWrapper ${php}/bin/php $out/bin/composer \
346 --add-flags "$out/libexec/composer/composer.phar"
347 '';
348
349 meta = with pkgs.lib; {
350 description = "Dependency Manager for PHP";
351 license = licenses.mit;
352 homepage = https://getcomposer.org/;
353 maintainers = with maintainers; [ globin offline ];
354 };
355 };
356
357 box = pkgs.stdenv.mkDerivation rec {
358 name = "box-${version}";
359 version = "2.7.5";
360
361 src = pkgs.fetchurl {
362 url = "https://github.com/box-project/box2/releases/download/${version}/box-${version}.phar";
363 sha256 = "1zmxdadrv0i2l8cz7xb38gnfmfyljpsaz2nnkjzqzksdmncbgd18";
364 };
365
366 phases = [ "installPhase" ];
367 buildInputs = [ pkgs.makeWrapper ];
368
369 installPhase = ''
370 mkdir -p $out/bin
371 install -D $src $out/libexec/box/box.phar
372 makeWrapper ${php}/bin/php $out/bin/box \
373 --add-flags "-d phar.readonly=0 $out/libexec/box/box.phar"
374 '';
375
376 meta = with pkgs.lib; {
377 description = "An application for building and managing Phars";
378 license = licenses.mit;
379 homepage = https://box-project.github.io/box2/;
380 maintainers = with maintainers; [ jtojnar ];
381 };
382 };
383
384 php-cs-fixer = pkgs.stdenv.mkDerivation rec {
385 name = "php-cs-fixer-${version}";
386 version = "2.10.3";
387
388 src = pkgs.fetchurl {
389 url = "https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v${version}/php-cs-fixer.phar";
390 sha256 = "0ir72sns8baz825dkvffr5rx1f261phhbc6d9v0ncc4xkhr5zjnh";
391 };
392
393 phases = [ "installPhase" ];
394 buildInputs = [ pkgs.makeWrapper ];
395
396 installPhase = ''
397 mkdir -p $out/bin
398 install -D $src $out/libexec/php-cs-fixer/php-cs-fixer.phar
399 makeWrapper ${php}/bin/php $out/bin/php-cs-fixer \
400 --add-flags "$out/libexec/php-cs-fixer/php-cs-fixer.phar"
401 '';
402
403 meta = with pkgs.lib; {
404 description = "A tool to automatically fix PHP coding standards issues";
405 license = licenses.mit;
406 homepage = http://cs.sensiolabs.org/;
407 maintainers = with maintainers; [ jtojnar ];
408 };
409 };
410
411 php-parallel-lint = pkgs.stdenv.mkDerivation rec {
412 name = "php-parallel-lint-${version}";
413 version = "1.0.0";
414
415 src = pkgs.fetchFromGitHub {
416 owner = "JakubOnderka";
417 repo = "PHP-Parallel-Lint";
418 rev = "v${version}";
419 sha256 = "16nv8yyk2z3l213dg067l6di4pigg5rd8yswr5xgd18jwbys2vnw";
420 };
421
422 buildInputs = [ pkgs.makeWrapper composer box ];
423
424 buildPhase = ''
425 composer dump-autoload
426 box build
427 '';
428
429 installPhase = ''
430 mkdir -p $out/bin
431 install -D parallel-lint.phar $out/libexec/php-parallel-lint/php-parallel-lint.phar
432 makeWrapper ${php}/bin/php $out/bin/php-parallel-lint \
433 --add-flags "$out/libexec/php-parallel-lint/php-parallel-lint.phar"
434 '';
435
436 meta = with pkgs.lib; {
437 description = "This tool check syntax of PHP files faster than serial check with fancier output";
438 license = licenses.bsd2;
439 homepage = https://github.com/JakubOnderka/PHP-Parallel-Lint;
440 maintainers = with maintainers; [ jtojnar ];
441 };
442 };
443
444 phpcs = pkgs.stdenv.mkDerivation rec {
445 name = "phpcs-${version}";
446 version = "3.2.3";
447
448 src = pkgs.fetchurl {
449 url = "https://github.com/squizlabs/PHP_CodeSniffer/releases/download/${version}/phpcs.phar";
450 sha256 = "193axz56j1kyq458q0y38m99bx31jjjldfg6bv71vgm6zh4rvvs1";
451 };
452
453 phases = [ "installPhase" ];
454 buildInputs = [ pkgs.makeWrapper ];
455
456 installPhase = ''
457 mkdir -p $out/bin
458 install -D $src $out/libexec/phpcs/phpcs.phar
459 makeWrapper ${php}/bin/php $out/bin/phpcs \
460 --add-flags "$out/libexec/phpcs/phpcs.phar"
461 '';
462
463 meta = with pkgs.lib; {
464 description = "PHP coding standard tool";
465 license = licenses.bsd3;
466 homepage = https://squizlabs.github.io/PHP_CodeSniffer/;
467 maintainers = with maintainers; [ javaguirre etu ];
468 };
469 };
470
471 phpcbf = pkgs.stdenv.mkDerivation rec {
472 name = "phpcbf-${version}";
473 version = "3.2.3";
474
475 src = pkgs.fetchurl {
476 url = "https://github.com/squizlabs/PHP_CodeSniffer/releases/download/${version}/phpcbf.phar";
477 sha256 = "00p0l01shxx1h6g26j2dbfrp9j7im541das4xps4wrsvc4h4da9l";
478 };
479
480 phases = [ "installPhase" ];
481 nativeBuildInputs = [ pkgs.makeWrapper ];
482
483 installPhase = ''
484 mkdir -p $out/bin
485 install -D $src $out/libexec/phpcbf/phpcbf.phar
486 makeWrapper ${php}/bin/php $out/bin/phpcbf \
487 --add-flags "$out/libexec/phpcbf/phpcbf.phar"
488 '';
489
490 meta = with pkgs.lib; {
491 description = "PHP coding standard beautifier and fixer";
492 license = licenses.bsd3;
493 homepage = https://squizlabs.github.io/PHP_CodeSniffer/;
494 maintainers = with maintainers; [ cmcdragonkai etu ];
495 };
496 };
497}; in self