You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
2.9 KiB
143 lines
2.9 KiB
#!/bin/sh
|
|
set -e
|
|
|
|
# prefer user supplied CFLAGS, but default to our PHP_CFLAGS
|
|
: ${CFLAGS:=$PHP_CFLAGS}
|
|
: ${CPPFLAGS:=$PHP_CPPFLAGS}
|
|
: ${LDFLAGS:=$PHP_LDFLAGS}
|
|
export CFLAGS CPPFLAGS LDFLAGS
|
|
|
|
srcExists=
|
|
if [ -d /usr/src/php ]; then
|
|
srcExists=1
|
|
fi
|
|
docker-php-source extract
|
|
if [ -z "$srcExists" ]; then
|
|
touch /usr/src/php/.docker-delete-me
|
|
fi
|
|
|
|
cd /usr/src/php/ext
|
|
|
|
usage() {
|
|
echo "usage: $0 [-jN] [--ini-name file.ini] ext-name [ext-name ...]"
|
|
echo " ie: $0 gd mysqli"
|
|
echo " $0 pdo pdo_mysql"
|
|
echo " $0 -j5 gd mbstring mysqli pdo pdo_mysql shmop"
|
|
echo
|
|
echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure'
|
|
echo
|
|
echo 'Possible values for ext-name:'
|
|
find . \
|
|
-mindepth 2 \
|
|
-maxdepth 2 \
|
|
-type f \
|
|
-name 'config.m4' \
|
|
| xargs -n1 dirname \
|
|
| xargs -n1 basename \
|
|
| sort \
|
|
| xargs
|
|
echo
|
|
echo 'Some of the above modules are already compiled into PHP; please check'
|
|
echo 'the output of "php -i" to see which modules are already loaded.'
|
|
}
|
|
|
|
opts="$(getopt -o 'h?j:' --long 'help,ini-name:,jobs:' -- "$@" || { usage >&2 && false; })"
|
|
eval set -- "$opts"
|
|
|
|
j=1
|
|
iniName=
|
|
while true; do
|
|
flag="$1"
|
|
shift
|
|
case "$flag" in
|
|
--help|-h|'-?') usage && exit 0 ;;
|
|
--ini-name) iniName="$1" && shift ;;
|
|
--jobs|-j) j="$1" && shift ;;
|
|
--) break ;;
|
|
*)
|
|
{
|
|
echo "error: unknown flag: $flag"
|
|
usage
|
|
} >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
exts=
|
|
for ext; do
|
|
if [ -z "$ext" ]; then
|
|
continue
|
|
fi
|
|
if [ ! -d "$ext" ]; then
|
|
echo >&2 "error: $PWD/$ext does not exist"
|
|
echo >&2
|
|
usage >&2
|
|
exit 1
|
|
fi
|
|
exts="$exts $ext"
|
|
done
|
|
|
|
if [ -z "$exts" ]; then
|
|
usage >&2
|
|
exit 1
|
|
fi
|
|
|
|
pm='unknown'
|
|
if [ -e /lib/apk/db/installed ]; then
|
|
pm='apk'
|
|
fi
|
|
|
|
apkDel=
|
|
if [ "$pm" = 'apk' ]; then
|
|
if [ -n "$PHPIZE_DEPS" ]; then
|
|
if apk info --installed .phpize-deps-configure > /dev/null; then
|
|
apkDel='.phpize-deps-configure'
|
|
elif ! apk info --installed .phpize-deps > /dev/null; then
|
|
apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS
|
|
apkDel='.phpize-deps'
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
popDir="$PWD"
|
|
for ext in $exts; do
|
|
cd "$ext"
|
|
|
|
[ -e Makefile ] || docker-php-ext-configure "$ext"
|
|
|
|
make -j"$j"
|
|
|
|
if ! php -n -d 'display_errors=stderr' -r 'exit(ZEND_DEBUG_BUILD ? 0 : 1);' > /dev/null; then
|
|
# only "strip" modules if we aren't using a debug build of PHP
|
|
# (none of our builds are debug builds, but PHP might be recompiled with "--enable-debug" configure option)
|
|
# https://github.com/docker-library/php/issues/1268
|
|
|
|
find modules \
|
|
-maxdepth 1 \
|
|
-name '*.so' \
|
|
-exec sh -euxc ' \
|
|
strip --strip-all "$@" || :
|
|
' -- '{}' +
|
|
fi
|
|
|
|
make -j"$j" install
|
|
|
|
find modules \
|
|
-maxdepth 1 \
|
|
-name '*.so' \
|
|
-exec basename '{}' ';' \
|
|
| xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"}
|
|
|
|
make -j"$j" clean
|
|
|
|
cd "$popDir"
|
|
done
|
|
|
|
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then
|
|
apk del --no-network $apkDel
|
|
fi
|
|
|
|
if [ -e /usr/src/php/.docker-delete-me ]; then
|
|
docker-php-source delete
|
|
fi
|