Ejemplo n.º 1
0
 /**
  * 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);
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }