mirror of
https://github.com/shivammathur/setup-php.git
synced 2026-08-23 00:00:46 +07:00
Fix versioned extension caching
This commit is contained in:
@@ -105,10 +105,15 @@ Function Add-Extension {
|
|||||||
$extension_version = ''
|
$extension_version = ''
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
|
||||||
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
||||||
New-Item $deps_dir -Type Directory -Force > $null 2>&1
|
New-Item $deps_dir -Type Directory -Force > $null 2>&1
|
||||||
if ($null -ne $extension_info) {
|
if($extension_version -ne '' -and (Test-Path "$ext_dir\$extension-$extension_version")) {
|
||||||
|
Copy-Item "$ext_dir\$extension-$extension_version" "$ext_dir\php_$extension.dll" -Force
|
||||||
|
Enable-Extension $extension
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
||||||
|
if ($null -ne $extension_info -and ($extension_version -eq '' -or $extension_info.Version[0] -eq $extension_version)) {
|
||||||
switch ($extension_info.State) {
|
switch ($extension_info.State) {
|
||||||
'Builtin' {
|
'Builtin' {
|
||||||
Add-Log $tick $extension "Enabled"
|
Add-Log $tick $extension "Enabled"
|
||||||
@@ -145,6 +150,9 @@ Function Add-Extension {
|
|||||||
}
|
}
|
||||||
Add-Log $tick $extension "Installed and enabled"
|
Add-Log $tick $extension "Installed and enabled"
|
||||||
}
|
}
|
||||||
|
if($extension_version -ne '' -and (Test-Path "$ext_dir\php_$extension.dll")) {
|
||||||
|
Copy-Item "$ext_dir\php_$extension.dll" "$ext_dir\$extension-$extension_version" -Force
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,39 +209,26 @@ add_pecl_extension() {
|
|||||||
local extension=$1
|
local extension=$1
|
||||||
local pecl_version=$2
|
local pecl_version=$2
|
||||||
local prefix=$3
|
local prefix=$3
|
||||||
enable_extension "$extension" "$prefix"
|
|
||||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
fi
|
fi
|
||||||
ext_version=$(php -r "echo phpversion('$extension');")
|
# Cache versioned extensions using suffixless copies in extension_dir.
|
||||||
# The PHP package install itself can bundle its own default build of a
|
if [ -n "$pecl_version" ] && [ -e "${ext_dir:?}/$extension-$pecl_version" ]; then
|
||||||
# versioned extension (e.g. redis ships with its own recent version),
|
sudo cp "${ext_dir:?}/$extension-$pecl_version" "${ext_dir:?}/$extension.so"
|
||||||
# which overwrites ext_dir/$extension.so before this function ever runs.
|
enable_extension "$extension" "$prefix"
|
||||||
# shared_extension only checks that *a* file exists, not which version, so
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
# a build matching the pinned version - even one cache-extensions already
|
return
|
||||||
# restored into ext_dir - never gets a chance: this always fell straight
|
|
||||||
# through to pecl_install regardless of caching. Preserve built versions
|
|
||||||
# in ext_dir itself under a name with no .so suffix, so cache-extensions
|
|
||||||
# (which caches all of ext_dir) picks them up automatically, and the PHP
|
|
||||||
# package install's own file can't collide with or overwrite them. On a
|
|
||||||
# mismatch, restore the matching preserved build before falling back to a
|
|
||||||
# full pecl_install.
|
|
||||||
if [ -n "$pecl_version" ] && check_extension "$extension" && [ "${ext_version/-/}" != "$pecl_version" ]; then
|
|
||||||
preserved="${ext_dir:?}/$extension-$pecl_version"
|
|
||||||
if [ -e "$preserved" ]; then
|
|
||||||
disable_extension_helper "$extension" >/dev/null 2>&1
|
|
||||||
sudo cp "$preserved" "${ext_dir:?}/$extension.so"
|
|
||||||
enable_extension "$extension" "$prefix"
|
|
||||||
ext_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
if check_extension "$extension" && [[ -z "$pecl_version" || (-n "$pecl_version" && "${ext_version/-/}" == "$pecl_version") ]]; then
|
if check_extension "$extension" && [[ -z "$pecl_version" || (-n "$pecl_version" && "${ext_version/-/}" == "$pecl_version") ]]; then
|
||||||
|
[ -n "$pecl_version" ] && sudo cp "${ext_dir:?}/$extension.so" "${ext_dir:?}/$extension-$pecl_version" 2>/dev/null || true
|
||||||
add_log "${tick:?}" "$extension" "Enabled"
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
else
|
else
|
||||||
[ -n "$pecl_version" ] && pecl_version="-$pecl_version"
|
[ -n "$pecl_version" ] && pecl_version="-$pecl_version"
|
||||||
pecl_install "$extension$pecl_version" || ( [ "${fail_fast:?}" = "false" ] && add_extension "$extension" "$(get_extension_prefix "$extension")" >/dev/null 2>&1)
|
pecl_install "$extension$pecl_version" || ( [ "${fail_fast:?}" = "false" ] && add_extension "$extension" "$(get_extension_prefix "$extension")" >/dev/null 2>&1)
|
||||||
extension_version="$(php -r "echo phpversion('$extension');")"
|
extension_version="$(php -r "echo phpversion('$extension');")"
|
||||||
if check_extension "$extension" && [ -n "$extension_version" ]; then
|
if [ -n "$pecl_version" ] && [ "${extension_version/-/}" = "${pecl_version#-}" ]; then
|
||||||
sudo cp "${ext_dir:?}/$extension.so" "${ext_dir:?}/$extension-$extension_version" 2>/dev/null || true
|
sudo cp "${ext_dir:?}/$extension.so" "${ext_dir:?}/$extension-$extension_version" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
[ -n "$extension_version" ] && extension_version="-$extension_version"
|
[ -n "$extension_version" ] && extension_version="-$extension_version"
|
||||||
|
|||||||
Reference in New Issue
Block a user