Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 60 |
| PharCompiler | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
42 | |
0.00% |
0 / 60 |
| create($phar_path = 'environaut.phar') | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 44 |
|||
| getStub() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 16 |
|||
| <?php | |
| namespace Environaut; | |
| use Symfony\Component\Finder\Finder; | |
| /** | |
| * This class compiles all necessary files of Environaut to an executable | |
| * environaut.phar file that may be executed directly (run standalone). | |
| */ | |
| class PharCompiler | |
| { | |
| /** | |
| * Creates a PHP archive file with all files necessary to | |
| * run Environaut standalone. | |
| * | |
| * @param string $phar_path full path to the php archive file to create | |
| */ | |
| public function create($phar_path = 'environaut.phar') | |
| { | |
| if (file_exists($phar_path)) { | |
| unlink($phar_path); | |
| } | |
| $phar = new \Phar($phar_path, 0, 'environaut.phar'); | |
| $phar->setSignatureAlgorithm(\Phar::SHA1); | |
| $phar->startBuffering(); | |
| $root_dir = dirname(dirname(__DIR__)); | |
| // add environaut files | |
| $finder = new Finder(); | |
| //$finder->files()->name('*.php')->notName('PharCompiler.php')->in($root_dir . '/src'); | |
| $finder->files()->notName('PharCompiler.php')->in($root_dir . '/src'); | |
| foreach ($finder as $file) { | |
| $phar->addFile($file->getRealPath(), 'src/' . $file->getRelativePathname()); | |
| } | |
| // add vendor files using a whitelist with excludes | |
| $finder = new Finder(); | |
| $finder->files() | |
| ->name('*.php') | |
| ->name('security\.sensiolabs\.org\.crt') | |
| ->path('/symfony\/console\//') | |
| ->path('/sensiolabs\/security-checker\//') | |
| ->notName('SecurityCheckerCommand.php') | |
| ->notPath('/(\/Tests\/|\/Tester\/)/') | |
| ->in($root_dir . '/vendor'); | |
| foreach ($finder as $file) { | |
| $phar->addFile($file->getRealPath(), 'vendor/' . $file->getRelativePathname()); | |
| } | |
| // add composer vendor autoloading | |
| $vroot_dir = $root_dir . '/vendor/'; | |
| $phar->addFile($vroot_dir . 'autoload.php', 'vendor/autoload.php'); | |
| $phar->addFile($vroot_dir . 'composer/autoload_namespaces.php', 'vendor/composer/autoload_namespaces.php'); | |
| $phar->addFile($vroot_dir . 'composer/autoload_classmap.php', 'vendor/composer/autoload_classmap.php'); | |
| $phar->addFile($vroot_dir . 'composer/autoload_psr4.php', 'vendor/composer/autoload_psr4.php'); | |
| $phar->addFile($vroot_dir . 'composer/autoload_real.php', 'vendor/composer/autoload_real.php'); | |
| $phar->addFile($vroot_dir . 'composer/include_paths.php', 'vendor/composer/include_paths.php'); | |
| $phar->addFile($vroot_dir . 'composer/ClassLoader.php', 'vendor/composer/ClassLoader.php'); | |
| // environaut executable | |
| $phar->addFile($root_dir . '/bin/environaut', 'bin/environaut'); | |
| // additional markdown files like README.md or LICENSE.md | |
| $finder = new Finder(); | |
| $finder->files()->name('*.md')->depth('== 0')->in($root_dir); | |
| foreach ($finder as $file) { | |
| $phar->addFile($file->getRealPath(), '/' . $file->getRelativePathname()); | |
| } | |
| // add startup file | |
| $phar->setStub($this->getStub()); | |
| $phar->stopBuffering(); | |
| chmod($phar_path, 0755); | |
| } | |
| /** | |
| * @return string initial stub to startup environaut when executing the phar | |
| */ | |
| protected function getStub() | |
| { | |
| $stub = <<<'EOF' | |
| #!/usr/bin/env php | |
| <?php | |
| try { | |
| Phar::mapPhar('environaut.phar'); | |
| require 'phar://environaut.phar/bin/environaut'; | |
| } catch (PharException $e) { | |
| echo $e->getTraceAsString(); | |
| exit(1); | |
| } | |
| __HALT_COMPILER(); | |
| EOF; | |
| return $stub; | |
| } | |
| } |