mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-06 08:15:39 +08:00
Merge branch 'main' into feat/pgo
This commit is contained in:
@@ -98,31 +98,50 @@ class Downloader
|
||||
{
|
||||
logger()->debug("finding {$name} source from github {$type} tarball");
|
||||
$source['query'] ??= '';
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/{$type}{$source['query']}",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$url = null;
|
||||
foreach ($data as $rel) {
|
||||
if (($rel['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) {
|
||||
continue;
|
||||
// Use /releases/latest when possible: it returns the semantically latest stable
|
||||
// release regardless of publish order, avoiding issues with concurrent release branches.
|
||||
if ($type === 'releases' && empty($source['query']) && !($source['match'] ?? null)) {
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/releases/latest",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
if (!is_array($data) || empty($data['tarball_url'])) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
if (($rel['draft'] ?? false) === true && (($source['prefer-stable'] ?? false) || !$rel['tarball_url'])) {
|
||||
continue;
|
||||
$url = $data['tarball_url'];
|
||||
$version = $data['tag_name'] ?? $data['name'] ?? null;
|
||||
} else {
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/{$type}{$source['query']}",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$url = null;
|
||||
$version = null;
|
||||
foreach ($data as $rel) {
|
||||
if (($rel['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) {
|
||||
continue;
|
||||
}
|
||||
if (($rel['draft'] ?? false) === true && (($source['prefer-stable'] ?? false) || !$rel['tarball_url'])) {
|
||||
continue;
|
||||
}
|
||||
if (!($source['match'] ?? null)) {
|
||||
$url = $rel['tarball_url'] ?? null;
|
||||
$version = $rel['tag_name'] ?? $rel['name'] ?? null;
|
||||
break;
|
||||
}
|
||||
if (preg_match('|' . $source['match'] . '|', $rel['tarball_url'])) {
|
||||
$url = $rel['tarball_url'];
|
||||
$version = $rel['tag_name'] ?? $rel['name'] ?? null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!($source['match'] ?? null)) {
|
||||
$url = $rel['tarball_url'] ?? null;
|
||||
break;
|
||||
if (!$url) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
if (preg_match('|' . $source['match'] . '|', $rel['tarball_url'])) {
|
||||
$url = $rel['tarball_url'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$url) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
$headers = self::curlExec(
|
||||
url: $url,
|
||||
@@ -134,7 +153,7 @@ class Downloader
|
||||
if ($matches) {
|
||||
$filename = $matches['filename'];
|
||||
} else {
|
||||
$filename = "{$name}-" . ($type === 'releases' ? $data['tag_name'] : $data['name']) . '.tar.gz';
|
||||
$filename = "{$name}-" . ($version ?? 'latest') . '.tar.gz';
|
||||
}
|
||||
|
||||
return [$url, $filename];
|
||||
|
||||
@@ -95,6 +95,10 @@ class SourcePatcher
|
||||
// patch php-src/build/php.m4 PKG_CHECK_MODULES -> PKG_CHECK_MODULES_STATIC
|
||||
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/build/php.m4', 'PKG_CHECK_MODULES(', 'PKG_CHECK_MODULES_STATIC(');
|
||||
|
||||
if ($builder->getPHPVersionID() >= 80300 && $builder->getPHPVersionID() < 80400) {
|
||||
self::patchFile('spc_fix_avx512_cache_before_80400.patch', SOURCE_PATH . '/php-src');
|
||||
}
|
||||
|
||||
if ($builder->getOption('enable-micro-win32')) {
|
||||
self::patchMicroWin32();
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user