builder instanceof WindowsBuilder) { throw new ValidationException('grpc extension does not support windows yet'); } FileSystem::replaceFileStr( $this->source_dir . '/src/php/ext/grpc/call.c', 'zend_exception_get_default(TSRMLS_C),', 'zend_ce_exception,', ); if (SPCTarget::getTargetOS() === 'Darwin') { FileSystem::replaceFileRegex( $this->source_dir . '/config.m4', '/GRPC_LIBDIR=.*$/m', 'GRPC_LIBDIR=' . BUILD_LIB_PATH . "\n" . 'LDFLAGS="$LDFLAGS -framework CoreFoundation"' ); } FileSystem::replaceFileStr("{$this->source_dir}/config.m4", "CFLAGS=\"-std=c11 -g -O2\"\n", ''); file_put_contents("{$this->source_dir}/php_grpc.h", '#include "src/php/ext/grpc/php_grpc.h"'); return true; } public function patchBeforeConfigure(): bool { $util = new SPCConfigUtil($this->builder, ['libs_only_deps' => true]); $config = $util->getExtensionConfig($this); $libs = $config['libs']; FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/configure', '-lgrpc', $libs); return true; } public function patchBeforeMake(): bool { parent::patchBeforeMake(); // add -Wno-strict-prototypes GlobalEnvManager::putenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS=' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -Wno-strict-prototypes'); return true; } protected function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); $env['CPPFLAGS'] = $env['CXXFLAGS'] . ' -Wno-attributes'; return $env; } }