public function getConfig() { if (!$this->_config) { $pear_dir = $this->getPearDir(); $config = PEAR_Config::singleton($pear_dir . DS . 'pear.ini', '-'); $config->set('auto_discover', 1); $config->set('cache_ttl', 60); #$config->set('preferred_state', 'beta'); $config->set('bin_dir', $pear_dir); $config->set('php_dir', $pear_dir . DS . 'php'); $config->set('download_dir', $pear_dir . DS . 'download'); $config->set('temp_dir', $pear_dir . DS . 'temp'); $config->set('data_dir', $pear_dir . DS . 'data'); $config->set('cache_dir', $pear_dir . DS . 'cache'); $config->set('test_dir', $pear_dir . DS . 'tests'); $config->set('doc_dir', $pear_dir . DS . 'docs'); foreach ($config->getKeys() as $key) { if (!(substr($key, 0, 5) === 'mage_' && substr($key, -4) === '_dir')) { continue; } $config->set($key, preg_replace('#^\\.#', $this->getBaseDir(), $config->get($key))); #echo $key.' : '.$config->get($key).'<br>'; } $reg = $this->getRegistry(); $config->setRegistry($reg); PEAR_DependencyDB::singleton($config, $pear_dir . DS . 'php' . DS . '.depdb'); PEAR_Frontend::setFrontendObject($this->getFrontend()); #PEAR_Command::registerCommands(false, $pear_dir.DS.'php'.DS.'PEAR'.DS.'Command'.DS); $this->_config = $config; } return $this->_config; }
/** * Main entry point for d51pearpkg2 task */ public function main() { PEAR_Frontend::setFrontendObject(new d51PearPkg2Task_Frontend($this)); $package = new PEAR_PackageFileManager2(); $this->_initOptions(); $a = $package->setOptions($this->_options); if (PEAR::isError($a)) { $this->log($a->getMessage(), Project::MSG_ERR); exit(-1); } $package->setPackage((string) $this->_name); $package->setSummary((string) $this->_summary); $desc = preg_replace("/^({$this->_description->indention_type}{{$this->_description->indentions_to_remove}}|\t)+/m", '', (string) $this->_description); $package->setDescription($desc); $package->setChannel((string) $this->_channel); $package->setAPIVersion($this->_version->api); $package->setReleaseVersion($this->_version->release); $package->setAPIStability($this->_stability->api); $package->setReleaseStability($this->_stability->release); // TODO: allow different types $package->setPackageType($this->_type); $package->addRelease(); if (!is_null($this->_dependencies->php)) { $this->log('Using explicit PHP minimum version: ' . $this->_dependencies->php->minimum_version); $package->setPhpDep($this->_dependencies->php->minimum_version); } else { $this->log('Using current PHP version as minimum: ' . phpversion()); $package->setPhpDep(phpversion()); } if (!is_null($this->_dependencies->pear)) { $this->log('setting minimum PEAR version: ' . $this->_dependencies->pear->minimum_version); $package->setPearinstallerDep($this->_dependencies->pear->minimum_version, $this->_dependencies->pear->maximum_version, $this->_dependencies->pear->recommended_version, $this->_dependencies->pear->exclude_version); } else { $this->log('setting minimum PEAR version to currently installed version'); $pear_version = PEAR_Config::singleton()->getRegistry()->packageInfo('PEAR', 'version'); $this->log('minimum PEAR version: ' . $pear_version); $package->setPearinstallerDep(PEAR_Config::singleton()->getRegistry()->packageInfo('PEAR', 'version')); } foreach ($this->_maintainers as $maintainer) { $this->log("adding maintainer [{$maintainer->user}/{$maintainer->name}] with role [{$maintainer->role}]"); $package->addMaintainer($maintainer->role, $maintainer->user, $maintainer->name, $maintainer->email, $maintainer->active); } // handle dependencies if (!empty($this->_dependencies)) { $this->log('adding dependencies'); if (count($this->_dependencies->groups) > 0) { $this->log('found dependency groups'); foreach ($this->_dependencies->groups as $group) { $this->log("adding [{$group->name}] :: [{$group->hint}]"); $package->addDependencyGroup($group->name, $group->hint); foreach ($group->packages as $sub_package) { $package->addGroupPackageDepWithChannel('subpackage', $group->name, $sub_package->name, $sub_package->channel, '0.0.1'); } } } if (count($this->_dependencies->packages) > 0) { $this->log('found dependencies'); foreach ($this->_dependencies->packages as $dependency) { $this->log("adding following dependency: {$dependency->channel}/{$dependency->name}"); $package->addPackageDepWithChannel($dependency->type, $dependency->name, $dependency->channel, $dependency->minimum_version, $dependency->maximum_version, $dependency->recommended_version, $dependency->exclude_version, $dependency->providesextension, $dependency->nodefault); } } if (count($this->_dependencies->extensions) > 0) { $this->log('adding extension dependencies'); foreach ($this->_dependencies->extensions as $extension) { $this->log("adding ext dependency for: {$extension->name}"); $package->addExtensionDep($extension->type, $extension->name, $extension->minimum_version, $extension->maximum_version, $extension->recommended_version, $extension->extension); } } } foreach ($this->_changelogs as $changelog) { $this->log("adding changelog for prior release [{$changelog->version}]"); $changelog->package = $package; $package->setChangelogEntry($changelog->version, $changelog->toArray()); if (is_null($this->_notes) && $package->getVersion() == $changelog->version) { $this->log("no package notes specified, using changelog entry"); $this->_notes = $changelog->contents; } } foreach ($this->_replacements as $replacement) { $replacement->isValid(); $this->log("adding replace from [{$replacement->from}] to [{$replacement->to}]"); $package->addReplacement($replacement->path, $replacement->type, $replacement->from, $replacement->to); } foreach ($this->_releases as $release) { $this->log('adding new release'); $package->addRelease(); foreach ($release->install as $install) { $this->log("installing [{$install->name}] as [{$install->as}]"); $package->addInstallAs($install->name, $install->as); } } $notes = preg_replace("/^( {4}|\t)+/m", '', (string) $this->_notes); $package->setNotes($notes); $package->setLicense($this->_license->license, $this->_license->uri); $package->generateContents(); $e = $package->writePackageFile(); if (PEAR::isError($e)) { throw new d51PearPkg2Task_Exception('unable to write package.xml file: ' . $e->getMessage()); } }