public function run(Build $build, $variantOptions) { $extra = $build->getExtraOptions(); $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(); if (!$this->options->{'no-config-cache'}) { // $args[] = "-C"; // project wise cache (--config-cache) $args[] = '--cache-file=' . escapeshellarg(Config::getCacheDir() . DIRECTORY_SEPARATOR . 'config.cache'); } $args[] = '--prefix=' . $prefix; if ($this->options->{'user-config'}) { $args[] = "--with-config-file-path={$prefix}/etc"; $args[] = "--with-config-file-scan-dir={$prefix}/var/db"; } else { $args[] = "--with-config-file-path={$prefix}/etc"; $args[] = "--with-config-file-scan-dir={$prefix}/var/db"; } if ($variantOptions) { $args = array_merge($args, $variantOptions); } $this->debug('Enabled variants: [' . implode(', ', array_keys($build->getVariants())) . ']'); $this->debug('Disabled variants: [' . implode(', ', array_keys($build->getDisabledVariants())) . ']'); // todo: move to pear variant $args[] = "--with-pear={$prefix}/lib/php"; // Options for specific versions // todo: extract to BuildPlan class: PHP53 BuildPlan, PHP54 BuildPlan, PHP55 BuildPlan ? if ($build->compareVersion('5.4') == -1) { // copied from https://github.com/Homebrew/homebrew-php/blob/master/Formula/php53.rb $args[] = '--enable-sqlite-utf8'; $args[] = '--enable-zend-multibyte'; } elseif ($build->compareVersion('5.6') == -1) { $args[] = '--enable-zend-signals'; } 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'}); if (!$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->buildCommand()); if ($this->options->nice) { $cmd->nice($this->options->nice); } if (!$this->options->dryrun) { $code = $cmd->execute($lastline); if ($code !== 0) { throw new SystemCommandException("Configure failed: {$lastline}", $build, $buildLogPath); } } $build->setState(Build::STATE_CONFIGURE); }
/** * 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'); } if ($build->compareVersion('5.6') >= 0) { $build->enableVariant('opcache'); } // 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; }