Chris@0: #!/usr/bin/env php Chris@0: Chris@0: * @author Greg Sherwood Chris@0: * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) Chris@0: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@0: * @link http://pear.php.net/package/PHP_CodeSniffer Chris@0: */ Chris@0: Chris@0: error_reporting(E_ALL | E_STRICT); Chris@0: Chris@0: if (ini_get('phar.readonly') === '1') { Chris@0: echo 'Unable to build, phar.readonly in php.ini is set to read only.'.PHP_EOL; Chris@0: exit(1); Chris@0: } Chris@0: Chris@0: $cwd = getCwd(); Chris@0: require_once __DIR__.'/../CodeSniffer.php'; Chris@0: Chris@0: $scripts = array( Chris@0: 'phpcs', Chris@0: 'phpcbf', Chris@0: ); Chris@0: Chris@0: foreach ($scripts as $script) { Chris@0: echo "Building $script phar".PHP_EOL; Chris@0: Chris@0: $pharFile = $cwd.'/'.$script.'.phar'; Chris@0: echo "\t=> $pharFile".PHP_EOL; Chris@0: if (file_exists($pharFile) === true) { Chris@0: echo "\t** file exists, removing **".PHP_EOL; Chris@0: unlink($pharFile); Chris@0: } Chris@0: Chris@0: $phar = new Phar($pharFile, 0, $script.'.phar'); Chris@0: Chris@0: echo "\t=> adding files from package.xml... "; Chris@0: buildFromPackage($phar); Chris@0: echo 'done'.PHP_EOL; Chris@0: Chris@0: echo "\t=> adding stub... "; Chris@0: $stub = '#!/usr/bin/env php'."\n"; Chris@0: $stub .= 'run'.$script.'();'."\n"; Chris@0: $stub .= '__HALT_COMPILER();'; Chris@0: $phar->setStub($stub); Chris@0: echo 'done'.PHP_EOL; Chris@0: }//end foreach Chris@0: Chris@0: Chris@0: /** Chris@0: * Build from a package list. Chris@0: * Chris@0: * @param object $phar The Phar class. Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: function buildFromPackage(&$phar) Chris@0: { Chris@0: $packageFile = realpath(__DIR__.'/../package.xml'); Chris@0: $dom = new DOMDocument('1.0', 'utf-8'); Chris@0: $loaded = $dom->loadXML(file_get_contents($packageFile)); Chris@0: if ($loaded === false) { Chris@0: echo "Unable to load package file: $packageFile".PHP_EOL; Chris@0: exit(1); Chris@0: } Chris@0: Chris@0: $contents = $dom->getElementsByTagName('contents'); Chris@0: $topLevels = $contents->item(0)->childNodes; Chris@0: $tlLength = $topLevels->length; Chris@0: for ($l = 0; $l < $tlLength; $l++) { Chris@0: $currentLevel = $topLevels->item($l); Chris@0: buildFromNode($phar, $currentLevel, ''); Chris@0: } Chris@0: Chris@0: // Add licence file. Chris@0: $phar->addFile(realpath(__DIR__.'/../licence.txt'), 'licence.txt'); Chris@0: $phar['licence.txt']->compress(Phar::GZ); Chris@0: Chris@0: }//end buildFromPackage() Chris@0: Chris@0: Chris@0: /** Chris@0: * Add from a node. Chris@0: * Chris@0: * @param object $phar The Phar class. Chris@0: * @param object $node The node to add. Chris@0: * @param string $prefix The prefix of the structure. Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: function buildFromNode(&$phar, $node, $prefix='') Chris@0: { Chris@0: $nodeName = $node->nodeName; Chris@0: if ($nodeName !== 'dir' && $nodeName !== 'file') { Chris@0: // Invalid node. Chris@0: return; Chris@0: } Chris@0: Chris@0: $path = $prefix.$node->getAttribute('name'); Chris@0: if ($node->getAttribute('role') === 'php' || $node->getAttribute('role') === 'data') { Chris@0: $path = ltrim($path, '/'); Chris@0: $phar->addFile(realpath(__DIR__.'/../'.$path), $path); Chris@0: $phar[$path]->compress(Phar::GZ); Chris@0: } Chris@0: Chris@0: if ($nodeName === 'dir') { Chris@0: // Descend into the depths. Chris@0: $path = rtrim($path, '/').'/'; Chris@0: $children = $node->childNodes; Chris@0: $childLn = $children->length; Chris@0: for ($c = 0; $c < $childLn; $c++) { Chris@0: $child = $children->item($c); Chris@0: buildFromNode($phar, $child, $path); Chris@0: } Chris@0: } Chris@0: Chris@0: }//end buildFromNode()