Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at python-updates 860 lines 27 kB view raw
1{ 2 stdenv, 3 config, 4 callPackages, 5 lib, 6 pkgs, 7 phpPackage, 8 autoconf, 9 pkg-config, 10 bzip2, 11 curl, 12 cyrus_sasl, 13 enchant2, 14 freetds, 15 gd, 16 gettext, 17 gmp, 18 html-tidy, 19 icu73, 20 libffi, 21 libiconv, 22 libkrb5, 23 libpq, 24 libsodium, 25 libxml2, 26 libxslt, 27 libzip, 28 net-snmp, 29 nix-update-script, 30 oniguruma, 31 openldap, 32 openssl_1_1, 33 openssl, 34 pam, 35 pcre2, 36 bison, 37 re2c, 38 readline, 39 rsync, 40 sqlite, 41 unixODBC, 42 uwimap, 43 valgrind, 44 zlib, 45}: 46 47lib.makeScope pkgs.newScope ( 48 self: 49 let 50 inherit (self) 51 buildPecl 52 callPackage 53 mkExtension 54 php 55 ; 56 57 builders = import ../build-support/php/builders { 58 inherit callPackages callPackage buildPecl; 59 }; 60 in 61 { 62 buildPecl = callPackage ../build-support/php/build-pecl.nix { 63 php = php.unwrapped; 64 }; 65 66 inherit (builders.v1) 67 buildComposerProject 68 buildComposerWithPlugin 69 composerHooks 70 mkComposerRepository 71 ; 72 73 # Next version of the builder 74 buildComposerProject2 = builders.v2.buildComposerProject; 75 composerHooks2 = builders.v2.composerHooks; 76 mkComposerVendor = builders.v2.mkComposerVendor; 77 78 # Wrap mkDerivation to prepend pname with "php-" to make names consistent 79 # with how buildPecl does it and make the file easier to overview. 80 mkDerivation = 81 origArgs: 82 let 83 args = lib.fix ( 84 lib.extends (_: previousAttrs: { 85 pname = "php-${previousAttrs.pname}"; 86 passthru = (previousAttrs.passthru or { }) // { 87 updateScript = nix-update-script { }; 88 }; 89 meta = (previousAttrs.meta or { }) // { 90 mainProgram = previousAttrs.meta.mainProgram or previousAttrs.pname; 91 }; 92 }) (if lib.isFunction origArgs then origArgs else (_: origArgs)) 93 ); 94 in 95 pkgs.stdenv.mkDerivation args; 96 97 # Function to build an extension which is shipped as part of the php 98 # source, based on the php version. 99 # 100 # Name passed is the name of the extension and is automatically used 101 # to add the configureFlag "--enable-${name}", which can be overridden. 102 # 103 # Build inputs is used for extra deps that may be needed. And zendExtension 104 # will mark the extension as a zend extension or not. 105 mkExtension = lib.makeOverridable ( 106 { 107 name, 108 configureFlags ? [ "--enable-${extName}" ], 109 internalDeps ? [ ], 110 postPhpize ? "", 111 buildInputs ? [ ], 112 zendExtension ? false, 113 doCheck ? true, 114 extName ? name, 115 ... 116 }@args: 117 stdenv.mkDerivation ( 118 (builtins.removeAttrs args [ "name" ]) 119 // { 120 pname = "php-${name}"; 121 extensionName = extName; 122 123 outputs = [ 124 "out" 125 "dev" 126 ]; 127 128 inherit (php.unwrapped) version src; 129 130 enableParallelBuilding = true; 131 132 nativeBuildInputs = [ 133 php.unwrapped 134 autoconf 135 pkg-config 136 re2c 137 bison 138 ]; 139 140 inherit 141 configureFlags 142 internalDeps 143 buildInputs 144 zendExtension 145 doCheck 146 ; 147 148 preConfigurePhases = [ 149 "genfiles" 150 "cdToExtensionRootPhase" 151 ]; 152 153 genfiles = '' 154 if [ -f "scripts/dev/genfiles" ]; then 155 ./scripts/dev/genfiles 156 fi 157 ''; 158 159 cdToExtensionRootPhase = '' 160 # Go to extension source root. 161 cd "ext/${extName}" 162 ''; 163 164 preConfigure = '' 165 nullglobRestore=$(shopt -p nullglob) 166 shopt -u nullglob # To make ?-globbing work 167 168 # Some extensions have a config0.m4 or config9.m4 169 if [ -f config?.m4 ]; then 170 mv config?.m4 config.m4 171 fi 172 173 $nullglobRestore 174 175 phpize 176 ${postPhpize} 177 178 ${lib.concatMapStringsSep "\n" ( 179 dep: "mkdir -p ext; ln -s ${dep.dev}/include ext/${dep.extensionName}" 180 ) internalDeps} 181 ''; 182 183 checkPhase = '' 184 runHook preCheck 185 186 NO_INTERACTION=yes SKIP_PERF_SENSITIVE=yes SKIP_ONLINE_TESTS=yes make test 187 runHook postCheck 188 ''; 189 190 installPhase = '' 191 runHook preInstall 192 193 mkdir -p $out/lib/php/extensions 194 cp modules/${extName}.so $out/lib/php/extensions/${extName}.so 195 mkdir -p $dev/include 196 ${rsync}/bin/rsync -r --filter="+ */" \ 197 --filter="+ *.h" \ 198 --filter="- *" \ 199 --prune-empty-dirs \ 200 . $dev/include/ 201 202 runHook postInstall 203 ''; 204 205 meta = { 206 description = "PHP upstream extension: ${name}"; 207 inherit (php.meta) 208 teams 209 homepage 210 license 211 platforms 212 ; 213 } 214 // args.meta or { }; 215 } 216 ) 217 ); 218 219 php = phpPackage; 220 221 # This is a set of interactive tools based on PHP. 222 tools = { 223 box = callPackage ../development/php-packages/box { }; 224 225 castor = callPackage ../development/php-packages/castor { }; 226 227 composer = callPackage ../development/php-packages/composer { }; 228 229 composer-local-repo-plugin = callPackage ../development/php-packages/composer-local-repo-plugin { }; 230 231 cyclonedx-php-composer = callPackage ../development/php-packages/cyclonedx-php-composer { }; 232 233 deployer = callPackage ../development/php-packages/deployer { }; 234 235 grumphp = callPackage ../development/php-packages/grumphp { }; 236 237 phan = callPackage ../development/php-packages/phan { }; 238 239 phing = callPackage ../development/php-packages/phing { }; 240 241 phive = callPackage ../development/php-packages/phive { }; 242 243 php-codesniffer = callPackage ../development/php-packages/php-codesniffer { }; 244 245 php-cs-fixer = callPackage ../development/php-packages/php-cs-fixer { }; 246 247 php-parallel-lint = callPackage ../development/php-packages/php-parallel-lint { }; 248 249 phpinsights = callPackage ../development/php-packages/phpinsights { }; 250 251 phpmd = callPackage ../development/php-packages/phpmd { }; 252 253 phpspy = callPackage ../development/php-packages/phpspy { }; 254 255 phpstan = callPackage ../development/php-packages/phpstan { }; 256 257 psalm = callPackage ../development/php-packages/psalm { }; 258 259 psysh = callPackage ../development/php-packages/psysh { }; 260 } 261 // lib.optionalAttrs config.allowAliases { 262 phpcbf = throw "`phpcbf` is now deprecated, use `php-codesniffer` instead which contains both `phpcs` and `phpcbf`."; 263 phpcs = throw "`phpcs` is now deprecated, use `php-codesniffer` instead which contains both `phpcs` and `phpcbf`."; 264 }; 265 266 # This is a set of PHP extensions meant to be used in php.buildEnv 267 # or php.withExtensions to extend the functionality of the PHP 268 # interpreter. 269 # The extensions attributes is composed of three sections: 270 # 1. The contrib conditional extensions, which are only available on specific PHP versions 271 # 2. The contrib extensions available 272 # 3. The core extensions 273 extensions = 274 # Contrib extensions 275 { 276 amqp = callPackage ../development/php-packages/amqp { }; 277 278 apcu = callPackage ../development/php-packages/apcu { }; 279 280 ast = callPackage ../development/php-packages/ast { }; 281 282 blackfire = callPackage ../by-name/bl/blackfire/php-probe.nix { }; 283 284 couchbase = callPackage ../development/php-packages/couchbase { }; 285 286 datadog_trace = callPackage ../development/php-packages/datadog_trace { }; 287 288 decimal = callPackage ../development/php-packages/decimal { }; 289 290 ds = callPackage ../development/php-packages/ds { }; 291 292 event = callPackage ../development/php-packages/event { }; 293 294 excimer = callPackage ../development/php-packages/excimer { }; 295 296 gnupg = callPackage ../development/php-packages/gnupg { }; 297 298 grpc = callPackage ../development/php-packages/grpc { }; 299 300 igbinary = callPackage ../development/php-packages/igbinary { }; 301 302 imagick = callPackage ../development/php-packages/imagick { }; 303 304 # Shadowed by built-in version on PHP < 8.3. 305 imap = callPackage ../development/php-packages/imap { }; 306 307 inotify = callPackage ../development/php-packages/inotify { }; 308 309 ioncube-loader = callPackage ../development/php-packages/ioncube-loader { }; 310 311 luasandbox = callPackage ../development/php-packages/luasandbox { }; 312 313 mailparse = callPackage ../development/php-packages/mailparse { }; 314 315 maxminddb = callPackage ../development/php-packages/maxminddb { }; 316 317 memcache = callPackage ../development/php-packages/memcache { }; 318 319 memcached = callPackage ../development/php-packages/memcached { }; 320 321 meminfo = callPackage ../development/php-packages/meminfo { }; 322 323 memprof = callPackage ../development/php-packages/memprof { }; 324 325 mongodb = callPackage ../development/php-packages/mongodb { }; 326 327 msgpack = callPackage ../development/php-packages/msgpack { }; 328 329 oci8 = callPackage ../development/php-packages/oci8 { }; 330 331 opentelemetry = callPackage ../development/php-packages/opentelemetry { }; 332 333 openswoole = callPackage ../development/php-packages/openswoole { }; 334 335 parallel = callPackage ../development/php-packages/parallel { }; 336 337 pdlib = callPackage ../development/php-packages/pdlib { }; 338 339 pcov = callPackage ../development/php-packages/pcov { }; 340 341 pdo_oci = 342 if (lib.versionAtLeast php.version "8.4") then 343 callPackage ../development/php-packages/pdo_oci { } 344 else 345 buildPecl rec { 346 inherit (php.unwrapped) src version; 347 348 pname = "pdo_oci"; 349 sourceRoot = "php-${version}/ext/pdo_oci"; 350 351 buildInputs = [ pkgs.oracle-instantclient ]; 352 configureFlags = [ "--with-pdo-oci=instantclient,${pkgs.oracle-instantclient.lib}/lib" ]; 353 354 internalDeps = [ php.extensions.pdo ]; 355 postPatch = '' 356 sed -i -e 's|OCISDKMANINC=`.*$|OCISDKMANINC="${pkgs.oracle-instantclient.dev}/include"|' config.m4 357 ''; 358 359 meta.teams = [ lib.teams.php ]; 360 }; 361 362 pdo_sqlsrv = callPackage ../development/php-packages/pdo_sqlsrv { }; 363 364 phalcon = callPackage ../development/php-packages/phalcon { }; 365 366 pinba = callPackage ../development/php-packages/pinba { }; 367 368 protobuf = callPackage ../development/php-packages/protobuf { }; 369 370 pspell = callPackage ../development/php-packages/pspell { }; 371 372 rdkafka = callPackage ../development/php-packages/rdkafka { }; 373 374 redis = callPackage ../development/php-packages/redis { }; 375 376 relay = callPackage ../development/php-packages/relay { }; 377 378 rrd = callPackage ../development/php-packages/rrd { }; 379 380 smbclient = callPackage ../development/php-packages/smbclient { }; 381 382 snuffleupagus = callPackage ../development/php-packages/snuffleupagus { }; 383 384 spx = callPackage ../development/php-packages/spx { }; 385 386 sqlsrv = callPackage ../development/php-packages/sqlsrv { }; 387 388 ssh2 = callPackage ../development/php-packages/ssh2 { }; 389 390 swoole = callPackage ../development/php-packages/swoole { }; 391 392 systemd = callPackage ../development/php-packages/systemd { }; 393 394 tideways = callPackage ../development/php-packages/tideways { }; 395 396 uuid = callPackage ../development/php-packages/uuid { }; 397 398 uv = callPackage ../development/php-packages/uv { }; 399 400 vld = callPackage ../development/php-packages/vld { }; 401 402 wikidiff2 = callPackage ../development/php-packages/wikidiff2 { }; 403 404 xdebug = callPackage ../development/php-packages/xdebug { }; 405 406 yaml = callPackage ../development/php-packages/yaml { }; 407 408 zstd = callPackage ../development/php-packages/zstd { }; 409 } 410 // lib.optionalAttrs config.allowAliases { 411 php-spx = throw "php-spx is deprecated, use spx instead"; 412 } 413 // ( 414 # Core extensions 415 let 416 # This list contains build instructions for different modules that one may 417 # want to build. 418 # 419 # These will be passed as arguments to mkExtension above. 420 extensionData = [ 421 { name = "bcmath"; } 422 { 423 name = "bz2"; 424 buildInputs = [ bzip2 ]; 425 configureFlags = [ "--with-bz2=${bzip2.dev}" ]; 426 } 427 { name = "calendar"; } 428 { 429 name = "ctype"; 430 postPatch = 431 lib.optionalString (stdenv.hostPlatform.isDarwin && lib.versionAtLeast php.version "8.2") 432 # Broken test on aarch64-darwin 433 '' 434 rm ext/ctype/tests/lc_ctype_inheritance.phpt 435 ''; 436 } 437 { 438 name = "curl"; 439 buildInputs = [ curl ]; 440 configureFlags = [ "--with-curl=${curl.dev}" ]; 441 doCheck = false; 442 } 443 { name = "dba"; } 444 { 445 name = "dom"; 446 buildInputs = [ libxml2 ]; 447 configureFlags = [ 448 "--enable-dom" 449 ]; 450 } 451 { 452 name = "enchant"; 453 buildInputs = [ enchant2 ]; 454 configureFlags = [ "--with-enchant" ]; 455 doCheck = false; 456 } 457 { 458 name = "exif"; 459 doCheck = false; 460 } 461 { 462 name = "ffi"; 463 buildInputs = [ libffi ]; 464 } 465 { 466 name = "fileinfo"; 467 buildInputs = [ pcre2 ]; 468 } 469 { 470 name = "filter"; 471 buildInputs = [ pcre2 ]; 472 } 473 { 474 name = "ftp"; 475 buildInputs = [ openssl ]; 476 } 477 { 478 name = "gd"; 479 buildInputs = [ 480 zlib 481 gd 482 ]; 483 configureFlags = [ 484 "--enable-gd" 485 "--with-external-gd=${gd.dev}" 486 "--enable-gd-jis-conv" 487 ]; 488 doCheck = false; 489 } 490 { 491 name = "gettext"; 492 buildInputs = [ gettext ]; 493 postPhpize = ''substituteInPlace configure --replace-fail 'as_fn_error $? "Cannot locate header file libintl.h" "$LINENO" 5' ':' ''; 494 configureFlags = [ "--with-gettext=${gettext}" ]; 495 } 496 { 497 name = "gmp"; 498 buildInputs = [ gmp ]; 499 configureFlags = [ "--with-gmp=${gmp.dev}" ]; 500 } 501 { 502 name = "iconv"; 503 buildInputs = [ libiconv ]; 504 configureFlags = [ "--with-iconv" ]; 505 # Some other extensions support separate libdirs, but iconv does not. This causes problems with detecting 506 # Darwin’s libiconv because it has separate outputs. Adding `-liconv` works around the issue. 507 env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { NIX_LDFLAGS = "-liconv"; }; 508 doCheck = stdenv.hostPlatform.isLinux; 509 } 510 { 511 name = "intl"; 512 buildInputs = [ icu73 ]; 513 } 514 { 515 name = "ldap"; 516 buildInputs = [ 517 openldap 518 cyrus_sasl 519 ]; 520 configureFlags = [ 521 "--with-ldap" 522 "LDAP_DIR=${openldap.dev}" 523 "LDAP_INCDIR=${openldap.dev}/include" 524 "LDAP_LIBDIR=${openldap.out}/lib" 525 ] 526 ++ lib.optionals stdenv.hostPlatform.isLinux [ 527 "--with-ldap-sasl=${cyrus_sasl.dev}" 528 ]; 529 doCheck = false; 530 } 531 { 532 name = "mbstring"; 533 buildInputs = [ 534 oniguruma 535 pcre2 536 ]; 537 doCheck = false; 538 } 539 { 540 name = "mysqli"; 541 internalDeps = [ php.extensions.mysqlnd ]; 542 configureFlags = [ 543 "--with-mysqli=mysqlnd" 544 "--with-mysql-sock=/run/mysqld/mysqld.sock" 545 ]; 546 doCheck = false; 547 } 548 { 549 name = "mysqlnd"; 550 buildInputs = [ 551 zlib 552 openssl 553 ]; 554 configureFlags = [ "--with-mysqlnd-ssl" ]; 555 # The configure script doesn't correctly add library link 556 # flags, so we add them to the variable used by the Makefile 557 # when linking. 558 MYSQLND_SHARED_LIBADD = "-lz -lssl -lcrypto"; 559 # The configure script builds a config.h which is never 560 # included. Let's include it in the main header file 561 # included by all .c-files. 562 patches = [ 563 (pkgs.writeText "mysqlnd_config.patch" '' 564 --- a/ext/mysqlnd/mysqlnd.h 565 +++ b/ext/mysqlnd/mysqlnd.h 566 @@ -1,3 +1,6 @@ 567 +#ifdef HAVE_CONFIG_H 568 +#include "config.h" 569 +#endif 570 /* 571 +----------------------------------------------------------------------+ 572 | Copyright (c) The PHP Group | 573 '') 574 ]; 575 } 576 { 577 name = "opcache"; 578 buildInputs = [ 579 pcre2 580 ] 581 ++ lib.optional ( 582 !stdenv.hostPlatform.isDarwin && lib.meta.availableOn stdenv.hostPlatform valgrind 583 ) valgrind.dev; 584 configureFlags = lib.optional php.ztsSupport "--disable-opcache-jit"; 585 zendExtension = true; 586 postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' 587 # Tests are flaky on darwin 588 rm ext/opcache/tests/blacklist.phpt 589 rm ext/opcache/tests/bug66338.phpt 590 rm ext/opcache/tests/bug78106.phpt 591 rm ext/opcache/tests/issue0115.phpt 592 rm ext/opcache/tests/issue0149.phpt 593 rm ext/opcache/tests/revalidate_path_01.phpt 594 ''; 595 # Tests launch the builtin webserver. 596 __darwinAllowLocalNetworking = true; 597 } 598 { 599 name = "openssl"; 600 buildInputs = [ openssl ]; 601 configureFlags = [ "--with-openssl" ]; 602 doCheck = false; 603 } 604 # This provides a legacy OpenSSL PHP extension 605 # For situations where OpenSSL 3 do not support a set of features 606 # without a specific openssl.cnf file 607 { 608 name = "openssl-legacy"; 609 extName = "openssl"; 610 buildInputs = [ openssl_1_1 ]; 611 configureFlags = [ "--with-openssl" ]; 612 doCheck = false; 613 } 614 { name = "pcntl"; } 615 { 616 name = "pdo"; 617 doCheck = false; 618 } 619 { 620 name = "pdo_dblib"; 621 internalDeps = [ php.extensions.pdo ]; 622 configureFlags = [ "--with-pdo-dblib=${freetds}" ]; 623 meta.broken = stdenv.hostPlatform.isDarwin; 624 doCheck = false; 625 } 626 { 627 name = "pdo_mysql"; 628 internalDeps = with php.extensions; [ 629 pdo 630 mysqlnd 631 ]; 632 configureFlags = [ 633 "--with-pdo-mysql=mysqlnd" 634 "PHP_MYSQL_SOCK=/run/mysqld/mysqld.sock" 635 ]; 636 doCheck = false; 637 } 638 { 639 name = "pdo_odbc"; 640 internalDeps = [ php.extensions.pdo ]; 641 buildInputs = [ unixODBC ]; 642 configureFlags = [ "--with-pdo-odbc=unixODBC,${unixODBC}" ]; 643 doCheck = false; 644 } 645 { 646 name = "pdo_pgsql"; 647 internalDeps = [ php.extensions.pdo ]; 648 configureFlags = [ "--with-pdo-pgsql=${libpq.pg_config}" ]; 649 doCheck = false; 650 } 651 { 652 name = "pdo_sqlite"; 653 internalDeps = [ php.extensions.pdo ]; 654 buildInputs = [ sqlite ]; 655 configureFlags = [ "--with-pdo-sqlite=${sqlite.dev}" ]; 656 doCheck = false; 657 } 658 { 659 name = "pgsql"; 660 buildInputs = [ 661 pcre2 662 ]; 663 configureFlags = [ "--with-pgsql=${libpq.pg_config}" ]; 664 doCheck = false; 665 } 666 { 667 name = "posix"; 668 doCheck = false; 669 } 670 { 671 name = "readline"; 672 buildInputs = [ 673 readline 674 ]; 675 configureFlags = [ 676 "--with-readline=${readline.dev}" 677 ]; 678 postPatch = '' 679 # Fix `--with-readline` option not being available. 680 # `PHP_ALWAYS_SHARED` generated by phpize enables all options 681 # without the possibility to override them. But when `--with-libedit` 682 # is enabled, `--with-readline` is not registered. 683 echo ' 684 AC_DEFUN([PHP_ALWAYS_SHARED],[ 685 test "[$]$1" != "no" && ext_shared=yes 686 ])dnl 687 ' | cat - ext/readline/config.m4 > ext/readline/config.m4.tmp 688 mv ext/readline/config.m4{.tmp,} 689 ''; 690 doCheck = false; 691 } 692 { 693 name = "session"; 694 doCheck = false; 695 } 696 { name = "shmop"; } 697 { 698 name = "simplexml"; 699 buildInputs = [ 700 libxml2 701 pcre2 702 ]; 703 configureFlags = [ 704 "--enable-simplexml" 705 ]; 706 } 707 { 708 name = "snmp"; 709 buildInputs = [ 710 net-snmp 711 openssl 712 ]; 713 configureFlags = [ "--with-snmp" ]; 714 doCheck = false; 715 } 716 { 717 name = "soap"; 718 buildInputs = [ libxml2 ]; 719 configureFlags = [ 720 "--enable-soap" 721 ]; 722 # Some tests are causing issues in the Darwin sandbox with issues 723 # such as 724 # Unknown: php_network_getaddresses: getaddrinfo for localhost failed: nodename nor servname provided 725 doCheck = !stdenv.hostPlatform.isDarwin && lib.versionOlder php.version "8.4"; 726 internalDeps = [ php.extensions.session ]; 727 } 728 { 729 name = "sockets"; 730 doCheck = false; 731 } 732 { 733 name = "sodium"; 734 buildInputs = [ libsodium ]; 735 } 736 { 737 name = "sqlite3"; 738 buildInputs = [ sqlite ]; 739 740 # The `sqlite3_bind_bug68849.phpt` test is currently broken for i686 Linux systems since sqlite 3.43, cf.: 741 # - https://github.com/php/php-src/issues/12076 742 # - https://www.sqlite.org/forum/forumpost/abbb95376ec6cd5f 743 patches = lib.optionals (stdenv.hostPlatform.isi686 && stdenv.hostPlatform.isLinux) [ 744 ../development/interpreters/php/skip-sqlite3_bind_bug68849.phpt.patch 745 ]; 746 } 747 { name = "sysvmsg"; } 748 { name = "sysvsem"; } 749 { name = "sysvshm"; } 750 { 751 name = "tidy"; 752 configureFlags = [ "--with-tidy=${html-tidy}" ]; 753 doCheck = false; 754 } 755 { 756 name = "tokenizer"; 757 patches = [ ../development/interpreters/php/fix-tokenizer-php81.patch ]; 758 } 759 { 760 name = "xml"; 761 buildInputs = [ libxml2 ]; 762 configureFlags = [ 763 "--enable-xml" 764 ]; 765 doCheck = false; 766 } 767 { 768 name = "xmlreader"; 769 buildInputs = [ libxml2 ]; 770 internalDeps = [ php.extensions.dom ]; 771 env.NIX_CFLAGS_COMPILE = toString [ 772 "-I../.." 773 "-DHAVE_DOM" 774 ]; 775 doCheck = false; 776 configureFlags = [ 777 "--enable-xmlreader" 778 ]; 779 } 780 { 781 name = "xmlwriter"; 782 buildInputs = [ libxml2 ]; 783 configureFlags = [ 784 "--enable-xmlwriter" 785 ]; 786 } 787 { 788 name = "xsl"; 789 buildInputs = [ 790 libxslt 791 libxml2 792 ]; 793 internalDeps = [ php.extensions.dom ]; 794 doCheck = false; 795 env.NIX_CFLAGS_COMPILE = toString [ 796 "-I../.." 797 "-DHAVE_DOM" 798 ]; 799 configureFlags = [ "--with-xsl=${libxslt.dev}" ]; 800 } 801 { 802 name = "zend_test"; 803 internalDeps = [ php.extensions.dom ]; 804 env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2"; 805 } 806 { 807 name = "zip"; 808 buildInputs = [ 809 libzip 810 pcre2 811 ]; 812 configureFlags = [ 813 "--with-zip" 814 ]; 815 doCheck = false; 816 } 817 { 818 name = "zlib"; 819 buildInputs = [ zlib ]; 820 configureFlags = [ 821 "--with-zlib" 822 ]; 823 } 824 ] 825 ++ lib.optionals (lib.versionOlder php.version "8.3") [ 826 # Using version from PECL on new PHP versions. 827 { 828 name = "imap"; 829 buildInputs = [ 830 uwimap 831 openssl 832 pam 833 pcre2 834 libkrb5 835 ]; 836 configureFlags = [ 837 "--with-imap=${uwimap}" 838 "--with-imap-ssl" 839 "--with-kerberos" 840 ]; 841 } 842 ]; 843 844 # Convert the list of attrs: 845 # [ { name = <name>; ... } ... ] 846 # to a list of 847 # [ { name = <name>; value = <extension drv>; } ... ] 848 # 849 # which we later use listToAttrs to make all attrs available by name. 850 namedExtensions = builtins.map (drv: { 851 name = drv.name; 852 value = mkExtension drv; 853 }) extensionData; 854 855 in 856 # Produce the final attribute set of all extensions defined. 857 builtins.listToAttrs namedExtensions 858 ); 859 } 860)