Strip symbols from compiled extensions (#533)

pull/534/head 1.4.24
Michele Locati 2022-03-24 11:58:29 +01:00 committed by GitHub
parent 51c0897c45
commit 7910f27d85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 73 additions and 0 deletions

View File

@ -85,6 +85,7 @@ setDistro() {
# - PHP_MAJDOTMINDOTPAT_VERSION: Major-Minor-Patch version, format M.m.p (example 8.0.1 for PHP 8.0.1)
# - PHP_THREADSAFE: 1 if PHP is thread-safe (TS), 0 if not thread-safe (NTS)
# - PHP_BITS: 32 if PHP is compiled for 32-bit, 64 if 64-bit
# - PHP_EXTDIR: the absolute path where the PHP extensions reside
setPHPVersionVariables() {
PHP_MAJDOTMINDOTPAT_VERSION="$(php-config --version)"
PHP_MAJMIN_VERSION=$(printf '%s' "$PHP_MAJDOTMINDOTPAT_VERSION" | awk -F. '{print $1*100+$2}')
@ -92,6 +93,7 @@ setPHPVersionVariables() {
PHP_MAJMINPAT_VERSION=$(printf '%s' "$PHP_MAJDOTMINDOTPAT_VERSION" | awk -F. '{print $1*10000+$2*100+$3}')
PHP_THREADSAFE=$(php -r 'echo ZEND_THREAD_SAFE ? 1 : 0;')
PHP_BITS=$(php -r 'echo PHP_INT_SIZE * 8;')
PHP_EXTDIR="$(php -d display_errors=stderr -r 'echo realpath(ini_get("extension_dir"));')"
}
# Fix apt-get being very slow on Debian Jessie
@ -1373,6 +1375,75 @@ getCompilationProcessorCount() {
esac
}
# Get the full path of a PHP extension given its name.
#
# Arguments:
# $1: the name of the PHP extension
#
# Output:
# The absolute path of the PHP extension file (or nothing if the file can't be found)
getModuleFullPath() {
case "$1" in
*)
getModuleFullPath_path="$PHP_EXTDIR/$1.so"
;;
esac
if test -f "$getModuleFullPath_path"; then
printf '%s' "$getModuleFullPath_path"
fi
}
# Post-process a PHP module just compiled and installed in the PHP extension directory
#
# Arguments:
# $1: the name of the PHP extension
#
# Return:
# 0 (true): if suceeded
# non-zero (false): in case of errors
postProcessModule() {
postProcessModule_file="$(getModuleFullPath "$1")"
if test -z "$postProcessModule_file"; then
printf 'Unable to find the file of the PHP extension "%s"\n' "$1" >&2
return 1
fi
printf 'Removing symbols from %s... ' "$postProcessModule_file"
postProcessModule_preSize="$(stat -c %s "$postProcessModule_file")"
strip --strip-all "$postProcessModule_file"
postProcessModule_postSize="$(stat -c %s "$postProcessModule_file")"
printf 'done (%s bytes saved).\n' "$((postProcessModule_preSize - postProcessModule_postSize))"
return $?
}
# Check that a PHP module actually works (better to run this check before enabling the extension)
#
# Arguments:
# $1: the name of the PHP extension
#
# Return:
# 0 (true): if the string is in the list
# 1 (false): if the string is not in the list
checkModuleWorking() {
checkModuleWorking_file="$(getModuleFullPath "$1")"
if test -z "$checkModuleWorking_file"; then
printf 'Unable to find the file of the PHP extension "%s"\n' "$1" >&2
return 1
fi
if readelf --wide --syms "$checkModuleWorking_file" | grep -Eq ' zend_extension_entry$'; then
checkModuleWorking_inientry=zend_extension
else
checkModuleWorking_inientry=extension
fi
printf 'Check if the %s %s can be loaded... ' "$checkModuleWorking_inientry" "$1"
checkModuleWorking_err="$(php -d "$checkModuleWorking_inientry=$checkModuleWorking_file" -r 'return;' 2>&1 || true)"
if test -n "$checkModuleWorking_err"; then
printf 'Error loading the "%s" extension from "%s":\n%s\n' "$1" "$checkModuleWorking_file" "$checkModuleWorking_err" >&2
return 1
fi
printf 'ok.\n'
return 0
}
# Enable a PHP extension
#
# Arguments:
@ -3046,6 +3117,8 @@ installRemoteModule() {
fi
installPeclPackage "$installRemoteModule_module" "$installRemoteModule_version" "$installRemoteModule_cppflags"
fi
postProcessModule "$installRemoteModule_module"
checkModuleWorking "$installRemoteModule_module"
case "$installRemoteModule_module" in
apcu_bc)
# apcu_bc must be loaded after apcu