From 51ce2befd8263a8edfa0a355f2c4e9cea3922388 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 28 Jul 2023 23:47:22 +0800 Subject: [PATCH] add library, extension patches in separate classes --- src/SPC/builder/extension/bz2.php | 25 ++++++++++++ src/SPC/builder/extension/curl.php | 52 ++++++++++++++++++++++++ src/SPC/builder/extension/event.php | 16 ++++++++ src/SPC/builder/extension/memcache.php | 31 ++++++++++++++ src/SPC/builder/extension/openssl.php | 25 ++++++++++++ src/SPC/builder/extension/pdo_sqlite.php | 28 +++++++++++++ src/SPC/builder/extension/pgsql.php | 28 +++++++++++++ src/SPC/builder/extension/readline.php | 28 +++++++++++++ src/SPC/builder/extension/ssh2.php | 28 +++++++++++++ src/SPC/builder/extension/swow.php | 14 +++++++ src/SPC/builder/linux/library/libpng.php | 26 +++++++++--- src/SPC/builder/macos/library/curl.php | 27 ++++++++---- 12 files changed, 316 insertions(+), 12 deletions(-) create mode 100644 src/SPC/builder/extension/bz2.php create mode 100644 src/SPC/builder/extension/curl.php create mode 100644 src/SPC/builder/extension/openssl.php create mode 100644 src/SPC/builder/extension/pdo_sqlite.php create mode 100644 src/SPC/builder/extension/pgsql.php create mode 100644 src/SPC/builder/extension/readline.php create mode 100644 src/SPC/builder/extension/ssh2.php diff --git a/src/SPC/builder/extension/bz2.php b/src/SPC/builder/extension/bz2.php new file mode 100644 index 00000000..c11060f1 --- /dev/null +++ b/src/SPC/builder/extension/bz2.php @@ -0,0 +1,25 @@ +builder instanceof MacOSBuilder ? ' ' . $this->builder->getFrameworks(true) . ' ' : ''; + FileSystem::replaceFile(SOURCE_PATH . '/php-src/configure', REPLACE_FILE_PREG, '/-lbz2/', $this->getLibFilesString() . $frameworks); + return true; + } +} diff --git a/src/SPC/builder/extension/curl.php b/src/SPC/builder/extension/curl.php new file mode 100644 index 00000000..c733efeb --- /dev/null +++ b/src/SPC/builder/extension/curl.php @@ -0,0 +1,52 @@ +info('patching before-configure for curl checks'); + $file1 = "AC_DEFUN([PHP_CHECK_LIBRARY], [\n $3\n])"; + $files = FileSystem::readFile(SOURCE_PATH . '/php-src/ext/curl/config.m4'); + $file2 = 'AC_DEFUN([PHP_CHECK_LIBRARY], [ + save_old_LDFLAGS=$LDFLAGS + ac_stuff="$5" + + save_ext_shared=$ext_shared + ext_shared=yes + PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS) + AC_CHECK_LIB([$1],[$2],[ + LDFLAGS=$save_old_LDFLAGS + ext_shared=$save_ext_shared + $3 + ],[ + LDFLAGS=$save_old_LDFLAGS + ext_shared=$save_ext_shared + unset ac_cv_lib_$1[]_$2 + $4 + ])dnl +])'; + file_put_contents(SOURCE_PATH . '/php-src/ext/curl/config.m4', $file1 . "\n" . $files . "\n" . $file2); + return true; + } + + /** + * @throws FileSystemException + */ + public function patchBeforeConfigure(): bool + { + $frameworks = $this->builder instanceof MacOSBuilder ? ' ' . $this->builder->getFrameworks(true) . ' ' : ''; + FileSystem::replaceFile(SOURCE_PATH . '/php-src/configure', REPLACE_FILE_PREG, '/-lcurl/', $this->getLibFilesString() . $frameworks); + return true; + } +} diff --git a/src/SPC/builder/extension/event.php b/src/SPC/builder/extension/event.php index bee7553c..5dd0bf75 100644 --- a/src/SPC/builder/extension/event.php +++ b/src/SPC/builder/extension/event.php @@ -5,6 +5,8 @@ declare(strict_types=1); namespace SPC\builder\extension; use SPC\builder\Extension; +use SPC\exception\FileSystemException; +use SPC\store\FileSystem; use SPC\util\CustomExt; #[CustomExt('event')] @@ -23,4 +25,18 @@ class event extends Extension } return $arg; } + + /** + * @throws FileSystemException + */ + public function patchBeforeConfigure(): bool + { + FileSystem::replaceFile( + SOURCE_PATH . '/php-src/configure', + REPLACE_FILE_PREG, + '/-levent_openssl/', + $this->getLibFilesString() + ); + return true; + } } diff --git a/src/SPC/builder/extension/memcache.php b/src/SPC/builder/extension/memcache.php index 2d2e2c94..38d00be0 100644 --- a/src/SPC/builder/extension/memcache.php +++ b/src/SPC/builder/extension/memcache.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace SPC\builder\extension; use SPC\builder\Extension; +use SPC\store\FileSystem; use SPC\util\CustomExt; #[CustomExt('memcache')] @@ -14,4 +15,34 @@ class memcache extends Extension { return '--enable-memcache --with-zlib-dir=' . BUILD_ROOT_PATH; } + + public function patchBeforeBuildconf(): bool + { + FileSystem::replaceFile( + SOURCE_PATH . '/php-src/ext/memcache/config9.m4', + REPLACE_FILE_STR, + 'if test -d $abs_srcdir/src ; then', + 'if test -d $abs_srcdir/main ; then' + ); + FileSystem::replaceFile( + SOURCE_PATH . '/php-src/ext/memcache/config9.m4', + REPLACE_FILE_STR, + 'export CPPFLAGS="$CPPFLAGS $INCLUDES"', + 'export CPPFLAGS="$CPPFLAGS $INCLUDES -I$abs_srcdir/main"' + ); + // add for in-tree building + file_put_contents( + SOURCE_PATH . '/php-src/ext/memcache/php_memcache.h', + <<<'EOF' +#ifndef PHP_MEMCACHE_H +#define PHP_MEMCACHE_H + +extern zend_module_entry memcache_module_entry; +#define phpext_memcache_ptr &memcache_module_entry + +#endif +EOF + ); + return true; + } } diff --git a/src/SPC/builder/extension/openssl.php b/src/SPC/builder/extension/openssl.php new file mode 100644 index 00000000..447011da --- /dev/null +++ b/src/SPC/builder/extension/openssl.php @@ -0,0 +1,25 @@ +getLibFilesString() + ); + return true; + } +} diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php new file mode 100644 index 00000000..a5b09ea8 --- /dev/null +++ b/src/SPC/builder/extension/readline.php @@ -0,0 +1,28 @@ +getLibFilesString() + ); + return true; + } +} diff --git a/src/SPC/builder/extension/ssh2.php b/src/SPC/builder/extension/ssh2.php new file mode 100644 index 00000000..cf966ae6 --- /dev/null +++ b/src/SPC/builder/extension/ssh2.php @@ -0,0 +1,28 @@ +getLibFilesString() + ); + return true; + } +} diff --git a/src/SPC/builder/extension/swow.php b/src/SPC/builder/extension/swow.php index 97b5c337..515a81e1 100644 --- a/src/SPC/builder/extension/swow.php +++ b/src/SPC/builder/extension/swow.php @@ -6,6 +6,7 @@ namespace SPC\builder\extension; use SPC\builder\Extension; use SPC\util\CustomExt; +use SPC\util\Util; #[CustomExt('swow')] class swow extends Extension @@ -17,4 +18,17 @@ class swow extends Extension $arg .= $this->builder->getLib('curl') ? ' --enable-swow-curl' : ' --disable-swow-curl'; return $arg; } + + public function patchBeforeBuildconf(): bool + { + if (Util::getPHPVersionID() >= 80000 && !is_link(SOURCE_PATH . '/php-src/ext/swow')) { + if (PHP_OS_FAMILY === 'Windows') { + f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && mklink /D swow swow-src\ext'); + } else { + f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && ln -s swow-src/ext swow'); + } + return true; + } + return false; + } } diff --git a/src/SPC/builder/linux/library/libpng.php b/src/SPC/builder/linux/library/libpng.php index 888c5bdc..54f3357c 100644 --- a/src/SPC/builder/linux/library/libpng.php +++ b/src/SPC/builder/linux/library/libpng.php @@ -20,14 +20,34 @@ declare(strict_types=1); namespace SPC\builder\linux\library; +use SPC\builder\linux\SystemUtil; use SPC\exception\FileSystemException; use SPC\exception\RuntimeException; -use SPC\store\SourcePatcher; +use SPC\store\FileSystem; class libpng extends LinuxLibraryBase { public const NAME = 'libpng'; + public function patchBeforeBuild(): bool + { + FileSystem::replaceFile( + SOURCE_PATH . '/libpng/configure', + REPLACE_FILE_STR, + '-lz', + BUILD_LIB_PATH . '/libz.a' + ); + if (SystemUtil::getOSRelease()['dist'] === 'alpine') { + FileSystem::replaceFile( + SOURCE_PATH . '/libpng/configure', + REPLACE_FILE_STR, + '-lm', + '/usr/lib/libm.a' + ); + } + return true; + } + /** * @throws RuntimeException * @throws FileSystemException @@ -39,10 +59,6 @@ class libpng extends LinuxLibraryBase 'arm64' => '--enable-arm-neon ', default => '', }; - - // patch configure - SourcePatcher::patchUnixLibpng(); - shell()->cd($this->source_dir) ->exec('chmod +x ./configure') ->exec('chmod +x ./install-sh') diff --git a/src/SPC/builder/macos/library/curl.php b/src/SPC/builder/macos/library/curl.php index 5432aa87..fa031de5 100644 --- a/src/SPC/builder/macos/library/curl.php +++ b/src/SPC/builder/macos/library/curl.php @@ -20,19 +20,32 @@ declare(strict_types=1); namespace SPC\builder\macos\library; -use SPC\store\SourcePatcher; +use SPC\exception\FileSystemException; +use SPC\store\FileSystem; class curl extends MacOSLibraryBase { - use \SPC\builder\unix\library\curl { - build as unixBuild; - } + use \SPC\builder\unix\library\curl; public const NAME = 'curl'; - protected function build() + /** + * @throws FileSystemException + */ + public function patchBeforeBuild(): bool { - SourcePatcher::patchCurlMacOS(); - $this->unixBuild(); + FileSystem::replaceFile( + SOURCE_PATH . '/curl/CMakeLists.txt', + REPLACE_FILE_PREG, + '/NOT COREFOUNDATION_FRAMEWORK/m', + 'FALSE' + ); + FileSystem::replaceFile( + SOURCE_PATH . '/curl/CMakeLists.txt', + REPLACE_FILE_PREG, + '/NOT SYSTEMCONFIGURATION_FRAMEWORK/m', + 'FALSE' + ); + return true; } }