mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-11-13 12:37:50 +07:00
Improve support for pecl_http on linux and macOS
This commit is contained in:
166
src/scripts/ext/http.sh
Normal file
166
src/scripts/ext/http.sh
Normal file
@ -0,0 +1,166 @@
|
||||
# Function to get http version for a PHP version.
|
||||
get_http_version() {
|
||||
if [[ ${version:?} =~ 5.[3-6] ]]; then
|
||||
echo "pecl_http-2.6.0"
|
||||
elif [[ ${version:?} =~ 7.[0-4] ]]; then
|
||||
echo "pecl_http-3.2.4"
|
||||
else
|
||||
echo "pecl_http-$(get_pecl_version "pecl_http" "stable")"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to enable http extension.
|
||||
enable_http() {
|
||||
enable_extension propro extension
|
||||
enable_extension raphf extension
|
||||
if (! [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension propro && check_extension raphf) ||
|
||||
( [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension raphf); then
|
||||
enable_extension http extension
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install linux dependencies.
|
||||
add_http_dependencies_linux() {
|
||||
! [[ ${version:?} =~ ${nightly_versions:?} ]] && add_devtools phpize
|
||||
install_packages zlib1g libbrotli-dev libcurl4-openssl-dev libevent-dev libicu-dev libidn2-dev
|
||||
if [[ ${version:?} =~ ${old_versions:?} ]]; then
|
||||
add_pecl_extension raphf 1.1.2 extension
|
||||
add_pecl_extension propro 1.0.2 extension
|
||||
elif [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||
add_extension propro extension
|
||||
add_extension raphf extension
|
||||
else
|
||||
add_extension raphf extension
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install darwin dependencies.
|
||||
add_http_dependencies_darwin() {
|
||||
brew install brotli curl icu4c libevent libidn2
|
||||
if ! [[ ${version:?} =~ ${old_versions:?} ]]; then
|
||||
if [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||
add_brew_extension propro extension
|
||||
fi
|
||||
add_brew_extension raphf extension
|
||||
else
|
||||
add_pecl_extension raphf 1.1.2 extension
|
||||
add_pecl_extension propro 1.0.2 extension
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install the dependencies.
|
||||
add_http_dependencies() {
|
||||
os=$1
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
add_http_dependencies_linux
|
||||
else
|
||||
add_http_dependencies_darwin
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get configure options for http.
|
||||
get_http_configure_opts() {
|
||||
os=$1
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
for lib in zlib libbrotli libcurl libevent libicu libidn2 libidn libidnkit2 libidnkit; do
|
||||
http_opts+=( "--with-http-$lib-dir=/usr" )
|
||||
done
|
||||
else
|
||||
http_opts+=( "--with-http-zlib-dir=$(xcrun --show-sdk-path)/usr" )
|
||||
http_opts+=( "--with-http-libbrotli-dir=$(brew --prefix brotli)" )
|
||||
http_opts+=( "--with-http-libcurl-dir=$(brew --prefix curl)" )
|
||||
http_opts+=( "--with-http-libicu-dir=$(brew --prefix icu4c)" )
|
||||
http_opts+=( "--with-http-libevent-dir=$(brew --prefix libevent)" )
|
||||
http_opts+=( "--with-http-libidn2-dir=$(brew --prefix libidn2)" )
|
||||
fi
|
||||
}
|
||||
|
||||
patch_http_source() {
|
||||
ext=$1
|
||||
os=$2
|
||||
if [ "$os" = 'Darwin' ] && ! [[ ${version:?} =~ ${old_versions:?} ]]; then
|
||||
if [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||
sed -i '' -e "s|ext/propro|$(brew --prefix propro@"${version:?}")/include/php/ext/propro@${version:?}|" "/tmp/pecl_http-${ext##*-}/src/php_http_api.h"
|
||||
fi
|
||||
sed -i '' -e "s|ext/raphf|$(brew --prefix raphf@"${version:?}")/include/php/ext/raphf@${version:?}|" "/tmp/pecl_http-${ext##*-}/src/php_http_api.h"
|
||||
if [ "${version:?}" = "5.6" ]; then
|
||||
sed -i '' -e "s|\$abs_srcdir|\$abs_srcdir ${brew_prefix:?}/include|" -e "s|/ext/propro|/php/ext/propro@5.6|" -e "s|/ext/raphf|/php/ext/raphf@5.6|" "/tmp/pecl_http-${ext##*-}/config9.m4"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper function to compile and install http.
|
||||
build_http() {
|
||||
ext=$1
|
||||
os=$2
|
||||
(
|
||||
http_opts=() && get_http_configure_opts "$os"
|
||||
c_opts="CFLAGS=-Wno-implicit-function-declaration"
|
||||
cd /tmp/pecl_http-"${ext##*-}" || exit
|
||||
sudo phpize
|
||||
sudo "$c_opts" ./configure --with-http --with-php-config="$(command -v php-config)" "${http_opts[@]}"
|
||||
sudo make -j"$(nproc 2>/dev/null || sysctl -n hw.ncpu)"
|
||||
sudo make install
|
||||
)
|
||||
}
|
||||
|
||||
# Compile and install http explicitly.
|
||||
# This is done as pecl compiles raphf and propro as well.
|
||||
add_http_helper() {
|
||||
ext=$1
|
||||
os=$2
|
||||
add_http_dependencies "$os"
|
||||
get -q -n /tmp/http.tgz https://pecl.php.net/get/pecl_http-"${ext##*-}".tgz
|
||||
tar -xzf /tmp/http.tgz -C /tmp
|
||||
patch_http_source "$ext" "$os"
|
||||
build_http "$ext" "$os"
|
||||
enable_extension http extension
|
||||
}
|
||||
|
||||
# Function to setup latest http extension.
|
||||
add_http_latest() {
|
||||
os=$1
|
||||
enable_http
|
||||
if ! check_extension http; then
|
||||
if [ "$os" = "Linux" ]; then
|
||||
if ! [[ "${version:?}" =~ ${old_versions:?}|${nightly_versions:?} ]]; then
|
||||
if [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||
install_packages "php$version-propro"
|
||||
fi
|
||||
install_packages "php$version-raphf" "php$version-http"
|
||||
else
|
||||
add_http_helper "$(get_http_version)" "$os"
|
||||
fi
|
||||
else
|
||||
if ! [[ "${version:?}" =~ ${old_versions:?} ]]; then
|
||||
add_brew_extension pecl_http extension
|
||||
fi
|
||||
fi
|
||||
status="Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup http extension given a version.
|
||||
add_http_version() {
|
||||
ext=$1
|
||||
os=$2
|
||||
enable_http
|
||||
if [ "x$(php -r "echo phpversion('http');")" != "x${ext##*-}" ]; then
|
||||
remove_extension http >/dev/null
|
||||
add_http_helper pecl_http-"${ext##*-}" "$os"
|
||||
status="Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup http extension
|
||||
add_http() {
|
||||
ext=$1
|
||||
os="$(uname -s)"
|
||||
status="Enabled"
|
||||
if [[ "$ext" =~ ^(pecl_http|http)$ ]]; then
|
||||
add_http_latest "$os" >/dev/null 2>&1
|
||||
else
|
||||
add_http_version "$ext" "$os" >/dev/null 2>&1
|
||||
fi
|
||||
add_extension_log "http" "$status"
|
||||
}
|
||||
Reference in New Issue
Block a user