Exemplo n.º 1
0
 public function run(Build $build)
 {
     if (!file_exists($build->getSourceDirectory() . DIRECTORY_SEPARATOR . 'configure')) {
         $this->debug("configure file not found, running './buildconf --force'...");
         $lastline = system('./buildconf --force', $status);
         if ($status !== 0) {
             throw new SystemCommandException("buildconf error: {$lastline}", $build);
         }
     }
     foreach ((array) $this->options->patch as $patchPath) {
         // copy patch file to here
         $this->info("===> Applying patch file from {$patchPath} ...");
         // Search for strip parameter
         for ($i = 0; $i <= 16; ++$i) {
             ob_start();
             system("patch -p{$i} --dry-run < {$patchPath}", $return);
             ob_end_clean();
             if ($return === 0) {
                 system("patch -p{$i} < {$patchPath}");
                 break;
             }
         }
     }
     // let's apply patch for libphp{php version}.so (apxs)
     if ($build->isEnabledVariant('apxs2')) {
         $apxs2Checker = new \PhpBrew\Tasks\Apxs2CheckTask($this->logger);
         $apxs2Checker->check($build, $this->options);
     }
     if (!$this->options->{'no-patch'}) {
         $this->logger->info('===> Checking patches...');
         $patches = array();
         $patches[] = new Apache2ModuleNamePatch();
         foreach ($patches as $patch) {
             $this->logger->info('Checking patch for ' . $patch->desc());
             if ($patch->match($build, $this->logger)) {
                 $patched = $patch->apply($build, $this->logger);
                 $this->logger->info("{$patched} changes patched.");
             }
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Build variants to configure options from php build object.
  *
  * @param Build $build The build object, contains version information
  *
  * @return array|void
  * @throws \Exception
  */
 public function build(Build $build)
 {
     $customVirtualVariants = Config::getConfigParam('variants');
     foreach (array_keys($build->getVariants()) as $variantName) {
         if (isset($customVirtualVariants[$variantName])) {
             foreach ($customVirtualVariants[$variantName] as $lib => $params) {
                 if (is_array($params)) {
                     $this->variants[$lib] = $params;
                 }
             }
         }
     }
     // reset builtList
     $this->builtList = array();
     // reset built options
     if ($build->hasVariant('all') || $build->hasVariant('neutral')) {
         $this->options = array();
     } else {
         // build common options
         $this->options = array('--disable-all', '--enable-phar', '--enable-session', '--enable-short-tags', '--enable-tokenizer', '--with-pcre-regex');
         if ($prefix = Utils::findIncludePrefix('zlib.h')) {
             $this->addOptions('--with-zlib=' . $prefix);
         }
     }
     if ($prefix = Utils::findLibPrefix('x86_64-linux-gnu')) {
         $this->addOptions("--with-libdir=lib/x86_64-linux-gnu");
     } elseif ($prefix = Utils::findLibPrefix('i386-linux-gnu')) {
         $this->addOptions("--with-libdir=lib/i386-linux-gnu");
     }
     // enable/expand virtual variants
     foreach ($this->virtualVariants as $name => $variantNames) {
         if ($build->isEnabledVariant($name)) {
             foreach ($variantNames as $subVariantName) {
                 // enable the sub-variant only if it's not already enabled
                 // in order to not override a non-default value with the default
                 if (!$build->isEnabledVariant($subVariantName)) {
                     $build->enableVariant($subVariantName);
                 }
             }
             // it's a virtual variant, can not be built by buildVariant
             // method.
             $build->removeVariant($name);
         }
     }
     // Remove these enabled variant for disabled variants.
     $build->resolveVariants();
     // before we build these options from variants,
     // we need to check the enabled and disabled variants
     $this->checkConflicts($build);
     foreach ($build->getVariants() as $feature => $userValue) {
         if ($options = $this->buildVariant($build, $feature, $userValue)) {
             $this->addOptions($options);
         }
     }
     foreach ($build->getDisabledVariants() as $feature => $true) {
         if ($options = $this->buildDisableVariant($build, $feature)) {
             $this->addOptions($options);
         }
     }
     /*
     $opts = array_merge( $opts ,
         $this->getVersionSpecificOptions($version) );
     */
     $options = array_merge(array(), $this->options);
     // reset options
     $this->options = array();
     return $options;
 }
Exemplo n.º 3
0
 public function run(Build $build, $variantOptions)
 {
     $extra = $build->getExtraOptions();
     if (!file_exists($build->getSourceDirectory() . DIRECTORY_SEPARATOR . 'configure')) {
         $this->debug("configure file not found, running buildconf script...");
         $lastline = system('./buildconf', $status);
         if ($status !== 0) {
             throw new SystemCommandException("buildconf error: {$lastline}");
         }
     }
     $prefix = $build->getInstallPrefix();
     // append cflags
     if ($this->optimizationLevel) {
         $o = $this->optimizationLevel;
         $cflags = getenv('CFLAGS');
         putenv("CFLAGS={$cflags} -O{$o}");
         $_ENV['CFLAGS'] = "{$cflags} -O{$o}";
     }
     $args = array();
     $args[] = "--prefix=" . $prefix;
     $args[] = "--with-config-file-path={$prefix}/etc";
     $args[] = "--with-config-file-scan-dir={$prefix}/var/db";
     $args[] = "--with-pear={$prefix}/lib/php";
     if ($variantOptions) {
         $args = array_merge($args, $variantOptions);
     }
     $this->debug('Enabled variants: ' . join(', ', array_keys($build->getVariants())));
     $this->debug('Disabled variants: ' . join(', ', array_keys($build->getDisabledVariants())));
     foreach ((array) $this->options->patch as $patchPath) {
         // copy patch file to here
         $this->info("===> Applying patch file from {$patchPath} ...");
         // Search for strip parameter
         for ($i = 0; $i <= 16; $i++) {
             ob_start();
             system("patch -p{$i} --dry-run < {$patchPath}", $return);
             ob_end_clean();
             if ($return === 0) {
                 system("patch -p{$i} < {$patchPath}");
                 break;
             }
         }
     }
     // let's apply patch for libphp{php version}.so (apxs)
     if ($build->isEnabledVariant('apxs2')) {
         $apxs2Checker = new \PhpBrew\Tasks\Apxs2CheckTask($this->logger);
         $apxs2Checker->check($build, $this->options);
         $apxs2Patch = new \PhpBrew\Tasks\Apxs2PatchTask($this->logger);
         $apxs2Patch->patch($build, $this->options);
     }
     foreach ($extra as $a) {
         $args[] = $a;
     }
     $cmd = new CommandBuilder('./configure');
     $cmd->args($args);
     $buildLogPath = $build->getBuildLogPath();
     if (file_exists($buildLogPath)) {
         $newPath = $buildLogPath . '.' . filemtime($buildLogPath);
         $this->info("Found existing build.log, renaming it to {$newPath}");
         rename($buildLogPath, $newPath);
     }
     $this->info("===> Configuring {$build->version}...");
     $cmd->setAppendLog(true);
     $cmd->setLogPath($buildLogPath);
     $cmd->setStdout($this->options->{'stdout'});
     $this->logger->info("\n");
     $this->logger->info("Use tail command to see what's going on:");
     $this->logger->info("   \$ tail -F {$buildLogPath}\n\n");
     $this->debug($cmd->getCommand());
     if ($this->options->nice) {
         $cmd->nice($this->options->nice);
     }
     if (!$this->options->dryrun) {
         $code = $cmd->execute();
         if ($code != 0) {
             throw new SystemCommandException("Configure failed: {$code}", $buildLogPath);
         }
     }
     if (!$this->options->{'no-patch'}) {
         $patch64bit = new \PhpBrew\Tasks\Patch64BitSupportTask($this->logger, $this->options);
         if ($patch64bit->match($build)) {
             $patch64bit->patch($build);
         }
     }
     $build->setState(Build::STATE_CONFIGURE);
 }