Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861{ stdenv, config, callPackages, lib, pkgs, phpPackage, autoconf, pkg-config, bzip2, curl, cyrus_sasl, enchant2, freetds, gd, gettext, gmp, html-tidy, icu73, libffi, libiconv, libkrb5, libpq, libsodium, libxml2, libxslt, libzip, net-snmp, nix-update-script, oniguruma, openldap, openssl_1_1, openssl, pam, pcre2, bison, re2c, readline, rsync, sqlite, unixODBC, uwimap, valgrind, zlib,}:
lib.makeScope pkgs.newScope ( self: let inherit (self) buildPecl callPackage mkExtension php ;
builders = import ../build-support/php/builders { inherit callPackages callPackage buildPecl; }; in { buildPecl = callPackage ../build-support/php/build-pecl.nix { php = php.unwrapped; };
inherit (builders.v1) buildComposerProject buildComposerWithPlugin composerHooks mkComposerRepository ;
# Next version of the builder buildComposerProject2 = builders.v2.buildComposerProject; composerHooks2 = builders.v2.composerHooks; mkComposerVendor = builders.v2.mkComposerVendor;
# Wrap mkDerivation to prepend pname with "php-" to make names consistent # with how buildPecl does it and make the file easier to overview. mkDerivation = origArgs: let args = lib.fix ( lib.extends (_: previousAttrs: { pname = "php-${previousAttrs.pname}"; passthru = (previousAttrs.passthru or { }) // { updateScript = nix-update-script { }; }; meta = (previousAttrs.meta or { }) // { mainProgram = previousAttrs.meta.mainProgram or previousAttrs.pname; }; }) (if lib.isFunction origArgs then origArgs else (_: origArgs)) ); in pkgs.stdenv.mkDerivation args;
# Function to build an extension which is shipped as part of the php # source, based on the php version. # # Name passed is the name of the extension and is automatically used # to add the configureFlag "--enable-${name}", which can be overridden. # # Build inputs is used for extra deps that may be needed. And zendExtension # will mark the extension as a zend extension or not. mkExtension = lib.makeOverridable ( { name, configureFlags ? [ "--enable-${extName}" ], internalDeps ? [ ], postPhpize ? "", buildInputs ? [ ], zendExtension ? false, doCheck ? true, extName ? name, ... }@args: stdenv.mkDerivation ( (builtins.removeAttrs args [ "name" ]) // { pname = "php-${name}"; extensionName = extName;
outputs = [ "out" "dev" ];
inherit (php.unwrapped) version src;
enableParallelBuilding = true;
nativeBuildInputs = [ php.unwrapped autoconf pkg-config re2c bison ];
inherit configureFlags internalDeps buildInputs zendExtension doCheck ;
preConfigurePhases = [ "genfiles" "cdToExtensionRootPhase" ];
genfiles = '' if [ -f "scripts/dev/genfiles" ]; then ./scripts/dev/genfiles fi '';
cdToExtensionRootPhase = '' # Go to extension source root. cd "ext/${extName}" '';
preConfigure = '' nullglobRestore=$(shopt -p nullglob) shopt -u nullglob # To make ?-globbing work
# Some extensions have a config0.m4 or config9.m4 if [ -f config?.m4 ]; then mv config?.m4 config.m4 fi
$nullglobRestore
phpize ${postPhpize}
${lib.concatMapStringsSep "\n" ( dep: "mkdir -p ext; ln -s ${dep.dev}/include ext/${dep.extensionName}" ) internalDeps} '';
checkPhase = '' runHook preCheck
NO_INTERACTION=yes SKIP_PERF_SENSITIVE=yes SKIP_ONLINE_TESTS=yes make test runHook postCheck '';
installPhase = '' runHook preInstall
mkdir -p $out/lib/php/extensions cp modules/${extName}.so $out/lib/php/extensions/${extName}.so mkdir -p $dev/include ${rsync}/bin/rsync -r --filter="+ */" \ --filter="+ *.h" \ --filter="- *" \ --prune-empty-dirs \ . $dev/include/
runHook postInstall '';
meta = { description = "PHP upstream extension: ${name}"; inherit (php.meta) teams homepage license platforms ; } // args.meta or { }; } ) );
php = phpPackage;
# This is a set of interactive tools based on PHP. tools = { box = callPackage ../development/php-packages/box { };
castor = callPackage ../development/php-packages/castor { };
composer = callPackage ../development/php-packages/composer { };
composer-local-repo-plugin = callPackage ../development/php-packages/composer-local-repo-plugin { };
cyclonedx-php-composer = callPackage ../development/php-packages/cyclonedx-php-composer { };
deployer = callPackage ../development/php-packages/deployer { };
grumphp = callPackage ../development/php-packages/grumphp { };
phan = callPackage ../development/php-packages/phan { };
phing = callPackage ../development/php-packages/phing { };
phive = callPackage ../development/php-packages/phive { };
php-codesniffer = callPackage ../development/php-packages/php-codesniffer { };
php-cs-fixer = callPackage ../development/php-packages/php-cs-fixer { };
php-parallel-lint = callPackage ../development/php-packages/php-parallel-lint { };
phpinsights = callPackage ../development/php-packages/phpinsights { };
phpmd = callPackage ../development/php-packages/phpmd { };
phpspy = callPackage ../development/php-packages/phpspy { };
phpstan = callPackage ../development/php-packages/phpstan { };
psalm = callPackage ../development/php-packages/psalm { };
psysh = callPackage ../development/php-packages/psysh { }; } // lib.optionalAttrs config.allowAliases { phpcbf = throw "`phpcbf` is now deprecated, use `php-codesniffer` instead which contains both `phpcs` and `phpcbf`."; phpcs = throw "`phpcs` is now deprecated, use `php-codesniffer` instead which contains both `phpcs` and `phpcbf`."; };
# This is a set of PHP extensions meant to be used in php.buildEnv # or php.withExtensions to extend the functionality of the PHP # interpreter. # The extensions attributes is composed of three sections: # 1. The contrib conditional extensions, which are only available on specific PHP versions # 2. The contrib extensions available # 3. The core extensions extensions = # Contrib extensions { amqp = callPackage ../development/php-packages/amqp { };
apcu = callPackage ../development/php-packages/apcu { };
ast = callPackage ../development/php-packages/ast { };
blackfire = callPackage ../by-name/bl/blackfire/php-probe.nix { };
couchbase = callPackage ../development/php-packages/couchbase { };
datadog_trace = callPackage ../development/php-packages/datadog_trace { };
decimal = callPackage ../development/php-packages/decimal { };
ds = callPackage ../development/php-packages/ds { };
event = callPackage ../development/php-packages/event { };
excimer = callPackage ../development/php-packages/excimer { };
gnupg = callPackage ../development/php-packages/gnupg { };
grpc = callPackage ../development/php-packages/grpc { };
igbinary = callPackage ../development/php-packages/igbinary { };
imagick = callPackage ../development/php-packages/imagick { };
# Shadowed by built-in version on PHP < 8.3. imap = callPackage ../development/php-packages/imap { };
inotify = callPackage ../development/php-packages/inotify { };
ioncube-loader = callPackage ../development/php-packages/ioncube-loader { };
luasandbox = callPackage ../development/php-packages/luasandbox { };
mailparse = callPackage ../development/php-packages/mailparse { };
maxminddb = callPackage ../development/php-packages/maxminddb { };
memcache = callPackage ../development/php-packages/memcache { };
memcached = callPackage ../development/php-packages/memcached { };
meminfo = callPackage ../development/php-packages/meminfo { };
memprof = callPackage ../development/php-packages/memprof { };
mongodb = callPackage ../development/php-packages/mongodb { };
msgpack = callPackage ../development/php-packages/msgpack { };
oci8 = callPackage ../development/php-packages/oci8 { };
opentelemetry = callPackage ../development/php-packages/opentelemetry { };
openswoole = callPackage ../development/php-packages/openswoole { };
parallel = callPackage ../development/php-packages/parallel { };
pdlib = callPackage ../development/php-packages/pdlib { };
pcov = callPackage ../development/php-packages/pcov { };
pdo_oci = if (lib.versionAtLeast php.version "8.4") then callPackage ../development/php-packages/pdo_oci { } else buildPecl rec { inherit (php.unwrapped) src version;
pname = "pdo_oci"; sourceRoot = "php-${version}/ext/pdo_oci";
buildInputs = [ pkgs.oracle-instantclient ]; configureFlags = [ "--with-pdo-oci=instantclient,${pkgs.oracle-instantclient.lib}/lib" ];
internalDeps = [ php.extensions.pdo ]; postPatch = '' sed -i -e 's|OCISDKMANINC=`.*$|OCISDKMANINC="${pkgs.oracle-instantclient.dev}/include"|' config.m4 '';
meta.teams = [ lib.teams.php ]; };
pdo_sqlsrv = callPackage ../development/php-packages/pdo_sqlsrv { };
phalcon = callPackage ../development/php-packages/phalcon { };
pinba = callPackage ../development/php-packages/pinba { };
protobuf = callPackage ../development/php-packages/protobuf { };
pspell = callPackage ../development/php-packages/pspell { };
rdkafka = callPackage ../development/php-packages/rdkafka { };
redis = callPackage ../development/php-packages/redis { };
relay = callPackage ../development/php-packages/relay { };
rrd = callPackage ../development/php-packages/rrd { };
smbclient = callPackage ../development/php-packages/smbclient { };
snuffleupagus = callPackage ../development/php-packages/snuffleupagus { };
spx = callPackage ../development/php-packages/spx { };
sqlsrv = callPackage ../development/php-packages/sqlsrv { };
ssh2 = callPackage ../development/php-packages/ssh2 { };
swoole = callPackage ../development/php-packages/swoole { };
systemd = callPackage ../development/php-packages/systemd { };
tideways = callPackage ../development/php-packages/tideways { };
uuid = callPackage ../development/php-packages/uuid { };
uv = callPackage ../development/php-packages/uv { };
vld = callPackage ../development/php-packages/vld { };
wikidiff2 = callPackage ../development/php-packages/wikidiff2 { };
xdebug = callPackage ../development/php-packages/xdebug { };
yaml = callPackage ../development/php-packages/yaml { };
zstd = callPackage ../development/php-packages/zstd { }; } // lib.optionalAttrs config.allowAliases { php-spx = throw "php-spx is deprecated, use spx instead"; } // ( # Core extensions let # This list contains build instructions for different modules that one may # want to build. # # These will be passed as arguments to mkExtension above. extensionData = [ { name = "bcmath"; } { name = "bz2"; buildInputs = [ bzip2 ]; configureFlags = [ "--with-bz2=${bzip2.dev}" ]; } { name = "calendar"; } { name = "ctype"; postPatch = lib.optionalString (stdenv.hostPlatform.isDarwin && lib.versionAtLeast php.version "8.2") # Broken test on aarch64-darwin '' rm ext/ctype/tests/lc_ctype_inheritance.phpt ''; } { name = "curl"; buildInputs = [ curl ]; configureFlags = [ "--with-curl=${curl.dev}" ]; doCheck = false; } { name = "dba"; } { name = "dom"; buildInputs = [ libxml2 ]; configureFlags = [ "--enable-dom" ]; } { name = "enchant"; buildInputs = [ enchant2 ]; configureFlags = [ "--with-enchant" ]; doCheck = false; } { name = "exif"; doCheck = false; } { name = "ffi"; buildInputs = [ libffi ]; } { name = "fileinfo"; buildInputs = [ pcre2 ]; } { name = "filter"; buildInputs = [ pcre2 ]; } { name = "ftp"; buildInputs = [ openssl ]; } { name = "gd"; buildInputs = [ zlib gd ]; configureFlags = [ "--enable-gd" "--with-external-gd=${gd.dev}" "--enable-gd-jis-conv" ]; doCheck = false; } { name = "gettext"; buildInputs = [ gettext ]; postPhpize = ''substituteInPlace configure --replace-fail 'as_fn_error $? "Cannot locate header file libintl.h" "$LINENO" 5' ':' ''; configureFlags = [ "--with-gettext=${gettext}" ]; } { name = "gmp"; buildInputs = [ gmp ]; configureFlags = [ "--with-gmp=${gmp.dev}" ]; } { name = "iconv"; buildInputs = [ libiconv ]; configureFlags = [ "--with-iconv" ]; # Some other extensions support separate libdirs, but iconv does not. This causes problems with detecting # Darwin’s libiconv because it has separate outputs. Adding `-liconv` works around the issue. env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { NIX_LDFLAGS = "-liconv"; }; doCheck = stdenv.hostPlatform.isLinux; } { name = "intl"; buildInputs = [ icu73 ]; } { name = "ldap"; buildInputs = [ openldap cyrus_sasl ]; configureFlags = [ "--with-ldap" "LDAP_DIR=${openldap.dev}" "LDAP_INCDIR=${openldap.dev}/include" "LDAP_LIBDIR=${openldap.out}/lib" ] ++ lib.optionals stdenv.hostPlatform.isLinux [ "--with-ldap-sasl=${cyrus_sasl.dev}" ]; doCheck = false; } { name = "mbstring"; buildInputs = [ oniguruma pcre2 ]; doCheck = false; } { name = "mysqli"; internalDeps = [ php.extensions.mysqlnd ]; configureFlags = [ "--with-mysqli=mysqlnd" "--with-mysql-sock=/run/mysqld/mysqld.sock" ]; doCheck = false; } { name = "mysqlnd"; buildInputs = [ zlib openssl ]; configureFlags = [ "--with-mysqlnd-ssl" ]; # The configure script doesn't correctly add library link # flags, so we add them to the variable used by the Makefile # when linking. MYSQLND_SHARED_LIBADD = "-lz -lssl -lcrypto"; # The configure script builds a config.h which is never # included. Let's include it in the main header file # included by all .c-files. patches = [ (pkgs.writeText "mysqlnd_config.patch" '' --- a/ext/mysqlnd/mysqlnd.h +++ b/ext/mysqlnd/mysqlnd.h @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | '') ]; } { name = "opcache"; buildInputs = [ pcre2 ] ++ lib.optional ( !stdenv.hostPlatform.isDarwin && lib.meta.availableOn stdenv.hostPlatform valgrind ) valgrind.dev; configureFlags = lib.optional php.ztsSupport "--disable-opcache-jit"; zendExtension = true; postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' # Tests are flaky on darwin rm ext/opcache/tests/blacklist.phpt rm ext/opcache/tests/bug66338.phpt rm ext/opcache/tests/bug78106.phpt rm ext/opcache/tests/issue0115.phpt rm ext/opcache/tests/issue0149.phpt rm ext/opcache/tests/revalidate_path_01.phpt ''; # Tests launch the builtin webserver. __darwinAllowLocalNetworking = true; } { name = "openssl"; buildInputs = [ openssl ]; configureFlags = [ "--with-openssl" ]; doCheck = false; } # This provides a legacy OpenSSL PHP extension # For situations where OpenSSL 3 do not support a set of features # without a specific openssl.cnf file { name = "openssl-legacy"; extName = "openssl"; buildInputs = [ openssl_1_1 ]; configureFlags = [ "--with-openssl" ]; doCheck = false; } { name = "pcntl"; } { name = "pdo"; doCheck = false; } { name = "pdo_dblib"; internalDeps = [ php.extensions.pdo ]; configureFlags = [ "--with-pdo-dblib=${freetds}" ]; meta.broken = stdenv.hostPlatform.isDarwin; doCheck = false; } { name = "pdo_mysql"; internalDeps = with php.extensions; [ pdo mysqlnd ]; configureFlags = [ "--with-pdo-mysql=mysqlnd" "PHP_MYSQL_SOCK=/run/mysqld/mysqld.sock" ]; doCheck = false; } { name = "pdo_odbc"; internalDeps = [ php.extensions.pdo ]; buildInputs = [ unixODBC ]; configureFlags = [ "--with-pdo-odbc=unixODBC,${unixODBC}" ]; doCheck = false; } { name = "pdo_pgsql"; internalDeps = [ php.extensions.pdo ]; configureFlags = [ "--with-pdo-pgsql=${libpq.pg_config}" ]; doCheck = false; } { name = "pdo_sqlite"; internalDeps = [ php.extensions.pdo ]; buildInputs = [ sqlite ]; configureFlags = [ "--with-pdo-sqlite=${sqlite.dev}" ]; doCheck = false; } { name = "pgsql"; buildInputs = [ pcre2 ]; configureFlags = [ "--with-pgsql=${libpq.pg_config}" ]; doCheck = false; } { name = "posix"; doCheck = false; } { name = "readline"; buildInputs = [ readline ]; configureFlags = [ "--with-readline=${readline.dev}" ]; postPatch = '' # Fix `--with-readline` option not being available. # `PHP_ALWAYS_SHARED` generated by phpize enables all options # without the possibility to override them. But when `--with-libedit` # is enabled, `--with-readline` is not registered. echo ' AC_DEFUN([PHP_ALWAYS_SHARED],[ test "[$]$1" != "no" && ext_shared=yes ])dnl ' | cat - ext/readline/config.m4 > ext/readline/config.m4.tmp mv ext/readline/config.m4{.tmp,} ''; doCheck = false; } { name = "session"; doCheck = false; } { name = "shmop"; } { name = "simplexml"; buildInputs = [ libxml2 pcre2 ]; configureFlags = [ "--enable-simplexml" ]; } { name = "snmp"; buildInputs = [ net-snmp openssl ]; configureFlags = [ "--with-snmp" ]; doCheck = false; } { name = "soap"; buildInputs = [ libxml2 ]; configureFlags = [ "--enable-soap" ]; # Some tests are causing issues in the Darwin sandbox with issues # such as # Unknown: php_network_getaddresses: getaddrinfo for localhost failed: nodename nor servname provided doCheck = !stdenv.hostPlatform.isDarwin && lib.versionOlder php.version "8.4"; internalDeps = [ php.extensions.session ]; } { name = "sockets"; doCheck = false; } { name = "sodium"; buildInputs = [ libsodium ]; } { name = "sqlite3"; buildInputs = [ sqlite ];
# The `sqlite3_bind_bug68849.phpt` test is currently broken for i686 Linux systems since sqlite 3.43, cf.: # - https://github.com/php/php-src/issues/12076 # - https://www.sqlite.org/forum/forumpost/abbb95376ec6cd5f patches = lib.optionals (stdenv.hostPlatform.isi686 && stdenv.hostPlatform.isLinux) [ ../development/interpreters/php/skip-sqlite3_bind_bug68849.phpt.patch ]; } { name = "sysvmsg"; } { name = "sysvsem"; } { name = "sysvshm"; } { name = "tidy"; configureFlags = [ "--with-tidy=${html-tidy}" ]; doCheck = false; } { name = "tokenizer"; patches = [ ../development/interpreters/php/fix-tokenizer-php81.patch ]; } { name = "xml"; buildInputs = [ libxml2 ]; configureFlags = [ "--enable-xml" ]; doCheck = false; } { name = "xmlreader"; buildInputs = [ libxml2 ]; internalDeps = [ php.extensions.dom ]; env.NIX_CFLAGS_COMPILE = toString [ "-I../.." "-DHAVE_DOM" ]; doCheck = false; configureFlags = [ "--enable-xmlreader" ]; } { name = "xmlwriter"; buildInputs = [ libxml2 ]; configureFlags = [ "--enable-xmlwriter" ]; } { name = "xsl"; buildInputs = [ libxslt libxml2 ]; internalDeps = [ php.extensions.dom ]; doCheck = false; env.NIX_CFLAGS_COMPILE = toString [ "-I../.." "-DHAVE_DOM" ]; configureFlags = [ "--with-xsl=${libxslt.dev}" ]; } { name = "zend_test"; internalDeps = [ php.extensions.dom ]; env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2"; } { name = "zip"; buildInputs = [ libzip pcre2 ]; configureFlags = [ "--with-zip" ]; doCheck = false; } { name = "zlib"; buildInputs = [ zlib ]; configureFlags = [ "--with-zlib" ]; } ] ++ lib.optionals (lib.versionOlder php.version "8.3") [ # Using version from PECL on new PHP versions. { name = "imap"; buildInputs = [ uwimap openssl pam pcre2 libkrb5 ]; configureFlags = [ "--with-imap=${uwimap}" "--with-imap-ssl" "--with-kerberos" ]; } ];
# Convert the list of attrs: # [ { name = <name>; ... } ... ] # to a list of # [ { name = <name>; value = <extension drv>; } ... ] # # which we later use listToAttrs to make all attrs available by name. namedExtensions = builtins.map (drv: { name = drv.name; value = mkExtension drv; }) extensionData;
in # Produce the final attribute set of all extensions defined. builtins.listToAttrs namedExtensions ); })