From e3c542d9dfa81db226d5eac3efbe67ae321c90cb Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Fri, 12 Apr 2024 15:53:38 +0800 Subject: [PATCH] add qdbm for dba (#409) * add qdbm for dba * add windows support for dba-qdbm * fix test scripts * fix test scripts --- .github/workflows/tests.yml | 2 +- config/ext.json | 5 +++- config/lib.json | 12 ++++++++ config/source.json | 9 ++++++ src/SPC/builder/extension/dba.php | 24 ++++++++++++++++ src/SPC/builder/linux/library/qdbm.php | 12 ++++++++ src/SPC/builder/macos/library/qdbm.php | 12 ++++++++ src/SPC/builder/unix/library/qdbm.php | 33 ++++++++++++++++++++++ src/SPC/builder/windows/WindowsBuilder.php | 3 ++ src/SPC/builder/windows/library/qdbm.php | 24 ++++++++++++++++ src/globals/test-extensions.php | 9 +++--- 11 files changed, 138 insertions(+), 7 deletions(-) create mode 100644 src/SPC/builder/extension/dba.php create mode 100644 src/SPC/builder/linux/library/qdbm.php create mode 100644 src/SPC/builder/macos/library/qdbm.php create mode 100644 src/SPC/builder/unix/library/qdbm.php create mode 100644 src/SPC/builder/windows/library/qdbm.php diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a096b1fa..2eda9ad3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -168,4 +168,4 @@ jobs: bin/spc download --for-extensions="$(php src/globals/test-extensions.php extensions)" --for-libs="$(php src/globals/test-extensions.php libs)" --with-php=${{ matrix.php }} --ignore-cache-sources=php-src --debug - name: "Run Build Tests (build)" - run: bin/spc build "$(php src/globals/test-extensions.php extensions)" $(php src/globals/test-extensions.php libs_cmd) --build-cli --build-micro --build-fpm --debug + run: bin/spc build "$(php src/globals/test-extensions.php extensions)" --with-libs="$(php src/globals/test-extensions.php libs)" --build-cli --build-micro --build-fpm --debug diff --git a/config/ext.json b/config/ext.json index 6d5765e5..f4c6ecbe 100644 --- a/config/ext.json +++ b/config/ext.json @@ -43,7 +43,10 @@ }, "dba": { "type": "builtin", - "arg-type-windows": "with" + "arg-type": "custom", + "lib-suggests": [ + "qdbm" + ] }, "dom": { "type": "builtin", diff --git a/config/lib.json b/config/lib.json index 746f508e..6dc2caac 100644 --- a/config/lib.json +++ b/config/lib.json @@ -525,6 +525,18 @@ "zstd" ] }, + "qdbm": { + "source": "qdbm", + "static-libs-unix": [ + "libqdbm.a" + ], + "static-libs-windows": [ + "qdbm_a.lib" + ], + "headers-windows": [ + "depot.h" + ] + }, "readline": { "source": "readline", "static-libs-unix": [ diff --git a/config/source.json b/config/source.json index 87099347..0ecbb49d 100644 --- a/config/source.json +++ b/config/source.json @@ -551,6 +551,15 @@ "path": "LICENSE" } }, + "qdbm": { + "type": "git", + "url": "https://github.com/static-php/qdbm.git", + "rev": "main", + "license": { + "type": "file", + "path": "COPYING" + } + }, "rar": { "type": "git", "url": "https://github.com/static-php/php-rar.git", diff --git a/src/SPC/builder/extension/dba.php b/src/SPC/builder/extension/dba.php new file mode 100644 index 00000000..011e4746 --- /dev/null +++ b/src/SPC/builder/extension/dba.php @@ -0,0 +1,24 @@ +builder->getLib('qdbm') ? (' --with-qdbm=' . BUILD_ROOT_PATH) : ''; + return '--enable-dba' . $qdbm; + } + + public function getWindowsConfigureArg(): string + { + $qdbm = $this->builder->getLib('qdbm') ? ' --with-qdbm' : ''; + return '--with-dba' . $qdbm; + } +} diff --git a/src/SPC/builder/linux/library/qdbm.php b/src/SPC/builder/linux/library/qdbm.php new file mode 100644 index 00000000..b0bc8960 --- /dev/null +++ b/src/SPC/builder/linux/library/qdbm.php @@ -0,0 +1,12 @@ +cd($this->source_dir) + ->exec( + './configure ' . + '--enable-static --disable-shared ' . + '--prefix=' + ) + ->exec('make clean'); + FileSystem::replaceFileRegex($this->source_dir . '/Makefile', '/MYLIBS = libqdbm.a.*/m', 'MYLIBS = libqdbm.a'); + shell()->cd($this->source_dir) + ->exec("make -j{$this->builder->concurrency}" . ($this instanceof MacOSLibraryBase ? ' mac' : '')) + ->exec('make install DESTDIR=' . BUILD_ROOT_PATH); + $this->patchPkgconfPrefix(['qdbm.pc']); + } +} diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 256b392b..2e5a2d0d 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -46,6 +46,9 @@ class WindowsBuilder extends BuilderBase // make cmake toolchain $this->cmake_toolchain_file = SystemUtil::makeCmakeToolchainFile(); + + f_mkdir(BUILD_INCLUDE_PATH, recursive: true); + f_mkdir(BUILD_LIB_PATH, recursive: true); } /** diff --git a/src/SPC/builder/windows/library/qdbm.php b/src/SPC/builder/windows/library/qdbm.php new file mode 100644 index 00000000..67617b34 --- /dev/null +++ b/src/SPC/builder/windows/library/qdbm.php @@ -0,0 +1,24 @@ +cd($this->source_dir) + ->execWithWrapper( + $this->builder->makeSimpleWrapper('nmake'), + '/f VCMakefile' + ); + copy($this->source_dir . '\qdbm_a.lib', BUILD_LIB_PATH . '\qdbm_a.lib'); + copy($this->source_dir . '\depot.h', BUILD_INCLUDE_PATH . '\depot.h'); + // FileSystem::copyDir($this->source_dir . '\include\curl', BUILD_INCLUDE_PATH . '\curl'); + } +} diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 07497e67..eb96a1e8 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,14 +13,14 @@ declare(strict_types=1); // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'yac', - 'Windows' => 'mbstring,pdo_sqlite,mbregex,yac', + 'Linux', 'Darwin' => 'dba', + 'Windows' => 'mbstring,pdo_sqlite,mbregex,dba', }; // If you want to test lib-suggests feature with extension, add them below (comma separated, example `libwebp,libavif`). $with_libs = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => '', - 'Windows' => '', + 'Linux', 'Darwin' => 'qdbm', + 'Windows' => 'qdbm', }; // Please change your test base combination. We recommend testing with `common`. @@ -62,7 +62,6 @@ $final_libs = trim($with_libs, $trim_value); if (PHP_OS_FAMILY === 'Windows') { $final_extensions_cmd = '"' . $final_extensions . '"'; - $final_libs = $final_libs === '' ? '' : ('"' . $final_libs . '"'); } else { $final_extensions_cmd = $final_extensions; }