diff --git a/pkgs/by-name/bl/blackfire/package.nix b/pkgs/by-name/bl/blackfire/package.nix index d90289827fa29..da0ee24714b01 100644 --- a/pkgs/by-name/bl/blackfire/package.nix +++ b/pkgs/by-name/bl/blackfire/package.nix @@ -7,6 +7,7 @@ curl, jq, common-updater-scripts, + php, }: stdenv.mkDerivation rec { @@ -115,5 +116,6 @@ stdenv.mkDerivation rec { "x86_64-darwin" "aarch64-darwin" ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/interpreters/php/8.5.nix b/pkgs/development/interpreters/php/8.5.nix new file mode 100644 index 0000000000000..905706b7fdebe --- /dev/null +++ b/pkgs/development/interpreters/php/8.5.nix @@ -0,0 +1,58 @@ +{ callPackage, ... }@_args: + +let + base = callPackage ./generic.nix ( + _args + // { + version = "8.5.1"; + hash = "sha256-VfQoxCbnJBdS6pr/8WC7ZMMqkyHL1tF9HBRbjfiCNzc="; + } + ); +in +base.withExtensions ( + { all, ... }: + with all; + [ + bcmath + calendar + curl + ctype + dom + exif + fileinfo + filter + ftp + gd + gettext + gmp + iconv + intl + ldap + mbstring + mysqli + mysqlnd + opcache + openssl + pcntl + pdo + pdo_mysql + pdo_odbc + pdo_pgsql + pdo_sqlite + pgsql + posix + readline + session + simplexml + sockets + soap + sodium + sysvsem + sqlite3 + tokenizer + xmlreader + xmlwriter + zip + zlib + ] +) diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix index 6eb8ec5966803..57a0f772257b3 100644 --- a/pkgs/development/interpreters/php/generic.nix +++ b/pkgs/development/interpreters/php/generic.nix @@ -133,7 +133,8 @@ let type = "${lib.optionalString (ext.zendExtension or false) "zend_"}extension"; in lib.nameValuePair extName { - text = "${type}=${ext}/lib/php/extensions/${extName}.so"; + text = lib.optionalString (ext.includeInPHPIniFile or true + ) "${type}=${ext}/lib/php/extensions/${extName}.so"; deps = map getExtName phpDeps; } ) (enabledExtensions ++ (getDepsRecursively enabledExtensions)) diff --git a/pkgs/development/php-packages/amqp/default.nix b/pkgs/development/php-packages/amqp/default.nix index b27663e75875d..d5fe2952e76ef 100644 --- a/pkgs/development/php-packages/amqp/default.nix +++ b/pkgs/development/php-packages/amqp/default.nix @@ -3,6 +3,7 @@ lib, rabbitmq-c, fetchFromGitHub, + php, }: let @@ -29,5 +30,6 @@ buildPecl { license = lib.licenses.php301; homepage = "https://github.com/php-amqp/php-amqp"; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/apcu/default.nix b/pkgs/development/php-packages/apcu/default.nix index 6a63f1bfb3227..09219983681a3 100644 --- a/pkgs/development/php-packages/apcu/default.nix +++ b/pkgs/development/php-packages/apcu/default.nix @@ -3,6 +3,7 @@ lib, pcre2, fetchFromGitHub, + php, }: let @@ -15,8 +16,8 @@ buildPecl { src = fetchFromGitHub { owner = "krakjoe"; repo = "apcu"; - rev = "v${version}"; - sha256 = "sha256-kf1d+WLpwhzQVn9pnkXtPPTXI5XaAuIAReI6rDGypB8="; + tag = "v${version}"; + hash = "sha256-kf1d+WLpwhzQVn9pnkXtPPTXI5XaAuIAReI6rDGypB8="; }; buildInputs = [ pcre2 ]; @@ -33,5 +34,6 @@ buildPecl { homepage = "https://pecl.php.net/package/APCu"; license = lib.licenses.php301; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/ast/default.nix b/pkgs/development/php-packages/ast/default.nix index 19dd3e837bf64..a56c4e11c9c90 100644 --- a/pkgs/development/php-packages/ast/default.nix +++ b/pkgs/development/php-packages/ast/default.nix @@ -2,6 +2,7 @@ buildPecl, lib, fetchFromGitHub, + php, }: let @@ -24,5 +25,6 @@ buildPecl { license = lib.licenses.bsd3; homepage = "https://pecl.php.net/package/ast"; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/gnupg/default.nix b/pkgs/development/php-packages/gnupg/default.nix index 9cfa7e0eaafbe..e62bf571686ae 100644 --- a/pkgs/development/php-packages/gnupg/default.nix +++ b/pkgs/development/php-packages/gnupg/default.nix @@ -52,7 +52,7 @@ buildPecl { meta = { changelog = "https://github.com/php-gnupg/php-gnupg/releases/tag/gnupg-${version}"; - broken = lib.versionOlder php.version "8.1"; # Broken on PHP older than 8.1. + broken = lib.versionOlder php.version "8.1" || lib.versionAtLeast php.version "8.5"; description = "PHP wrapper for GpgME library that provides access to GnuPG"; license = lib.licenses.bsd3; homepage = "https://pecl.php.net/package/gnupg"; diff --git a/pkgs/development/php-packages/imap/default.nix b/pkgs/development/php-packages/imap/default.nix index b37e6e6c6b286..c7b9d33b2517f 100644 --- a/pkgs/development/php-packages/imap/default.nix +++ b/pkgs/development/php-packages/imap/default.nix @@ -9,6 +9,7 @@ pcre2, pkg-config, uwimap, + php, }: let @@ -56,5 +57,6 @@ buildPecl { homepage = "https://pecl.php.net/package/imap"; license = lib.licenses.php301; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/ioncube-loader/default.nix b/pkgs/development/php-packages/ioncube-loader/default.nix index 07c941094c6e0..9362a6214754e 100644 --- a/pkgs/development/php-packages/ioncube-loader/default.nix +++ b/pkgs/development/php-packages/ioncube-loader/default.nix @@ -54,5 +54,6 @@ stdenv.mkDerivation { "aarch64-linux" "aarch64-darwin" ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/openswoole/default.nix b/pkgs/development/php-packages/openswoole/default.nix index f46c8b6a8f9f9..2dec6017a6724 100644 --- a/pkgs/development/php-packages/openswoole/default.nix +++ b/pkgs/development/php-packages/openswoole/default.nix @@ -35,6 +35,6 @@ buildPecl { You can use the sync or async, Coroutine API to write whole applications or create thousands of light weight Coroutines within one Linux process. ''; teams = [ lib.teams.php ]; - broken = lib.versionOlder php.version "8.2"; + broken = lib.versionOlder php.version "8.2" || lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/pdo_oci/default.nix b/pkgs/development/php-packages/pdo_oci/default.nix index 4815ed293c26b..1600cfb69d524 100644 --- a/pkgs/development/php-packages/pdo_oci/default.nix +++ b/pkgs/development/php-packages/pdo_oci/default.nix @@ -25,5 +25,6 @@ buildPecl { license = lib.licenses.php301; homepage = "https://pecl.php.net/package/pdo_oci"; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/pdo_sqlsrv/default.nix b/pkgs/development/php-packages/pdo_sqlsrv/default.nix index b691d99487cbd..451942fe56044 100644 --- a/pkgs/development/php-packages/pdo_sqlsrv/default.nix +++ b/pkgs/development/php-packages/pdo_sqlsrv/default.nix @@ -22,5 +22,6 @@ buildPecl { license = lib.licenses.mit; homepage = "https://github.com/Microsoft/msphpsql"; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/phan/default.nix b/pkgs/development/php-packages/phan/default.nix index f40573f3b965a..f104081eab232 100644 --- a/pkgs/development/php-packages/phan/default.nix +++ b/pkgs/development/php-packages/phan/default.nix @@ -29,5 +29,6 @@ mainProgram = "phan"; maintainers = with lib.maintainers; [ apeschar ]; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; }) diff --git a/pkgs/development/php-packages/spx/default.nix b/pkgs/development/php-packages/spx/default.nix index a6fb3c8f35639..62dfc75d6939f 100644 --- a/pkgs/development/php-packages/spx/default.nix +++ b/pkgs/development/php-packages/spx/default.nix @@ -3,6 +3,7 @@ lib, fetchFromGitHub, zlib, + php, }: let @@ -15,7 +16,7 @@ buildPecl { src = fetchFromGitHub { owner = "NoiseByNorthwest"; repo = "php-spx"; - rev = "v${version}"; + tag = "v${version}"; hash = "sha256-P53g/o4i+QETWdErZaGA3AREvnr8kL9h0B1BMQlKdFA="; }; @@ -30,5 +31,6 @@ buildPecl { homepage = "https://github.com/NoiseByNorthwest/php-spx"; license = lib.licenses.php301; maintainers = with lib.maintainers; [ piotrkwiecinski ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/development/php-packages/swoole/default.nix b/pkgs/development/php-packages/swoole/default.nix index bb86442b4bc22..a1a902b31f430 100644 --- a/pkgs/development/php-packages/swoole/default.nix +++ b/pkgs/development/php-packages/swoole/default.nix @@ -33,5 +33,6 @@ buildPecl { homepage = "https://www.swoole.com"; license = lib.licenses.asl20; teams = [ lib.teams.php ]; + broken = lib.versionAtLeast php.version "8.5"; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1ce0720b47d29..c24c4001b14a3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5573,6 +5573,16 @@ with pkgs; phpExtensions = recurseIntoAttrs php.extensions; phpPackages = recurseIntoAttrs php.packages; + # Import PHP85 interpreter, extensions and packages + php85 = callPackage ../development/interpreters/php/8.5.nix { + stdenv = if stdenv.cc.isClang then llvmPackages.stdenv else stdenv; + pcre2 = pcre2.override { + withJitSealloc = false; # See https://bugs.php.net/bug.php?id=78927 and https://bugs.php.net/bug.php?id=78630 + }; + }; + php85Extensions = recurseIntoAttrs php85.extensions; + php85Packages = recurseIntoAttrs php85.packages; + # Import PHP84 interpreter, extensions and packages php84 = callPackage ../development/interpreters/php/8.4.nix { stdenv = if stdenv.cc.isClang then llvmPackages.stdenv else stdenv; diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix index 5a2781659262a..4c303f5eaf2a9 100644 --- a/pkgs/top-level/php-packages.nix +++ b/pkgs/top-level/php-packages.nix @@ -18,6 +18,7 @@ gmp, html-tidy, icu73, + lexbor, libffi, libiconv, libkrb5, @@ -30,7 +31,6 @@ nix-update-script, oniguruma, openldap, - openssl_1_1, openssl, pam, pcre2, @@ -58,6 +58,43 @@ lib.makeScope pkgs.newScope ( builders = import ../build-support/php/builders { inherit callPackages callPackage buildPecl; }; + + lexborForPHP = ( + lexbor.overrideAttrs (oldAttrs: { + env.NIX_CFLAGS_COMPILE = + (oldAttrs.NIX_CFLAGS_COMPILE or "") + + toString [ + "-Wno-error=int-conversion" + ]; + # TODO: Find a way to get these patches from `php` src. + patches = (oldAttrs.patches or [ ]) ++ [ + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0001-Expose-line-and-column-information-for-use-in-PHP.patch"; + hash = "sha256-xHz0JG+95D+aaUwVZRZvbibt+uMGiXLjlsZxyPnybiQ="; + }) + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0002-Track-implied-added-nodes-for-options-use-in-PHP.patch"; + hash = "sha256-8AWN46UZ0xXcUcPeO+fQ4/KZ5RfX8kGcWTYiSdRxtjE="; + }) + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0003-Patch-utilities-and-data-structure-to-be-able-to-gen.patch"; + hash = "sha256-L4b3zKRMzgeDgc6USurd0jLCQmONIpMzjBjaWbYsawI="; + }) + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0004-Remove-unused-upper-case-tag-static-data.patch"; + hash = "sha256-5SpBGUXGINhWQDdOtf/tjH8gPthL3e4mRHh7ZaophGY="; + }) + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0005-Shrink-size-of-static-binary-search-tree.patch"; + hash = "sha256-2Hhu6RGu5hBJjx+cfNsTiJQsuQy5KCcfvi3ed4Pzmv8="; + }) + (fetchpatch { + url = "https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-8.5.0/ext/lexbor/patches/0006-Patch-out-unused-CSS-style-code.patch"; + hash = "sha256-aP6oAkw/CA+DdYlZRGhwJaKIuY6zt5IHFcxoz4x3xj8="; + }) + ]; + }) + ); in { buildPecl = callPackage ../build-support/php/build-pecl.nix { @@ -113,6 +150,7 @@ lib.makeScope pkgs.newScope ( zendExtension ? false, doCheck ? true, extName ? name, + includeInPHPIniFile ? true, ... }@args: stdenv.mkDerivation ( @@ -120,6 +158,7 @@ lib.makeScope pkgs.newScope ( // { pname = "php-${name}"; extensionName = extName; + inherit includeInPHPIniFile; outputs = [ "out" @@ -192,9 +231,13 @@ lib.makeScope pkgs.newScope ( runHook preInstall mkdir -p $out/lib/php/extensions + '' + + lib.optionalString includeInPHPIniFile '' cp modules/${extName}.so $out/lib/php/extensions/${extName}.so + '' + + '' mkdir -p $dev/include - ${rsync}/bin/rsync -r --filter="+ */" \ + ${lib.getExe rsync} -r --filter="+ */" \ --filter="+ *.h" \ --filter="- *" \ --prune-empty-dirs \ @@ -278,8 +321,6 @@ lib.makeScope pkgs.newScope ( 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 { }; @@ -406,6 +447,9 @@ lib.makeScope pkgs.newScope ( zstd = callPackage ../development/php-packages/zstd { }; } + // lib.optionalAttrs (lib.versionOlder php.version "8.5") { + blackfire = callPackage ../by-name/bl/blackfire/php-probe.nix { }; + } // lib.optionalAttrs config.allowAliases { php-spx = throw "php-spx is deprecated, use spx instead"; openssl-legacy = throw "openssl-legacy has been removed"; @@ -443,7 +487,11 @@ lib.makeScope pkgs.newScope ( { name = "dba"; } { name = "dom"; - buildInputs = [ libxml2 ]; + internalDeps = lib.optionals (lib.versionAtLeast php.version "8.5") [ php.extensions.lexbor ]; + buildInputs = [ + libxml2 + lexborForPHP + ]; configureFlags = [ "--enable-dom" ]; @@ -585,13 +633,14 @@ lib.makeScope pkgs.newScope ( } { name = "opcache"; + includeInPHPIniFile = false; buildInputs = [ pcre2 ] - ++ lib.optional ( + ++ lib.optionals ( !stdenv.hostPlatform.isDarwin && lib.meta.availableOn stdenv.hostPlatform valgrind - ) valgrind.dev; - configureFlags = lib.optional php.ztsSupport "--disable-opcache-jit"; + ) [ valgrind.dev ]; + configureFlags = lib.optionals php.ztsSupport [ "--disable-opcache-jit" ]; zendExtension = true; postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' # Tests are flaky on darwin @@ -756,6 +805,13 @@ lib.makeScope pkgs.newScope ( name = "tokenizer"; patches = [ ../development/interpreters/php/fix-tokenizer-php81.patch ]; } + { + name = "uri"; + includeInPHPIniFile = false; + buildInputs = [ + lexborForPHP + ]; + } { name = "xml"; buildInputs = [ libxml2 ]; @@ -822,7 +878,7 @@ lib.makeScope pkgs.newScope ( ]; } ] - ++ lib.optionals (lib.versionOlder php.version "8.3") [ + ++ lib.optionals (lib.versionOlder php.version "8.4") [ # Using version from PECL on new PHP versions. { name = "imap"; @@ -839,6 +895,12 @@ lib.makeScope pkgs.newScope ( "--with-kerberos" ]; } + ] + ++ lib.optionals (lib.versionAtLeast php.version "8.5") [ + { + name = "lexbor"; + includeInPHPIniFile = false; + } ]; # Convert the list of attrs: