annotate vendor/squizlabs/php_codesniffer/scripts/build-phar.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
rev   line source
Chris@0 1 #!/usr/bin/env php
Chris@0 2 <?php
Chris@0 3 /**
Chris@0 4 * Build a PHPCS phar.
Chris@0 5 *
Chris@0 6 * PHP version 5
Chris@0 7 *
Chris@0 8 * @category PHP
Chris@0 9 * @package PHP_CodeSniffer
Chris@0 10 * @author Benjamin Pearson <bpearson@squiz.com.au>
Chris@0 11 * @author Greg Sherwood <gsherwood@squiz.net>
Chris@0 12 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600)
Chris@0 13 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@0 14 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 15 */
Chris@0 16
Chris@0 17 error_reporting(E_ALL | E_STRICT);
Chris@0 18
Chris@0 19 if (ini_get('phar.readonly') === '1') {
Chris@0 20 echo 'Unable to build, phar.readonly in php.ini is set to read only.'.PHP_EOL;
Chris@0 21 exit(1);
Chris@0 22 }
Chris@0 23
Chris@0 24 $cwd = getCwd();
Chris@0 25 require_once __DIR__.'/../CodeSniffer.php';
Chris@0 26
Chris@0 27 $scripts = array(
Chris@0 28 'phpcs',
Chris@0 29 'phpcbf',
Chris@0 30 );
Chris@0 31
Chris@0 32 foreach ($scripts as $script) {
Chris@0 33 echo "Building $script phar".PHP_EOL;
Chris@0 34
Chris@0 35 $pharFile = $cwd.'/'.$script.'.phar';
Chris@0 36 echo "\t=> $pharFile".PHP_EOL;
Chris@0 37 if (file_exists($pharFile) === true) {
Chris@0 38 echo "\t** file exists, removing **".PHP_EOL;
Chris@0 39 unlink($pharFile);
Chris@0 40 }
Chris@0 41
Chris@0 42 $phar = new Phar($pharFile, 0, $script.'.phar');
Chris@0 43
Chris@0 44 echo "\t=> adding files from package.xml... ";
Chris@0 45 buildFromPackage($phar);
Chris@0 46 echo 'done'.PHP_EOL;
Chris@0 47
Chris@0 48 echo "\t=> adding stub... ";
Chris@0 49 $stub = '#!/usr/bin/env php'."\n";
Chris@0 50 $stub .= '<?php'."\n";
Chris@0 51 $stub .= 'Phar::mapPhar(\''.$script.'.phar\');'."\n";
Chris@0 52 $stub .= 'require_once "phar://'.$script.'.phar/CodeSniffer/CLI.php";'."\n";
Chris@0 53 $stub .= '$cli = new PHP_CodeSniffer_CLI();'."\n";
Chris@0 54 $stub .= '$cli->run'.$script.'();'."\n";
Chris@0 55 $stub .= '__HALT_COMPILER();';
Chris@0 56 $phar->setStub($stub);
Chris@0 57 echo 'done'.PHP_EOL;
Chris@0 58 }//end foreach
Chris@0 59
Chris@0 60
Chris@0 61 /**
Chris@0 62 * Build from a package list.
Chris@0 63 *
Chris@0 64 * @param object $phar The Phar class.
Chris@0 65 *
Chris@0 66 * @return void
Chris@0 67 */
Chris@0 68 function buildFromPackage(&$phar)
Chris@0 69 {
Chris@0 70 $packageFile = realpath(__DIR__.'/../package.xml');
Chris@0 71 $dom = new DOMDocument('1.0', 'utf-8');
Chris@0 72 $loaded = $dom->loadXML(file_get_contents($packageFile));
Chris@0 73 if ($loaded === false) {
Chris@0 74 echo "Unable to load package file: $packageFile".PHP_EOL;
Chris@0 75 exit(1);
Chris@0 76 }
Chris@0 77
Chris@0 78 $contents = $dom->getElementsByTagName('contents');
Chris@0 79 $topLevels = $contents->item(0)->childNodes;
Chris@0 80 $tlLength = $topLevels->length;
Chris@0 81 for ($l = 0; $l < $tlLength; $l++) {
Chris@0 82 $currentLevel = $topLevels->item($l);
Chris@0 83 buildFromNode($phar, $currentLevel, '');
Chris@0 84 }
Chris@0 85
Chris@0 86 // Add licence file.
Chris@0 87 $phar->addFile(realpath(__DIR__.'/../licence.txt'), 'licence.txt');
Chris@0 88 $phar['licence.txt']->compress(Phar::GZ);
Chris@0 89
Chris@0 90 }//end buildFromPackage()
Chris@0 91
Chris@0 92
Chris@0 93 /**
Chris@0 94 * Add from a node.
Chris@0 95 *
Chris@0 96 * @param object $phar The Phar class.
Chris@0 97 * @param object $node The node to add.
Chris@0 98 * @param string $prefix The prefix of the structure.
Chris@0 99 *
Chris@0 100 * @return void
Chris@0 101 */
Chris@0 102 function buildFromNode(&$phar, $node, $prefix='')
Chris@0 103 {
Chris@0 104 $nodeName = $node->nodeName;
Chris@0 105 if ($nodeName !== 'dir' && $nodeName !== 'file') {
Chris@0 106 // Invalid node.
Chris@0 107 return;
Chris@0 108 }
Chris@0 109
Chris@0 110 $path = $prefix.$node->getAttribute('name');
Chris@0 111 if ($node->getAttribute('role') === 'php' || $node->getAttribute('role') === 'data') {
Chris@0 112 $path = ltrim($path, '/');
Chris@0 113 $phar->addFile(realpath(__DIR__.'/../'.$path), $path);
Chris@0 114 $phar[$path]->compress(Phar::GZ);
Chris@0 115 }
Chris@0 116
Chris@0 117 if ($nodeName === 'dir') {
Chris@0 118 // Descend into the depths.
Chris@0 119 $path = rtrim($path, '/').'/';
Chris@0 120 $children = $node->childNodes;
Chris@0 121 $childLn = $children->length;
Chris@0 122 for ($c = 0; $c < $childLn; $c++) {
Chris@0 123 $child = $children->item($c);
Chris@0 124 buildFromNode($phar, $child, $path);
Chris@0 125 }
Chris@0 126 }
Chris@0 127
Chris@0 128 }//end buildFromNode()