diff --git a/.github/workflows/test-extensions.yml b/.github/workflows/test-extensions.yml index 06662fb..2533327 100644 --- a/.github/workflows/test-extensions.yml +++ b/.github/workflows/test-extensions.yml @@ -51,6 +51,7 @@ jobs: - alpine3.9 - alpine3.10 - alpine3.11 + - alpine3.12 - jessie - stretch - buster diff --git a/data/special-requirements b/data/special-requirements index 9b5a884..a7666b6 100644 --- a/data/special-requirements +++ b/data/special-requirements @@ -1,3 +1,4 @@ parallel zts pthreads zts tdlib !alpine3.7 !jessie +enchant !7.2-alpine3.12 !7.3-alpine3.12 !7.4-alpine3.12 diff --git a/data/supported-extensions b/data/supported-extensions index fedce51..0337d06 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 -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 +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 8.0 +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..35989bf 100755 --- a/install-php-extensions +++ b/install-php-extensions @@ -27,7 +27,9 @@ setDistro() { exit 1 fi DISTRO="$(cat /etc/os-release | grep -E ^ID= | cut -d = -f 2)" - DISTRO_VERSION="$(printf '%s@%s' $DISTRO $(cat /etc/os-release | grep -E ^VERSION_ID= | cut -d = -f 2 | cut -d '"' -f 2 | cut -d . -f 1,2))" + DISTRO_VERSION_NUMBER="$(cat /etc/os-release | grep -E ^VERSION_ID= | cut -d = -f 2 | cut -d '"' -f 2 | cut -d . -f 1,2)" + DISTRO_VERSION="$(printf '%s@%s' $DISTRO $DISTRO_VERSION_NUMBER)" + DISTRO_MAJMIN_VERSION="$(echo "$DISTRO_VERSION_NUMBER" | awk -F. '{print $1*100+$2}')" } # Set the PHP_MAJMIN_VERSION variable containing the PHP Major-Minor version as an integer value, in format MMmm (example: 506 for PHP 5.6.15) @@ -241,8 +243,13 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" ;; enchant@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent enchant" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile enchant-dev" + if test $DISTRO_MAJMIN_VERSION -ge 312; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent enchant2" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile enchant2-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent enchant" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile enchant-dev" + fi ;; enchant@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libenchant1c2a" @@ -1355,8 +1362,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 +1383,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 +1484,7 @@ cleanup() { docker-php-source delete rm -rf /tmp/pear rm -rf /tmp/src + rm -rf /tmp/pickle } resetIFS @@ -1465,7 +1493,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 +1507,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..a0d17cf 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" ;; @@ -154,6 +157,10 @@ getDockerImageName() { # Outputs: # the space-separated list of supported PHP versions getAllPHPVersionsForExtensions() { + if test -n "${PHP_VERSION_TO_TEST:-}"; then + echo "$PHP_VERSION_TO_TEST" + return + fi getAllPHPVersionsForExtensions_result='' IFS=' ' for getAllPHPVersionsForExtensions_extension in $1; do @@ -208,7 +215,22 @@ getAllPHPVersionsForExtension() { fi done done <"$CI_BUILD_DIR/data/supported-extensions" - printf '%s' "$getAllPHPVersionsForExtension_result" + + filterUnsupportedExensionsForDistro_reqs="$CI_BUILD_DIR/data/special-requirements" + if test -f "$filterUnsupportedExensionsForDistro_reqs"; then + getAllPHPVersionsForExtension_filtered_result='' + for getAllPHPVersionsForExtension_result_filter in $getAllPHPVersionsForExtension_result; do + if stringInList "!$getAllPHPVersionsForExtension_result_filter-$DOCKER_DISTRO" "$(cat "$filterUnsupportedExensionsForDistro_reqs" | grep -E "^$1[ \t]")"; then + printf 'Note: extension "%s" is not supported for distro "%s" using php "%s"\n' "$1" "$DOCKER_DISTRO" "$getAllPHPVersionsForExtension_result_filter" >/dev/stderr + else + getAllPHPVersionsForExtension_filtered_result="$getAllPHPVersionsForExtension_filtered_result $getAllPHPVersionsForExtension_result_filter" + fi + done + else + getAllPHPVersionsForExtension_filtered_result="$getAllPHPVersionsForExtension_result" + fi + + printf '%s' "${getAllPHPVersionsForExtension_filtered_result# }" } # Test extensions diff --git a/scripts/tests/gd.php b/scripts/tests/gd.php index f7b562b..e9406a0 100644 --- a/scripts/tests/gd.php +++ b/scripts/tests/gd.php @@ -55,7 +55,7 @@ try { $image2 = $loadFuntion($tempFile); unlink($tempFile); $tempFile = null; - if (!is_resource($image2) || imagesx($image2) !== $imageWidth || imagesy($image2) !== $imageHeight) { + if (!(is_resource($image2) || is_object($image2)) || imagesx($image2) !== $imageWidth || imagesy($image2) !== $imageHeight) { throw new Exception("{$loadFuntion}() failed"); } imagedestroy($image2);