diff --git a/src/scripts/extensions/add_extensions.sh b/src/scripts/extensions/add_extensions.sh index 6ad987098..5f9c87d17 100644 --- a/src/scripts/extensions/add_extensions.sh +++ b/src/scripts/extensions/add_extensions.sh @@ -176,16 +176,22 @@ pecl_install() { local extension=$1 local prefix=${2:-extension} add_pecl >/dev/null 2>&1 - cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')" - prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'" - suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)" - IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)" - (( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1 disable_extension_helper "${extension%-*}" >/dev/null 2>&1 - if [ "$version" = "5.3" ]; then - yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension" >/dev/null 2>&1 + # Compare version with 8.3 so it runs only on 8.4 and above + # Install using the source interface as it allows for patching. + if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then + add_extension_from_source "${extension%-*}" https://pecl.php.net "${extension%-*}" "${extension%-*}" "${extension##*-}" "$prefix" pecl else - yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1 + cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')" + prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'" + suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)" + IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)" + (( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1 + if [ "$version" = "5.3" ]; then + yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension" >/dev/null 2>&1 + else + yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1 + fi fi local exit_code=$? sudo pecl info "$extension" | grep -iq 'zend extension' && prefix=zend_extension diff --git a/src/scripts/extensions/patches/common.sh b/src/scripts/extensions/patches/common.sh new file mode 100644 index 000000000..b64b4f495 --- /dev/null +++ b/src/scripts/extensions/patches/common.sh @@ -0,0 +1,12 @@ +process_file() { + local file=$1 + if grep -qE '#include.*<(php_lcg.h|php_mt_rand.h|php_rand.h|standard/php_random.h)>' "$file"; then + sed -i '/#include.*<\(php_lcg.h\|php_mt_rand.h\|php_rand.h\|standard\/php_random\.h\)>/d' "$file" + echo '#include ' >> "$file" + fi +} + +# Compare with 8.3 so it runs only on 8.4 and above +if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then + find . -type f \( -name "*.c" -o -name "*.h" \) -exec bash -c 'process_file "$0"' {} \; +fi diff --git a/src/scripts/extensions/source.sh b/src/scripts/extensions/source.sh index 36d15fb28..d5c57a2cd 100644 --- a/src/scripts/extensions/source.sh +++ b/src/scripts/extensions/source.sh @@ -89,6 +89,8 @@ run_group() { patch_extension() { local extension=$1 + # shellcheck source=. + . "${scripts:?}"/extensions/patches/common.sh if [ -e "${scripts:?}"/extensions/patches/"$extension".sh ]; then # shellcheck source=. . "${scripts:?}"/extensions/patches/"$extension".sh