diff --git a/config/ext.json b/config/ext.json index 85be0b7d..64ff42ec 100644 --- a/config/ext.json +++ b/config/ext.json @@ -708,6 +708,19 @@ "zlib" ] }, + "rdkafka": { + "support": { + "BSD": "wip", + "Windows": "wip" + }, + "type": "external", + "source": "ext-rdkafka", + "arg-type": "custom", + "cpp-extension": true, + "lib-depends": [ + "librdkafka" + ] + }, "swoole": { "support": { "Windows": "no", diff --git a/config/lib.json b/config/lib.json index 61334280..8879763f 100644 --- a/config/lib.json +++ b/config/lib.json @@ -558,6 +558,18 @@ "pkg-config": { "source": "pkg-config" }, + "librdkafka": { + "source": "librdkafka", + "static-libs-unix": [ + "librdkafka.a", + "librdkafka++.a", + "librdkafka-static.a" + ], + "cpp-library": true, + "lib-suggests": [ + "zstd" + ] + }, "postgresql": { "source": "postgresql", "static-libs-unix": [ diff --git a/config/source.json b/config/source.json index 8f9437cc..cb444e0d 100644 --- a/config/source.json +++ b/config/source.json @@ -69,6 +69,23 @@ "path": "LICENSE" } }, + "librdkafka": { + "type": "ghtar", + "repo": "confluentinc/librdkafka", + "license": { + "type": "file", + "path": "LICENSE" + } + }, + "ext-rdkafka": { + "type": "ghtar", + "repo": "arnaud-lb/php-rdkafka", + "path": "php-src/ext/rdkafka", + "license": { + "type": "file", + "path": "LICENSE" + } + }, "ext-event": { "type": "url", "url": "https://bitbucket.org/osmanov/pecl-event/get/3.0.8.tar.gz", diff --git a/src/SPC/builder/extension/rdkafka.php b/src/SPC/builder/extension/rdkafka.php new file mode 100644 index 00000000..50610325 --- /dev/null +++ b/src/SPC/builder/extension/rdkafka.php @@ -0,0 +1,36 @@ +execWithResult('pkg-config --libs --static rdkafka')[1]; + $pkgconf_libs = trim(implode('', $pkgconf_libs)); + return '--with-rdkafka=' . BUILD_ROOT_PATH . ' LIBS="' . $pkgconf_libs . '"'; + } +} diff --git a/src/SPC/builder/linux/library/librdkafka.php b/src/SPC/builder/linux/library/librdkafka.php new file mode 100644 index 00000000..2ccd701a --- /dev/null +++ b/src/SPC/builder/linux/library/librdkafka.php @@ -0,0 +1,13 @@ +builder->getLib('zstd') ? ("STATIC_LIB_libzstd={$builddir}/lib/libzstd.a ") : ''; + shell()->cd($this->source_dir) + ->exec( + $zstd_option . + './configure ' . + '--enable-static --disable-shared --disable-curl --disable-sasl --disable-valgrind --disable-zlib --disable-ssl ' . + ($zstd_option == '' ? '--disable-zstd ' : '') . + '--prefix=' + ) + ->exec('make clean') + ->exec("make -j{$this->builder->concurrency}") + ->exec("make install DESTDIR={$builddir}"); + $this->patchPkgconfPrefix(['rdkafka.pc', 'rdkafka-static.pc', 'rdkafka++.pc', 'rdkafka++-static.pc']); + // remove dynamic libs + shell() + ->exec("rm -rf {$builddir}/lib/*.so.*") + ->exec("rm -rf {$builddir}/lib/*.so") + ->exec("rm -rf {$builddir}/lib/*.dylib"); + } +} diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 8f0c32cc..dee912db 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -21,12 +21,13 @@ // test os (macos-13, macos-14, ubuntu-latest, windows-latest are available) $test_os = [ - 'macos-14', - 'ubuntu-latest', + // 'macos-14', + 'macos-13', + // 'ubuntu-latest', ]; // whether enable thread safe -$zts = true; +$zts = false; $no_strip = false; @@ -38,8 +39,8 @@ // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'apcu,bcmath,bz2,calendar,ctype,curl,dba,dom,exif,fileinfo,filter,ftp,gd,gmp,gettext,iconv,igbinary,imagick,intl,ldap,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,parallel,pcntl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,pgsql,phar,posix,protobuf,readline,redis,session,shmop,simplexml,soap,sockets,sodium,sqlite3,ssh2,sysvmsg,sysvsem,sysvshm,tidy,tokenizer,xlswriter,xml,xmlreader,xmlwriter,zip,zlib,yaml,zstd', - 'Windows' => 'amqp,apcu,bcmath,bz2,calendar,ctype,curl,dba,dom,ds,exif,ffi,fileinfo,filter,ftp,gd,iconv,igbinary,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,rar,redis,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,swow,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yac,yaml,zip,zlib', + 'Linux', 'Darwin' => 'rdkafka', + 'Windows' => 'zlib', }; // If you want to test lib-suggests feature with extension, add them below (comma separated, example `libwebp,libavif`). @@ -52,7 +53,7 @@ // You can use `common`, `bulk`, `minimal` or `none`. // note: combination is only available for *nix platform. Windows must use `none` combination $base_combination = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'none', + 'Linux', 'Darwin' => 'bulk', 'Windows' => 'none', };