Skip to content
72 changes: 54 additions & 18 deletions php-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,22 @@ apk add --no-cache --virtual .build-deps unixodbc-dev brotli-dev gmp-dev yaml-de
rabbitmq-c-dev mpdecimal-dev gettext-dev imagemagick-dev librdkafka-dev autoconf g++ make icu-dev libpng-dev libjpeg-turbo-dev postgresql-dev libxml2-dev bzip2-dev libmemcached-dev linux-headers pax-utils $PHPIZE_DEPS

case $PHP_VERSION in
8.6*)
echo "Installing pie in place of pecl (pecl is not available yet for this alpha release)"
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
echo "Installing pie in place of pecl for PHP $PHP_VERSION"
curl -fsSL -o /usr/local/bin/pie https://github.com/php/pie/releases/latest/download/pie.phar
chmod +x /usr/local/bin/pie
# todo: Temp workaround for PHP 8.6.
export BOX_REQUIREMENT_CHECKER=0
# libtool is a build dependency for several extensions pie compiles from source.
apk add --no-cache libtool
;;
*)
pecl channel-update pecl.php.net
;;
esac

case $PHP_VERSION in
8.6*)
# todo: Temp workaround for PHP 8.6 (pie's requirement checker doesn't recognize this alpha release yet).
export BOX_REQUIREMENT_CHECKER=0
cat > /root/php86-pie-compat.h <<'EOC'
#ifndef EMPTY_SWITCH_DEFAULT_CASE
#define EMPTY_SWITCH_DEFAULT_CASE()
Expand All @@ -32,9 +41,6 @@ case $PHP_VERSION in
EOC
export CFLAGS="${CFLAGS:-} -DXtOffsetOf=offsetof -Dzval_dtor=zval_ptr_dtor_nogc -include /root/php86-pie-compat.h"
;;
*)
pecl channel-update pecl.php.net
;;
esac

case $PHP_VERSION in
Expand All @@ -44,6 +50,9 @@ case $PHP_VERSION in
8.5*|8.6*)
echo "Skipping mongo db driver for PHP $PHP_VERSION"
;;
8.1*|8.2*|8.3*|8.4*)
pie install mongodb/mongodb-extension
;;
*)
echo "yes" | pecl install mongodb
;;
Expand All @@ -53,6 +62,9 @@ case $PHP_VERSION in
8.5*|8.6*)
echo "Skipping mongodb for PHP $PHP_VERSION"
;;
8.1*|8.2*|8.3*|8.4*)
echo "mongodb already enabled by pie for PHP $PHP_VERSION"
;;
*)
docker-php-ext-enable mongodb
;;
Expand All @@ -68,12 +80,14 @@ case $PHP_VERSION in
docker-php-ext-enable swoole
;;
8.1*)
echo "" | pecl install swoole-6.1.8
docker-php-ext-enable swoole
pie install swoole/swoole:6.1.8
;;
8.5*|8.6*)
echo "Skipping swoole for PHP $PHP_VERSION"
;;
8.2*|8.3*|8.4*)
pie install swoole/swoole
;;
*)
echo "" | pecl install swoole
docker-php-ext-enable swoole
Expand All @@ -82,9 +96,10 @@ esac

case $PHP_VERSION in
7.4|8.0|8.1)
# php-ds/ext-ds has no pie-installable release below PHP 8.2; keep pecl for 8.1.
yes | pecl install ds-1.6.0
;;
8.6*)
8.2*|8.3*|8.4*|8.5*|8.6*)
pie install php-ds/ext-ds
;;
*)
Expand Down Expand Up @@ -113,6 +128,11 @@ case $PHP_VERSION in
)
rm -rf /usr/src/igbinary
;;
8.2*|8.3*|8.4*)
# igbinary/igbinary has no stable-tagged release PIE can resolve; use the PIE-compatible mirror instead
# (pie-extensions/igbinary requires PHP >= 8.2, so 8.1 falls through to pecl below).
pie install pie-extensions/igbinary
;;
*)
yes | pecl install igbinary
;;
Expand All @@ -129,13 +149,16 @@ case $PHP_VERSION in
)
rm -rf /usr/src/mailparse
;;
8.1*|8.2*|8.3*|8.4*)
pie install pecl/mailparse
;;
*)
yes | pecl install mailparse
;;
esac

case $PHP_VERSION in
8.6*)
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
pie install apcu/apcu
pie install rdkafka/rdkafka
pie install pecl/yaml
Expand All @@ -148,10 +171,10 @@ case $PHP_VERSION in
esac

case $PHP_VERSION in
7.4|8.0|8.1)
7.4|8.0)
yes | pecl install decimal-1.5.3
;;
8.6*)
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
pie install php-decimal/ext-decimal
;;
*)
Expand All @@ -160,7 +183,7 @@ case $PHP_VERSION in
esac

case $PHP_VERSION in
8.6*)
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
pie install php-amqp/php-amqp
;;
*)
Expand All @@ -181,6 +204,9 @@ case $PHP_VERSION in
8.5*|8.6*)
echo "Skipping memcached for PHP $PHP_VERSION"
;;
8.1*|8.2*|8.3*|8.4*)
pie install php-memcached/php-memcached
;;
*)
echo "" | pecl install memcached
docker-php-ext-enable memcached
Expand Down Expand Up @@ -215,6 +241,9 @@ case $PHP_VERSION in
)
rm -rf /usr/src/phpredis
;;
8.1*|8.2*|8.3*|8.4*)
pie install phpredis/phpredis
;;
8.*)
mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && docker-php-ext-install redis
;;
Expand All @@ -230,8 +259,12 @@ php -m | grep -q '^intl$' || docker-php-ext-install intl
php -m | grep -q '^gettext$' || docker-php-ext-install gettext
php -m | grep -q '^sockets$' || docker-php-ext-install sockets
case $PHP_VERSION in
8.6*)
echo "ds, yaml, decimal, uuid, msgpack, and amqp were already enabled by pie, and mailparse by its own install step, for PHP $PHP_VERSION"
8.1*)
echo "yaml, decimal, uuid, msgpack, and amqp were already enabled by pie, and mailparse by pie, for PHP $PHP_VERSION"
docker-php-ext-enable ds
;;
8.2*|8.3*|8.4*|8.5*|8.6*)
echo "ds, yaml, decimal, uuid, msgpack, and amqp were already enabled by pie, and mailparse by pie or its own install step, for PHP $PHP_VERSION"
;;
*)
docker-php-ext-enable ds yaml decimal uuid mailparse msgpack amqp
Expand Down Expand Up @@ -294,13 +327,16 @@ case $PHP_VERSION in
)
rm -rf /usr/src/imagick
;;
8.1*|8.2*|8.3*|8.4*|8.5*)
pie install imagick/imagick
;;
*)
yes | pecl install imagick
;;
esac

case $PHP_VERSION in
8.6*)
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
php -m | grep -q '^imagick$' || docker-php-ext-enable imagick
;;
*)
Expand Down Expand Up @@ -335,7 +371,7 @@ esac
docker-php-ext-install gmp ldap xsl mysqli calendar gd pdo_mysql pdo_pgsql zip bcmath soap exif bz2 pcntl

case $PHP_VERSION in
8.6*)
8.1*|8.2*|8.3*|8.4*|8.5*|8.6*)
echo "rdkafka and apcu were already enabled by pie for PHP $PHP_VERSION"
;;
*)
Expand Down
Loading