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