Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/SPC/builder/linux/SystemUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public static function getSupportedDistros(): array
{
return [
// debian-like
'debian', 'ubuntu', 'Deepin',
'debian', 'ubuntu', 'Deepin', 'neon',
// rhel-like
'redhat',
// centos
Expand Down
4 changes: 2 additions & 2 deletions src/SPC/doctor/item/LinuxToolCheckList.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public function checkSystemOSPackages(): ?CheckResult
public function fixBuildTools(array $distro, array $missing): bool
{
$install_cmd = match ($distro['dist']) {
'ubuntu', 'debian', 'Deepin' => 'apt-get install -y',
'ubuntu', 'debian', 'Deepin', 'neon' => 'apt-get install -y',
'alpine' => 'apk add',
'redhat' => 'dnf install -y',
'centos' => 'yum install -y',
Expand All @@ -128,7 +128,7 @@ public function fixBuildTools(array $distro, array $missing): bool
logger()->warning('Current user (' . $user . ') is not root, using sudo for running command (may require password input)');
}

$is_debian = in_array($distro['dist'], ['debian', 'ubuntu', 'Deepin']);
$is_debian = in_array($distro['dist'], ['debian', 'ubuntu', 'Deepin', 'neon']);
$to_install = $is_debian ? str_replace('xz', 'xz-utils', $missing) : $missing;
// debian, alpine libtool -> libtoolize
$to_install = str_replace('libtoolize', 'libtool', $to_install);
Expand Down
7 changes: 6 additions & 1 deletion src/StaticPHP/Artifact/ArtifactDownloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,12 @@ private function downloadWithType(Artifact $artifact, int $current, int $total,
$instance = new $call();
$lock = $instance->download($artifact->getName(), $item['config'], $this);
} else {
throw new ValidationException("Artifact has invalid download type '{$item['config']['type']}' for {$item['display']}.");
if ($item['config']['type'] === 'custom') {
$msg = "Artifact [{$artifact->getName()}] has no valid custom " . SystemTarget::getCurrentPlatformString() . ' download callback defined.';
} else {
$msg = "Artifact has invalid download type '{$item['config']['type']}' for {$item['display']}.";
}
throw new ValidationException($msg);
}
if (!$lock instanceof DownloadResult) {
throw new ValidationException("Artifact {$artifact->getName()} has invalid custom return value. Must be instance of DownloadResult.");
Expand Down
7 changes: 4 additions & 3 deletions src/StaticPHP/Doctor/Doctor.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public function checkAll(bool $interactive = true): bool
InteractiveTerm::notice('Starting doctor checks ...');
}
foreach ($this->getValidCheckList() as $check) {
if (!$this->checkItem($check)) {
if (!$this->checkItem($check, $interactive)) {
return false;
}
}
Expand All @@ -47,7 +47,7 @@ public function checkAll(bool $interactive = true): bool
* @param CheckItem|string $check The check item to be checked
* @return bool True if the check passed or was fixed, false otherwise
*/
public function checkItem(CheckItem|string $check): bool
public function checkItem(CheckItem|string $check, bool $interactive = true): bool
{
if (is_string($check)) {
$found = null;
Expand All @@ -63,7 +63,8 @@ public function checkItem(CheckItem|string $check): bool
}
$check = $found;
}
$this->output?->write("Checking <comment>{$check->item_name}</comment> ... ");
$prepend = $interactive ? ' - ' : '';
$this->output?->write("{$prepend}Checking <comment>{$check->item_name}</comment> ... ");

// call check
$result = call_user_func($check->callback);
Expand Down
5 changes: 3 additions & 2 deletions src/StaticPHP/Doctor/Item/LinuxMuslCheck.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use StaticPHP\DI\ApplicationContext;
use StaticPHP\Doctor\CheckResult;
use StaticPHP\Runtime\Shell\Shell;
use StaticPHP\Toolchain\Interface\ToolchainInterface;
use StaticPHP\Toolchain\MuslToolchain;
use StaticPHP\Toolchain\ZigToolchain;
use StaticPHP\Util\FileSystem;
Expand All @@ -25,8 +26,8 @@ class LinuxMuslCheck
{
public static function optionalCheck(): bool
{
return getenv('SPC_TOOLCHAIN') === MuslToolchain::class ||
(getenv('SPC_TOOLCHAIN') === ZigToolchain::class && !LinuxUtil::isMuslDist());
$toolchain = ApplicationContext::get(ToolchainInterface::class);
return $toolchain instanceof MuslToolchain || $toolchain instanceof ZigToolchain && !LinuxUtil::isMuslDist();
}

/** @noinspection PhpUnused */
Expand Down
16 changes: 15 additions & 1 deletion src/StaticPHP/Util/System/LinuxUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@ class LinuxUtil extends UnixUtil
* Get current linux distro name and version.
*
* @noinspection PhpMissingBreakStatementInspection
* @return array{dist: string, ver: string} Linux distro info (unknown if not found)
* @return array{dist: string, ver: string, family: string} Linux distro info (unknown if not found)
*/
public static function getOSRelease(): array
{
$ret = [
'dist' => 'unknown',
'ver' => 'unknown',
'family' => 'unknown',
];
switch (true) {
case file_exists('/etc/centos-release'):
Expand All @@ -44,6 +45,9 @@ public static function getOSRelease(): array
if (preg_match('/^ID=(.*)$/', $line, $matches)) {
$ret['dist'] = $matches[1];
}
if (preg_match('/^ID_LIKE=(.*)$/', $line, $matches)) {
$ret['family'] = $matches[1];
}
if (preg_match('/^VERSION_ID=(.*)$/', $line, $matches)) {
$ret['ver'] = $matches[1];
}
Expand Down Expand Up @@ -103,6 +107,16 @@ public static function getSupportedDistros(): array
];
}

/**
* Check if current linux distro is debian-based.
*/
public static function isDebianDist(): bool
{
$dist = static::getOSRelease()['dist'];
$family = explode(' ', static::getOSRelease()['family']);
return in_array($dist, ['debian', 'ubuntu', 'Deepin', 'neon']) || in_array('debian', $family);
}

/**
* Get libc version string from ldd.
*/
Expand Down