mirror of
https://github.com/shivammathur/setup-php.git
synced 2024-11-24 04:41:06 +07:00
167 lines
5.1 KiB
Bash
167 lines
5.1 KiB
Bash
|
# 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"
|
||
|
}
|