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();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |