script to generate phar file
authorChristian Weiske <cweiske@cweiske.de>
Tue, 25 Feb 2014 20:11:46 +0000 (21:11 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Tue, 25 Feb 2014 20:11:46 +0000 (21:11 +0100)
bin/makephar.php [new file with mode: 0755]
src/phar-stub.php [new file with mode: 0644]

diff --git a/bin/makephar.php b/bin/makephar.php
new file mode 100755 (executable)
index 0000000..6089b0c
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/env php
+<?php
+if (ini_get('phar.readonly') == 1) {
+    //re-run this script with phar writing activated
+    passthru(PHP_BINARY . ' -dphar.readonly=0 ' . escapeshellarg($argv[0]));
+    exit();
+}
+
+$pharfile = __DIR__ . '/../dist/bdrem-0.1.0.phar';
+if (file_exists($pharfile)) {
+    unlink($pharfile);
+}
+$phar = new Phar($pharfile, 0, 'bdrem.phar');
+$phar->startBuffering();
+
+// add all files in the project
+$phar->buildFromDirectory(
+    realpath(__DIR__ . '/../'),
+    '#'
+    . '^' . preg_quote(realpath(__DIR__ . '/../'), '#')
+    . '/(data/bdrem.config.php.dist|src/bdrem/|www/|README\.rst)'
+    . '#'
+);
+
+//remove shebang from bin/bdrem.php
+$bin = file_get_contents(__DIR__ . '/../bin/bdrem.php');
+$phar->addFromString('bin/bdrem.php', substr($bin, strpos($bin, "\n") + 1));
+
+$phar->setStub(file_get_contents(__DIR__ . '/../src/phar-stub.php'));
+$phar->stopBuffering();
+?>
diff --git a/src/phar-stub.php b/src/phar-stub.php
new file mode 100644 (file)
index 0000000..3c80130
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+if (!in_array('phar', stream_get_wrappers()) || !class_exists('Phar', false)) {
+    echo "Phar extension not avaiable\n";
+    exit(255);
+}
+
+$web = 'www/index.php';
+$cli = 'bin/bdrem.php';
+
+function rewritePath($path)
+{
+    if ($path == '' || $path == '/') {
+        return 'www/index.php';
+    }
+    return $path;
+}
+
+//Phar::interceptFileFuncs();
+set_include_path('phar://' . __FILE__ . PATH_SEPARATOR . get_include_path());
+Phar::webPhar(null, $web, null, array(), 'rewritePath');
+include 'phar://' . __FILE__ . '/' . $cli;
+__HALT_COMPILER();
+?>