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