From ba9bf2f7679632504b97c8b1bcb3d199f9b7e778 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Tue, 14 May 2024 14:18:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=20install-php-extens?= =?UTF-8?q?ions=20=E8=84=9A=E6=9C=AC=20(#1406)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 852 +++++++++++++++--- .../php/extensions/install-php-extensions | 335 +++++-- .../php/extensions/install-php-extensions | 335 +++++-- .../php/extensions/install-php-extensions | 335 +++++-- 11 files changed, 6539 insertions(+), 1282 deletions(-) diff --git a/apps/php5/5.4.45/build/php/extensions/install-php-extensions b/apps/php5/5.4.45/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php5/5.4.45/build/php/extensions/install-php-extensions +++ b/apps/php5/5.4.45/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php5/5.5.38/build/php/extensions/install-php-extensions b/apps/php5/5.5.38/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php5/5.5.38/build/php/extensions/install-php-extensions +++ b/apps/php5/5.5.38/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php5/5.6.40/build/php/extensions/install-php-extensions b/apps/php5/5.6.40/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php5/5.6.40/build/php/extensions/install-php-extensions +++ b/apps/php5/5.6.40/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php7/7.0.33/build/php/extensions/install-php-extensions b/apps/php7/7.0.33/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php7/7.0.33/build/php/extensions/install-php-extensions +++ b/apps/php7/7.0.33/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php7/7.1.33/build/php/extensions/install-php-extensions b/apps/php7/7.1.33/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php7/7.1.33/build/php/extensions/install-php-extensions +++ b/apps/php7/7.1.33/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php7/7.2.34/build/php/extensions/install-php-extensions b/apps/php7/7.2.34/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php7/7.2.34/build/php/extensions/install-php-extensions +++ b/apps/php7/7.2.34/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php7/7.3.33/build/php/extensions/install-php-extensions b/apps/php7/7.3.33/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php7/7.3.33/build/php/extensions/install-php-extensions +++ b/apps/php7/7.3.33/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php7/7.4.33/build/php/extensions/install-php-extensions b/apps/php7/7.4.33/build/php/extensions/install-php-extensions index 164c8d47..59a1ea8b 100644 --- a/apps/php7/7.4.33/build/php/extensions/install-php-extensions +++ b/apps/php7/7.4.33/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=2.1.28 +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,53 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ' | sed -r 's# *<#\n<#g' | grep '' | sed 's###g' | sed 's# ##g')" + case "$resolvePHPModuleVersion_afterCaret" in + ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" + ;; + *) + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" + ;; + esac + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" + # remove line endings, collapse spaces + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + # one line per release (eg 1.2.3stable) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed -r 's#$resolvePHPModuleVersion_wantedStability")" + fi + # remove everything's up to '' (included) + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" + # keep just the versions + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_afterCaret}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -422,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -650,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='libssl1.0' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -715,10 +744,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile cmake" ;; ddtrace@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libgcc" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile curl-dev" ;; ddtrace@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent curl" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-openssl-dev" ;; dba@alpine) @@ -732,8 +761,18 @@ buildRequiredPackageLists() { fi ;; decimal@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + if test $DISTRO_MAJMIN_VERSION -lt 1200; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmpdec[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmpdec-dev" + fi + ;; + ecma_intl@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev libidn-dev" + ;; + ecma_intl@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libicu[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev" ;; enchant@alpine) if test $DISTRO_MAJMIN_VERSION -ge 312; then @@ -780,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -817,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -910,6 +958,9 @@ buildRequiredPackageLists() { imagick@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent imagemagick libgomp" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile imagemagick-dev" + if [ $DISTRO_MAJMIN_VERSION -ge 319 ]; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ghostscript libheif libjxl libraw librsvg" + fi ;; imagick@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libmagickwand-6.q16-[0-9]+$ ^libmagickcore-6.q16-[0-9]+-extra$" @@ -1015,6 +1066,9 @@ buildRequiredPackageLists() { memcached@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libmemcachedutil2" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libmemcached-dev zlib1g-dev" + if test $DISTRO_MAJMIN_VERSION -ge 12; then + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + fi ;; mongo@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsasl $buildRequiredPackageLists_libssl" @@ -1026,10 +1080,18 @@ buildRequiredPackageLists() { mongodb@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent icu-libs $buildRequiredPackageLists_icuPersistent libsasl $buildRequiredPackageLists_libssl snappy" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile icu-dev cyrus-sasl-dev snappy-dev $buildRequiredPackageLists_libssldev zlib-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent zstd-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + fi ;; mongodb@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libsnappy[0-9]+(v[0-9]+)?$ ^libicu[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libicu-dev libsasl2-dev libsnappy-dev $buildRequiredPackageLists_libssldev zlib1g-dev" + if test $PHP_MAJMIN_VERSION -ge 704; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libzstd[0-9]*$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libzstd-dev" + fi ;; mosquitto@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent mosquitto-libs" @@ -1113,6 +1175,12 @@ buildRequiredPackageLists() { php_trie@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; + pkcs11@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent softhsm" + ;; + pkcs11@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libsofthsm2" + ;; pspell@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent aspell-libs $(expandASpellDictionaries)" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile aspell-dev" @@ -1148,6 +1216,10 @@ buildRequiredPackageLists() { ;; esac buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zstd-dev" + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lz4-dev" + fi fi ;; redis@debian) @@ -1165,13 +1237,23 @@ buildRequiredPackageLists() { ;; esac fi + if test $PHP_MAJMIN_VERSION -ge 702; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblz4-1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblz4-dev" + fi ;; relay@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lz4-libs zstd-libs" if test $DISTRO_MAJMIN_VERSION -ge 317; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssl1.1" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent $buildRequiredPackageLists_libssl" fi ;; + saxon@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_volatile unzip" + ;; + seasclick@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + ;; simdjson@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" ;; @@ -1232,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1298,23 +1383,38 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git cmake gperf zlib1g-dev $buildRequiredPackageLists_libssldev" ;; tensor@alpine) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack libexecinfo openblas" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev libexecinfo-dev openblas-dev" - if test $DISTRO_MAJMIN_VERSION -le 310; then - if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then - IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent openblas" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile lapack-dev openblas-dev" + if test $DISTRO_MAJMIN_VERSION -le 317; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent lapack" + if test $DISTRO_MAJMIN_VERSION -le 316; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libexecinfo" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libexecinfo-dev" + if test $DISTRO_MAJMIN_VERSION -le 310; then + if ! stringInList --force-overwrite "$IPE_APK_FLAGS"; then + IPE_APK_FLAGS="$IPE_APK_FLAGS --force-overwrite" + fi + fi fi + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapack" fi ;; tensor@debian) - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke libopenblas-base" + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liblapacke" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liblapack-dev libopenblas-dev liblapacke-dev" - if test $DISTRO_VERSION_NUMBER -ge 11; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" - elif test $DISTRO_VERSION_NUMBER -ge 10; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8" + if test $DISTRO_VERSION_NUMBER -le 9; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-6 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-6-dev" + elif test $DISTRO_VERSION_NUMBER -le 10; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-8 libopenblas-base" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-8-dev" + elif test $DISTRO_VERSION_NUMBER -le 11; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-10 libopenblas-base" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-10-dev" + else + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent gfortran-12 libopenblas0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libgfortran-12-dev" fi ;; tidy@alpine) @@ -1336,6 +1436,14 @@ buildRequiredPackageLists() { uuid@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile uuid-dev" ;; + uv@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv-dev" + ;; + uv@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libuv1" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libuv1-dev" + ;; vips@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent vips" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile vips-dev" @@ -1350,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1564,6 +1680,10 @@ expandInstalledSystemPackageName() { # Output: # The number of processor cores available getProcessorCount() { + if test -n "${IPE_PROCESSOR_COUNT:-}"; then + echo $IPE_PROCESSOR_COUNT + return + fi if command -v nproc >/dev/null 2>&1; then nproc else @@ -1616,6 +1736,9 @@ getModuleFullPath() { apcu_bc) getModuleFullPath_path="$PHP_EXTDIR/apc.so" ;; + seasclick) + getModuleFullPath_path="$PHP_EXTDIR/SeasClick.so" + ;; *) getModuleFullPath_path="$PHP_EXTDIR/$1.so" ;; @@ -1890,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -1937,27 +2060,36 @@ isMicrosoftSqlServerODBCInstalled() { } # Install the Microsoft SQL Server ODBC Driver +# see https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server installMicrosoftSqlServerODBC() { printf 'Installing the Microsoft SQL Server ODBC Driver\n' case "$DISTRO" in alpine) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17 rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.0.1.1-1_amd64.apk + case $(uname -m) in + aarch64 | arm64 | armv8) + installMicrosoftSqlServerODBC_arch=arm64 + ;; + *) + installMicrosoftSqlServerODBC_arch=amd64 + ;; + esac + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk ;; debian) - # https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17 printf -- '- installing the Microsoft APT key\n' - if test $DISTRO_VERSION_NUMBER -ge 11; then - # apt-key is deprecated + if test $DISTRO_VERSION_NUMBER -eq 11; then curl -sSLf -o /etc/apt/trusted.gpg.d/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc + elif test $DISTRO_VERSION_NUMBER -ge 12; then + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor --yes --output /usr/share/keyrings/microsoft-prod.gpg else + # apt-key is deprecated curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add - fi if ! test -f /etc/apt/sources.list.d/mssql-release.list; then @@ -1968,8 +2100,8 @@ installMicrosoftSqlServerODBC() { printf -- '- installing the APT package\n' if test $PHP_MAJMIN_VERSION -le 703; then DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql17 - elif test $DISTRO_VERSION_NUMBER -ge 9 && $DISTRO_VERSION_NUMBER -le 11; then - # On Debian 9 and 11 we have both msodbcsql17 and msodbcsql18: let's install just one + elif test $DISTRO_VERSION_NUMBER -ge 9 && test $DISTRO_VERSION_NUMBER -le 12; then + # On Debian 9 to 12 we have both msodbcsql17 and msodbcsql18: let's install just one DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS msodbcsql18 else DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS '^msodbcsql[0-9]+$' @@ -1984,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -1996,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2023,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2041,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2053,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2079,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2087,6 +2230,69 @@ installLibavif() { cd - >/dev/null } +# Install libmpdec +installLibMPDec() { + installLibMPDec_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" + cd -- "$installLibMPDec_src" + ./configure --disable-cxx + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2203,6 +2409,56 @@ installSourceGuardian() { exit 1 } +# Install Cargo (if not yet installed) +installCargo() { + if command -v cargo >/dev/null; then + return + fi + printf '# Installing cargo\n' + case "$DISTRO" in + alpine) + # see https://github.com/hyperledger/indy-vdr/issues/69#issuecomment-998104850 + export RUSTFLAGS='-C target-feature=-crt-static' + ;; + esac + curl https://sh.rustup.rs -sSf | sh -s -- -y -q + . "$HOME/.cargo/env" + if test -z "${IPE_UNINSTALL_CARGO:-}"; then + IPE_UNINSTALL_CARGO=y + fi +} + +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2285,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2437,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2490,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2505,6 +2774,8 @@ installRemoteModule() { installRemoteModule_version=1.9.3 elif test $PHP_MAJMIN_VERSION -le 505; then installRemoteModule_version=1.9.4 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.11.0 fi fi ;; @@ -2581,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2611,29 +2882,43 @@ installRemoteModule() { if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) case "$DISTRO" in alpine) if ! test -f /usr/local/lib/libmpdec.so; then - installRemoteModule_src="$(getPackageSource https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz)" - cd -- "$installRemoteModule_src" - ./configure --disable-cxx - make -j$(getProcessorCount) - make install - cd - >/dev/null + installLibMPDec + fi + ;; + debian) + if test $DISTRO_MAJMIN_VERSION -ge 1200; then + if test -z "$(ldconfig -p | grep -E '\slibmpdec.so\s')"; then + installLibMPDec + fi fi ;; esac ;; ds) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 702; then + if test $PHP_MAJMIN_VERSION -lt 703; then installRemoteModule_version=1.3.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=1.4.0 fi fi ;; + ecma_intl) + if test -z "$installRemoteModule_version"; then + installRemoteModule_version=alpha + fi + ;; event) installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 2.4.0) -ge 0; then @@ -2706,7 +2991,7 @@ installRemoteModule() { case "$DISTRO" in alpine) if ! test -e /usr/local/include/libgearman/gearman.h || ! test -e /usr/local/lib/libgearman.so; then - installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.20/gearmand-1.1.20.tar.gz)" + installRemoteModule_src="$(getPackageSource https://github.com/gearman/gearmand/releases/download/1.1.21/gearmand-1.1.21.tar.gz)" cd -- "$installRemoteModule_src" ./configure make -j$(getProcessorCount) install-binPROGRAMS @@ -2724,7 +3009,7 @@ installRemoteModule() { geos) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=71b5f9001512e16d3cf4657b517e8a051d6ef36f + installRemoteModule_version=0def35611f773c951432f1f06a155471a5cb7611 fi installRemoteModule_src="$(getPackageSource https://git.osgeo.org/gitea/geos/php-geos/archive/$installRemoteModule_version.tar.gz)" cd "$installRemoteModule_src" @@ -2768,10 +3053,6 @@ installRemoteModule() { esac fi fi - if test -z "$installRemoteModule_version"; then - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=1.55.0 - fi if test -z "$installRemoteModule_version" || test "$installRemoteModule_version" = 1.35.0; then case "$DISTRO_VERSION" in alpine@3.13) @@ -2807,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2847,6 +3134,13 @@ installRemoteModule() { fi fi ;; + jsonpath) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=1.0.1 + fi + fi + ;; luasandbox) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 702; then @@ -2971,8 +3265,34 @@ installRemoteModule() { installRemoteModule_version=1.9.2 elif test $PHP_MAJMIN_VERSION -le 701; then installRemoteModule_version=1.11.1 + elif test $PHP_MAJMIN_VERSION -le 703; then + installRemoteModule_version=1.16.2 fi fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 1.17.0) -ge 0; then + # Enable developer flags? (yes/no) + addConfigureOption enable-mongodb-developer-flags no + # Enable code coverage? (yes/no) + addConfigureOption enable-mongodb-coverage no + # Use system libraries for libbson, libmongoc, and libmongocrypt? (yes/no) + addConfigureOption with-mongodb-system-libs no + # Enable client-side encryption? (auto/yes/no) + addConfigureOption with-mongodb-client-side-encryption yes + # Enable Snappy for compression? (auto/yes/no) + addConfigureOption with-mongodb-snappy yes + # Enable zlib for compression? (auto/system/bundled/no) + addConfigureOption with-mongodb-zlib yes + # Enable zstd for compression? (auto/yes/no) + addConfigureOption with-mongodb-zstd yes + # Enable SASL for Kerberos authentication? (auto/cyrus/no) + addConfigureOption with-mongodb-sasl yes + # Enable crypto and TLS? (auto/openssl/libressl/darwin/no) + addConfigureOption with-mongodb-ssl yes + # Use system crypto profile (OpenSSL only)? (yes/no) + addConfigureOption enable-mongodb-crypto-system-profile yes + # Use bundled or system utf8proc for SCRAM-SHA-256 SASLprep? (bundled/system) + addConfigureOption with-mongodb-utf8proc bundled + fi ;; mosquitto) if test -z "$installRemoteModule_version"; then @@ -2986,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -2993,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3002,6 +3334,8 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 704; then installRemoteModule_version=4.10.0 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=22.0.0 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3013,33 +3347,88 @@ installRemoteModule() { installRemoteModule_sockets=no fi installRemoteModule_openssl=yes - # enable sockets supports? - addConfigureOption enable-sockets $installRemoteModule_sockets - # enable openssl support? - addConfigureOption enable-openssl $installRemoteModule_openssl - # enable http2 support? - addConfigureOption enable-http2 yes - # enable mysqlnd support? - addConfigureOption enable-mysqlnd yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '22.8.0') -ge 0; then - #enable hook curl support? + if test -n "$installRemoteModule_version" && test $(compareVersions "$installRemoteModule_version" 22.1.2) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.1) -ge 0; then + # enable c-ares support? + addConfigureOption enable-cares yes + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.1.0) -ge 0; then + # enable coroutine sockets? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 protocol? + addConfigureOption enable-http2 yes + # enable coroutine mysqlnd? + addConfigureOption enable-mysqlnd yes + # enable coroutine curl? + addConfigureOption enable-hook-curl yes + # enable coroutine postgres? + addConfigureOption with-postgres yes + elif test $(compareVersions "$installRemoteModule_version" 22.0.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable hook curl support? addConfigureOption enable-hook-curl yes # enable postgres support? addConfigureOption with-postgres yes - else + elif test $(compareVersions "$installRemoteModule_version" 4.8.0) -ge 0; then + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes + # enable json support? + addConfigureOption enable-swoole-json yes + # enable curl support? + addConfigureOption enable-swoole-curl yes + # enable postgres support? + addConfigureOption with-postgres yes + else + # enable sockets supports? + addConfigureOption enable-sockets $installRemoteModule_sockets + # enable openssl support? + addConfigureOption enable-openssl $installRemoteModule_openssl + # enable http2 support? + addConfigureOption enable-http2 yes + # enable mysqlnd support? + addConfigureOption enable-mysqlnd yes # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? addConfigureOption enable-swoole-curl yes - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '4.8.0') -ge 0; then - # enable postgres support? - addConfigureOption with-postgres yes - fi - fi - ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta fi ;; parallel) @@ -3092,11 +3481,12 @@ installRemoteModule() { ;; protobuf) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=3.12.4 - else - # See https://github.com/protocolbuffers/protobuf/issues/10619 - installRemoteModule_version=3.23.2 + elif test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3154,19 +3544,21 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then installRemoteModule_version=4.3.0 + elif test $PHP_MAJMIN_VERSION -le 701; then + installRemoteModule_version=5.3.7 fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" fi # Enable igbinary serializer support? if php --ri igbinary >/dev/null 2>/dev/null; then - addConfigureOption 'enable-redis-igbinary' 'yes' + addConfigureOption enable-redis-igbinary yes else - addConfigureOption 'enable-redis-igbinary' 'no' + addConfigureOption enable-redis-igbinary no fi # Enable lzf compression support? - addConfigureOption 'enable-redis-lzf' 'yes' - if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" '5.0.0') -ge 0; then + addConfigureOption enable-redis-lzf yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.0) -ge 0; then if ! test -e /usr/include/zstd.h || ! test -e /usr/lib/libzstd.so -o -e "/usr/lib/$TARGET_TRIPLET/libzstd.so"; then installRemoteModule_zstdVersion=1.4.4 installRemoteModule_zstdVersionMajor=$(echo $installRemoteModule_zstdVersion | cut -d. -f1) @@ -3182,7 +3574,19 @@ installRemoteModule() { cd - >/dev/null fi # Enable zstd compression support? - addConfigureOption 'enable-redis-zstd' 'yes' + addConfigureOption enable-redis-zstd yes + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 6.0.0) -ge 0; then + # Enable msgpack serializer support? + if php --ri msgpack >/dev/null 2>/dev/null; then + addConfigureOption enable-redis-msgpack yes + else + addConfigureOption enable-redis-msgpack no + fi + # Enable lz4 compression? + addConfigureOption enable-redis-lz4 yes + # Use system liblz4? + addConfigureOption with-liblz4 yes + fi fi ;; relay) @@ -3226,6 +3630,50 @@ installRemoteModule() { installRemoteModule_ini_extra="$(grep -vE '^[ \t]*extension[ \t]*=' $installRemoteModule_src/relay.ini)" installRemoteModule_manuallyInstalled=1 ;; + saxon) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' + else + installRemoteModule_version='12.3' + fi + fi + installRemoteModule_majorVersion="${installRemoteModule_version%%.*}" + if test "$installRemoteModule_majorVersion" -ge 12; then + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-aarch64-v${installRemoteModule_version}.zip + ;; + *) + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-linux-x86_64-v${installRemoteModule_version}.zip + ;; + esac + else + installRemoteModule_url=https://downloads.saxonica.com/SaxonC/EE/${installRemoteModule_majorVersion}/libsaxon-EEC-setup64-v${installRemoteModule_version}.zip + fi + installRemoteModule_dir="$(getPackageSource $installRemoteModule_url)" + if ! test -f /usr/lib/libsaxon-*.so; then + if test "$installRemoteModule_majorVersion" -ge 12; then + cp $installRemoteModule_dir/libs/nix/*.so /usr/lib/ + else + cp $installRemoteModule_dir/*.so /usr/lib/ + fi + ldconfig || true + fi + cd "$installRemoteModule_dir/Saxon.C.API" + phpize + ./configure --enable-saxon + make -j$(getProcessorCount) install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; + seasclick) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 506; then + installRemoteModule_version=0.1.0 + fi + fi + ;; snappy) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then @@ -3243,7 +3691,11 @@ installRemoteModule() { snuffleupagus) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=0.9.0 + if test $PHP_MAJMIN_VERSION -le 704; then + installRemoteModule_version=0.9.0 + else + installRemoteModule_version=0.10.0 + fi fi installRemoteModule_src="$(getPackageSource https://codeload.github.com/jvoisin/snuffleupagus/tar.gz/v$installRemoteModule_version)" cd "$installRemoteModule_src/src" @@ -3272,8 +3724,10 @@ installRemoteModule() { ;; solr) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then + if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=2.4.0 + elif test $PHP_MAJMIN_VERSION -lt 704; then + installRemoteModule_version=2.6.0 fi fi ;; @@ -3284,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.13 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3316,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3352,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3370,6 +3829,12 @@ installRemoteModule() { fi ;; esac + if test $PHP_MAJMIN_VERSION -eq 803; then + # see https://github.com/swoole/docker-swoole/issues/45 + installRemoteModule_curl=no + else + installRemoteModule_curl=yes + fi if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 5.0.1) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3378,7 +3843,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes # enable brotli support? @@ -3391,7 +3856,7 @@ installRemoteModule() { # enable mysqlnd support? addConfigureOption enable-mysqlnd yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.8.11) -ge 0; then @@ -3406,7 +3871,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl # enable cares support? addConfigureOption enable-cares yes elif test $(compareVersions "$installRemoteModule_version" 4.6.1) -ge 0; then @@ -3421,7 +3886,7 @@ installRemoteModule() { # enable json support? addConfigureOption enable-swoole-json yes # enable curl support? - addConfigureOption enable-swoole-curl yes + addConfigureOption enable-swoole-curl $installRemoteModule_curl elif test $(compareVersions "$installRemoteModule_version" 4.4.0) -ge 0; then # enable sockets supports? addConfigureOption enable-sockets $installRemoteModule_sockets @@ -3545,6 +4010,66 @@ installRemoteModule() { installRemoteModule_version=2.2.3 fi fi + case "$DISTRO" in + alpine) + if test $DISTRO_MAJMIN_VERSION -ge 315 && test $DISTRO_MAJMIN_VERSION -le 317; then + if test -e /usr/lib/liblapacke.so.3 && ! test -e /usr/lib/liblapacke.so; then + ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so + fi + fi + ;; + esac + ;; + tideways) + case "$DISTRO" in + alpine) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=alpine-arm64 + ;; + *) + installRemoteModule_architecture=alpine-x86_64 + ;; + esac + ;; + debian) + case $(uname -m) in + aarch64 | arm64 | armv8) + installRemoteModule_architecture=arm64 + ;; + *) + installRemoteModule_architecture=x86_64 + ;; + esac + ;; + esac + installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi + printf 'Downloading tideways from %s\n' "$installRemoteModule_url" + installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" + if test -d "$installRemoteModule_src/dist"; then + installRemoteModule_src="$installRemoteModule_src/dist" + fi + installRemoteModule_src="$installRemoteModule_src/tideways-php" + case "$DISTRO" in + alpine) + installRemoteModule_src="$installRemoteModule_src-alpine" + ;; + esac + installRemoteModule_src="$installRemoteModule_src-$PHP_MAJDOTMIN_VERSION" + if test $PHP_THREADSAFE -eq 1; then + installRemoteModule_src="$installRemoteModule_src-zts" + fi + installRemoteModule_src="$installRemoteModule_src.so" + if ! test -f "$installRemoteModule_src"; then + echo 'tideways does not support the current environment' >&2 + exit 1 + fi + mv "$installRemoteModule_src" $(getPHPExtensionsDir)/tideways.so + installRemoteModule_manuallyInstalled=1 ;; uopz) if test -z "$installRemoteModule_version"; then @@ -3571,6 +4096,51 @@ installRemoteModule() { fi fi ;; + uv) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 800; then + installRemoteModule_version=0.2.4 + else + installRemoteModule_version=beta + fi + fi + ;; + vld) + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -lt 700; then + installRemoteModule_version=0.14.0 + else + installRemoteModule_version=beta + fi + fi + ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -3751,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -3768,7 +4345,7 @@ moduleMayUsePecl() { @composer | @fix_letsencrypt) return 1 ;; - blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib) + blackfire | geos | ioncube_loader | snuffleupagus | sourceguardian | spx | tdlib | tideways) return 1 ;; esac @@ -4018,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) @@ -4038,6 +4615,10 @@ fixLetsEncrypt() { # Cleanup everything at the end of the execution cleanup() { + if test "${IPE_UNINSTALL_CARGO:-}" = y; then + . "$HOME/.cargo/env" + rustup self uninstall -y + fi if test -n "$UNNEEDED_PACKAGE_LINKS"; then printf '### REMOVING UNNEEDED PACKAGE LINKS ###\n' for cleanup_link in $UNNEEDED_PACKAGE_LINKS; do @@ -4046,25 +4627,27 @@ cleanup() { fi done fi - if test -n "$PACKAGES_VOLATILE"; then - printf '### REMOVING UNNEEDED PACKAGES ###\n' - case "$DISTRO" in - alpine) + case "$DISTRO" in + alpine) + if stringInList icu-libs "${PACKAGES_PERSISTENT_NEW:-}" && stringInList icu-data-en "${PACKAGES_PERSISTENT_NEW:-}"; then + apk del icu-data-en >/dev/null 2>&1 || true + fi + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' apk del --purge $PACKAGES_VOLATILE - ;; - debian) + fi + ;; + debian) + if test -n "$PACKAGES_VOLATILE"; then + printf '### REMOVING UNNEEDED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $PACKAGES_VOLATILE - ;; - esac - fi - if test -n "$PACKAGES_PREVIOUS"; then - case "$DISTRO" in - debian) + fi + if test -n "$PACKAGES_PREVIOUS"; then printf '### RESTORING PREVIOUSLY INSTALLED PACKAGES ###\n' DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends --no-upgrade $IPE_APTGET_INSTALLOPTIONS $PACKAGES_PREVIOUS - ;; - esac - fi + fi + ;; + esac docker-php-source delete rm -rf /tmp/src rm -rf /tmp/pickle @@ -4101,7 +4684,7 @@ esac setPHPVersionVariables setPHPPreinstalledModules case "$PHP_MAJMIN_VERSION" in - 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802) ;; + 505 | 506 | 700 | 701 | 702 | 703 | 704 | 800 | 801 | 802 | 803) ;; *) printf "### ERROR: Unsupported PHP version: %s.%s ###\n" $((PHP_MAJMIN_VERSION / 100)) $((PHP_MAJMIN_VERSION % 100)) ;; @@ -4137,6 +4720,7 @@ fi if test $USE_PICKLE -gt 1; then buildPickle fi + for PHP_MODULE_TO_INSTALL in $PHP_MODULES_TO_INSTALL; do case "$PHP_MODULE_TO_INSTALL" in @fix_letsencrypt) diff --git a/apps/php8/8.0.30/build/php/extensions/install-php-extensions b/apps/php8/8.0.30/build/php/extensions/install-php-extensions index 9980bc54..59a1ea8b 100644 --- a/apps/php8/8.0.30/build/php/extensions/install-php-extensions +++ b/apps/php8/8.0.30/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=master +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,74 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - case "$resolveWantedPHPModuleVersion_afterCaret" in + case "$resolvePHPModuleVersion_afterCaret" in ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) - resolveWantedPHPModuleVersion_wantedStability="${resolveWantedPHPModuleVersion_afterCaret##*@}" - resolveWantedPHPModuleVersion_wantedVersion="${resolveWantedPHPModuleVersion_afterCaret%@*}" + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" ;; *) - resolveWantedPHPModuleVersion_wantedStability='' - resolveWantedPHPModuleVersion_wantedVersion="$resolveWantedPHPModuleVersion_afterCaret" + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" ;; esac - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" # remove line endings, collapse spaces - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" # one line per release (eg 1.2.3stable) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed -r 's#$resolveWantedPHPModuleVersion_wantedStability")" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | grep "$resolvePHPModuleVersion_wantedStability")" fi # remove everything's up to '' (included) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed 's#^.*##')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" # keep just the versions - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | cut -d'<' -f1)" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -443,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -671,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='^libssl[0-9]+(\.[0-9]+)*$' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -811,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -848,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -1297,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1438,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1985,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -2039,7 +2067,7 @@ installMicrosoftSqlServerODBC() { alpine) rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else case $(uname -m) in aarch64 | arm64 | armv8) @@ -2049,7 +2077,7 @@ installMicrosoftSqlServerODBC() { installMicrosoftSqlServerODBC_arch=amd64 ;; esac - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.1.1-1_$installMicrosoftSqlServerODBC_arch.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk @@ -2088,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -2100,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2127,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2145,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2157,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2183,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2201,6 +2240,59 @@ installLibMPDec() { cd - >/dev/null } +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2336,6 +2428,37 @@ installCargo() { fi } +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2418,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2570,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2623,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2716,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2745,9 +2881,12 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 - else - installCargo fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) @@ -2949,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3161,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3168,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3274,11 +3431,6 @@ installRemoteModule() { addConfigureOption enable-swoole-curl yes fi ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta - fi - ;; parallel) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 701; then @@ -3333,6 +3485,8 @@ installRemoteModule() { installRemoteModule_version=3.12.4 elif test $PHP_MAJMIN_VERSION -lt 800; then installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3478,8 +3632,8 @@ installRemoteModule() { ;; saxon) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then - installRemoteModule_version='11.6' + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' else installRemoteModule_version='12.3' fi @@ -3506,9 +3660,7 @@ installRemoteModule() { fi ldconfig || true fi - set -x cd "$installRemoteModule_dir/Saxon.C.API" - exit phpize ./configure --enable-saxon make -j$(getProcessorCount) install @@ -3586,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.14 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3618,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3654,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3871,7 +4028,7 @@ installRemoteModule() { installRemoteModule_architecture=alpine-arm64 ;; *) - installRemoteModule_architecture=alpine + installRemoteModule_architecture=alpine-x86_64 ;; esac ;; @@ -3887,6 +4044,10 @@ installRemoteModule() { ;; esac installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi printf 'Downloading tideways from %s\n' "$installRemoteModule_url" installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" if test -d "$installRemoteModule_src/dist"; then @@ -3953,6 +4114,33 @@ installRemoteModule() { fi fi ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -4133,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -4400,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) diff --git a/apps/php8/8.1.27/build/php/extensions/install-php-extensions b/apps/php8/8.1.27/build/php/extensions/install-php-extensions index 9980bc54..59a1ea8b 100644 --- a/apps/php8/8.1.27/build/php/extensions/install-php-extensions +++ b/apps/php8/8.1.27/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=master +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,74 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - case "$resolveWantedPHPModuleVersion_afterCaret" in + case "$resolvePHPModuleVersion_afterCaret" in ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) - resolveWantedPHPModuleVersion_wantedStability="${resolveWantedPHPModuleVersion_afterCaret##*@}" - resolveWantedPHPModuleVersion_wantedVersion="${resolveWantedPHPModuleVersion_afterCaret%@*}" + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" ;; *) - resolveWantedPHPModuleVersion_wantedStability='' - resolveWantedPHPModuleVersion_wantedVersion="$resolveWantedPHPModuleVersion_afterCaret" + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" ;; esac - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" # remove line endings, collapse spaces - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" # one line per release (eg 1.2.3stable) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed -r 's#$resolveWantedPHPModuleVersion_wantedStability")" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | grep "$resolvePHPModuleVersion_wantedStability")" fi # remove everything's up to '' (included) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed 's#^.*##')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" # keep just the versions - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | cut -d'<' -f1)" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -443,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -671,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='^libssl[0-9]+(\.[0-9]+)*$' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -811,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -848,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -1297,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1438,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1985,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -2039,7 +2067,7 @@ installMicrosoftSqlServerODBC() { alpine) rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else case $(uname -m) in aarch64 | arm64 | armv8) @@ -2049,7 +2077,7 @@ installMicrosoftSqlServerODBC() { installMicrosoftSqlServerODBC_arch=amd64 ;; esac - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.1.1-1_$installMicrosoftSqlServerODBC_arch.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk @@ -2088,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -2100,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2127,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2145,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2157,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2183,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2201,6 +2240,59 @@ installLibMPDec() { cd - >/dev/null } +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2336,6 +2428,37 @@ installCargo() { fi } +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2418,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2570,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2623,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2716,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2745,9 +2881,12 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 - else - installCargo fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) @@ -2949,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3161,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3168,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3274,11 +3431,6 @@ installRemoteModule() { addConfigureOption enable-swoole-curl yes fi ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta - fi - ;; parallel) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 701; then @@ -3333,6 +3485,8 @@ installRemoteModule() { installRemoteModule_version=3.12.4 elif test $PHP_MAJMIN_VERSION -lt 800; then installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3478,8 +3632,8 @@ installRemoteModule() { ;; saxon) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then - installRemoteModule_version='11.6' + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' else installRemoteModule_version='12.3' fi @@ -3506,9 +3660,7 @@ installRemoteModule() { fi ldconfig || true fi - set -x cd "$installRemoteModule_dir/Saxon.C.API" - exit phpize ./configure --enable-saxon make -j$(getProcessorCount) install @@ -3586,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.14 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3618,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3654,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3871,7 +4028,7 @@ installRemoteModule() { installRemoteModule_architecture=alpine-arm64 ;; *) - installRemoteModule_architecture=alpine + installRemoteModule_architecture=alpine-x86_64 ;; esac ;; @@ -3887,6 +4044,10 @@ installRemoteModule() { ;; esac installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi printf 'Downloading tideways from %s\n' "$installRemoteModule_url" installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" if test -d "$installRemoteModule_src/dist"; then @@ -3953,6 +4114,33 @@ installRemoteModule() { fi fi ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -4133,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -4400,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *) diff --git a/apps/php8/8.2.15/build/php/extensions/install-php-extensions b/apps/php8/8.2.15/build/php/extensions/install-php-extensions index 9980bc54..59a1ea8b 100644 --- a/apps/php8/8.2.15/build/php/extensions/install-php-extensions +++ b/apps/php8/8.2.15/build/php/extensions/install-php-extensions @@ -21,7 +21,7 @@ if ! which docker-php-ext-configure >/dev/null || ! which docker-php-ext-enable exit 1 fi -IPE_VERSION=master +IPE_VERSION=2.2.14 StandWithUkraine() { if test -t 1 && ! grep -Eq '^VERSION=.*jessie' /etc/os-release; then @@ -357,74 +357,81 @@ getModuleSourceCodePath() { fi } -# Get the wanted PHP module version, resolving it if it starts with '^' +# Get the actual PHP module version, resolving it if it starts with '^' # # Arguments: -# $1: the name of the module to be normalized +# $1: the name of the module +# $2: the wanted version (optional, if omitted we'll use getWantedPHPModuleVersion) # # Output: # The version to be used -resolveWantedPHPModuleVersion() { - resolveWantedPHPModuleVersion_raw="$(getWantedPHPModuleVersion "$1")" - resolveWantedPHPModuleVersion_afterCaret="${resolveWantedPHPModuleVersion_raw#^}" - if test "$resolveWantedPHPModuleVersion_raw" = "$resolveWantedPHPModuleVersion_afterCaret"; then - printf '%s' "$resolveWantedPHPModuleVersion_raw" +resolvePHPModuleVersion() { + resolvePHPModuleVersion_module="$1" + if test $# -lt 2; then + resolvePHPModuleVersion_raw="$(getWantedPHPModuleVersion "$installRemoteModule_module")" + else + resolvePHPModuleVersion_raw="$2" + fi + resolvePHPModuleVersion_afterCaret="${resolvePHPModuleVersion_raw#^}" + if test "$resolvePHPModuleVersion_raw" = "$resolvePHPModuleVersion_afterCaret"; then + printf '%s' "$resolvePHPModuleVersion_raw" return fi - case "$resolveWantedPHPModuleVersion_afterCaret" in + case "$resolvePHPModuleVersion_afterCaret" in ?*@snapshot | ?*@devel | ?*@alpha | ?*@beta | ?*@stable) - resolveWantedPHPModuleVersion_wantedStability="${resolveWantedPHPModuleVersion_afterCaret##*@}" - resolveWantedPHPModuleVersion_wantedVersion="${resolveWantedPHPModuleVersion_afterCaret%@*}" + resolvePHPModuleVersion_wantedStability="${resolvePHPModuleVersion_afterCaret##*@}" + resolvePHPModuleVersion_wantedVersion="${resolvePHPModuleVersion_afterCaret%@*}" ;; *) - resolveWantedPHPModuleVersion_wantedStability='' - resolveWantedPHPModuleVersion_wantedVersion="$resolveWantedPHPModuleVersion_afterCaret" + resolvePHPModuleVersion_wantedStability='' + resolvePHPModuleVersion_wantedVersion="$resolvePHPModuleVersion_afterCaret" ;; esac - resolveWantedPHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$1/allreleases.xml")" + resolvePHPModuleVersion_peclModule="$(getPeclModuleName "$resolvePHPModuleVersion_module")" + resolvePHPModuleVersion_xml="$(curl -sSLf "http://pecl.php.net/rest/r/$resolvePHPModuleVersion_peclModule/allreleases.xml")" # remove line endings, collapse spaces - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_xml" | tr -s ' \t\r\n' ' ')" # one line per release (eg 1.2.3stable) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed -r 's#$resolveWantedPHPModuleVersion_wantedStability")" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | grep "$resolvePHPModuleVersion_wantedStability")" fi # remove everything's up to '' (included) - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | sed 's#^.*##')" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | sed 's#^.*##')" # keep just the versions - resolveWantedPHPModuleVersion_versions="$(printf '%s' "$resolveWantedPHPModuleVersion_versions" | cut -d'<' -f1)" + resolvePHPModuleVersion_versions="$(printf '%s' "$resolvePHPModuleVersion_versions" | cut -d'<' -f1)" resetIFS - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" != "${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion.}"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" != "${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion.}"; then # Example: looking for 1.0, found 1.0.1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi done - for resolveWantedPHPModuleVersion_version in $resolveWantedPHPModuleVersion_versions; do - resolveWantedPHPModuleVersion_suffix="${resolveWantedPHPModuleVersion_version#$resolveWantedPHPModuleVersion_wantedVersion}" - if test "$resolveWantedPHPModuleVersion_version" = "$resolveWantedPHPModuleVersion_suffix"; then + for resolvePHPModuleVersion_version in $resolvePHPModuleVersion_versions; do + resolvePHPModuleVersion_suffix="${resolvePHPModuleVersion_version#$resolvePHPModuleVersion_wantedVersion}" + if test "$resolvePHPModuleVersion_version" = "$resolvePHPModuleVersion_suffix"; then continue fi - if test -z "$resolveWantedPHPModuleVersion_suffix"; then + if test -z "$resolvePHPModuleVersion_suffix"; then # Example: looking for 1.0, found exactly it - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return fi - case "$resolveWantedPHPModuleVersion_suffix" in + case "$resolvePHPModuleVersion_suffix" in [0-9]) # Example: looking for 1.1, but this is 1.10 ;; *) # Example: looking for 1.1, this is 1.1rc1 - printf '%s' "$resolveWantedPHPModuleVersion_version" + printf '%s' "$resolvePHPModuleVersion_version" return ;; esac done - printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$1" "$resolveWantedPHPModuleVersion_raw" "$resolveWantedPHPModuleVersion_versions" >&2 + printf 'Unable to find a version of "%s" compatible with "%s"\nAvailable versions are:\n%s\n' "$resolvePHPModuleVersion_module" "$resolvePHPModuleVersion_raw" "$resolvePHPModuleVersion_versions" >&2 exit 1 } @@ -443,7 +450,8 @@ resolvePeclStabilityVersion() { return ;; esac - peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$1/$2.txt" + resolvePeclStabilityVersion_peclModule="$(getPeclModuleName "$1")" + peclStabilityFlagToVersion_url="http://pecl.php.net/rest/r/$resolvePeclStabilityVersion_peclModule/$2.txt" if ! peclStabilityFlagToVersion_result="$(curl -sSLf "$peclStabilityFlagToVersion_url")"; then peclStabilityFlagToVersion_result='' fi @@ -671,7 +679,7 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $PHPIZE_DEPS" fi if test -z "$(apk info 2>/dev/null | grep -E ^libssl)"; then - buildRequiredPackageLists_libssl='^libssl[0-9]+(\.[0-9]+)*$' + buildRequiredPackageLists_libssl="$(apk search | grep -E '^libssl[0-9]' | head -1 | cut -d- -f1)" elif test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libtls')" && test -z "$(apk info 2>/dev/null | grep -E '^libressl.*-libssl')" && test -z "$(apk info 2>/dev/null | grep -E '^libretls-')"; then buildRequiredPackageLists_libssl=$(apk search -q libressl*-libtls) else @@ -811,6 +819,12 @@ buildRequiredPackageLists() { ffi@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libffi-dev" ;; + ftp@alpine) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; + ftp@debian) + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile $buildRequiredPackageLists_libssldev" + ;; gd@alpine) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent freetype libjpeg-turbo libpng libxpm" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev" @@ -848,7 +862,10 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libwebp[0-9]+$" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libwebp-dev" if test $PHP_MAJMIN_VERSION -ge 801; then - if ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then + if test $DISTRO_VERSION_NUMBER -ge 12; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent ^libavif[0-9]+$ ^libaom[0-9]+$ ^libdav1d[0-9]+$" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libavif-dev libaom-dev libdav1d-dev" + elif ! isLibaomInstalled || ! isLibdav1dInstalled || ! isLibyuvInstalled || ! isLibavifInstalled; then case "${IPE_GD_WITHOUTAVIF:-}" in 1 | y* | Y*) ;; *) @@ -1297,6 +1314,9 @@ buildRequiredPackageLists() { buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls" buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev" ;; + sourceguardian@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent eudev-libs" + ;; spx@alpine) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile zlib-dev" ;; @@ -1438,6 +1458,14 @@ buildRequiredPackageLists() { wddx@debian) buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libxml2-dev" ;; + wikidiff2@alpine) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git" + ;; + wikidiff2@debian) + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libthai0" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile git libthai-dev" + ;; xdebug@alpine) if test $PHP_MAJMIN_VERSION -ge 800; then buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile linux-headers" @@ -1985,11 +2013,11 @@ installOracleInstantClient() { mv "$installOracleInstantClient_src" "$ORACLE_INSTANTCLIENT_LIBPATH" echo 'done.' fi - if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then + if ! test -e "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" && ! test -L "$ORACLE_INSTANTCLIENT_LIBPATH/sdk"; then printf 'Downloading Oracle Instant SDK v%s... ' "$installOracleInstantClient_version" installOracleInstantClient_src="$(getPackageSource $installOracleInstantClient_sdk)" ln -sf "$installOracleInstantClient_src/sdk" "$ORACLE_INSTANTCLIENT_LIBPATH/sdk" - UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS '$ORACLE_INSTANTCLIENT_LIBPATH/sdk'" + UNNEEDED_PACKAGE_LINKS="$UNNEEDED_PACKAGE_LINKS $ORACLE_INSTANTCLIENT_LIBPATH/sdk" echo 'done.' fi case "$DISTRO" in @@ -2039,7 +2067,7 @@ installMicrosoftSqlServerODBC() { alpine) rm -rf /tmp/src/msodbcsql.apk if test $PHP_MAJMIN_VERSION -le 703; then - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk else case $(uname -m) in aarch64 | arm64 | armv8) @@ -2049,7 +2077,7 @@ installMicrosoftSqlServerODBC() { installMicrosoftSqlServerODBC_arch=amd64 ;; esac - curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.1.1-1_$installMicrosoftSqlServerODBC_arch.apk + curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.3.1-1_$installMicrosoftSqlServerODBC_arch.apk fi printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk rm -rf /tmp/src/msodbcsql.apk @@ -2088,7 +2116,7 @@ installMicrosoftSqlServerODBC() { # 0 (true) # 1 (false) isLibaomInstalled() { - if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so; then + if ! test -f /usr/local/lib/libaom.so && ! test -f /usr/lib/libaom.so && ! test -f /usr/lib/x86_64*/libaom.so; then return 1 fi if ! test -f /usr/local/include/aom/aom_codec.h && ! test -f /usr/include/aom/aom_codec.h; then @@ -2100,7 +2128,18 @@ isLibaomInstalled() { # Install libaom installLibaom() { printf 'Installing libaom\n' - installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v3.3.0.tar.gz)" + installLibaom_version=3.8.1 + case "$DISTRO_VERSION" in + debian@10) + case $(uname -m) in + aarch* | arm*) + #see https://bugs.chromium.org/p/aomedia/issues/detail?id=3543 + installLibaom_version=3.5.0 + ;; + esac + ;; + esac + installLibaom_dir="$(getPackageSource https://aomedia.googlesource.com/aom/+archive/v$installLibaom_version.tar.gz)" mkdir -- "$installLibaom_dir/my.build" cd -- "$installLibaom_dir/my.build" cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCMAKE_INSTALL_LIBDIR:PATH=lib .. @@ -2127,7 +2166,7 @@ isLibdav1dInstalled() { # Install libdav1d installLibdav1d() { printf 'Installing libdav1d\n' - installLibdav1d_dir="$(getPackageSource https://code.videolan.org/videolan/dav1d/-/archive/0.9.2/dav1d-0.9.2.tar.gz)" + installLibdav1d_dir="$(getPackageSource https://github.com/videolan/dav1d/archive/refs/tags/1.3.0.tar.gz)" mkdir -- "$installLibdav1d_dir/build" cd -- "$installLibdav1d_dir/build" meson --buildtype release -Dprefix=/usr .. @@ -2145,7 +2184,7 @@ installLibdav1d() { # 0 (true) # 1 (false) isLibyuvInstalled() { - if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so; then + if ! test -f /usr/local/lib/libyuv.so && ! test -f /usr/lib/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so && ! test -f /usr/lib/x86_64*/libyuv.so.*; then return 1 fi if ! test -f /usr/local/include/libyuv.h && ! test -f /usr/include/libyuv.h; then @@ -2157,7 +2196,7 @@ isLibyuvInstalled() { # Install libyuv installLibyuv() { printf 'Installing libyuv\n' - installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/25d0a5110be796eef47004412baf43333d9ecf26.tar.gz)" + installLibyuv_dir="$(getPackageSource https://chromium.googlesource.com/libyuv/libyuv/+archive/d359a9f922af840b043535d43cf9d38b220d102e.tar.gz)" mkdir -- "$installLibyuv_dir/build" cd -- "$installLibyuv_dir/build" cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -B. .. @@ -2183,7 +2222,7 @@ isLibavifInstalled() { # Install libavif installLibavif() { printf 'Installing libavif\n' - installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v0.9.3)" + installLibavif_dir="$(getPackageSource https://codeload.github.com/AOMediaCodec/libavif/tar.gz/refs/tags/v1.0.3)" mkdir -- "$installLibavif_dir/build" cd -- "$installLibavif_dir/build" cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DAVIF_CODEC_AOM=ON -DCMAKE_INSTALL_LIBDIR:PATH=lib @@ -2201,6 +2240,59 @@ installLibMPDec() { cd - >/dev/null } +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibDatrieInstalled() { + if ! test -f /usr/local/lib/libdatrie.so && ! test -f /usr/lib/libdatrie.so && ! test -f /usr/lib/x86_64*/libdatrie.so; then + return 1 + fi + if ! test -f /usr/local/include/datrie/trie.h && ! test -f /usr/include/datrie/trie.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibDatrie() { + printf 'Installing libdatrie\n' + installLibDatrie_src="$(getPackageSource https://github.com/tlwg/libdatrie/releases/download/v0.2.13/libdatrie-0.2.13.tar.xz)" + cd -- "$installLibDatrie_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + +# Check if libdatrie is installed +# +# Return: +# 0 (true) +# 1 (false) +isLibThaiInstalled() { + return 1 + if ! test -f /usr/local/lib/libthai.so && ! test -f /usr/lib/libthai.so && ! test -f /usr/lib/x86_64*/libthai.so; then + return 1 + fi + if ! test -f /usr/local/include/thai/thailib.h && ! test -f /usr/include/thai/thailib.h; then + return 1 + fi + return 0 +} + +# Install libdatrie +installLibThai() { + printf 'Installing libthai\n' + installLibThai_src="$(getPackageSource https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz)" + cd -- "$installLibThai_src" + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null +} + # Install Composer installComposer() { installComposer_version="$(getWantedPHPModuleVersion @composer)" @@ -2336,6 +2428,37 @@ installCargo() { fi } +installNewRelic() { + printf '# Installing newrelic\n' + installNewRelic_search='\bnewrelic-php[0-9.]*-[0-9]+(\.[0-9]+)*-linux' + case "$DISTRO" in + alpine) + installNewRelic_search="$installNewRelic_search-musl" + ;; + esac + installNewRelic_file="$(curl -sSLf -o- https://download.newrelic.com/php_agent/release/ | sed -E 's/<[^>]*>//g' | grep -Eo "$installNewRelic_search.tar.gz" | sort | head -1)" + installNewRelic_url="https://download.newrelic.com/php_agent/release/$installNewRelic_file" + installNewRelic_src="$(getPackageSource "$installNewRelic_url")" + cd -- "$installNewRelic_src" + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install + case "${IPE_NEWRELIC_DAEMON:-}" in + 1 | y* | Y*) + NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 ./newrelic-install install_daemon + ;; + esac + cd - >/dev/null + cat </dev/null fi ;; + ftp) + docker-php-ext-configure ftp --with-openssl-dir=/usr + ;; gd) if test $PHP_MAJMIN_VERSION -le 506; then docker-php-ext-configure gd --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir --enable-gd-native-ttf --with-vpx-dir @@ -2418,6 +2544,11 @@ EOF installBundledModule_tmp=1 fi ;; + debian) + if test $DISTRO_VERSION_NUMBER -ge 12; then + installBundledModule_tmp=1 + fi + ;; esac if test $installBundledModule_tmp -eq 0; then case "${IPE_GD_WITHOUTAVIF:-}" in @@ -2570,13 +2701,18 @@ EOF esac ;; esac - php -r 'return;' >/dev/null 2>/dev/null || true - installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" - if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then - printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 - rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true - return 1 - fi + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + php -r 'return;' >/dev/null 2>/dev/null || true + installBundledModule_errAfter="$(php -r 'return;' 2>&1 || true)" + if test "$installBundledModule_errAfter" != "$installBundledModule_errBefore"; then + printf 'PHP has problems after installing the "%s" extension:\n%s\n' "$1" "$installBundledModule_errAfter" >&2 + rm "$PHP_INI_DIR/conf.d/docker-php-ext-$1.ini" || true + return 1 + fi + ;; + esac } # Fetch a tar.gz file, extract it and returns the path of the extracted folder. @@ -2623,7 +2759,7 @@ getPackageSource() { installRemoteModule() { installRemoteModule_module="$1" printf '### INSTALLING REMOTE MODULE %s ###\n' "$installRemoteModule_module" - installRemoteModule_version="$(resolveWantedPHPModuleVersion "$installRemoteModule_module")" + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module")" installRemoteModule_path="$(getModuleSourceCodePath "$installRemoteModule_module")" rm -rf "$CONFIGURE_FILE" installRemoteModule_manuallyInstalled=0 @@ -2716,7 +2852,7 @@ installRemoteModule() { if test $(compareVersions "$(cmake --version | head -n1 | sed -E 's/^.* //')" '3.7') -lt 0; then installRemoteModule_tmp=0.29.0 else - installRemoteModule_tmp=0.30.3 + installRemoteModule_tmp=0.31.0 fi cd "$(getPackageSource https://github.com/commonmark/cmark/archive/$installRemoteModule_tmp.tar.gz)" make -s -j$(getProcessorCount) cmake_build @@ -2745,9 +2881,12 @@ installRemoteModule() { if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -lt 700; then installRemoteModule_version=0.75.0 - else - installCargo fi + else + installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" + fi + if test -z "$installRemoteModule_version" || test $(compareVersions "$installRemoteModule_version" 0.75.0) -ge 0; then + installCargo fi ;; decimal) @@ -2949,6 +3088,12 @@ installRemoteModule() { fi fi ;; + imap) + # Include Kerberos Support + addConfigureOption with-kerberos yes + # Include SSL Support + addConfigureOption with-imap-ssl yes + ;; inotify) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3161,6 +3306,10 @@ installRemoteModule() { fi fi ;; + newrelic) + installNewRelic + installRemoteModule_manuallyInstalled=2 + ;; oauth) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 506; then @@ -3168,6 +3317,14 @@ installRemoteModule() { fi fi ;; + oci8 | pdo_oci) + installOracleInstantClient + if test "$installRemoteModule_module" = oci8; then + addConfigureOption with-oci8 "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + elif test "$installRemoteModule_module" = pdo_oci; then + addConfigureOption with-pdo-oci "instantclient,$ORACLE_INSTANTCLIENT_LIBPATH" + fi + ;; opencensus) if test -z "$installRemoteModule_version"; then installRemoteModule_version=alpha @@ -3274,11 +3431,6 @@ installRemoteModule() { addConfigureOption enable-swoole-curl yes fi ;; - opentelemetry) - if test -z "$installRemoteModule_version"; then - installRemoteModule_version=beta - fi - ;; parallel) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 701; then @@ -3333,6 +3485,8 @@ installRemoteModule() { installRemoteModule_version=3.12.4 elif test $PHP_MAJMIN_VERSION -lt 800; then installRemoteModule_version=3.24.4 + elif test $PHP_MAJMIN_VERSION -lt 801; then + installRemoteModule_version=3.25.3 fi fi ;; @@ -3478,8 +3632,8 @@ installRemoteModule() { ;; saxon) if test -z "$installRemoteModule_version"; then - if test $PHP_MAJMIN_VERSION -le 506; then - installRemoteModule_version='11.6' + if test $PHP_MAJMIN_VERSION -ge 800; then + installRemoteModule_version='12.4.2' else installRemoteModule_version='12.3' fi @@ -3506,9 +3660,7 @@ installRemoteModule() { fi ldconfig || true fi - set -x cd "$installRemoteModule_dir/Saxon.C.API" - exit phpize ./configure --enable-saxon make -j$(getProcessorCount) install @@ -3586,7 +3738,7 @@ installRemoteModule() { spx) if test -z "$installRemoteModule_path"; then if test -z "$installRemoteModule_version"; then - installRemoteModule_version=v0.4.14 + installRemoteModule_version=v0.4.15 fi if test "${installRemoteModule_version%.*}" = "$installRemoteModule_version"; then installRemoteModule_displayVersion="$installRemoteModule_version" @@ -3618,6 +3770,8 @@ installRemoteModule() { installRemoteModule_version=5.9.0 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=5.10.1 + elif test $PHP_MAJMIN_VERSION -le 800; then + installRemoteModule_version=5.11.1 fi fi ;; @@ -3654,6 +3808,9 @@ installRemoteModule() { installRemoteModule_version=4.5.10 elif test $PHP_MAJMIN_VERSION -le 704; then installRemoteModule_version=4.8.11 + elif test $PHP_BITS -eq 32; then + # See https://github.com/swoole/swoole-src/issues/5198#issuecomment-1820162178 + installRemoteModule_version="$(resolvePHPModuleVersion "$installRemoteModule_module" '^5.0')" fi else installRemoteModule_version="$(resolvePeclStabilityVersion "$installRemoteModule_module" "$installRemoteModule_version")" @@ -3871,7 +4028,7 @@ installRemoteModule() { installRemoteModule_architecture=alpine-arm64 ;; *) - installRemoteModule_architecture=alpine + installRemoteModule_architecture=alpine-x86_64 ;; esac ;; @@ -3887,6 +4044,10 @@ installRemoteModule() { ;; esac installRemoteModule_url="$(curl -sSLf -o - https://tideways.com/profiler/downloads | grep -Eo "\"[^\"]+/tideways-php-([0-9]+\.[0-9]+\.[0-9]+)-$installRemoteModule_architecture.tar.gz\"" | cut -d'"' -f2)" + if test -z "$installRemoteModule_url"; then + echo 'Failed to find the tideways tarball to be downloaded' + exit 1 + fi printf 'Downloading tideways from %s\n' "$installRemoteModule_url" installRemoteModule_src="$(getPackageSource $installRemoteModule_url)" if test -d "$installRemoteModule_src/dist"; then @@ -3953,6 +4114,33 @@ installRemoteModule() { fi fi ;; + wikidiff2) + case "$DISTRO" in + alpine) + if ! isLibDatrieInstalled; then + installLibDatrie + fi + if ! isLibThaiInstalled; then + installLibThai + fi + ;; + esac + if test -z "$installRemoteModule_version"; then + if test $PHP_MAJMIN_VERSION -le 702; then + installRemoteModule_version=1.13.0 + else + installRemoteModule_version="$(git -c versionsort.suffix=- ls-remote --tags --refs --quiet --exit-code --sort=version:refname https://github.com/wikimedia/mediawiki-php-wikidiff2.git 'refs/tags/*.*.*' | tail -1 | cut -d/ -f3)" + fi + fi + installRemoteModule_src="$(getPackageSource "https://codeload.github.com/wikimedia/mediawiki-php-wikidiff2/tar.gz/refs/tags/$installRemoteModule_version")" + cd -- "$installRemoteModule_src" + phpize + ./configure + make -j$(getProcessorCount) + make install + cd - >/dev/null + installRemoteModule_manuallyInstalled=1 + ;; xdebug) if test -z "$installRemoteModule_version"; then if test $PHP_MAJMIN_VERSION -le 500; then @@ -4133,8 +4321,15 @@ installRemoteModule() { installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags" "$installRemoteModule_path" fi postProcessModule "$installRemoteModule_module" - checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" - enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + if test $installRemoteModule_manuallyInstalled -lt 2; then + case "${IPE_SKIP_CHECK:-}" in + 1 | y* | Y*) ;; + *) + checkModuleWorking "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + ;; + esac + enablePhpExtension "$installRemoteModule_module" "$installRemoteModule_ini_basename" "$installRemoteModule_ini_extra" + fi } # Check if a module/helper may be installed using the pecl archive @@ -4400,7 +4595,7 @@ fixLetsEncrypt() { invokeAptGetUpdate fi printf -- '- installing newer ca-certificates package\n' - DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends $IPE_APTGET_INSTALLOPTIONS ca-certificates + DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends ${IPE_APTGET_INSTALLOPTIONS:-} ca-certificates fi ;; *)