lol
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.11";
16 sha256 = "002d1gklkf0z170wkbhmm2z1p9p5ghhq3q1r9k54fq1sq4p30ks5";
17 buildInputs = [ pkgs.pcre ];
18 };
19
20 apcu51 = assert isPhp7; buildPecl {
21 name = "apcu-5.1.11";
22 sha256 = "0nz9m3fbxgyc2ij63yqmxm06a1f51g8rkxk85f85ziqdin66q2f1";
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-${version}";
78 version = "1.0.2";
79 phpVersion = "php7";
80
81 buildInputs = [ pkgs.libxl ];
82
83 src = pkgs.fetchurl {
84 url = "https://github.com/iliaal/php_excel/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.3";
111 sha256 = "0z2nc92xfc5axa9f2dy95rmsd2c81q8cs1pm4anh0a50x9g5ng0z";
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 oci8 = buildPecl rec {
164 name = "oci8-2.1.8";
165 sha256 = "1bp6fss2f2qmd5bdk7x22j8vx5qivrdhz4x7csf29vjgj6gvchxy";
166 buildInputs = [ pkgs.re2c pkgs.oracle-instantclient ];
167 configureFlags = [ "--with-oci8=shared,instantclient,${pkgs.oracle-instantclient}/lib" ];
168 };
169
170 pcs = buildPecl rec {
171 name = "pcs-1.3.3";
172
173 sha256 = "0d4p1gpl8gkzdiv860qzxfz250ryf0wmjgyc8qcaaqgkdyh5jy5p";
174 };
175
176 # No support for PHP 7 yet (and probably never will be)
177 spidermonkey = assert !isPhp7; buildPecl rec {
178 name = "spidermonkey-1.0.0";
179
180 sha256 = "1ywrsp90w6rlgq3v2vmvp2zvvykkgqqasab7h9bf3vgvgv3qasbg";
181
182 configureFlags = [
183 "--with-spidermonkey=${pkgs.spidermonkey_1_8_5}"
184 ];
185
186 buildInputs = [ pkgs.spidermonkey_1_8_5 ];
187 };
188
189 xdebug = if isPhp7 then xdebug26 else xdebug23;
190
191 xdebug23 = assert !isPhp7; buildPecl {
192 name = "xdebug-2.3.1";
193
194 sha256 = "0k567i6w7cw14m13s7ip0946pvy5ii16cjwjcinnviw9c24na0xm";
195
196 doCheck = true;
197 checkTarget = "test";
198 };
199
200 xdebug26 = assert isPhp7; buildPecl {
201 name = "xdebug-2.6.0";
202
203 sha256 = "1p6b54ypi5lq4ka3pyy2gswdf1d5vjb9y8lp9fqcp3zn7g04q9mm";
204
205 doCheck = true;
206 checkTarget = "test";
207 };
208
209 yaml = if isPhp7 then yaml20 else yaml13;
210
211 yaml13 = assert !isPhp7; buildPecl {
212 name = "yaml-1.3.1";
213
214 sha256 = "1fbmgsgnd6l0d4vbjaca0x9mrfgl99yix5yf0q0pfcqzfdg4bj8q";
215
216 configureFlags = [
217 "--with-yaml=${pkgs.libyaml}"
218 ];
219
220 nativeBuildInputs = [ pkgs.pkgconfig ];
221 };
222
223 yaml20 = assert isPhp7; buildPecl {
224 name = "yaml-2.0.2";
225
226 sha256 = "0f80zy79kyy4hn6iigpgfkwppwldjfj5g7s4gddklv3vskdb1by3";
227
228 configureFlags = [
229 "--with-yaml=${pkgs.libyaml}"
230 ];
231
232 nativeBuildInputs = [ pkgs.pkgconfig ];
233 };
234
235 # Since PHP 5.5 OPcache is integrated in the core and has to be enabled via --enable-opcache during compilation.
236 zendopcache = assert isPhpOlder55; buildPecl {
237 name = "zendopcache-7.0.3";
238
239 sha256 = "0qpfbkfy4wlnsfq4vc4q5wvaia83l89ky33s08gqrcfp3p1adn88";
240 };
241
242 zmq = buildPecl {
243 name = "zmq-1.1.3";
244
245 sha256 = "1kj487vllqj9720vlhfsmv32hs2dy2agp6176mav6ldx31c3g4n4";
246
247 configureFlags = [
248 "--with-zmq=${pkgs.zeromq}"
249 ];
250
251 nativeBuildInputs = [ pkgs.pkgconfig ];
252 };
253
254 # No support for PHP 7 and probably never will be
255 xcache = assert !isPhp7; buildPecl rec {
256 name = "xcache-${version}";
257
258 version = "3.2.0";
259
260 src = pkgs.fetchurl {
261 url = "http://xcache.lighttpd.net/pub/Releases/${version}/${name}.tar.bz2";
262 sha256 = "1gbcpw64da9ynjxv70jybwf9y88idm01kb16j87vfagpsp5s64kx";
263 };
264
265 doCheck = true;
266 checkTarget = "test";
267
268 configureFlags = [
269 "--enable-xcache"
270 "--enable-xcache-coverager"
271 "--enable-xcache-optimizer"
272 "--enable-xcache-assembler"
273 "--enable-xcache-encoder"
274 "--enable-xcache-decoder"
275 ];
276
277 buildInputs = [ pkgs.m4 ];
278 };
279
280 #pthreads requires a build of PHP with ZTS (Zend Thread Safety) enabled
281 #--enable-maintainer-zts or --enable-zts on Windows
282 pthreads = if isPhp7 then pthreads31 else pthreads20;
283
284 pthreads20 = assert (pkgs.config.php.zts or false) && (!isPhp7); buildPecl {
285 name = "pthreads-2.0.10";
286 sha256 = "1xlcb1b1g10jd0xhm3c01a06yqpb5qln47pd1k522138324qvpwb";
287 };
288
289 pthreads31 = assert (pkgs.config.php.zts or false) && isPhp7; buildPecl {
290 name = "pthreads-3.1.5";
291 sha256 = "1ziap0py3zrc7qj9lw4nzq6wx1viyj8v9y1babchizzan014x6p5";
292 };
293
294 # No support for PHP 7 yet
295 geoip = assert !isPhp7; buildPecl {
296 name = "geoip-1.1.0";
297 sha256 = "1fcqpsvwba84gqqmwyb5x5xhkazprwkpsnn4sv2gfbsd4svxxil2";
298
299 configureFlags = [ "--with-geoip=${pkgs.geoip}" ];
300
301 buildInputs = [ pkgs.geoip ];
302 };
303
304 redis = if isPhp7 then redis31 else redis22;
305
306 redis22 = assert !isPhp7; buildPecl {
307 name = "redis-2.2.7";
308 sha256 = "00n9dpk9ak0bl35sbcd3msr78sijrxdlb727nhg7f2g7swf37rcm";
309 };
310
311 redis31 = assert isPhp7; buildPecl {
312 name = "redis-3.1.4";
313 sha256 = "0rgjdrqfif8pfn3ipk1v4gyjkkdcdrdk479qbpda89w25vaxzsxd";
314 };
315
316 v8 = assert isPhp7; buildPecl rec {
317 version = "0.1.9";
318 name = "v8-${version}";
319
320 sha256 = "0bj77dfmld5wfwl4wgqnpa0i4f3mc1mpsp9dmrwqv050gs84m7h1";
321
322 buildInputs = [ pkgs.v8_6_x ];
323 configureFlags = [ "--with-v8=${pkgs.v8_6_x}" ];
324 };
325
326 v8js = assert isPhp7; buildPecl rec {
327 version = "1.4.1";
328 name = "v8js-${version}";
329
330 sha256 = "0k5dc395gzva4l6n9mzvkhkjq914460cwk1grfandcqy73j6m89q";
331
332 buildInputs = [ pkgs.v8_6_x ];
333 configureFlags = [ "--with-v8js=${pkgs.v8_6_x}" ];
334 };
335
336 composer = pkgs.stdenv.mkDerivation rec {
337 name = "composer-${version}";
338 version = "1.6.5";
339
340 src = pkgs.fetchurl {
341 url = "https://getcomposer.org/download/${version}/composer.phar";
342 sha256 = "0d1lpvq8wylh5qgxhbqb5r7j3c6qk0bz4b5vg187jsl6z6fvxgk7";
343 };
344
345 unpackPhase = ":";
346
347 buildInputs = [ pkgs.makeWrapper ];
348
349 installPhase = ''
350 mkdir -p $out/bin
351 install -D $src $out/libexec/composer/composer.phar
352 makeWrapper ${php}/bin/php $out/bin/composer \
353 --add-flags "$out/libexec/composer/composer.phar"
354 '';
355
356 meta = with pkgs.lib; {
357 description = "Dependency Manager for PHP";
358 license = licenses.mit;
359 homepage = https://getcomposer.org/;
360 maintainers = with maintainers; [ globin offline ];
361 };
362 };
363
364 box = pkgs.stdenv.mkDerivation rec {
365 name = "box-${version}";
366 version = "2.7.5";
367
368 src = pkgs.fetchurl {
369 url = "https://github.com/box-project/box2/releases/download/${version}/box-${version}.phar";
370 sha256 = "1zmxdadrv0i2l8cz7xb38gnfmfyljpsaz2nnkjzqzksdmncbgd18";
371 };
372
373 phases = [ "installPhase" ];
374 buildInputs = [ pkgs.makeWrapper ];
375
376 installPhase = ''
377 mkdir -p $out/bin
378 install -D $src $out/libexec/box/box.phar
379 makeWrapper ${php}/bin/php $out/bin/box \
380 --add-flags "-d phar.readonly=0 $out/libexec/box/box.phar"
381 '';
382
383 meta = with pkgs.lib; {
384 description = "An application for building and managing Phars";
385 license = licenses.mit;
386 homepage = https://box-project.github.io/box2/;
387 maintainers = with maintainers; [ jtojnar ];
388 };
389 };
390
391 php-cs-fixer = pkgs.stdenv.mkDerivation rec {
392 name = "php-cs-fixer-${version}";
393 version = "2.12.2";
394
395 src = pkgs.fetchurl {
396 url = "https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v${version}/php-cs-fixer.phar";
397 sha256 = "19cq04x1wi489259vyad15zy6y0k3qd7dj77pcf74gxqw92hgg5c";
398 };
399
400 phases = [ "installPhase" ];
401 buildInputs = [ pkgs.makeWrapper ];
402
403 installPhase = ''
404 mkdir -p $out/bin
405 install -D $src $out/libexec/php-cs-fixer/php-cs-fixer.phar
406 makeWrapper ${php}/bin/php $out/bin/php-cs-fixer \
407 --add-flags "$out/libexec/php-cs-fixer/php-cs-fixer.phar"
408 '';
409
410 meta = with pkgs.lib; {
411 description = "A tool to automatically fix PHP coding standards issues";
412 license = licenses.mit;
413 homepage = http://cs.sensiolabs.org/;
414 maintainers = with maintainers; [ jtojnar ];
415 };
416 };
417
418 php-parallel-lint = pkgs.stdenv.mkDerivation rec {
419 name = "php-parallel-lint-${version}";
420 version = "1.0.0";
421
422 src = pkgs.fetchFromGitHub {
423 owner = "JakubOnderka";
424 repo = "PHP-Parallel-Lint";
425 rev = "v${version}";
426 sha256 = "16nv8yyk2z3l213dg067l6di4pigg5rd8yswr5xgd18jwbys2vnw";
427 };
428
429 buildInputs = [ pkgs.makeWrapper composer box ];
430
431 buildPhase = ''
432 composer dump-autoload
433 box build
434 '';
435
436 installPhase = ''
437 mkdir -p $out/bin
438 install -D parallel-lint.phar $out/libexec/php-parallel-lint/php-parallel-lint.phar
439 makeWrapper ${php}/bin/php $out/bin/php-parallel-lint \
440 --add-flags "$out/libexec/php-parallel-lint/php-parallel-lint.phar"
441 '';
442
443 meta = with pkgs.lib; {
444 description = "This tool check syntax of PHP files faster than serial check with fancier output";
445 license = licenses.bsd2;
446 homepage = https://github.com/JakubOnderka/PHP-Parallel-Lint;
447 maintainers = with maintainers; [ jtojnar ];
448 };
449 };
450
451 phpcs = pkgs.stdenv.mkDerivation rec {
452 name = "phpcs-${version}";
453 version = "3.3.1";
454
455 src = pkgs.fetchurl {
456 url = "https://github.com/squizlabs/PHP_CodeSniffer/releases/download/${version}/phpcs.phar";
457 sha256 = "0kw1ffr688wbcip2hmr7yi7bpdf4kzwh22yvxw17lyddzq6vrqaw";
458 };
459
460 phases = [ "installPhase" ];
461 buildInputs = [ pkgs.makeWrapper ];
462
463 installPhase = ''
464 mkdir -p $out/bin
465 install -D $src $out/libexec/phpcs/phpcs.phar
466 makeWrapper ${php}/bin/php $out/bin/phpcs \
467 --add-flags "$out/libexec/phpcs/phpcs.phar"
468 '';
469
470 meta = with pkgs.lib; {
471 description = "PHP coding standard tool";
472 license = licenses.bsd3;
473 homepage = https://squizlabs.github.io/PHP_CodeSniffer/;
474 maintainers = with maintainers; [ javaguirre etu ];
475 };
476 };
477
478 phpcbf = pkgs.stdenv.mkDerivation rec {
479 name = "phpcbf-${version}";
480 version = "3.3.1";
481
482 src = pkgs.fetchurl {
483 url = "https://github.com/squizlabs/PHP_CodeSniffer/releases/download/${version}/phpcbf.phar";
484 sha256 = "0q75h8y4rbysyzh3i5nzqqln2d8592p0sz6y11rr2hz0g9qw4gim";
485 };
486
487 phases = [ "installPhase" ];
488 nativeBuildInputs = [ pkgs.makeWrapper ];
489
490 installPhase = ''
491 mkdir -p $out/bin
492 install -D $src $out/libexec/phpcbf/phpcbf.phar
493 makeWrapper ${php}/bin/php $out/bin/phpcbf \
494 --add-flags "$out/libexec/phpcbf/phpcbf.phar"
495 '';
496
497 meta = with pkgs.lib; {
498 description = "PHP coding standard beautifier and fixer";
499 license = licenses.bsd3;
500 homepage = https://squizlabs.github.io/PHP_CodeSniffer/;
501 maintainers = with maintainers; [ cmcdragonkai etu ];
502 };
503 };
504
505 psysh = pkgs.stdenv.mkDerivation rec {
506 name = "psysh-${version}";
507 version = "0.9.6";
508
509 src = pkgs.fetchurl {
510 url = "https://github.com/bobthecow/psysh/releases/download/v${version}/psysh-v${version}.tar.gz";
511 sha256 = "06icmyn7v229mpfplqj76kjnp1gh4ns0nrxa7bsckyqhzi425kc6";
512 };
513
514 phases = [ "installPhase" ];
515 nativeBuildInputs = [ pkgs.makeWrapper ];
516
517 installPhase = ''
518 mkdir -p $out/bin
519 tar -xzf $src -C $out/bin
520 wrapProgram $out/bin/psysh
521 '';
522
523 meta = with pkgs.lib; {
524 description = "PsySH is a runtime developer console, interactive debugger and REPL for PHP.";
525 license = licenses.mit;
526 homepage = https://psysh.org/;
527 maintainers = with maintainers; [ caugner ];
528 };
529 };
530}; in self