111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?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(); | ||
|  |     } | ||
|  | } |