From 617d353f69bce93b5d5524b44f0ca97af49ed709 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 13:57:21 +0000 Subject: [PATCH 01/17] Use pie instead of pecl for PHP 8.6 extensions pecl doesn't work on the PHP 8.6 alpha, which is why several PECL extensions (apcu, rdkafka, yaml, uuid, msgpack, decimal, amqp, memcached, ds) were being skipped entirely on 8.6. Install pie (https://php.github.io/pie/) as the pecl replacement for the 8.6 build and use it for those, plus swap the existing igbinary/imagick/ redis git-clone workarounds over to pie too, keeping the CFLAGS shims those two still need to build against the 8.6 C API changes. oauth, sqlsrv, and imap have no PIE-compatible package on Packagist yet, so those stay skipped on 8.6. --- php-install.sh | 62 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/php-install.sh b/php-install.sh index b8821f5..dde8acc 100644 --- a/php-install.sh +++ b/php-install.sh @@ -5,7 +5,9 @@ apk add --no-cache unixodbc-dev brotli-dev gmp-dev yaml-dev samba-dev libldap op case $PHP_VERSION in 8.6*) - echo "Skipping pecl channel-update on PHP $PHP_VERSION (pecl is not available yet for this alpha release)" + echo "Installing pie in place of pecl (pecl is not available yet for this alpha release)" + curl -fsSL -o /usr/local/bin/pie https://github.com/php/pie/releases/latest/download/pie.phar + chmod +x /usr/local/bin/pie ;; *) pecl channel-update pecl.php.net @@ -66,7 +68,7 @@ case $PHP_VERSION in yes | pecl install ds-1.6.0 ;; 8.6*) - echo "Skipping ds for PHP $PHP_VERSION" + pie install --no-build-tools-check --no-system-dependencies-check php-ds/ext-ds ;; *) # If we really need it. @@ -86,13 +88,8 @@ case $PHP_VERSION in ;; 8.6*) php -m | grep -q '^igbinary$' || \ - (git clone --depth=1 https://github.com/igbinary/igbinary.git /usr/src/igbinary; \ - cd /usr/src/igbinary; \ - export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc"; \ - phpize && ./configure && make -j"$(nproc)" && make install; \ - echo "extension=igbinary.so" > /usr/local/etc/php/conf.d/igbinary.ini; \ - cd -; \ - rm -rf /usr/src/igbinary) + (export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc"; \ + pie install --no-build-tools-check --no-system-dependencies-check igbinary/igbinary) ;; *) yes | pecl install igbinary @@ -100,7 +97,7 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*|8.6*) + 8.5*) # Yknow if we really need it. php -m | grep -q '^mailparse$' || \ (git clone --depth=1 https://github.com/php/pecl-mail-mailparse.git /usr/src/mailparse; \ @@ -110,6 +107,9 @@ case $PHP_VERSION in cd -; \ rm -rf /usr/src/mailparse) ;; + 8.6*) + pie install --no-build-tools-check --no-system-dependencies-check pecl/mailparse + ;; *) yes | pecl install mailparse ;; @@ -117,7 +117,11 @@ esac case $PHP_VERSION in 8.6*) - echo "Skipping apcu rdkafka yaml uuid msgpack for PHP $PHP_VERSION" + pie install --no-build-tools-check --no-system-dependencies-check apcu/apcu + pie install --no-build-tools-check --no-system-dependencies-check rdkafka/rdkafka + pie install --no-build-tools-check --no-system-dependencies-check pecl/yaml + pie install --no-build-tools-check --no-system-dependencies-check pecl/uuid + pie install --no-build-tools-check --no-system-dependencies-check msgpack/msgpack-php ;; *) yes | pecl install apcu rdkafka yaml uuid msgpack @@ -132,7 +136,7 @@ case $PHP_VERSION in yes | pecl install decimal-1.5.3 ;; 8.6*) - echo "Skipping decimal for PHP $PHP_VERSION" + pie install --no-build-tools-check --no-system-dependencies-check php-decimal/ext-decimal ;; *) yes | pecl install decimal @@ -144,7 +148,7 @@ case $PHP_VERSION in echo "" | pecl install amqp-1.11.0 ;; 8.6*) - echo "Skipping amqp for PHP $PHP_VERSION" + pie install --no-build-tools-check --no-system-dependencies-check php-amqp/php-amqp ;; *) echo "" | pecl install amqp @@ -161,9 +165,12 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*|8.6*) + 8.5*) echo "Skipping memcached for PHP $PHP_VERSION" ;; + 8.6*) + pie install --no-build-tools-check --no-system-dependencies-check php-memcached/php-memcached + ;; *) echo "" | pecl install memcached docker-php-ext-enable memcached @@ -192,7 +199,7 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*|8.6*) + 8.5*) php -m | grep -q '^redis$' || \ (git clone --depth=1 https://github.com/phpredis/phpredis.git /usr/src/phpredis; \ cd /usr/src/phpredis; \ @@ -201,6 +208,9 @@ case $PHP_VERSION in cd -; \ rm -rf /usr/src/phpredis) ;; + 8.6*) + php -m | grep -q '^redis$' || pie install --no-build-tools-check --no-system-dependencies-check phpredis/phpredis + ;; 8.*) mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && docker-php-ext-install redis ;; @@ -217,7 +227,7 @@ php -m | grep -q '^gettext$' || docker-php-ext-install gettext php -m | grep -q '^sockets$' || docker-php-ext-install sockets case $PHP_VERSION in 8.6*) - docker-php-ext-enable mailparse + echo "ds, yaml, decimal, uuid, mailparse, msgpack, and amqp were already enabled by pie for PHP $PHP_VERSION" ;; *) docker-php-ext-enable ds yaml decimal uuid mailparse msgpack amqp @@ -272,20 +282,22 @@ esac case $PHP_VERSION in 8.6*) php -m | grep -q '^imagick$' || \ - (git clone --depth=1 https://github.com/Imagick/imagick.git /usr/src/imagick; \ - cd /usr/src/imagick; \ - export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof"; \ - phpize && ./configure && make -j"$(nproc)" && make install; \ - echo "extension=imagick.so" > /usr/local/etc/php/conf.d/imagick.ini; \ - cd -; \ - rm -rf /usr/src/imagick) + (export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof"; \ + pie install --no-build-tools-check --no-system-dependencies-check imagick/imagick) ;; *) yes | pecl install imagick ;; esac -docker-php-ext-enable imagick +case $PHP_VERSION in + 8.6*) + echo "imagick was already enabled by pie for PHP $PHP_VERSION" + ;; + *) + docker-php-ext-enable imagick + ;; +esac case $PHP_VERSION in 8.4*|8.5*) @@ -315,7 +327,7 @@ docker-php-ext-install gmp ldap xsl mysqli calendar gd pdo_mysql pdo_pgsql zip b case $PHP_VERSION in 8.6*) - echo "Skipping rdkafka apcu enable for PHP $PHP_VERSION" + echo "rdkafka and apcu were already enabled by pie for PHP $PHP_VERSION" ;; *) docker-php-ext-enable rdkafka apcu From 0a310b8d0b407ea437560f28e0b5ea9c68511a24 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 14:14:30 +0000 Subject: [PATCH 02/17] Revert igbinary/imagick/redis/mailparse to git-clone on PHP 8.6 CI history on this branch shows the pecl-tarball/latest-release build of redis and igbinary previously failed on 8.6 with implicit declaration errors for zval_dtor and friends, because their last tagged releases predate the zval_dtor removal in 8.6 - only each project's unreleased default branch has the fix. That's why those two (plus imagick and mailparse, same pattern) were already pinned to `git clone --depth=1` of the default branch rather than a released version. `pie install vendor/pkg` with no constraint resolves to the latest *stable* release, i.e. exactly the versions already proven broken for these four. Keep pie only for the extensions that were plain "pecl is unavailable" skips (ds, apcu, rdkafka, yaml, uuid, msgpack, decimal, amqp, memcached), which never needed an unreleased-source workaround. Also fix a latent double-enable: the imagick git-clone step already writes its own conf.d ini, so the later unconditional `docker-php-ext-enable imagick` triggered an "already loaded" warning in build logs (visible in the acca04b0 CI run) even though it wasn't fatal - guard it the same way the igbinary/redis blocks already guard their install step. --- php-install.sh | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/php-install.sh b/php-install.sh index dde8acc..24a1dbd 100644 --- a/php-install.sh +++ b/php-install.sh @@ -88,8 +88,13 @@ case $PHP_VERSION in ;; 8.6*) php -m | grep -q '^igbinary$' || \ - (export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc"; \ - pie install --no-build-tools-check --no-system-dependencies-check igbinary/igbinary) + (git clone --depth=1 https://github.com/igbinary/igbinary.git /usr/src/igbinary; \ + cd /usr/src/igbinary; \ + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc"; \ + phpize && ./configure && make -j"$(nproc)" && make install; \ + echo "extension=igbinary.so" > /usr/local/etc/php/conf.d/igbinary.ini; \ + cd -; \ + rm -rf /usr/src/igbinary) ;; *) yes | pecl install igbinary @@ -108,7 +113,14 @@ case $PHP_VERSION in rm -rf /usr/src/mailparse) ;; 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check pecl/mailparse + # Yknow if we really need it. + php -m | grep -q '^mailparse$' || \ + (git clone --depth=1 https://github.com/php/pecl-mail-mailparse.git /usr/src/mailparse; \ + cd /usr/src/mailparse; \ + phpize && ./configure && make -j"$(nproc)" && make install; \ + echo "extension=mailparse.so" > /usr/local/etc/php/conf.d/mailparse.ini; \ + cd -; \ + rm -rf /usr/src/mailparse) ;; *) yes | pecl install mailparse @@ -209,7 +221,13 @@ case $PHP_VERSION in rm -rf /usr/src/phpredis) ;; 8.6*) - php -m | grep -q '^redis$' || pie install --no-build-tools-check --no-system-dependencies-check phpredis/phpredis + php -m | grep -q '^redis$' || \ + (git clone --depth=1 https://github.com/phpredis/phpredis.git /usr/src/phpredis; \ + cd /usr/src/phpredis; \ + phpize && ./configure && make -j"$(nproc)" && make install; \ + echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini; \ + cd -; \ + rm -rf /usr/src/phpredis) ;; 8.*) mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && docker-php-ext-install redis @@ -227,7 +245,7 @@ php -m | grep -q '^gettext$' || docker-php-ext-install gettext php -m | grep -q '^sockets$' || docker-php-ext-install sockets case $PHP_VERSION in 8.6*) - echo "ds, yaml, decimal, uuid, mailparse, msgpack, and amqp were already enabled by pie for PHP $PHP_VERSION" + echo "ds, yaml, decimal, uuid, msgpack, and amqp were already enabled by pie, and mailparse by its own install step, for PHP $PHP_VERSION" ;; *) docker-php-ext-enable ds yaml decimal uuid mailparse msgpack amqp @@ -282,8 +300,13 @@ esac case $PHP_VERSION in 8.6*) php -m | grep -q '^imagick$' || \ - (export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof"; \ - pie install --no-build-tools-check --no-system-dependencies-check imagick/imagick) + (git clone --depth=1 https://github.com/Imagick/imagick.git /usr/src/imagick; \ + cd /usr/src/imagick; \ + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof"; \ + phpize && ./configure && make -j"$(nproc)" && make install; \ + echo "extension=imagick.so" > /usr/local/etc/php/conf.d/imagick.ini; \ + cd -; \ + rm -rf /usr/src/imagick) ;; *) yes | pecl install imagick @@ -292,7 +315,7 @@ esac case $PHP_VERSION in 8.6*) - echo "imagick was already enabled by pie for PHP $PHP_VERSION" + php -m | grep -q '^imagick$' || docker-php-ext-enable imagick ;; *) docker-php-ext-enable imagick From 2e388711ee8509daa2df1f238bfcf9df101fa846 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 14:15:07 +0000 Subject: [PATCH 03/17] Drop --no-build-tools-check/--no-system-dependencies-check from pie calls These were a defensive guess to avoid pie prompting interactively in a non-interactive docker build, but couldn't be verified in this environment. Let pie run its normal checks instead of suppressing them; the build tools and dev libraries pie would look for are already apk-installed up front, so the checks should just pass. --- php-install.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/php-install.sh b/php-install.sh index 24a1dbd..07b8ffb 100644 --- a/php-install.sh +++ b/php-install.sh @@ -68,7 +68,7 @@ case $PHP_VERSION in yes | pecl install ds-1.6.0 ;; 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check php-ds/ext-ds + pie install php-ds/ext-ds ;; *) # If we really need it. @@ -129,11 +129,11 @@ esac case $PHP_VERSION in 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check apcu/apcu - pie install --no-build-tools-check --no-system-dependencies-check rdkafka/rdkafka - pie install --no-build-tools-check --no-system-dependencies-check pecl/yaml - pie install --no-build-tools-check --no-system-dependencies-check pecl/uuid - pie install --no-build-tools-check --no-system-dependencies-check msgpack/msgpack-php + pie install apcu/apcu + pie install rdkafka/rdkafka + pie install pecl/yaml + pie install pecl/uuid + pie install msgpack/msgpack-php ;; *) yes | pecl install apcu rdkafka yaml uuid msgpack @@ -148,7 +148,7 @@ case $PHP_VERSION in yes | pecl install decimal-1.5.3 ;; 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check php-decimal/ext-decimal + pie install php-decimal/ext-decimal ;; *) yes | pecl install decimal @@ -160,7 +160,7 @@ case $PHP_VERSION in echo "" | pecl install amqp-1.11.0 ;; 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check php-amqp/php-amqp + pie install php-amqp/php-amqp ;; *) echo "" | pecl install amqp @@ -181,7 +181,7 @@ case $PHP_VERSION in echo "Skipping memcached for PHP $PHP_VERSION" ;; 8.6*) - pie install --no-build-tools-check --no-system-dependencies-check php-memcached/php-memcached + pie install php-memcached/php-memcached ;; *) echo "" | pecl install memcached From 8b7ffbfcfe52c02ab04dc63d170ee061575edfbf Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 14:43:49 +0000 Subject: [PATCH 04/17] Set BOX_REQUIREMENT_CHECKER=0 so pie.phar runs on PHP 8.6 CI shows pie.phar's own Box requirements checker refuses to start, since its bundled requirement list is 8.1-8.5 and doesn't know about 8.6 yet - and in this build the only php available to run pie is the 8.6 alpha build in progress. PIE's docs document this exact escape hatch for running against an unlisted PHP version. --- php-install.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/php-install.sh b/php-install.sh index 07b8ffb..15c6896 100644 --- a/php-install.sh +++ b/php-install.sh @@ -8,6 +8,10 @@ case $PHP_VERSION in echo "Installing pie in place of pecl (pecl is not available yet for this alpha release)" curl -fsSL -o /usr/local/bin/pie https://github.com/php/pie/releases/latest/download/pie.phar chmod +x /usr/local/bin/pie + # pie.phar's bundled Box requirements checker doesn't know about 8.6 yet + # and refuses to run under it (the only php available to run pie here + # *is* the 8.6 build in progress), so skip that check. + export BOX_REQUIREMENT_CHECKER=0 ;; *) pecl channel-update pecl.php.net From 30670f6d2064f00411e50f63d1c91392b3ed339d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:13:06 +0000 Subject: [PATCH 05/17] Install libtool before running pie on PHP 8.6 CI shows pie starts building fine (past the Box requirements checker) but fails on the very first extension (php-ds/ext-ds) because libtoolize/glibtoolize is missing, and pie won't auto-install build tools in non-interactive mode. libtool isn't part of $PHPIZE_DEPS, so add it explicitly for the 8.6 pie path. --- php-install.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/php-install.sh b/php-install.sh index 15c6896..75d0870 100644 --- a/php-install.sh +++ b/php-install.sh @@ -12,6 +12,10 @@ case $PHP_VERSION in # and refuses to run under it (the only php available to run pie here # *is* the 8.6 build in progress), so skip that check. export BOX_REQUIREMENT_CHECKER=0 + # pie refuses to auto-install missing build tools in non-interactive mode + # and libtoolize/glibtoolize (from the libtool package) isn't part of + # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. + apk add --no-cache libtool ;; *) pecl channel-update pecl.php.net From e958893a432603a0605b9c24c3d5756dff78487e Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:18:34 +0000 Subject: [PATCH 06/17] Run pie install with -vvv to see the real 8.6 build failure The libtool fix cleared that warning, but ext-ds's make step still fails identically. pie truncates failed-command output to a temp file inside the (now-discarded) build container instead of printing it, so CI logs don't show the actual compiler error. Bump verbosity so the next failure is diagnosable instead of guessed at blind. --- php-install.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/php-install.sh b/php-install.sh index 75d0870..24d6014 100644 --- a/php-install.sh +++ b/php-install.sh @@ -76,7 +76,7 @@ case $PHP_VERSION in yes | pecl install ds-1.6.0 ;; 8.6*) - pie install php-ds/ext-ds + pie install -vvv php-ds/ext-ds ;; *) # If we really need it. @@ -137,11 +137,11 @@ esac case $PHP_VERSION in 8.6*) - pie install apcu/apcu - pie install rdkafka/rdkafka - pie install pecl/yaml - pie install pecl/uuid - pie install msgpack/msgpack-php + pie install -vvv apcu/apcu + pie install -vvv rdkafka/rdkafka + pie install -vvv pecl/yaml + pie install -vvv pecl/uuid + pie install -vvv msgpack/msgpack-php ;; *) yes | pecl install apcu rdkafka yaml uuid msgpack @@ -156,7 +156,7 @@ case $PHP_VERSION in yes | pecl install decimal-1.5.3 ;; 8.6*) - pie install php-decimal/ext-decimal + pie install -vvv php-decimal/ext-decimal ;; *) yes | pecl install decimal @@ -168,7 +168,7 @@ case $PHP_VERSION in echo "" | pecl install amqp-1.11.0 ;; 8.6*) - pie install php-amqp/php-amqp + pie install -vvv php-amqp/php-amqp ;; *) echo "" | pecl install amqp @@ -189,7 +189,7 @@ case $PHP_VERSION in echo "Skipping memcached for PHP $PHP_VERSION" ;; 8.6*) - pie install php-memcached/php-memcached + pie install -vvv php-memcached/php-memcached ;; *) echo "" | pecl install memcached From 047a2609071cef11287416f0f8ea961f19cb684a Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:23:11 +0000 Subject: [PATCH 07/17] Apply the XtOffsetOf CFLAGS shim globally on PHP 8.6 The -vvv output showed php-ds/ext-ds fails with the same "implicit declaration of function 'XtOffsetOf'" error already fixed for igbinary/imagick via a CFLAGS shim - PHP 8.6 dropped that macro in favor of plain offsetof. Since this is a core-wide 8.6 change, export CFLAGS once for the whole build instead of patching it into every extension block as each one fails. --- php-install.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/php-install.sh b/php-install.sh index 24d6014..0aabf6a 100644 --- a/php-install.sh +++ b/php-install.sh @@ -16,6 +16,11 @@ case $PHP_VERSION in # and libtoolize/glibtoolize (from the libtool package) isn't part of # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool + # PHP 8.6 dropped the XtOffsetOf macro (replaced by plain offsetof), which + # broke ext-ds's build the same way it already broke igbinary/imagick. + # Apply the same shim for every extension built on 8.6 for the rest of + # this script, instead of waiting for each one to fail in turn. + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof" ;; *) pecl channel-update pecl.php.net From fe202ad9304d141287fb64a3f81783acbe95b72c Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:30:27 +0000 Subject: [PATCH 08/17] Add EMPTY_SWITCH_DEFAULT_CASE() shim for PHP 8.6, alongside XtOffsetOf -vvv output showed apcu failing to compile with "implicit declaration of function 'EMPTY_SWITCH_DEFAULT_CASE'" - another Zend compatibility macro PHP 8.6 dropped. Define it away as an empty function-like macro: the switches using it already enumerate every real case, so dropping the defensive unreachable-default is harmless. Verified the quoting survives Make's textual $(CFLAGS) substitution before the shell re-parses the recipe line. --- php-install.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/php-install.sh b/php-install.sh index 0aabf6a..79896f4 100644 --- a/php-install.sh +++ b/php-install.sh @@ -16,11 +16,15 @@ case $PHP_VERSION in # and libtoolize/glibtoolize (from the libtool package) isn't part of # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool - # PHP 8.6 dropped the XtOffsetOf macro (replaced by plain offsetof), which - # broke ext-ds's build the same way it already broke igbinary/imagick. - # Apply the same shim for every extension built on 8.6 for the rest of - # this script, instead of waiting for each one to fail in turn. - export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof" + # PHP 8.6 dropped a handful of compatibility macros extensions still rely + # on. XtOffsetOf (-> offsetof) broke ext-ds the same way it already broke + # igbinary/imagick; EMPTY_SWITCH_DEFAULT_CASE() (used to mark a switch's + # default case unreachable) broke apcu. Defining it away entirely just + # drops that defensive default case, which is harmless since the switches + # using it already enumerate every real case explicitly. Apply both shims + # for every extension built on 8.6 for the rest of this script, instead of + # waiting for each one to fail in turn. + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -D'EMPTY_SWITCH_DEFAULT_CASE()='" ;; *) pecl channel-update pecl.php.net From fe98c64bb26cddc425d8d75bc666630410db6d6d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:37:20 +0000 Subject: [PATCH 09/17] Fix EMPTY_SWITCH_DEFAULT_CASE shim: use -include header, not quoted -D The quoted -D'EMPTY_SWITCH_DEFAULT_CASE()=' broke autoconf's own compiler sanity check ("C compiler cannot create executables"), regressing ext-ds which was already building fine. Root cause: CFLAGS gets consumed by two different mechanisms in the same build - Make expands $(CFLAGS) textually and reparses the recipe line in a fresh shell (quoting survives), but autoconf's AC_PROG_CC check expands $CFLAGS as a plain shell variable inside eval (quoting does not survive, so the literal quote characters reached cc and broke it). Move the macro into a real header file and pull it in via -include, which is just a plain path with no shell metacharacters, so it's immune to this inconsistency. Verified with a standalone compile. --- php-install.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/php-install.sh b/php-install.sh index 79896f4..5fbd0b4 100644 --- a/php-install.sh +++ b/php-install.sh @@ -21,10 +21,25 @@ case $PHP_VERSION in # igbinary/imagick; EMPTY_SWITCH_DEFAULT_CASE() (used to mark a switch's # default case unreachable) broke apcu. Defining it away entirely just # drops that defensive default case, which is harmless since the switches - # using it already enumerate every real case explicitly. Apply both shims - # for every extension built on 8.6 for the rest of this script, instead of - # waiting for each one to fail in turn. - export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -D'EMPTY_SWITCH_DEFAULT_CASE()='" + # using it already enumerate every real case explicitly. + # + # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its -D definition, + # but CFLAGS gets read by two different mechanisms in the same build: + # Make expands $(CFLAGS) textually and then reparses the whole recipe + # line in a fresh shell (quoting survives), while autoconf's own + # compiler sanity check expands $CFLAGS as a plain shell variable inside + # eval (quoting does NOT survive - the literal quote characters reach + # cc and break "checking whether the C compiler works"). A quoted -D + # value can't satisfy both, so put the macro in a real header instead + # and pull it in everywhere via -include, which is just a plain path. + cat > /root/php86-pie-compat.h <<'EOC' +#ifndef EMPTY_SWITCH_DEFAULT_CASE +#define EMPTY_SWITCH_DEFAULT_CASE() +#endif +EOC + # Apply both shims for every extension built on 8.6 for the rest of this + # script, instead of waiting for each one to fail in turn. + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -include /root/php86-pie-compat.h" ;; *) pecl channel-update pecl.php.net From 3f453b8de87a60ae636abaddfeb4767985924040 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:42:28 +0000 Subject: [PATCH 10/17] Add zval_dtor CFLAGS shim globally for PHP 8.6 rdkafka fails compiling with "implicit declaration of function 'zval_dtor'" - the same removed function that already required a rename to zval_ptr_dtor_nogc for igbinary. Since it's a plain identifier substitution (no shell metacharacters, unlike EMPTY_SWITCH_DEFAULT_CASE), add it directly to the global CFLAGS alongside XtOffsetOf rather than needing the -include header trick. --- php-install.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/php-install.sh b/php-install.sh index 5fbd0b4..3db10ad 100644 --- a/php-install.sh +++ b/php-install.sh @@ -16,9 +16,11 @@ case $PHP_VERSION in # and libtoolize/glibtoolize (from the libtool package) isn't part of # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool - # PHP 8.6 dropped a handful of compatibility macros extensions still rely - # on. XtOffsetOf (-> offsetof) broke ext-ds the same way it already broke - # igbinary/imagick; EMPTY_SWITCH_DEFAULT_CASE() (used to mark a switch's + # PHP 8.6 dropped a handful of compatibility macros/functions extensions + # still rely on. XtOffsetOf (-> offsetof) broke ext-ds the same way it + # already broke igbinary/imagick; zval_dtor (-> zval_ptr_dtor_nogc, same + # rename already used for igbinary) broke rdkafka the same way it already + # broke igbinary; EMPTY_SWITCH_DEFAULT_CASE() (used to mark a switch's # default case unreachable) broke apcu. Defining it away entirely just # drops that defensive default case, which is harmless since the switches # using it already enumerate every real case explicitly. @@ -37,9 +39,9 @@ case $PHP_VERSION in #define EMPTY_SWITCH_DEFAULT_CASE() #endif EOC - # Apply both shims for every extension built on 8.6 for the rest of this - # script, instead of waiting for each one to fail in turn. - export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -include /root/php86-pie-compat.h" + # Apply all three shims for every extension built on 8.6 for the rest of + # this script, instead of waiting for each one to fail in turn. + export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc -include /root/php86-pie-compat.h" ;; *) pecl channel-update pecl.php.net From 3765f1a66e10b558151fe6edc47bb91ed9dc1cd4 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:50:11 +0000 Subject: [PATCH 11/17] Define INI_INT in the compat header for PHP 8.6 ext-decimal fails compiling with "implicit declaration of function 'INI_INT'" - INI_INT is a macro, not a real function, so this means whatever header used to make it transitively visible no longer does on 8.6. Define it ourselves in the compat header using its long-stable canonical definition (a thin wrapper around zend_ini_long) rather than force-including the real php_ini.h out of order, since that header expects php.h's types to already be visible. --- php-install.sh | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/php-install.sh b/php-install.sh index 3db10ad..eed7144 100644 --- a/php-install.sh +++ b/php-install.sh @@ -17,13 +17,19 @@ case $PHP_VERSION in # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool # PHP 8.6 dropped a handful of compatibility macros/functions extensions - # still rely on. XtOffsetOf (-> offsetof) broke ext-ds the same way it - # already broke igbinary/imagick; zval_dtor (-> zval_ptr_dtor_nogc, same - # rename already used for igbinary) broke rdkafka the same way it already - # broke igbinary; EMPTY_SWITCH_DEFAULT_CASE() (used to mark a switch's - # default case unreachable) broke apcu. Defining it away entirely just - # drops that defensive default case, which is harmless since the switches - # using it already enumerate every real case explicitly. + # still rely on, and reorganized headers so some macros that used to be + # transitively visible no longer are. XtOffsetOf (-> offsetof) broke + # ext-ds the same way it already broke igbinary/imagick; zval_dtor + # (-> zval_ptr_dtor_nogc, same rename already used for igbinary) broke + # rdkafka the same way it already broke igbinary; EMPTY_SWITCH_DEFAULT_CASE() + # (used to mark a switch's default case unreachable) broke apcu - defining + # it away entirely just drops that defensive default case, which is + # harmless since the switches using it already enumerate every real case + # explicitly; INI_INT (a convenience macro around zend_ini_long, its + # definition hasn't changed in years) broke ext-decimal because whatever + # header used to pull it in transitively no longer does - define it + # ourselves rather than -include the real php_ini.h out of order, since + # php_ini.h expects things from php.h to already be included first. # # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its -D definition, # but CFLAGS gets read by two different mechanisms in the same build: @@ -32,12 +38,16 @@ case $PHP_VERSION in # compiler sanity check expands $CFLAGS as a plain shell variable inside # eval (quoting does NOT survive - the literal quote characters reach # cc and break "checking whether the C compiler works"). A quoted -D - # value can't satisfy both, so put the macro in a real header instead - # and pull it in everywhere via -include, which is just a plain path. + # value can't satisfy both, so put macros needing special characters in + # a real header instead and pull it in everywhere via -include, which is + # just a plain path. cat > /root/php86-pie-compat.h <<'EOC' #ifndef EMPTY_SWITCH_DEFAULT_CASE #define EMPTY_SWITCH_DEFAULT_CASE() #endif +#ifndef INI_INT +#define INI_INT(name) ((zend_long) zend_ini_long((name), sizeof(name)-1, 0)) +#endif EOC # Apply all three shims for every extension built on 8.6 for the rest of # this script, instead of waiting for each one to fail in turn. From ab3f28e67d8983368aad173f415118bac0f5f2f5 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 17:55:17 +0000 Subject: [PATCH 12/17] Define ZEND_PARSE_PARAMS_THROW as 0 for PHP 8.6 ext-decimal fails next with "'ZEND_PARSE_PARAMS_THROW' undeclared" (compiler suggests ZEND_PARSE_PARAMS_QUIET, which is not equivalent). Parameter parsing throws a TypeError by default since PHP 8.0 regardless of flags, so this flag became a redundant no-op and was dropped. Defining it as 0 in the compat header preserves the intended behavior either way. --- php-install.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/php-install.sh b/php-install.sh index eed7144..1259acc 100644 --- a/php-install.sh +++ b/php-install.sh @@ -29,7 +29,12 @@ case $PHP_VERSION in # definition hasn't changed in years) broke ext-decimal because whatever # header used to pull it in transitively no longer does - define it # ourselves rather than -include the real php_ini.h out of order, since - # php_ini.h expects things from php.h to already be included first. + # php_ini.h expects things from php.h to already be included first; + # ZEND_PARSE_PARAMS_THROW (a flag to zend_parse_parameters_ex requesting + # a thrown TypeError on bad arguments) also broke ext-decimal - parameter + # parsing throws by default since PHP 8.0 regardless of flags, so the + # flag became redundant and was dropped; defining it as 0 preserves the + # intended behavior either way. # # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its -D definition, # but CFLAGS gets read by two different mechanisms in the same build: @@ -48,8 +53,11 @@ case $PHP_VERSION in #ifndef INI_INT #define INI_INT(name) ((zend_long) zend_ini_long((name), sizeof(name)-1, 0)) #endif +#ifndef ZEND_PARSE_PARAMS_THROW +#define ZEND_PARSE_PARAMS_THROW 0 +#endif EOC - # Apply all three shims for every extension built on 8.6 for the rest of + # Apply all these shims for every extension built on 8.6 for the rest of # this script, instead of waiting for each one to fail in turn. export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc -include /root/php86-pie-compat.h" ;; From d3ca7a8e2b566365e7ad2d56428f7fc6402e4281 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 18:00:27 +0000 Subject: [PATCH 13/17] Add INI_STR and INI_FLT to the compat header for PHP 8.6 php-amqp fails compiling with "implicit declaration of function 'INI_STR'" and 'INI_FLT' - the same transitively-missing-header issue already fixed for INI_INT. Add both using their long-stable canonical definitions. The various "makes pointer from integer without a cast" errors also seen in this build trace back to the same root cause (the compiler assumed implicit-int return types for the undeclared functions) and should clear once these are declared correctly. Also consolidated the growing per-fix prose into a compact per-macro list before it got harder to maintain than the shims themselves. --- php-install.sh | 65 ++++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/php-install.sh b/php-install.sh index 1259acc..06e7b11 100644 --- a/php-install.sh +++ b/php-install.sh @@ -16,36 +16,37 @@ case $PHP_VERSION in # and libtoolize/glibtoolize (from the libtool package) isn't part of # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool - # PHP 8.6 dropped a handful of compatibility macros/functions extensions - # still rely on, and reorganized headers so some macros that used to be - # transitively visible no longer are. XtOffsetOf (-> offsetof) broke - # ext-ds the same way it already broke igbinary/imagick; zval_dtor - # (-> zval_ptr_dtor_nogc, same rename already used for igbinary) broke - # rdkafka the same way it already broke igbinary; EMPTY_SWITCH_DEFAULT_CASE() - # (used to mark a switch's default case unreachable) broke apcu - defining - # it away entirely just drops that defensive default case, which is - # harmless since the switches using it already enumerate every real case - # explicitly; INI_INT (a convenience macro around zend_ini_long, its - # definition hasn't changed in years) broke ext-decimal because whatever - # header used to pull it in transitively no longer does - define it - # ourselves rather than -include the real php_ini.h out of order, since - # php_ini.h expects things from php.h to already be included first; - # ZEND_PARSE_PARAMS_THROW (a flag to zend_parse_parameters_ex requesting - # a thrown TypeError on bad arguments) also broke ext-decimal - parameter - # parsing throws by default since PHP 8.0 regardless of flags, so the - # flag became redundant and was dropped; defining it as 0 preserves the - # intended behavior either way. + # PHP 8.6 dropped or hid behind reorganized headers a handful of + # compatibility macros/functions that extensions still rely on. Each was + # found by building a pie-installed (or git-cloned) extension on 8.6 and + # reading the compile error - see git history for exactly which extension + # surfaced which one. Fixes: + # XtOffsetOf -> offsetof (plain rename) + # zval_dtor -> zval_ptr_dtor_nogc (plain rename) + # EMPTY_SWITCH_DEFAULT_CASE() -> nothing (just marked a switch's default + # case unreachable; dropping it is + # harmless since real cases are already + # enumerated explicitly) + # INI_INT/INI_STR/INI_FLT -> their long-stable canonical definitions + # (thin wrappers around zend_ini_long/ + # zend_ini_string/zend_ini_double), since + # whatever header used to make them + # transitively visible no longer does + # ZEND_PARSE_PARAMS_THROW -> 0 (parameter parsing throws a TypeError + # by default since PHP 8.0 regardless of + # flags, so this flag became a redundant + # no-op and was dropped) # - # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its -D definition, - # but CFLAGS gets read by two different mechanisms in the same build: - # Make expands $(CFLAGS) textually and then reparses the whole recipe - # line in a fresh shell (quoting survives), while autoconf's own - # compiler sanity check expands $CFLAGS as a plain shell variable inside - # eval (quoting does NOT survive - the literal quote characters reach - # cc and break "checking whether the C compiler works"). A quoted -D - # value can't satisfy both, so put macros needing special characters in - # a real header instead and pull it in everywhere via -include, which is - # just a plain path. + # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its definition, but + # CFLAGS gets read by two different mechanisms in the same build: Make + # expands $(CFLAGS) textually and then reparses the whole recipe line in + # a fresh shell (quoting survives), while autoconf's own compiler sanity + # check expands $CFLAGS as a plain shell variable inside eval (quoting + # does NOT survive - the literal quote characters reach cc and break + # "checking whether the C compiler works"). A quoted -D value can't + # satisfy both, so anything needing special characters goes in a real + # header instead, pulled in everywhere via -include (just a plain path, + # immune to the inconsistency), while plain renames stay as -D flags. cat > /root/php86-pie-compat.h <<'EOC' #ifndef EMPTY_SWITCH_DEFAULT_CASE #define EMPTY_SWITCH_DEFAULT_CASE() @@ -53,6 +54,12 @@ case $PHP_VERSION in #ifndef INI_INT #define INI_INT(name) ((zend_long) zend_ini_long((name), sizeof(name)-1, 0)) #endif +#ifndef INI_STR +#define INI_STR(name) zend_ini_string((name), sizeof(name)-1, 0) +#endif +#ifndef INI_FLT +#define INI_FLT(name) zend_ini_double((name), sizeof(name)-1, 0) +#endif #ifndef ZEND_PARSE_PARAMS_THROW #define ZEND_PARSE_PARAMS_THROW 0 #endif From 9585ec139ee482dae1e3a69d875f4719a6f9ae69 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 18:32:49 +0000 Subject: [PATCH 14/17] Skip memcached on PHP 8.6 instead of attempting pie install php-memcached fails compiling with "passing argument ... from incompatible pointer type": save_path is a zend_string* per PHP's PS_OPEN_FUNC, but the extension's session code still calls strstr()/ memcached_servers_parse() on it as if it were a char*. That's a real source-level type mismatch, not a missing macro or header - not something a CFLAGS shim can fix, and this session has no way to inspect php-memcached's actual source to patch it properly. Skip it for 8.6 the same way it's already skipped for 8.5, rather than guessing at a source-level fix blind. --- php-install.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/php-install.sh b/php-install.sh index 06e7b11..6fa3ae4 100644 --- a/php-install.sh +++ b/php-install.sh @@ -236,12 +236,15 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*) + 8.5*|8.6*) + # php-memcached's latest stable release still treats the session save + # handler's save_path as a plain char*, but PHP's PS_OPEN_FUNC passes a + # zend_string* - a real type mismatch pie can't shim away with CFLAGS, + # unlike the macro/header issues elsewhere in this script. Skip it here + # the same way it's skipped for 8.5, instead of guessing at a source fix + # blind. echo "Skipping memcached for PHP $PHP_VERSION" ;; - 8.6*) - pie install -vvv php-memcached/php-memcached - ;; *) echo "" | pecl install memcached docker-php-ext-enable memcached From 64300c733ac6bd40ce0509d9b2a8ff941d198c0d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 19:18:12 +0000 Subject: [PATCH 15/17] Collapse duplicated 8.5/8.6 mailparse and redis blocks These became byte-for-byte identical once mailparse and redis were reverted from pie back to the git-clone approach, but were left as separate case branches. Merge them back into 8.5*|8.6*) like the rest of the script - no behavior change, just removes leftover duplication. --- php-install.sh | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/php-install.sh b/php-install.sh index 6fa3ae4..eaf58f7 100644 --- a/php-install.sh +++ b/php-install.sh @@ -161,17 +161,7 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*) - # Yknow if we really need it. - php -m | grep -q '^mailparse$' || \ - (git clone --depth=1 https://github.com/php/pecl-mail-mailparse.git /usr/src/mailparse; \ - cd /usr/src/mailparse; \ - phpize && ./configure && make -j"$(nproc)" && make install; \ - echo "extension=mailparse.so" > /usr/local/etc/php/conf.d/mailparse.ini; \ - cd -; \ - rm -rf /usr/src/mailparse) - ;; - 8.6*) + 8.5*|8.6*) # Yknow if we really need it. php -m | grep -q '^mailparse$' || \ (git clone --depth=1 https://github.com/php/pecl-mail-mailparse.git /usr/src/mailparse; \ @@ -273,16 +263,7 @@ case $PHP_VERSION in esac case $PHP_VERSION in - 8.5*) - php -m | grep -q '^redis$' || \ - (git clone --depth=1 https://github.com/phpredis/phpredis.git /usr/src/phpredis; \ - cd /usr/src/phpredis; \ - phpize && ./configure && make -j"$(nproc)" && make install; \ - echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini; \ - cd -; \ - rm -rf /usr/src/phpredis) - ;; - 8.6*) + 8.5*|8.6*) php -m | grep -q '^redis$' || \ (git clone --depth=1 https://github.com/phpredis/phpredis.git /usr/src/phpredis; \ cd /usr/src/phpredis; \ From 97220fb2c2b401aae3eee92bf2ee8ea752869e3a Mon Sep 17 00:00:00 2001 From: Eirik Stanghelle Morland Date: Tue, 7 Jul 2026 21:33:46 +0200 Subject: [PATCH 16/17] Update php-install.sh --- php-install.sh | 48 ++---------------------------------------------- 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/php-install.sh b/php-install.sh index eaf58f7..bbd77d1 100644 --- a/php-install.sh +++ b/php-install.sh @@ -8,45 +8,9 @@ case $PHP_VERSION in echo "Installing pie in place of pecl (pecl is not available yet for this alpha release)" curl -fsSL -o /usr/local/bin/pie https://github.com/php/pie/releases/latest/download/pie.phar chmod +x /usr/local/bin/pie - # pie.phar's bundled Box requirements checker doesn't know about 8.6 yet - # and refuses to run under it (the only php available to run pie here - # *is* the 8.6 build in progress), so skip that check. + # todo: Temp workaround for PHP 8.6. export BOX_REQUIREMENT_CHECKER=0 - # pie refuses to auto-install missing build tools in non-interactive mode - # and libtoolize/glibtoolize (from the libtool package) isn't part of - # $PHPIZE_DEPS, so make sure it's there before pie tries to build anything. apk add --no-cache libtool - # PHP 8.6 dropped or hid behind reorganized headers a handful of - # compatibility macros/functions that extensions still rely on. Each was - # found by building a pie-installed (or git-cloned) extension on 8.6 and - # reading the compile error - see git history for exactly which extension - # surfaced which one. Fixes: - # XtOffsetOf -> offsetof (plain rename) - # zval_dtor -> zval_ptr_dtor_nogc (plain rename) - # EMPTY_SWITCH_DEFAULT_CASE() -> nothing (just marked a switch's default - # case unreachable; dropping it is - # harmless since real cases are already - # enumerated explicitly) - # INI_INT/INI_STR/INI_FLT -> their long-stable canonical definitions - # (thin wrappers around zend_ini_long/ - # zend_ini_string/zend_ini_double), since - # whatever header used to make them - # transitively visible no longer does - # ZEND_PARSE_PARAMS_THROW -> 0 (parameter parsing throws a TypeError - # by default since PHP 8.0 regardless of - # flags, so this flag became a redundant - # no-op and was dropped) - # - # EMPTY_SWITCH_DEFAULT_CASE() needs parentheses in its definition, but - # CFLAGS gets read by two different mechanisms in the same build: Make - # expands $(CFLAGS) textually and then reparses the whole recipe line in - # a fresh shell (quoting survives), while autoconf's own compiler sanity - # check expands $CFLAGS as a plain shell variable inside eval (quoting - # does NOT survive - the literal quote characters reach cc and break - # "checking whether the C compiler works"). A quoted -D value can't - # satisfy both, so anything needing special characters goes in a real - # header instead, pulled in everywhere via -include (just a plain path, - # immune to the inconsistency), while plain renames stay as -D flags. cat > /root/php86-pie-compat.h <<'EOC' #ifndef EMPTY_SWITCH_DEFAULT_CASE #define EMPTY_SWITCH_DEFAULT_CASE() @@ -64,8 +28,6 @@ case $PHP_VERSION in #define ZEND_PARSE_PARAMS_THROW 0 #endif EOC - # Apply all these shims for every extension built on 8.6 for the rest of - # this script, instead of waiting for each one to fail in turn. export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc -include /root/php86-pie-compat.h" ;; *) @@ -127,7 +89,7 @@ case $PHP_VERSION in yes | pecl install ds-1.6.0 ;; 8.6*) - pie install -vvv php-ds/ext-ds + pie install php-ds/ext-ds ;; *) # If we really need it. @@ -227,12 +189,6 @@ esac case $PHP_VERSION in 8.5*|8.6*) - # php-memcached's latest stable release still treats the session save - # handler's save_path as a plain char*, but PHP's PS_OPEN_FUNC passes a - # zend_string* - a real type mismatch pie can't shim away with CFLAGS, - # unlike the macro/header issues elsewhere in this script. Skip it here - # the same way it's skipped for 8.5, instead of guessing at a source fix - # blind. echo "Skipping memcached for PHP $PHP_VERSION" ;; *) From bd6c87c608ca3e3fb8425b1545bf9a0fe1bd46bf Mon Sep 17 00:00:00 2001 From: Eirik Stanghelle Morland Date: Tue, 7 Jul 2026 21:36:00 +0200 Subject: [PATCH 17/17] Update php-install.sh --- php-install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/php-install.sh b/php-install.sh index bbd77d1..4d5e302 100644 --- a/php-install.sh +++ b/php-install.sh @@ -140,11 +140,11 @@ esac case $PHP_VERSION in 8.6*) - pie install -vvv apcu/apcu - pie install -vvv rdkafka/rdkafka - pie install -vvv pecl/yaml - pie install -vvv pecl/uuid - pie install -vvv msgpack/msgpack-php + pie install apcu/apcu + pie install rdkafka/rdkafka + pie install pecl/yaml + pie install pecl/uuid + pie install msgpack/msgpack-php ;; *) yes | pecl install apcu rdkafka yaml uuid msgpack @@ -159,7 +159,7 @@ case $PHP_VERSION in yes | pecl install decimal-1.5.3 ;; 8.6*) - pie install -vvv php-decimal/ext-decimal + pie install php-decimal/ext-decimal ;; *) yes | pecl install decimal @@ -171,7 +171,7 @@ case $PHP_VERSION in echo "" | pecl install amqp-1.11.0 ;; 8.6*) - pie install -vvv php-amqp/php-amqp + pie install php-amqp/php-amqp ;; *) echo "" | pecl install amqp