Put extension and library compatibility checks before compilation (#451)

This commit is contained in:
Jerry Ma
2024-05-16 13:01:11 +08:00
committed by GitHub
parent 3e84becf77
commit 3136d6edc1
13 changed files with 86 additions and 36 deletions

View File

@@ -33,7 +33,7 @@ abstract class BuilderBase
protected string $patch_point = '';
/**
* Build libraries
* Convert libraries to class
*
* @param array<string> $sorted_libraries Libraries to build (if not empty, must sort first)
* @throws FileSystemException
@@ -41,7 +41,27 @@ abstract class BuilderBase
* @throws WrongUsageException
* @internal
*/
abstract public function buildLibs(array $sorted_libraries);
abstract public function proveLibs(array $sorted_libraries);
/**
* Build libraries
*
* @throws FileSystemException
* @throws RuntimeException
* @throws WrongUsageException
*/
public function buildLibs(): void
{
// build all libs
foreach ($this->libs as $lib) {
match ($lib->tryBuild($this->getOption('rebuild', false))) {
BUILD_STATUS_OK => logger()->info('lib [' . $lib::NAME . '] build success'),
BUILD_STATUS_ALREADY => logger()->notice('lib [' . $lib::NAME . '] already built'),
BUILD_STATUS_FAILED => logger()->error('lib [' . $lib::NAME . '] build failed'),
default => logger()->warning('lib [' . $lib::NAME . '] build status unknown'),
};
}
}
/**
* Add library to build.
@@ -335,6 +355,19 @@ abstract class BuilderBase
return $this->patch_point;
}
/**
* Validate libs and exts can be compiled successfully in current environment
*/
public function validateLibsAndExts(): void
{
foreach ($this->libs as $lib) {
$lib->validate();
}
foreach ($this->exts as $ext) {
$ext->validate();
}
}
public function emitPatchPoint(string $point_name): void
{
$this->patch_point = $point_name;