mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-18 04:44:53 +08:00
prevent infinite recursion if ext suggests addons that depend on the extension
This commit is contained in:
parent
a1f2126c00
commit
ba326973e5
@ -356,11 +356,8 @@ class Extension
|
|||||||
/**
|
/**
|
||||||
* Build shared extension
|
* Build shared extension
|
||||||
*/
|
*/
|
||||||
public function buildShared(): void
|
public function buildShared(array $visited = []): void
|
||||||
{
|
{
|
||||||
if (Config::getExt($this->getName(), 'type') === 'addon') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
if (Config::getExt($this->getName(), 'type') === 'builtin' || Config::getExt($this->getName(), 'build-with-php') === true) {
|
if (Config::getExt($this->getName(), 'type') === 'builtin' || Config::getExt($this->getName(), 'build-with-php') === true) {
|
||||||
if (file_exists(BUILD_MODULES_PATH . '/' . $this->getName() . '.so')) {
|
if (file_exists(BUILD_MODULES_PATH . '/' . $this->getName() . '.so')) {
|
||||||
@ -375,17 +372,21 @@ class Extension
|
|||||||
}
|
}
|
||||||
if (file_exists(BUILD_MODULES_PATH . '/' . $this->getName() . '.so')) {
|
if (file_exists(BUILD_MODULES_PATH . '/' . $this->getName() . '.so')) {
|
||||||
logger()->info('Shared extension [' . $this->getName() . '] was already built, skipping (' . $this->getName() . '.so)');
|
logger()->info('Shared extension [' . $this->getName() . '] was already built, skipping (' . $this->getName() . '.so)');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
logger()->info('Building extension [' . $this->getName() . '] as shared extension (' . $this->getName() . '.so)');
|
logger()->info('Building extension [' . $this->getName() . '] as shared extension (' . $this->getName() . '.so)');
|
||||||
foreach ($this->dependencies as $dependency) {
|
foreach ($this->dependencies as $dependency) {
|
||||||
if (!$dependency instanceof Extension) {
|
if (!$dependency instanceof Extension) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!$dependency->isBuildStatic()) {
|
if (!$dependency->isBuildStatic() && !in_array($dependency->getName(), $visited)) {
|
||||||
logger()->info('extension ' . $this->getName() . ' requires extension ' . $dependency->getName());
|
logger()->info('extension ' . $this->getName() . ' requires extension ' . $dependency->getName());
|
||||||
$dependency->buildShared();
|
$dependency->buildShared([...$visited, $this->getName()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Config::getExt($this->getName(), 'type') === 'addon') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
match (PHP_OS_FAMILY) {
|
match (PHP_OS_FAMILY) {
|
||||||
'Darwin', 'Linux' => $this->buildUnixShared(),
|
'Darwin', 'Linux' => $this->buildUnixShared(),
|
||||||
default => throw new WrongUsageException(PHP_OS_FAMILY . ' build shared extensions is not supported yet'),
|
default => throw new WrongUsageException(PHP_OS_FAMILY . ' build shared extensions is not supported yet'),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user