diff --git a/src/SPC/builder/extension/xlswriter.php b/src/SPC/builder/extension/xlswriter.php index 24d32d94..7d0350fc 100644 --- a/src/SPC/builder/extension/xlswriter.php +++ b/src/SPC/builder/extension/xlswriter.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace SPC\builder\extension; use SPC\builder\Extension; +use SPC\store\FileSystem; use SPC\store\SourcePatcher; use SPC\util\CustomExt; @@ -28,6 +29,18 @@ class xlswriter extends Extension public function patchBeforeMake(): bool { $patched = parent::patchBeforeMake(); + + // Fix K&R C function declaration in bundled minizip rejected by modern Clang (C23 default) + $mztools = $this->source_dir . '/library/libxlsxwriter/third_party/minizip/mztools.c'; + if (file_exists($mztools)) { + FileSystem::replaceFileStr( + $mztools, + "extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)\nconst char* file;\nconst char* fileOut;\nconst char* fileOutTmp;\nuLong* nRecovered;\nuLong* bytesRecovered;\n{", + "extern int ZEXPORT unzRepair(const char* file, const char* fileOut, const char* fileOutTmp, uLong* nRecovered, uLong* bytesRecovered)\n{" + ); + $patched = true; + } + if (PHP_OS_FAMILY === 'Windows') { // fix windows build with openssl extension duplicate symbol bug SourcePatcher::patchFile('spc_fix_xlswriter_win32.patch', $this->source_dir);