public function testMysqlPdoVariant() { $variants = new PhpBrew\VariantBuilder(); ok($variants); $build = new PhpBrew\Build('5.3.0'); $build->enableVariant('pdo'); $build->enableVariant('mysql'); $build->enableVariant('sqlite'); $build->resolveVariants(); $options = $variants->build($build); $this->assertContains('--enable-pdo', $options); $this->assertContains('--with-mysql=mysqlnd', $options); $this->assertContains('--with-mysqli=mysqlnd', $options); $this->assertContains('--with-pdo-mysql=mysqlnd', $options); $this->assertContains('--with-pdo-sqlite', $options); }
/** * 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; }
/** * A test case for `neutral' virtual variant. */ public function testNeutralVirtualVariant() { $variants = new VariantBuilder(); $build = new Build('5.3.0'); // $build->setVersion('5.3.0'); $build->enableVariant('neutral'); $build->resolveVariants(); $options = $variants->build($build); // ignore `--with-libdir` because this option should be set depending on client environments. $actual = array_filter($options, function ($option) { return !preg_match("/^--with-libdir/", $option); }); $this->assertEquals(array(), $actual); }