'x86_64', 'arm64', 'aarch64' => 'aarch64', default => throw new WrongUsageException('Not support arch: ' . $arch), // 'armv7' => 'arm', }; } function quote(string $str, string $quote = '"'): string { return $quote . $str . $quote; } /** * 将不同系统环境的编译使用工具集的文件夹名称进行一个返回 * * @throws WrongUsageException */ function osfamily2dir(): string { return match (PHP_OS_FAMILY) { /* @phpstan-ignore-next-line */ 'Windows', 'WINNT', 'Cygwin' => 'windows', 'Darwin' => 'macos', 'Linux' => 'linux', default => throw new WrongUsageException('Not support os: ' . PHP_OS_FAMILY), }; } /** * @throws \SPC\exception\RuntimeException */ function f_passthru(string $cmd): ?bool { $danger = false; foreach (DANGER_CMD as $danger_cmd) { if (str_starts_with($cmd, $danger_cmd . ' ')) { $danger = true; break; } } if ($danger) { logger()->notice('Running dangerous command: ' . $cmd); } else { logger()->debug('Running command with direct output: ' . $cmd); } $ret = passthru($cmd, $code); if ($code !== 0) { throw new \SPC\exception\RuntimeException('Command run failed with code[' . $code . ']: ' . $cmd, $code); } return $ret; } function f_exec(string $command, &$output, &$result_code) { logger()->debug('Running command (no output) : ' . $command); return exec($command, $output, $result_code); } function f_mkdir(string $directory, int $permissions = 0777, bool $recursive = false): bool { if (file_exists($directory)) { logger()->debug("Dir {$directory} already exists, ignored"); return true; } logger()->debug('Making new directory ' . ($recursive ? 'recursive' : '') . ': ' . $directory); return mkdir($directory, $permissions, $recursive); } function shell(): UnixShell { return new UnixShell(); }