diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 429dace5..fac3ca40 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -105,9 +105,16 @@ abstract class UnixBuilderBase extends BuilderBase if (PHP_OS_FAMILY === 'Darwin') { shell()->exec("dsymutil -f {$binary_path} -o {$debug_file}"); } elseif (PHP_OS_FAMILY === 'Linux') { - shell() - ->exec("objcopy --only-keep-debug {$binary_path} {$debug_file}") - ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + $has_eu_strip = shell()->execWithResult('which eu-strip')[0] === 0; + if ($has_eu_strip) { + shell() + ->exec("eu-strip -f {$debug_file} {$binary_path}") + ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + } else { + shell() + ->exec("objcopy --only-keep-debug {$binary_path} {$debug_file}") + ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + } } else { throw new SPCInternalException('extractDebugInfo is only supported on Linux and macOS'); } @@ -351,8 +358,10 @@ abstract class UnixBuilderBase extends BuilderBase */ protected function processFrankenphpApp(): void { - $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; - SourceManager::initSource(['frankenphp'], ['frankenphp']); + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; + if (!is_dir($frankenphpSourceDir)) { + SourceManager::initSource(['frankenphp'], ['frankenphp']); + } $frankenphpAppPath = $this->getOption('with-frankenphp-app'); if ($frankenphpAppPath) { @@ -376,7 +385,11 @@ abstract class UnixBuilderBase extends BuilderBase protected function getFrankenPHPVersion(): string { - $goModPath = SOURCE_PATH . '/frankenphp/caddy/go.mod'; + if ($version = getenv('FRANKENPHP_VERSION')) { + return $version; + } + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; + $goModPath = $frankenphpSourceDir . '/caddy/go.mod'; if (!file_exists($goModPath)) { throw new SPCInternalException("FrankenPHP caddy/go.mod file not found at {$goModPath}, why did we not download FrankenPHP?"); @@ -397,7 +410,7 @@ abstract class UnixBuilderBase extends BuilderBase $nobrotli = $this->getLib('brotli') === null ? ',nobrotli' : ''; $nowatcher = $this->getLib('watcher') === null ? ',nowatcher' : ''; $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); - $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp\S*#', '', $xcaddyModules); $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . @@ -417,7 +430,6 @@ abstract class UnixBuilderBase extends BuilderBase $dynamic_exports = ' ' . $dynamicSymbolsArgument; } } - $debugFlags = $this->getOption('no-strip') ? '' : '-w -s '; $extLdFlags = "-extldflags '-pie{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = ''; $staticFlags = ''; @@ -442,7 +454,7 @@ abstract class UnixBuilderBase extends BuilderBase 'CGO_CFLAGS' => clean_spaces($cflags), 'CGO_LDFLAGS' => "{$this->arch_ld_flags} {$staticFlags} {$config['ldflags']} {$libs}", 'XCADDY_GO_BUILD_FLAGS' => '-buildmode=pie ' . - '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . $debugFlags . + '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . '-X \'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ' . "v{$frankenPhpVersion} PHP {$libphpVersion} Caddy'\\\" " . "-tags={$muslTags}nobadger,nomysql,nopgx{$nobrotli}{$nowatcher}",