From 935fbbd31a7ca157c15f319dda23f86ab9d85297 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 13 Mar 2026 10:14:05 +0800 Subject: [PATCH] Add ext-rdkafka --- config/pkg/ext/ext-rdkafka.yml | 15 +++++++++ src/Package/Extension/rdkafka.php | 55 +++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 config/pkg/ext/ext-rdkafka.yml create mode 100644 src/Package/Extension/rdkafka.php diff --git a/config/pkg/ext/ext-rdkafka.yml b/config/pkg/ext/ext-rdkafka.yml new file mode 100644 index 00000000..1f26e49c --- /dev/null +++ b/config/pkg/ext/ext-rdkafka.yml @@ -0,0 +1,15 @@ +ext-rdkafka: + type: php-extension + artifact: + source: + type: ghtar + repo: arnaud-lb/php-rdkafka + extract: php-src/ext/rdkafka + metadata: + license-files: [LICENSE] + license: MIT + depends: + - librdkafka + lang: cpp + php-extension: + arg-type: custom diff --git a/src/Package/Extension/rdkafka.php b/src/Package/Extension/rdkafka.php new file mode 100644 index 00000000..4bb28ee5 --- /dev/null +++ b/src/Package/Extension/rdkafka.php @@ -0,0 +1,55 @@ +getSourceDir()}/config.m4", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm\n", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm \$RDKAFKA_LIBS\n"); + FileSystem::replaceFileStr("{$this->getSourceDir()}/config.m4", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm\"\n", '-L$RDKAFKA_DIR/$PHP_LIBDIR -lm $RDKAFKA_LIBS"'); + FileSystem::replaceFileStr("{$this->getSourceDir()}/config.m4", 'PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,', 'AC_CHECK_LIB([$LIBNAME], [$LIBSYMBOL],'); + return true; + } + + #[BeforeStage('php', [php::class, 'makeForUnix'], 'ext-rdkafka')] + #[PatchDescription('Patch rdkafka extension source code to fix build errors with inline builds')] + public function patchBeforeMake(): bool + { + // when compiling rdkafka with inline builds, it shows some errors, I don't know why. + FileSystem::replaceFileStr( + "{$this->getSourceDir()}/rdkafka.c", + "#ifdef HAS_RD_KAFKA_TRANSACTIONS\n#include \"kafka_error_exception.h\"\n#endif", + '#include "kafka_error_exception.h"' + ); + FileSystem::replaceFileStr( + "{$this->getSourceDir()}/kafka_error_exception.h", + ['#ifdef HAS_RD_KAFKA_TRANSACTIONS', '#endif'], + '' + ); + return true; + } + + #[CustomPhpConfigureArg('Darwin')] + #[CustomPhpConfigureArg('Linux')] + public function getUnixConfigureArg(bool $shared, PackageBuilder $builder): string + { + $pkgconf_libs = new SPCConfigUtil(['no_php' => true, 'libs_only_deps' => true])->getExtensionConfig($this); + return '--with-rdkafka=' . ($shared ? 'shared,' : '') . $builder->getBuildRootPath() . " RDKAFKA_LIBS=\"{$pkgconf_libs['libs']}\""; + } +}