at 22.05-pre 632 lines 22 kB view raw
1{ stdenv 2, lib 3, pkgs 4, fetchgit 5, phpPackage 6, autoconf 7, pkg-config 8, aspell 9, bzip2 10, curl 11, cyrus_sasl 12, enchant1 13, fetchpatch 14, freetds 15, freetype 16, gd 17, gettext 18, gmp 19, html-tidy 20, icu64 21, libXpm 22, libedit 23, libffi 24, libiconv 25, libjpeg 26, libpng 27, libsodium 28, libwebp 29, libxml2 30, libxslt 31, libzip 32, net-snmp 33, oniguruma 34, openldap 35, openssl 36, pam 37, pcre2 38, postgresql 39, re2c 40, readline 41, rsync 42, sqlite 43, unixODBC 44, uwimap 45, valgrind 46, zlib 47}: 48 49lib.makeScope pkgs.newScope (self: with self; { 50 buildPecl = import ../build-support/build-pecl.nix { 51 php = php.unwrapped; 52 inherit lib; 53 inherit (pkgs) stdenv autoreconfHook fetchurl re2c; 54 }; 55 56 # Wrap mkDerivation to prepend pname with "php-" to make names consistent 57 # with how buildPecl does it and make the file easier to overview. 58 mkDerivation = { pname, ... }@args: pkgs.stdenv.mkDerivation (args // { 59 pname = "php-${pname}"; 60 }); 61 62 # Function to build an extension which is shipped as part of the php 63 # source, based on the php version. 64 # 65 # Name passed is the name of the extension and is automatically used 66 # to add the configureFlag "--enable-${name}", which can be overriden. 67 # 68 # Build inputs is used for extra deps that may be needed. And zendExtension 69 # will mark the extension as a zend extension or not. 70 mkExtension = 71 { name 72 , configureFlags ? [ "--enable-${name}" ] 73 , internalDeps ? [ ] 74 , postPhpize ? "" 75 , buildInputs ? [ ] 76 , zendExtension ? false 77 , doCheck ? true 78 , ... 79 }@args: stdenv.mkDerivation ((builtins.removeAttrs args [ "name" ]) // { 80 pname = "php-${name}"; 81 extensionName = name; 82 83 inherit (php.unwrapped) version src; 84 sourceRoot = "php-${php.version}/ext/${name}"; 85 86 enableParallelBuilding = true; 87 nativeBuildInputs = [ php.unwrapped autoconf pkg-config re2c ]; 88 inherit configureFlags internalDeps buildInputs 89 zendExtension doCheck; 90 91 prePatch = "pushd ../.."; 92 postPatch = "popd"; 93 94 preConfigure = '' 95 nullglobRestore=$(shopt -p nullglob) 96 shopt -u nullglob # To make ?-globbing work 97 98 # Some extensions have a config0.m4 or config9.m4 99 if [ -f config?.m4 ]; then 100 mv config?.m4 config.m4 101 fi 102 103 $nullglobRestore 104 phpize 105 ${postPhpize} 106 ${lib.concatMapStringsSep "\n" 107 (dep: "mkdir -p ext; ln -s ${dep.dev}/include ext/${dep.extensionName}") 108 internalDeps} 109 ''; 110 checkPhase = "runHook preCheck; NO_INTERACTON=yes make test; runHook postCheck"; 111 outputs = [ "out" "dev" ]; 112 installPhase = '' 113 mkdir -p $out/lib/php/extensions 114 cp modules/${name}.so $out/lib/php/extensions/${name}.so 115 mkdir -p $dev/include 116 ${rsync}/bin/rsync -r --filter="+ */" \ 117 --filter="+ *.h" \ 118 --filter="- *" \ 119 --prune-empty-dirs \ 120 . $dev/include/ 121 ''; 122 123 meta = { 124 description = "PHP upstream extension: ${name}"; 125 inherit (php.meta) maintainers homepage license; 126 }; 127 }); 128 129 php = phpPackage; 130 131 # This is a set of interactive tools based on PHP. 132 tools = { 133 box = callPackage ../development/php-packages/box { }; 134 135 composer = callPackage ../development/php-packages/composer { }; 136 137 deployer = callPackage ../development/php-packages/deployer { }; 138 139 php-cs-fixer = callPackage ../development/php-packages/php-cs-fixer { }; 140 141 php-parallel-lint = callPackage ../development/php-packages/php-parallel-lint { }; 142 143 phpcbf = callPackage ../development/php-packages/phpcbf { }; 144 145 phpcs = callPackage ../development/php-packages/phpcs { }; 146 147 phpmd = callPackage ../development/php-packages/phpmd { }; 148 149 phpstan = callPackage ../development/php-packages/phpstan { }; 150 151 psalm = callPackage ../development/php-packages/psalm { }; 152 153 psysh = callPackage ../development/php-packages/psysh { }; 154 }; 155 156 157 158 # This is a set of PHP extensions meant to be used in php.buildEnv 159 # or php.withExtensions to extend the functionality of the PHP 160 # interpreter. 161 extensions = { 162 amqp = callPackage ../development/php-packages/amqp { }; 163 164 apcu = callPackage ../development/php-packages/apcu { }; 165 166 apcu_bc = callPackage ../development/php-packages/apcu_bc { }; 167 168 ast = callPackage ../development/php-packages/ast { }; 169 170 blackfire = pkgs.callPackage ../development/tools/misc/blackfire/php-probe.nix { inherit php; }; 171 172 couchbase = callPackage ../development/php-packages/couchbase { }; 173 174 event = callPackage ../development/php-packages/event { }; 175 176 igbinary = callPackage ../development/php-packages/igbinary { }; 177 178 imagick = callPackage ../development/php-packages/imagick { }; 179 180 mailparse = callPackage ../development/php-packages/mailparse { }; 181 182 maxminddb = callPackage ../development/php-packages/maxminddb { }; 183 184 memcached = callPackage ../development/php-packages/memcached { }; 185 186 mongodb = callPackage ../development/php-packages/mongodb { }; 187 188 oci8 = callPackage ../development/php-packages/oci8 ({ 189 version = "2.2.0"; 190 sha256 = "0jhivxj1nkkza4h23z33y7xhffii60d7dr51h1czjk10qywl7pyd"; 191 } // lib.optionalAttrs (lib.versionAtLeast php.version "8.0") { 192 version = "3.0.1"; 193 sha256 = "108ds92620dih5768z19hi0jxfa7wfg5hdvyyvpapir87c0ap914"; 194 }); 195 196 pdlib = callPackage ../development/php-packages/pdlib { }; 197 198 pcov = callPackage ../development/php-packages/pcov { }; 199 200 pdo_oci = buildPecl rec { 201 inherit (php.unwrapped) src version; 202 203 pname = "pdo_oci"; 204 sourceRoot = "php-${version}/ext/pdo_oci"; 205 206 buildInputs = [ pkgs.oracle-instantclient ]; 207 configureFlags = [ "--with-pdo-oci=instantclient,${pkgs.oracle-instantclient.lib}/lib" ]; 208 209 internalDeps = [ php.extensions.pdo ]; 210 211 postPatch = '' 212 sed -i -e 's|OCISDKMANINC=`.*$|OCISDKMANINC="${pkgs.oracle-instantclient.dev}/include"|' config.m4 213 ''; 214 215 meta.maintainers = lib.teams.php.members; 216 }; 217 218 pdo_sqlsrv = callPackage ../development/php-packages/pdo_sqlsrv { }; 219 220 php_excel = callPackage ../development/php-packages/php_excel { }; 221 222 pinba = callPackage ../development/php-packages/pinba { }; 223 224 protobuf = callPackage ../development/php-packages/protobuf { }; 225 226 rdkafka = callPackage ../development/php-packages/rdkafka { }; 227 228 redis = callPackage ../development/php-packages/redis { }; 229 230 smbclient = callPackage ../development/php-packages/smbclient { }; 231 232 snuffleupagus = callPackage ../development/php-packages/snuffleupagus { }; 233 234 sqlsrv = callPackage ../development/php-packages/sqlsrv { }; 235 236 swoole = callPackage ../development/php-packages/swoole { }; 237 238 xdebug = callPackage ../development/php-packages/xdebug { }; 239 240 yaml = callPackage ../development/php-packages/yaml { }; 241 } // ( 242 let 243 # This list contains build instructions for different modules that one may 244 # want to build. 245 # 246 # These will be passed as arguments to mkExtension above. 247 extensionData = [ 248 { name = "bcmath"; } 249 { name = "bz2"; buildInputs = [ bzip2 ]; configureFlags = [ "--with-bz2=${bzip2.dev}" ]; } 250 { name = "calendar"; } 251 { name = "ctype"; } 252 { 253 name = "curl"; 254 buildInputs = [ curl ]; 255 configureFlags = [ "--with-curl=${curl.dev}" ]; 256 doCheck = false; 257 } 258 { name = "dba"; } 259 { 260 name = "dom"; 261 buildInputs = [ libxml2 ]; 262 configureFlags = [ "--enable-dom" ] 263 # Required to build on darwin. 264 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 265 } 266 { 267 name = "enchant"; 268 buildInputs = [ enchant1 ]; 269 configureFlags = [ "--with-enchant=${enchant1}" ]; 270 # enchant1 doesn't build on darwin. 271 enable = (!stdenv.isDarwin); 272 doCheck = false; 273 } 274 { name = "exif"; doCheck = false; } 275 { name = "ffi"; buildInputs = [ libffi ]; enable = lib.versionAtLeast php.version "7.4"; } 276 { name = "fileinfo"; buildInputs = [ pcre2 ]; } 277 { name = "filter"; buildInputs = [ pcre2 ]; } 278 { name = "ftp"; buildInputs = [ openssl ]; } 279 { 280 name = "gd"; 281 buildInputs = [ zlib gd ]; 282 configureFlags = [ 283 "--enable-gd" 284 "--with-external-gd=${gd.dev}" 285 "--enable-gd-jis-conv" 286 ]; 287 doCheck = false; 288 enable = lib.versionAtLeast php.version "7.4"; 289 } 290 { 291 name = "gd"; 292 buildInputs = [ zlib gd libXpm ]; 293 configureFlags = [ 294 "--with-gd=${gd.dev}" 295 "--with-freetype-dir=${freetype.dev}" 296 "--with-jpeg-dir=${libjpeg.dev}" 297 "--with-png-dir=${libpng.dev}" 298 "--with-webp-dir=${libwebp}" 299 "--with-xpm-dir=${libXpm.dev}" 300 "--with-zlib-dir=${zlib.dev}" 301 "--enable-gd-jis-conv" 302 ]; 303 doCheck = false; 304 enable = lib.versionOlder php.version "7.4"; 305 } 306 { 307 name = "gettext"; 308 buildInputs = [ gettext ]; 309 patches = lib.optionals (lib.versionOlder php.version "7.4") [ 310 (fetchpatch { 311 url = "https://github.com/php/php-src/commit/632b6e7aac207194adc3d0b41615bfb610757f41.patch"; 312 sha256 = "0xn3ivhc4p070vbk5yx0mzj2n7p04drz3f98i77amr51w0vzv046"; 313 }) 314 ]; 315 postPhpize = ''substituteInPlace configure --replace 'as_fn_error $? "Cannot locate header file libintl.h" "$LINENO" 5' ':' ''; 316 configureFlags = [ "--with-gettext=${gettext}" ]; 317 } 318 { 319 name = "gmp"; 320 buildInputs = [ gmp ]; 321 configureFlags = [ "--with-gmp=${gmp.dev}" ]; 322 } 323 { name = "hash"; enable = lib.versionOlder php.version "7.4"; } 324 { 325 name = "iconv"; 326 configureFlags = [ 327 "--with-iconv${lib.optionalString stdenv.isDarwin "=${libiconv}"}" 328 ]; 329 patches = lib.optionals (lib.versionOlder php.version "8.0") [ 330 # Header path defaults to FHS location, preventing the configure script from detecting errno support. 331 (fetchpatch { 332 url = "https://github.com/fossar/nix-phps/raw/263861a8c9bdafd7abe44db6db4ef0179643680c/pkgs/iconv-header-path.patch"; 333 sha256 = "7GHnEUu+hcsQ4h3itDwk6p46ZKfib9JZ2XpWlXrdn6E="; 334 }) 335 ]; 336 doCheck = false; 337 } 338 { 339 name = "imap"; 340 buildInputs = [ uwimap openssl pam pcre2 ]; 341 configureFlags = [ "--with-imap=${uwimap}" "--with-imap-ssl" ]; 342 # uwimap doesn't build on darwin. 343 enable = (!stdenv.isDarwin); 344 } 345 { 346 name = "intl"; 347 buildInputs = [ icu64 ]; 348 patches = lib.optionals (lib.versionOlder php.version "7.4") [ 349 (fetchpatch { 350 url = "https://github.com/php/php-src/commit/93a9b56c90c334896e977721bfb3f38b1721cec6.patch"; 351 sha256 = "055l40lpyhb0rbjn6y23qkzdhvpp7inbnn6x13cpn4inmhjqfpg4"; 352 }) 353 ]; 354 } 355 { name = "json"; enable = lib.versionOlder php.version "8.0"; } 356 { 357 name = "ldap"; 358 buildInputs = [ openldap cyrus_sasl ]; 359 configureFlags = [ 360 "--with-ldap" 361 "LDAP_DIR=${openldap.dev}" 362 "LDAP_INCDIR=${openldap.dev}/include" 363 "LDAP_LIBDIR=${openldap.out}/lib" 364 ] ++ lib.optionals stdenv.isLinux [ 365 "--with-ldap-sasl=${cyrus_sasl.dev}" 366 ]; 367 doCheck = false; 368 } 369 { 370 name = "mbstring"; 371 buildInputs = [ oniguruma ] ++ lib.optionals (lib.versionAtLeast php.version "8.0") [ 372 pcre2 373 ]; 374 doCheck = false; 375 } 376 { 377 name = "mysqli"; 378 internalDeps = [ php.extensions.mysqlnd ]; 379 configureFlags = [ "--with-mysqli=mysqlnd" "--with-mysql-sock=/run/mysqld/mysqld.sock" ]; 380 doCheck = false; 381 } 382 { 383 name = "mysqlnd"; 384 buildInputs = [ zlib openssl ]; 385 # The configure script doesn't correctly add library link 386 # flags, so we add them to the variable used by the Makefile 387 # when linking. 388 MYSQLND_SHARED_LIBADD = "-lssl -lcrypto"; 389 # The configure script builds a config.h which is never 390 # included. Let's include it in the main header file 391 # included by all .c-files. 392 patches = [ 393 (pkgs.writeText "mysqlnd_config.patch" '' 394 --- a/ext/mysqlnd/mysqlnd.h 395 +++ b/ext/mysqlnd/mysqlnd.h 396 @@ -1,3 +1,6 @@ 397 +#ifdef HAVE_CONFIG_H 398 +#include "config.h" 399 +#endif 400 /* 401 +----------------------------------------------------------------------+ 402 | Copyright (c) The PHP Group | 403 '') 404 ] ++ lib.optionals (lib.versionOlder php.version "7.4.8") [ 405 (pkgs.writeText "mysqlnd_fix_compression.patch" '' 406 --- a/ext/mysqlnd/mysqlnd.h 407 +++ b/ext/mysqlnd/mysqlnd.h 408 @@ -48,7 +48,7 @@ 409 #define MYSQLND_DBG_ENABLED 0 410 #endif 411 412 -#if defined(MYSQLND_COMPRESSION_WANTED) && defined(HAVE_ZLIB) 413 +#if defined(MYSQLND_COMPRESSION_WANTED) 414 #define MYSQLND_COMPRESSION_ENABLED 1 415 #endif 416 '') 417 ]; 418 postPhpize = lib.optionalString (lib.versionOlder php.version "7.4") '' 419 substituteInPlace configure --replace '$OPENSSL_LIBDIR' '${openssl}/lib' \ 420 --replace '$OPENSSL_INCDIR' '${openssl.dev}/include' 421 ''; 422 } 423 # oci8 (7.4, 7.3, 7.2) 424 # odbc (7.4, 7.3, 7.2) 425 { 426 name = "opcache"; 427 buildInputs = [ pcre2 ] ++ lib.optionals (!stdenv.isDarwin && lib.versionAtLeast php.version "8.0") [ 428 valgrind.dev 429 ]; 430 patches = lib.optionals (lib.versionOlder php.version "7.4") [ 431 (pkgs.writeText "zend_file_cache_config.patch" '' 432 --- a/ext/opcache/zend_file_cache.c 433 +++ b/ext/opcache/zend_file_cache.c 434 @@ -27,9 +27,9 @@ 435 #include "ext/standard/md5.h" 436 #endif 437 438 +#include "ZendAccelerator.h" 439 #ifdef HAVE_OPCACHE_FILE_CACHE 440 441 -#include "ZendAccelerator.h" 442 #include "zend_file_cache.h" 443 #include "zend_shared_alloc.h" 444 #include "zend_accelerator_util_funcs.h" 445 '') 446 ]; 447 zendExtension = true; 448 doCheck = !(lib.versionOlder php.version "7.4"); 449 # Tests launch the builtin webserver. 450 __darwinAllowLocalNetworking = true; 451 } 452 { 453 name = "openssl"; 454 buildInputs = [ openssl ]; 455 configureFlags = [ "--with-openssl" ]; 456 doCheck = false; 457 } 458 { name = "pcntl"; } 459 { name = "pdo"; doCheck = false; } 460 { 461 name = "pdo_dblib"; 462 internalDeps = [ php.extensions.pdo ]; 463 configureFlags = [ "--with-pdo-dblib=${freetds}" ]; 464 # Doesn't seem to work on darwin. 465 enable = (!stdenv.isDarwin); 466 doCheck = false; 467 } 468 # pdo_firebird (7.4, 7.3, 7.2) 469 { 470 name = "pdo_mysql"; 471 internalDeps = with php.extensions; [ pdo mysqlnd ]; 472 configureFlags = [ "--with-pdo-mysql=mysqlnd" "PHP_MYSQL_SOCK=/run/mysqld/mysqld.sock" ]; 473 doCheck = false; 474 } 475 # pdo_oci (7.4, 7.3, 7.2) 476 { 477 name = "pdo_odbc"; 478 internalDeps = [ php.extensions.pdo ]; 479 configureFlags = [ "--with-pdo-odbc=unixODBC,${unixODBC}" ]; 480 doCheck = false; 481 } 482 { 483 name = "pdo_pgsql"; 484 internalDeps = [ php.extensions.pdo ]; 485 configureFlags = [ "--with-pdo-pgsql=${postgresql}" ]; 486 doCheck = false; 487 } 488 { 489 name = "pdo_sqlite"; 490 internalDeps = [ php.extensions.pdo ]; 491 buildInputs = [ sqlite ]; 492 configureFlags = [ "--with-pdo-sqlite=${sqlite.dev}" ]; 493 doCheck = false; 494 } 495 { 496 name = "pgsql"; 497 buildInputs = [ pcre2 ]; 498 configureFlags = [ "--with-pgsql=${postgresql}" ]; 499 doCheck = false; 500 } 501 { name = "posix"; doCheck = false; } 502 { name = "pspell"; configureFlags = [ "--with-pspell=${aspell}" ]; } 503 { 504 name = "readline"; 505 buildInputs = [ libedit readline ]; 506 configureFlags = [ "--with-readline=${readline.dev}" ]; 507 postPhpize = lib.optionalString (lib.versionOlder php.version "7.4") '' 508 substituteInPlace configure --replace 'as_fn_error $? "Please reinstall libedit - I cannot find readline.h" "$LINENO" 5' ':' 509 ''; 510 doCheck = false; 511 } 512 { name = "session"; doCheck = !(lib.versionAtLeast php.version "8.0"); } 513 { name = "shmop"; } 514 { 515 name = "simplexml"; 516 buildInputs = [ libxml2 pcre2 ]; 517 configureFlags = [ "--enable-simplexml" ] 518 # Required to build on darwin. 519 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 520 } 521 { 522 name = "snmp"; 523 buildInputs = [ net-snmp openssl ]; 524 configureFlags = [ "--with-snmp" ]; 525 # net-snmp doesn't build on darwin. 526 enable = (!stdenv.isDarwin); 527 doCheck = false; 528 } 529 { 530 name = "soap"; 531 buildInputs = [ libxml2 ]; 532 configureFlags = [ "--enable-soap" ] 533 # Required to build on darwin. 534 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 535 doCheck = false; 536 } 537 { name = "sockets"; doCheck = false; } 538 { name = "sodium"; buildInputs = [ libsodium ]; } 539 { name = "sqlite3"; buildInputs = [ sqlite ]; } 540 { name = "sysvmsg"; } 541 { name = "sysvsem"; } 542 { name = "sysvshm"; } 543 { name = "tidy"; configureFlags = [ "--with-tidy=${html-tidy}" ]; doCheck = false; } 544 { name = "tokenizer"; } 545 { 546 name = "wddx"; 547 buildInputs = [ libxml2 ]; 548 internalDeps = [ php.extensions.session ]; 549 configureFlags = [ "--enable-wddx" "--with-libxml-dir=${libxml2.dev}" ]; 550 # Removed in php 7.4. 551 enable = lib.versionOlder php.version "7.4"; 552 } 553 { 554 name = "xml"; 555 buildInputs = [ libxml2 ]; 556 configureFlags = [ "--enable-xml" ] 557 # Required to build on darwin. 558 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 559 doCheck = false; 560 } 561 { 562 name = "xmlreader"; 563 buildInputs = [ libxml2 ]; 564 internalDeps = [ php.extensions.dom ]; 565 NIX_CFLAGS_COMPILE = [ "-I../.." "-DHAVE_DOM" ]; 566 configureFlags = [ "--enable-xmlreader" ] 567 # Required to build on darwin. 568 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 569 } 570 { 571 name = "xmlrpc"; 572 buildInputs = [ libxml2 libiconv ]; 573 # xmlrpc was unbundled in 8.0 https://php.watch/versions/8.0/xmlrpc 574 enable = lib.versionOlder php.version "8.0"; 575 configureFlags = [ "--with-xmlrpc" ] 576 # Required to build on darwin. 577 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 578 } 579 { 580 name = "xmlwriter"; 581 buildInputs = [ libxml2 ]; 582 configureFlags = [ "--enable-xmlwriter" ] 583 # Required to build on darwin. 584 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-libxml-dir=${libxml2.dev}" ]; 585 } 586 { 587 name = "xsl"; 588 buildInputs = [ libxslt libxml2 ]; 589 doCheck = lib.versionOlder php.version "8.0"; 590 configureFlags = [ "--with-xsl=${libxslt.dev}" ]; 591 } 592 { name = "zend_test"; } 593 { 594 name = "zip"; 595 buildInputs = [ libzip pcre2 ]; 596 configureFlags = [ "--with-zip" ] 597 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-zlib-dir=${zlib.dev}" ] 598 ++ lib.optionals (lib.versionOlder php.version "7.3") [ "--with-libzip" ]; 599 doCheck = false; 600 } 601 { 602 name = "zlib"; 603 buildInputs = [ zlib ]; 604 patches = lib.optionals (lib.versionOlder php.version "7.4") [ 605 # Derived from https://github.com/php/php-src/commit/f16b012116d6c015632741a3caada5b30ef8a699 606 ../development/interpreters/php/zlib-darwin-tests.patch 607 ]; 608 configureFlags = [ "--with-zlib" ] 609 ++ lib.optionals (lib.versionOlder php.version "7.4") [ "--with-zlib-dir=${zlib.dev}" ]; 610 } 611 ]; 612 613 # Convert the list of attrs: 614 # [ { name = <name>; ... } ... ] 615 # to a list of 616 # [ { name = <name>; value = <extension drv>; } ... ] 617 # 618 # which we later use listToAttrs to make all attrs available by name. 619 # 620 # Also filter out extensions based on the enable property. 621 namedExtensions = builtins.map 622 (drv: { 623 name = drv.name; 624 value = mkExtension drv; 625 }) 626 (builtins.filter (i: i.enable or true) extensionData); 627 628 # Produce the final attribute set of all extensions defined. 629 in 630 builtins.listToAttrs namedExtensions 631 ); 632})