mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-08 17:35:36 +08:00
Feat/clickhouse (#1137)
This commit is contained in:
11
.github/pull_request_template.md
vendored
11
.github/pull_request_template.md
vendored
@@ -1,17 +1,12 @@
|
|||||||
## What does this PR do?
|
## What does this PR do?
|
||||||
|
|
||||||
|
<!-- Please describe the changes made in this PR here. -->
|
||||||
|
|
||||||
|
|
||||||
## Checklist before merging
|
## Checklist before merging
|
||||||
|
|
||||||
> If your PR involves the changes mentioned below and completed the action, please tick the corresponding option.
|
- If you modified `*.php` or `*.yml`, run them locally to ensure your changes are valid:
|
||||||
> If a modification is not involved, please skip it directly.
|
|
||||||
|
|
||||||
- If you modified `*.php` or `*.json`, run them locally to ensure your changes are valid:
|
|
||||||
- [ ] `composer cs-fix`
|
- [ ] `composer cs-fix`
|
||||||
- [ ] `composer analyse`
|
- [ ] `composer analyse`
|
||||||
- [ ] `composer test`
|
- [ ] `composer test`
|
||||||
- [ ] `bin/spc dev:sort-config`
|
- [ ] `bin/spc dev:lint-config`
|
||||||
- If it's an extension or dependency update, please ensure the following:
|
|
||||||
- [ ] Add your test combination to `src/globals/test-extensions.php`.
|
|
||||||
- [ ] If adding new or fixing bugs, add commit message containing `extension test` or `test extensions` to trigger full test suite.
|
|
||||||
|
|||||||
19
config/pkg/ext/ext-clickhouse.yml
Normal file
19
config/pkg/ext/ext-clickhouse.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
ext-clickhouse:
|
||||||
|
type: php-extension
|
||||||
|
artifact:
|
||||||
|
source:
|
||||||
|
type: ghtar
|
||||||
|
repo: iliaal/php_clickhouse
|
||||||
|
extract: php-src/ext/clickhouse
|
||||||
|
prefer-stable: true
|
||||||
|
metadata:
|
||||||
|
license-files: [LICENSE]
|
||||||
|
license: PHP-3.01
|
||||||
|
suggests@unix:
|
||||||
|
- openssl
|
||||||
|
lang: cpp
|
||||||
|
php-extension:
|
||||||
|
os:
|
||||||
|
- Linux
|
||||||
|
- Darwin
|
||||||
|
arg-type@unix: custom
|
||||||
40
src/Package/Extension/clickhouse.php
Normal file
40
src/Package/Extension/clickhouse.php
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Package\Extension;
|
||||||
|
|
||||||
|
use Package\Target\php;
|
||||||
|
use StaticPHP\Attribute\Package\BeforeStage;
|
||||||
|
use StaticPHP\Attribute\Package\CustomPhpConfigureArg;
|
||||||
|
use StaticPHP\Attribute\Package\Extension;
|
||||||
|
use StaticPHP\Attribute\PatchDescription;
|
||||||
|
use StaticPHP\Package\PackageInstaller;
|
||||||
|
use StaticPHP\Package\PhpExtensionPackage;
|
||||||
|
use StaticPHP\Util\FileSystem;
|
||||||
|
|
||||||
|
#[Extension('clickhouse')]
|
||||||
|
class clickhouse extends PhpExtensionPackage
|
||||||
|
{
|
||||||
|
#[BeforeStage('php', [php::class, 'buildconfForUnix'], 'ext-clickhouse')]
|
||||||
|
#[PatchDescription('Replace THIS_DIR=`dirname $0` with PHP_EXT_SRCDIR() in config.m4 so include paths resolve to the ext source dir during PHP main configure (dirname $0 returns "." when run from php-src root).')]
|
||||||
|
public function patchBeforeBuildconfUnix(): void
|
||||||
|
{
|
||||||
|
FileSystem::replaceFileRegex(
|
||||||
|
"{$this->getSourceDir()}/config.m4",
|
||||||
|
'/^(\s*)THIS_DIR=.*/m',
|
||||||
|
'$1THIS_DIR=PHP_EXT_SRCDIR()',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[CustomPhpConfigureArg('Darwin')]
|
||||||
|
#[CustomPhpConfigureArg('Linux')]
|
||||||
|
public function getUnixConfigureArg(bool $shared, PackageInstaller $installer): string
|
||||||
|
{
|
||||||
|
$arg = '--enable-clickhouse' . ($shared ? '=shared' : '');
|
||||||
|
if ($installer->getLibraryPackage('openssl')) {
|
||||||
|
$arg .= ' --enable-clickhouse-openssl';
|
||||||
|
}
|
||||||
|
return $arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -352,14 +352,13 @@ trait unix
|
|||||||
|
|
||||||
// ------------- SPC_CMD_VAR_PHP_EMBED_TYPE=static -------------
|
// ------------- SPC_CMD_VAR_PHP_EMBED_TYPE=static -------------
|
||||||
|
|
||||||
// process libphp.a for static embed
|
// process libphp.a for static embed (only when present)
|
||||||
if (!file_exists("{$package->getLibDir()}/libphp.a")) {
|
if (file_exists("{$package->getLibDir()}/libphp.a")) {
|
||||||
return;
|
$ar = getenv('AR') ?: 'ar';
|
||||||
|
$libphp_a = "{$package->getLibDir()}/libphp.a";
|
||||||
|
shell()->exec("{$ar} -t {$libphp_a} | grep '\\.a$' | xargs -n1 {$ar} d {$libphp_a}");
|
||||||
|
UnixUtil::exportDynamicSymbols($libphp_a);
|
||||||
}
|
}
|
||||||
$ar = getenv('AR') ?: 'ar';
|
|
||||||
$libphp_a = "{$package->getLibDir()}/libphp.a";
|
|
||||||
shell()->exec("{$ar} -t {$libphp_a} | grep '\\.a$' | xargs -n1 {$ar} d {$libphp_a}");
|
|
||||||
UnixUtil::exportDynamicSymbols($libphp_a);
|
|
||||||
|
|
||||||
// deploy embed php scripts
|
// deploy embed php scripts
|
||||||
$package->runStage([$this, 'patchUnixEmbedScripts']);
|
$package->runStage([$this, 'patchUnixEmbedScripts']);
|
||||||
@@ -508,7 +507,8 @@ trait unix
|
|||||||
if (file_exists(BUILD_BIN_PATH . '/php-config')) {
|
if (file_exists(BUILD_BIN_PATH . '/php-config')) {
|
||||||
logger()->debug('Patching php-config prefix and libs order');
|
logger()->debug('Patching php-config prefix and libs order');
|
||||||
$php_config_str = FileSystem::readFile(BUILD_BIN_PATH . '/php-config');
|
$php_config_str = FileSystem::readFile(BUILD_BIN_PATH . '/php-config');
|
||||||
$php_config_str = str_replace('prefix=""', 'prefix="' . BUILD_ROOT_PATH . '"', $php_config_str);
|
// anchor to start-of-line so we don't also match `program_prefix=""`
|
||||||
|
$php_config_str = preg_replace('/^prefix=""/m', 'prefix="' . BUILD_ROOT_PATH . '"', $php_config_str);
|
||||||
// move mimalloc to the beginning of libs
|
// move mimalloc to the beginning of libs
|
||||||
$php_config_str = preg_replace('/(libs=")(.*?)\s*(' . preg_quote(BUILD_LIB_PATH, '/') . '\/mimalloc\.o)\s*(.*?)"/', '$1$3 $2 $4"', $php_config_str);
|
$php_config_str = preg_replace('/(libs=")(.*?)\s*(' . preg_quote(BUILD_LIB_PATH, '/') . '\/mimalloc\.o)\s*(.*?)"/', '$1$3 $2 $4"', $php_config_str);
|
||||||
// move lstdc++ to the end of libs
|
// move lstdc++ to the end of libs
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ class PhpExtensionPackage extends Package
|
|||||||
shell()->cd($package->getSourceDir())
|
shell()->cd($package->getSourceDir())
|
||||||
->setEnv($env)
|
->setEnv($env)
|
||||||
->exec(
|
->exec(
|
||||||
'./configure ' . $this->getPhpConfigureArg(SystemTarget::getCurrentPlatformString(), true) .
|
'./configure ' . $this->getPhpConfigureArg(SystemTarget::getTargetOS(), true) .
|
||||||
' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' .
|
' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' .
|
||||||
"--enable-shared --disable-static {$phpvars}"
|
"--enable-shared --disable-static {$phpvars}"
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ $prefer_pre_built = false;
|
|||||||
|
|
||||||
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
||||||
$extensions = match (PHP_OS_FAMILY) {
|
$extensions = match (PHP_OS_FAMILY) {
|
||||||
'Linux', 'Darwin' => 'curl,swoole',
|
'Linux', 'Darwin' => 'openssl,zstd,clickhouse',
|
||||||
'Windows' => 'intl',
|
'Windows' => 'intl',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user