/** * Executes the command * @param Config $config * @param Logger $logger */ public function execute(Config $config, Logger $logger) { $params = $this->parseArguments(); $backend = null; if (!isset($params['backend'])) { $params['backend'] = BaseBackend::getActiveBackend(); } $className = 'Zephir\\Backends\\' . $params['backend'] . '\\Backend'; if (!class_exists($className)) { throw new \InvalidArgumentException('Backend ' . $params['backend'] . ' does not exist'); } $backend = new $className(); $compiler = new Compiler($config, $logger, $backend); $command = $this->getCommand(); $compiler->{$command}($this); }
/** * Generate package-dependencies config for m4 * * @param $contentM4 * @throws Exception * @return string * TODO: Move the template depending part to backend? */ public function generatePackageDependenciesM4($contentM4) { $templatePath = $this->backend->getInternalTemplatePath(); $packageDependencies = $this->config->get('package-dependencies'); if (is_array($packageDependencies)) { $pkgconfigM4 = file_get_contents($templatePath . '/pkg-config.m4'); $pkgconfigCheckM4 = file_get_contents($templatePath . '/pkg-config-check.m4'); $extraCFlags = ''; foreach ($packageDependencies as $pkg => $version) { $pkgM4Buf = $pkgconfigCheckM4; $operator = '='; $operatorCmd = '--exact-version'; $ar = explode("=", $version); if (count($ar) == 1) { if ($version == '*') { $version = '0.0.0'; $operator = '>='; $operatorCmd = '--atleast-version'; } } else { switch ($ar[0]) { default: $version = trim($ar[1]); break; case '<': $operator = '<='; $operatorCmd = '--max-version'; $version = trim($ar[1]); break; case '>': $operator = '>='; $operatorCmd = '--atleast-version'; $version = trim($ar[1]); break; } } $toReplace = array('%PACKAGE_LOWER%' => strtolower($pkg), '%PACKAGE_UPPER%' => strtoupper($pkg), '%PACKAGE_REQUESTED_VERSION%' => $operator . ' ' . $version, '%PACKAGE_PKG_CONFIG_COMPARE_VERSION%' => $operatorCmd . '=' . $version); foreach ($toReplace as $mark => $replace) { $pkgM4Buf = str_replace($mark, $replace, $pkgM4Buf); } $pkgconfigM4 .= $pkgM4Buf; $extraCFlags .= '$PHP_' . strtoupper($pkg) . '_INCS '; } $contentM4 = str_replace('%PROJECT_EXTRA_CFLAGS%', '%PROJECT_EXTRA_CFLAGS% ' . $extraCFlags, $contentM4); $contentM4 = str_replace('%PROJECT_PACKAGE_DEPENDENCIES%', $pkgconfigM4, $contentM4); return $contentM4; } $contentM4 = str_replace('%PROJECT_PACKAGE_DEPENDENCIES%', '', $contentM4); return $contentM4; }