getOption('no-strip') ? '-g -O0' : '-g -fstack-protector-strong -fpic -fpie -Os -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64')); } } // Define env vars for linux if (PHP_OS_FAMILY === 'Linux') { $arch = arch2gnu(php_uname('m')); if (SystemUtil::isMuslDist()) { self::putenv('SPC_LINUX_DEFAULT_CC=gcc'); self::putenv('SPC_LINUX_DEFAULT_CXX=g++'); self::putenv('SPC_LINUX_DEFAULT_AR=ar'); } else { self::putenv("SPC_LINUX_DEFAULT_CC={$arch}-linux-musl-gcc"); self::putenv("SPC_LINUX_DEFAULT_CXX={$arch}-linux-musl-g++"); self::putenv("SPC_LINUX_DEFAULT_AR={$arch}-linux-musl-ar"); } } // Init env.ini file, read order: // WORKING_DIR/config/env.ini // ROOT_DIR/config/env.ini $ini_files = [ WORKING_DIR . '/config/env.ini', ROOT_DIR . '/config/env.ini', ]; $ini_custom = [ WORKING_DIR . '/config/env.custom.ini', ROOT_DIR . '/config/env.custom.ini', ]; $ini = null; foreach ($ini_files as $ini_file) { if (file_exists($ini_file)) { $ini = parse_ini_file($ini_file, true); break; } } if ($ini === null) { throw new WrongUsageException('env.ini not found'); } if ($ini === false || !isset($ini['global'])) { throw new WrongUsageException('Failed to parse ' . $ini_file); } // apply custom env foreach ($ini_custom as $ini_file) { if (file_exists($ini_file)) { $ini_custom = parse_ini_file($ini_file, true); if ($ini_custom !== false) { $ini['global'] = array_merge($ini['global'], $ini_custom['global'] ?? []); match (PHP_OS_FAMILY) { 'Windows' => $ini['windows'] = array_merge($ini['windows'], $ini_custom['windows'] ?? []), 'Darwin' => $ini['macos'] = array_merge($ini['macos'], $ini_custom['macos'] ?? []), 'Linux' => $ini['linux'] = array_merge($ini['linux'], $ini_custom['linux'] ?? []), 'BSD' => $ini['freebsd'] = array_merge($ini['freebsd'], $ini_custom['freebsd'] ?? []), default => null, }; } break; } } self::applyConfig($ini['global']); match (PHP_OS_FAMILY) { 'Windows' => self::applyConfig($ini['windows']), 'Darwin' => self::applyConfig($ini['macos']), 'Linux' => self::applyConfig($ini['linux']), 'BSD' => self::applyConfig($ini['freebsd']), default => null, }; if (PHP_OS_FAMILY === 'Linux' && !filter_var(getenv('SPC_NO_MUSL_PATH'), FILTER_VALIDATE_BOOLEAN)) { self::putenv("SPC_PHP_DEFAULT_LD_LIBRARY_PATH_CMD=LD_LIBRARY_PATH=/usr/local/musl/{$arch}-linux-musl/lib"); self::putenv("PATH=/usr/local/musl/bin:/usr/local/musl/{$arch}-linux-musl/bin:" . getenv('PATH')); } } public static function putenv(string $val): void { f_putenv($val); self::$env_cache[] = $val; } private static function applyConfig(array $ini): void { foreach ($ini as $k => $v) { if (getenv($k) === false) { self::putenv($k . '=' . $v); } } } }