Skip to content

Commit 3e9d32b

Browse files
committed
Add 7.4.0alpha1
1 parent 10c1eee commit 3e9d32b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+4104
-0
lines changed

.travis.yml

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ language: bash
22
services: docker
33

44
env:
5+
- VERSION=7.4-rc VARIANT=stretch/cli
6+
- VERSION=7.4-rc VARIANT=stretch/apache
7+
- VERSION=7.4-rc VARIANT=stretch/fpm
8+
- VERSION=7.4-rc VARIANT=stretch/zts
9+
- VERSION=7.4-rc VARIANT=alpine3.9/cli
10+
- VERSION=7.4-rc VARIANT=alpine3.9/fpm
11+
- VERSION=7.4-rc VARIANT=alpine3.9/zts
512
- VERSION=7.3 VARIANT=stretch/cli
613
- VERSION=7.3 VARIANT=stretch/apache
714
- VERSION=7.3 VARIANT=stretch/fpm

7.4-rc/alpine3.9/cli/Dockerfile

+186
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
#
2+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
3+
#
4+
# PLEASE DO NOT EDIT IT DIRECTLY.
5+
#
6+
7+
FROM alpine:3.9
8+
9+
# dependencies required for running "phpize"
10+
# these get automatically installed and removed by "docker-php-ext-*" (unless they're already installed)
11+
ENV PHPIZE_DEPS \
12+
autoconf \
13+
dpkg-dev dpkg \
14+
file \
15+
g++ \
16+
gcc \
17+
libc-dev \
18+
make \
19+
pkgconf \
20+
re2c
21+
22+
# persistent / runtime deps
23+
RUN apk add --no-cache \
24+
ca-certificates \
25+
curl \
26+
tar \
27+
xz \
28+
# https://github.com/docker-library/php/issues/494
29+
openssl
30+
31+
# ensure www-data user exists
32+
RUN set -x \
33+
&& addgroup -g 82 -S www-data \
34+
&& adduser -u 82 -D -S -G www-data www-data
35+
# 82 is the standard uid/gid for "www-data" in Alpine
36+
# https://git.alpinelinux.org/aports/tree/main/apache2/apache2.pre-install?h=3.9-stable
37+
# https://git.alpinelinux.org/aports/tree/main/lighttpd/lighttpd.pre-install?h=3.9-stable
38+
# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install?h=3.9-stable
39+
40+
ENV PHP_INI_DIR /usr/local/etc/php
41+
RUN set -eux; \
42+
mkdir -p "$PHP_INI_DIR/conf.d"; \
43+
# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743)
44+
[ ! -d /var/www/html ]; \
45+
mkdir -p /var/www/html; \
46+
chown www-data:www-data /var/www/html; \
47+
chmod 777 /var/www/html
48+
49+
##<autogenerated>##
50+
##</autogenerated>##
51+
52+
# Apply stack smash protection to functions using local buffers and alloca()
53+
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64)
54+
# Enable optimization (-O2)
55+
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default)
56+
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated)
57+
# https://github.com/docker-library/php/issues/272
58+
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2"
59+
ENV PHP_CPPFLAGS="$PHP_CFLAGS"
60+
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie"
61+
62+
ENV GPG_KEYS 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
63+
64+
ENV PHP_VERSION 7.4.0alpha1
65+
ENV PHP_URL="https://downloads.php.net/~derick/php-7.4.0alpha1.tar.xz" PHP_ASC_URL="https://downloads.php.net/~derick/php-7.4.0alpha1.tar.xz.asc"
66+
ENV PHP_SHA256="378400b6eced6e358f5db750413a7f9959517b0daef6580b16d640190b7dc364" PHP_MD5=""
67+
68+
RUN set -xe; \
69+
\
70+
apk add --no-cache --virtual .fetch-deps \
71+
gnupg \
72+
wget \
73+
; \
74+
\
75+
mkdir -p /usr/src; \
76+
cd /usr/src; \
77+
\
78+
wget -O php.tar.xz "$PHP_URL"; \
79+
\
80+
if [ -n "$PHP_SHA256" ]; then \
81+
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \
82+
fi; \
83+
if [ -n "$PHP_MD5" ]; then \
84+
echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \
85+
fi; \
86+
\
87+
if [ -n "$PHP_ASC_URL" ]; then \
88+
wget -O php.tar.xz.asc "$PHP_ASC_URL"; \
89+
export GNUPGHOME="$(mktemp -d)"; \
90+
for key in $GPG_KEYS; do \
91+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
92+
done; \
93+
gpg --batch --verify php.tar.xz.asc php.tar.xz; \
94+
command -v gpgconf > /dev/null && gpgconf --kill all; \
95+
rm -rf "$GNUPGHOME"; \
96+
fi; \
97+
\
98+
apk del --no-network .fetch-deps
99+
100+
COPY docker-php-source /usr/local/bin/
101+
102+
RUN set -xe \
103+
&& apk add --no-cache --virtual .build-deps \
104+
$PHPIZE_DEPS \
105+
argon2-dev \
106+
coreutils \
107+
curl-dev \
108+
libedit-dev \
109+
libsodium-dev \
110+
libxml2-dev \
111+
openssl-dev \
112+
sqlite-dev \
113+
\
114+
&& export CFLAGS="$PHP_CFLAGS" \
115+
CPPFLAGS="$PHP_CPPFLAGS" \
116+
LDFLAGS="$PHP_LDFLAGS" \
117+
&& docker-php-source extract \
118+
&& cd /usr/src/php \
119+
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
120+
&& ./configure \
121+
--build="$gnuArch" \
122+
--with-config-file-path="$PHP_INI_DIR" \
123+
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \
124+
\
125+
# make sure invalid --configure-flags are fatal errors intead of just warnings
126+
--enable-option-checking=fatal \
127+
\
128+
# https://github.com/docker-library/php/issues/439
129+
--with-mhash \
130+
\
131+
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236)
132+
--enable-ftp \
133+
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)
134+
--enable-mbstring \
135+
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself)
136+
--enable-mysqlnd \
137+
# https://wiki.php.net/rfc/argon2_password_hash (7.2+)
138+
--with-password-argon2 \
139+
# https://wiki.php.net/rfc/libsodium
140+
--with-sodium=shared \
141+
\
142+
--with-curl \
143+
--with-libedit \
144+
--with-openssl \
145+
--with-zlib \
146+
\
147+
# bundled pcre does not support JIT on s390x
148+
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT
149+
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \
150+
\
151+
$PHP_EXTRA_CONFIGURE_ARGS \
152+
&& make -j "$(nproc)" \
153+
&& find -type f -name '*.a' -delete \
154+
&& make install \
155+
&& { find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; } \
156+
&& make clean \
157+
\
158+
# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable)
159+
&& cp -v php.ini-* "$PHP_INI_DIR/" \
160+
\
161+
&& cd / \
162+
&& docker-php-source delete \
163+
\
164+
&& runDeps="$( \
165+
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \
166+
| tr ',' '\n' \
167+
| sort -u \
168+
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
169+
)" \
170+
&& apk add --no-cache $runDeps \
171+
\
172+
&& apk del --no-network .build-deps \
173+
\
174+
# https://github.com/docker-library/php/issues/443
175+
&& pecl update-channels \
176+
&& rm -rf /tmp/pear ~/.pearrc
177+
178+
COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/
179+
180+
# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598)
181+
RUN docker-php-ext-enable sodium
182+
183+
ENTRYPOINT ["docker-php-entrypoint"]
184+
##<autogenerated>##
185+
CMD ["php", "-a"]
186+
##</autogenerated>##
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/sh
2+
set -e
3+
4+
# first arg is `-f` or `--some-option`
5+
if [ "${1#-}" != "$1" ]; then
6+
set -- php "$@"
7+
fi
8+
9+
exec "$@"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/sh
2+
set -e
3+
4+
# prefer user supplied CFLAGS, but default to our PHP_CFLAGS
5+
: ${CFLAGS:=$PHP_CFLAGS}
6+
: ${CPPFLAGS:=$PHP_CPPFLAGS}
7+
: ${LDFLAGS:=$PHP_LDFLAGS}
8+
export CFLAGS CPPFLAGS LDFLAGS
9+
10+
srcExists=
11+
if [ -d /usr/src/php ]; then
12+
srcExists=1
13+
fi
14+
docker-php-source extract
15+
if [ -z "$srcExists" ]; then
16+
touch /usr/src/php/.docker-delete-me
17+
fi
18+
19+
cd /usr/src/php/ext
20+
21+
usage() {
22+
echo "usage: $0 ext-name [configure flags]"
23+
echo " ie: $0 gd --with-jpeg-dir=/usr/local/something"
24+
echo
25+
echo 'Possible values for ext-name:'
26+
find . \
27+
-mindepth 2 \
28+
-maxdepth 2 \
29+
-type f \
30+
-name 'config.m4' \
31+
| xargs -n1 dirname \
32+
| xargs -n1 basename \
33+
| sort \
34+
| xargs
35+
echo
36+
echo 'Some of the above modules are already compiled into PHP; please check'
37+
echo 'the output of "php -i" to see which modules are already loaded.'
38+
}
39+
40+
ext="$1"
41+
if [ -z "$ext" ] || [ ! -d "$ext" ]; then
42+
usage >&2
43+
exit 1
44+
fi
45+
shift
46+
47+
pm='unknown'
48+
if [ -e /lib/apk/db/installed ]; then
49+
pm='apk'
50+
fi
51+
52+
if [ "$pm" = 'apk' ]; then
53+
if \
54+
[ -n "$PHPIZE_DEPS" ] \
55+
&& ! apk info --installed .phpize-deps > /dev/null \
56+
&& ! apk info --installed .phpize-deps-configure > /dev/null \
57+
; then
58+
apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS
59+
fi
60+
fi
61+
62+
if command -v dpkg-architecture > /dev/null; then
63+
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"
64+
set -- --build="$gnuArch" "$@"
65+
fi
66+
67+
cd "$ext"
68+
phpize
69+
./configure "$@"
+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/sh
2+
set -e
3+
4+
extDir="$(php -d 'display_errors=stderr' -r 'echo ini_get("extension_dir");')"
5+
cd "$extDir"
6+
7+
usage() {
8+
echo "usage: $0 [options] module-name [module-name ...]"
9+
echo " ie: $0 gd mysqli"
10+
echo " $0 pdo pdo_mysql"
11+
echo " $0 --ini-name 0-apc.ini apcu apc"
12+
echo
13+
echo 'Possible values for module-name:'
14+
find -maxdepth 1 \
15+
-type f \
16+
-name '*.so' \
17+
-exec basename '{}' ';' \
18+
| sort \
19+
| xargs
20+
echo
21+
echo 'Some of the above modules are already compiled into PHP; please check'
22+
echo 'the output of "php -i" to see which modules are already loaded.'
23+
}
24+
25+
opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })"
26+
eval set -- "$opts"
27+
28+
iniName=
29+
while true; do
30+
flag="$1"
31+
shift
32+
case "$flag" in
33+
--help|-h|'-?') usage && exit 0 ;;
34+
--ini-name) iniName="$1" && shift ;;
35+
--) break ;;
36+
*)
37+
{
38+
echo "error: unknown flag: $flag"
39+
usage
40+
} >&2
41+
exit 1
42+
;;
43+
esac
44+
done
45+
46+
modules=
47+
for module; do
48+
if [ -z "$module" ]; then
49+
continue
50+
fi
51+
if [ -f "$module.so" ] && ! [ -f "$module" ]; then
52+
# allow ".so" to be optional
53+
module="$module.so"
54+
fi
55+
if ! [ -f "$module" ]; then
56+
echo >&2 "error: '$module' does not exist"
57+
echo >&2
58+
usage >&2
59+
exit 1
60+
fi
61+
modules="$modules $module"
62+
done
63+
64+
if [ -z "$modules" ]; then
65+
usage >&2
66+
exit 1
67+
fi
68+
69+
pm='unknown'
70+
if [ -e /lib/apk/db/installed ]; then
71+
pm='apk'
72+
fi
73+
74+
apkDel=
75+
if [ "$pm" = 'apk' ]; then
76+
if \
77+
[ -n "$PHPIZE_DEPS" ] \
78+
&& ! apk info --installed .phpize-deps > /dev/null \
79+
&& ! apk info --installed .phpize-deps-configure > /dev/null \
80+
; then
81+
apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils
82+
apkDel='.docker-php-ext-enable-deps'
83+
fi
84+
fi
85+
86+
for module in $modules; do
87+
if readelf --wide --syms "$module" | grep -q ' zend_extension_entry$'; then
88+
# https://wiki.php.net/internals/extensions#loading_zend_extensions
89+
absModule="$(readlink -f "$module")"
90+
line="zend_extension=$absModule"
91+
else
92+
line="extension=$module"
93+
fi
94+
95+
ext="$(basename "$module")"
96+
ext="${ext%.*}"
97+
if php -d 'display_errors=stderr' -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then
98+
# this isn't perfect, but it's better than nothing
99+
# (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache')
100+
echo >&2
101+
echo >&2 "warning: $ext ($module) is already loaded!"
102+
echo >&2
103+
continue
104+
fi
105+
106+
ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}"
107+
if ! grep -q "$line" "$ini" 2>/dev/null; then
108+
echo "$line" >> "$ini"
109+
fi
110+
done
111+
112+
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then
113+
apk del --no-network $apkDel
114+
fi

0 commit comments

Comments
 (0)