private static function loadConfig()
{
global $argv;
$configPaths = [];
$extensions = [];
$configOverride = [];
foreach ($argv as $arg) {
if ($configFile = self::parseOption($arg, 'config')) {
if (!file_exists($configFile)) {
echo sprintf('Config file "%s" does not exist', $configFile) . PHP_EOL;
exit(1);
}
$configPaths = [$configFile];
}
if ($value = self::parseOption($arg, 'bootstrap', 'b')) {
$configOverride['bootstrap'] = self::getBootstrapPath(getcwd(), $value);
}
if ($value = self::parseOption($arg, 'extension')) {
$extensions[] = $value;
}
if ($value = self::parseOption($arg, 'php-binary')) {
$configOverride['php_binary'] = $value;
}
if ($value = self::parseOption($arg, 'php-wrapper')) {
$configOverride['php_wrapper'] = $value;
}
if ($value = self::parseOption($arg, 'php-config')) {
$jsonParser = new JsonDecoder();
$value = $jsonParser->decode($value);
$configOverride['php_config'] = $value;
}
}
if (empty($configPaths)) {
$configPaths = [getcwd() . '/phpbench.json', getcwd() . '/phpbench.json.dist'];
}
$config = ['extensions' => [], 'bootstrap' => null];
foreach ($configPaths as $configPath) {
if (!file_exists($configPath)) {
continue;
}
$configRaw = file_get_contents($configPath);
try {
$parser = new JsonParser();
$parser->parse($configRaw);
} catch (ParsingException $e) {
echo 'Error parsing config file:' . PHP_EOL . PHP_EOL;
echo $e->getMessage();
exit(1);
}
$config = array_merge($config, json_decode($configRaw, true));
$config['config_path'] = $configPath;
if ($config['bootstrap']) {
$config['bootstrap'] = self::getBootstrapPath(dirname($configPath), $config['bootstrap']);
}
break;
}
$config = array_merge($config, $configOverride);
// add any manually specified extensions
foreach ($extensions as $extension) {
$config['extensions'][] = $extension;
}
return $config;
}