From 7ce97ab6ed5b19c11932161186fc4b38090a047c Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Fri, 18 Sep 2020 14:05:53 +0300 Subject: [PATCH] Support for using pickle as drop in for pecl on php 8 --- data/supported-extensions | 84 +++++++++++++++++++------------------- install-php-extensions | 33 ++++++++++++--- scripts/ci-test-extensions | 3 ++ 3 files changed, 73 insertions(+), 47 deletions(-) diff --git a/data/supported-extensions b/data/supported-extensions index fedce51..62e4c16 100644 --- a/data/supported-extensions +++ b/data/supported-extensions @@ -1,81 +1,81 @@ amqp 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -apcu 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -apcu_bc 7.0 7.1 7.2 7.3 7.4 -bcmath 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -bz2 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -calendar 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +apcu 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +apcu_bc 7.0 7.1 7.2 7.3 7.4 8.0 +bcmath 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +bz2 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +calendar 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 cmark 7.0 7.1 7.2 7.3 7.4 -dba 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +dba 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 decimal 7.0 7.1 7.2 7.3 7.4 -enchant 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -exif 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -ffi 7.4 +enchant 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +exif 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +ffi 7.4 8.0 gd 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -gettext 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +gettext 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 gmagick 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -gmp 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +gmp 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 grpc 5.5 5.6 7.0 7.1 7.2 7.3 7.4 http 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -igbinary 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +igbinary 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 imagick 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -imap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +imap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 interbase 5.5 5.6 7.0 7.1 7.2 7.3 -intl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -ldap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -mailparse 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +intl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +ldap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +mailparse 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 mcrypt 5.5 5.6 7.0 7.1 7.2 7.3 7.4 memcache 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -memcached 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +memcached 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 mongo 5.5 5.6 mongodb 5.5 5.6 7.0 7.1 7.2 7.3 7.4 msgpack 5.5 5.6 7.0 7.1 7.2 7.3 7.4 mssql 5.5 5.6 mysql 5.5 5.6 -mysqli 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +mysqli 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 oauth 5.5 5.6 7.0 7.1 7.2 7.3 7.4 odbc 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -opcache 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +opcache 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 opencensus 7.0 7.1 7.2 7.3 7.4 parallel 7.1 7.2 7.3 7.4 -pcntl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pcov 7.0 7.1 7.2 7.3 7.4 +pcntl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +pcov 7.0 7.1 7.2 7.3 7.4 8.0 pdo_dblib 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pdo_firebird 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pdo_mysql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pdo_odbc 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pdo_pgsql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +pdo_firebird 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +pdo_mysql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +pdo_odbc 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +pdo_pgsql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 pdo_sqlsrv 7.0 7.1 7.2 7.3 7.4 -pgsql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +pgsql 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 propro 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -protobuf 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -pspell 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +protobuf 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +pspell 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 pthreads 5.5 5.6 7.0 -raphf 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +raphf 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 rdkafka 5.5 5.6 7.0 7.1 7.2 7.3 7.4 recode 5.5 5.6 7.0 7.1 7.2 7.3 redis 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -shmop 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +shmop 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 snuffleupagus 7.0 7.1 7.2 7.3 7.4 -snmp 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -soap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -sockets 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -solr 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +snmp 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +soap 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +sockets 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +solr 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 sqlsrv 7.0 7.1 7.2 7.3 7.4 ssh2 5.5 5.6 7.0 7.1 7.2 7.3 7.4 sybase_ct 5.5 5.6 -sysvmsg 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -sysvsem 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -sysvshm 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +sysvmsg 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +sysvsem 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +sysvshm 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 tdlib 7.0 7.1 7.2 7.3 7.4 -tidy 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -timezonedb 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +tidy 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 +timezonedb 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 uopz 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -uuid 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +uuid 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 wddx 5.5 5.6 7.0 7.1 7.2 7.3 xdebug 5.5 5.6 7.0 7.1 7.2 7.3 7.4 xhprof 5.5 5.6 7.0 7.1 7.2 7.3 7.4 xmlrpc 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -xsl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +xsl 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 yaml 5.5 5.6 7.0 7.1 7.2 7.3 7.4 -zip 5.5 5.6 7.0 7.1 7.2 7.3 7.4 +zip 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 zookeeper 5.5 5.6 7.0 7.1 7.2 7.3 7.4 diff --git a/install-php-extensions b/install-php-extensions index 8da564e..3f128e2 100755 --- a/install-php-extensions +++ b/install-php-extensions @@ -1355,8 +1355,7 @@ installPECLModule() { if test "$1" != "$installPECLModule_actual"; then printf ' (installing version %s)\n' "$installPECLModule_actual" fi - pecl channel-update pecl.php.net || true - printf "$installPECLModule_stdin" | MAKE="make -j$(getCompilationProcessorCount $1)" pecl install "$installPECLModule_actual" + printf "$installPECLModule_stdin" | MAKE="make -j$(getCompilationProcessorCount $1)" $PECL_COMMAND "$installPECLModule_actual" fi case "$1" in apcu_bc) @@ -1377,6 +1376,27 @@ installPECLModule() { esac } +# Installs pickle to use instead of pecl +# and add the zip extension that it requires, making sure its installed first +installPickle() { + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do + if ! stringInList "$PHP_MODULE_TO_INSTALL" "$BUNDLED_MODULES"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + pecl channel-update pecl.php.net || true + PECL_COMMAND="pecl install" + return + fi + curl -L -f https://github.com/FriendsOfPHP/pickle/releases/latest/download/pickle.phar -o /tmp/pickle + chmod +x /tmp/pickle + if ! stringInList 'zip' "$(getPHPInstalledModules)"; then + PHP_MODULES_TO_INSTALL="zip $(removeStringFromList 'zip' "$PHP_MODULES_TO_INSTALL")" + fi + PECL_COMMAND="/tmp/pickle install --defaults" + return + fi + done +} + # Check if a string is in a list of space-separated string # # Arguments: @@ -1457,6 +1477,7 @@ cleanup() { docker-php-source delete rm -rf /tmp/pear rm -rf /tmp/src + rm -rf /tmp/pickle } resetIFS @@ -1465,7 +1486,7 @@ IPE_ERRFLAG_FILE="$(mktemp -p /tmp/src)" setDistro setPHPMajorMinor case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -1479,12 +1500,14 @@ fi sortModulesToInstall +docker-php-source extract +BUNDLED_MODULES="$(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | xargs -n1 dirname | xargs -n1 basename | xargs)" +installPickle + buildRequiredPackageLists $PHP_MODULES_TO_INSTALL if test -n "$PACKAGES_PERSISTENT$PACKAGES_VOLATILE"; then installRequiredPackages fi -docker-php-source extract -BUNDLED_MODULES="$(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | xargs -n1 dirname | xargs -n1 basename | xargs)" for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do if stringInList "$PHP_MODULE_TO_INSTALL" "$BUNDLED_MODULES"; then installBundledModule "$PHP_MODULE_TO_INSTALL" diff --git a/scripts/ci-test-extensions b/scripts/ci-test-extensions index 47ba0e6..01f0ebb 100755 --- a/scripts/ci-test-extensions +++ b/scripts/ci-test-extensions @@ -109,6 +109,9 @@ filterUnsupportedExensionsForDistro() { # the full docker image ID getDockerImageName() { case "$2" in + 8.0) + getDockerImageName_version="$2-rc" + ;; *) getDockerImageName_version="$2" ;;