diff options
Diffstat (limited to 'plugins/Irc/extlib/phergie/PhergiePackageTask.php')
-rw-r--r-- | plugins/Irc/extlib/phergie/PhergiePackageTask.php | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/plugins/Irc/extlib/phergie/PhergiePackageTask.php b/plugins/Irc/extlib/phergie/PhergiePackageTask.php new file mode 100644 index 000000000..dfc760a16 --- /dev/null +++ b/plugins/Irc/extlib/phergie/PhergiePackageTask.php @@ -0,0 +1,110 @@ +<?php + +require_once 'phing/tasks/ext/PearPackage2Task.php'; + +class PhergiePackageTask extends PearPackage2Task +{ + protected function setOptions() + { + $this->pkg->addMaintainer('lead', 'team', 'Phergie Development Team', 'team@phergie.org'); + + $path = str_replace('_', '/', $this->package) . '.php'; + if (file_exists($path)) { + $contents = file_get_contents($path); + preg_match_all('#/\*\*(.*)\*/#Ums', $contents, $matches, PREG_SET_ORDER); + $doc = $matches[1][1]; + + $have_summary = false; + $have_description = false; + foreach ($this->options as $option) { + switch ($option->getName()) { + case 'summary': + $have_summary = true; + break; + case 'description': + $have_descripion = true; + break; + } + } + + if (!$have_summary || !$have_description) { + $description = substr($doc, 0, strpos($doc, '@')); + $description = trim(preg_replace(array('#^[\h*]*|[\h*]*$#m', '#[\h]+#m'), array('', ' '), $description)); + $split = preg_split('/\v\v+/', $description); + $summary = trim(array_shift($split)); + if (!$have_summary) { + $this->pkg->setSummary(htmlentities($summary, ENT_QUOTES)); + } + if (!$have_description) { + $this->pkg->setDescription(htmlentities($description, ENT_QUOTES)); + } + } + + $doc = preg_split('/\v+/', $doc); + $doc = preg_grep('/@uses/', $doc); + $doc = preg_replace('/\s*\* @uses\s+|\s+$/', '', $doc); + foreach ($doc as $line) { + if (strpos($line, 'extension') === 0) { + $line = explode(' ', $line); + $name = $line[1]; + $optional = 'required'; + if (isset($line[2])) { + $optional = $line[2]; + } + $this->pkg->addExtensionDep( + $optional, + $name + ); + } else { + $line = explode(' ', $line); + $name = $line[0]; + $channel = $line[1]; + $optional = 'required'; + if (isset($line[2])) { + $optional = $line[2]; + } + $this->pkg->addPackageDepWithChannel( + $optional, + $name, + $channel + ); + } + } + } + + $newmap = array(); + foreach ($this->mappings as $key => $map) { + switch ($map->getName()) { + case 'releases': + $releases = $map->getValue(); + foreach ($releases as $release) { + $this->pkg->addRelease(); + if (isset($release['installconditions'])) { + if (isset($release['installconditions']['os'])) { + $this->pkg->setOsInstallCondition($release['installconditions']['os']); + } + } + if (isset($release['filelist'])) { + if (isset($release['filelist']['install'])) { + foreach ($release['filelist']['install'] as $file => $as) { + $this->pkg->addInstallAs($file, $as); + } + } + if (isset($release['filelist']['ignore'])) { + foreach ($release['filelist']['ignore'] as $file) { + $this->pkg->addIgnoreToRelease($file); + } + } + } + } + break; + + default: + $newmap[] = $map; + } + } + $this->mappings = $newmap; + + parent::setOptions(); + } +} |