diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index faae465c..6000d1e1 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -252,12 +252,15 @@ class Extension $order = []; $resolve = function ($extension) use (&$resolve, &$loaded, &$order) { + if (!$extension instanceof Extension) { + return; + } if (isset($loaded[$extension->getName()])) { return; } $loaded[$extension->getName()] = true; - foreach ($this->dependencies as $dependency) { + foreach ($extension->dependencies as $dependency) { $resolve($dependency); } diff --git a/src/SPC/builder/extension/swoole.php b/src/SPC/builder/extension/swoole.php index b4f23a2f..6646f128 100644 --- a/src/SPC/builder/extension/swoole.php +++ b/src/SPC/builder/extension/swoole.php @@ -8,6 +8,7 @@ use SPC\builder\Extension; use SPC\builder\macos\MacOSBuilder; use SPC\store\FileSystem; use SPC\util\CustomExt; +use SPC\util\SPCTarget; #[CustomExt('swoole')] class swoole extends Extension @@ -48,7 +49,8 @@ class swoole extends Extension // commonly-used feature: coroutine-time $arg .= ' --enable-swoole-coro-time --with-pic'; - $arg .= $this->builder->getOption('enable-zts') ? ' --enable-swoole-thread --disable-thread-context' : ' --disable-swoole-thread --enable-thread-context'; + $arg .= $this->builder->getOption('enable-zts') && SPCTarget::getTargetOS() !== 'Darwin' ? ' --enable-swoole-thread' : ' --disable-swoole-thread'; + $arg .= $this->builder->getOption('enable-zts') || SPCTarget::getTargetOS() === 'Darwin' ? ' --disable-thread-context' : ' --enable-thread-context'; // required feature: curl, openssl (but curl hook is buggy for php 8.0) $arg .= $this->builder->getPHPVersionID() >= 80100 ? ' --enable-swoole-curl' : ' --disable-swoole-curl'; diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index d0c1cf73..6d3e7729 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -54,6 +54,15 @@ class SPCConfigUtil */ public function config(array $extensions = [], array $libraries = [], bool $include_suggest_ext = false, bool $include_suggest_lib = false): array { + $extra_exts = []; + foreach ($extensions as $ext) { + $extra_exts = array_merge($extra_exts, Config::getExt($ext, 'ext-suggests', [])); + } + foreach ($extra_exts as $ext) { + if ($this->builder?->getExt($ext) && !in_array($ext, $extensions)) { + $extensions[] = $ext; + } + } [$extensions, $libraries] = DependencyUtil::getExtsAndLibs($extensions, $libraries, $include_suggest_ext, $include_suggest_lib); ob_start(); diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index e065c971..cd2ca5fb 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -18,7 +18,7 @@ $test_php_version = [ // '8.3', '8.4', // '8.5', - 'git', + // 'git', ]; // test os (macos-13, macos-14, macos-15, ubuntu-latest, windows-latest are available)