getOption('no-strip') ? '-g -O0' : '-g -Os')); } } // 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"); } self::putenv("SPC_PHP_DEFAULT_LD_LIBRARY_PATH_CMD=LD_LIBRARY_PATH=/usr/local/musl/{$arch}-linux-musl/lib"); if (getenv('SPC_NO_MUSL_PATH') !== 'yes') { self::putenv("PATH=/usr/local/musl/bin:/usr/local/musl/{$arch}-linux-musl/bin:" . getenv('PATH')); } } // 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 = 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); } 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, }; } 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); } } } }