static-php-cli/src/globals/functions.php
好吧,你想说啥 31c71f180b
Feature perfect swoole extension config (#297)
* improve swoole static build config

* improve swoole static build config

* improve swoole static build config

* improve swoole static build config

* improve swoole static build config

* add cares config

* update swoole depend  config

* update swoole depend  config

* update cares build   config

* update workflow tests.yaml   config

* fix setup-runtime

* test with clang build

* test with clang build

* update cares build config

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* update cares license

* test build

* test build

* test build

* test build

* test add enable libpq

* test add enable libpq

* test add enable libpq

* test add enable libpq

* test add enable libpq

* test add enable libpq

* test add enable libpq

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* test

* update

* update

* update

* update

* update

* update

* update

* update

* update

* compatible old

* fix code format

* fix code format

* add swoole test case

* add swoole test case

* add phpstan ignore error

* add phpstan ignore error

* add phpstan ignore error

* add phpstan ignore error

* add phpstan ignore error

* update phpstan.neon

* update swoole extension test case

* update swoole test case

* adjust config order and depends

* revert LinuxBuilder

* remove swoole.phpt

* re-adjust swoole args

* update test-extensions and some PHPDoc

* revert: debian and alpine clang doctor install

* revert: MacOSBuilder

* fix: extract hook for archive not working

* revert: build tests

* use addon mode to swoole database hook

* add hook tests

* test minimal

* test minimal

* sort config

---------

Co-authored-by: crazywhalecc <jesse2061@outlook.com>
2024-01-03 10:31:21 +08:00

130 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
use Psr\Log\LoggerInterface;
use SPC\exception\RuntimeException;
use SPC\exception\WrongUsageException;
use SPC\util\UnixShell;
use SPC\util\WindowsCmd;
use ZM\Logger\ConsoleLogger;
/**
* Judge if an array is an associative array
*/
function is_assoc_array(mixed $array): bool
{
return is_array($array) && (!empty($array) && array_keys($array) !== range(0, count($array) - 1));
}
/**
* Return a logger instance
*/
function logger(): LoggerInterface
{
global $ob_logger;
if ($ob_logger === null) {
return new ConsoleLogger();
}
return $ob_logger;
}
/**
* Transfer architecture name to gnu triplet
*
* @throws WrongUsageException
*/
function arch2gnu(string $arch): string
{
$arch = strtolower($arch);
return match ($arch) {
'x86_64', 'x64', 'amd64' => '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;
}
/**
* Get Family name of current OS
*
* @throws WrongUsageException
*/
function osfamily2dir(): string
{
return match (PHP_OS_FAMILY) {
/* @phpstan-ignore-next-line */
'Windows', 'WINNT', 'Cygwin' => 'windows',
'Darwin' => 'macos',
'Linux' => 'linux',
'BSD' => 'freebsd',
default => throw new WrongUsageException('Not support os: ' . PHP_OS_FAMILY),
};
}
/**
* Execute the shell command, and the output will be directly printed in the terminal. If there is an error, an exception will be thrown
*
* @throws 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 RuntimeException('Command run failed with code[' . $code . ']: ' . $cmd, $code);
}
return $ret;
}
/**
* Execute a command, return the output and result code
*/
function f_exec(string $command, mixed &$output, mixed &$result_code): bool|string
{
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 f_putenv(string $env): bool
{
logger()->debug('Setting env: ' . $env);
return putenv($env);
}
function shell(?bool $debug = null): UnixShell
{
return new UnixShell($debug);
}
function cmd(?bool $debug = null): WindowsCmd
{
return new WindowsCmd($debug);
}