xref: /PHP-7.2/ext/phar/makestub.php (revision 609f05fc)
1<?php
2$s = str_replace("\r", '', file_get_contents(dirname(__FILE__) . '/shortarc.php'));
3
4$s .= "\nExtract_Phar::go();\n__HALT_COMPILER();";
5$news = '';
6foreach (token_get_all($s) as $token) {
7	if (is_array($token)) {
8		if ($token[0] == T_COMMENT) {
9			$token[1] = '';
10		}
11		if ($token[0] == T_WHITESPACE) {
12			$n = str_repeat("\n", substr_count($token[1], "\n"));
13			$token[1] = strlen($n) ? $n : ' ';
14		}
15		$news .= $token[1];
16	} else {
17		$news .= $token;
18	}
19}
20$s = $news . ' ?>';
21$slen = strlen($s) - strlen('index.php') - strlen("000");
22$s = str_replace('\\', '\\\\', $s);
23$s = str_replace('"', '\\"', $s);
24$s = str_replace("\n", '\n', $s);
25// now we need to find the location of web index file
26$webs = substr($s, 0, strpos($s, "000"));
27$s = substr($s, strlen($webs) + strlen("000"));
28$s1 = substr($s, 0, strpos($s, 'index.php'));
29$s2 = substr($s, strlen($s1) + strlen('index.php'));
30$s2 = substr($s2, 0, strpos($s2, 'XXXX'));
31$s3 = substr($s, strlen($s2) + 4 + strlen($s1) + strlen('index.php'));
32
33$stub = '/*
34  +----------------------------------------------------------------------+
35  | phar php single-file executable PHP extension generated stub         |
36  +----------------------------------------------------------------------+
37  | Copyright (c) 2005-' . date('Y') . ' The PHP Group                   |
38  +----------------------------------------------------------------------+
39  | This source file is subject to version 3.01 of the PHP license,      |
40  | that is bundled with this package in the file LICENSE, and is        |
41  | available through the world-wide-web at the following url:           |
42  | http://www.php.net/license/3_01.txt.                                 |
43  | If you did not receive a copy of the PHP license and are unable to   |
44  | obtain it through the world-wide-web, please send a note to          |
45  | license@php.net so we can mail you a copy immediately.               |
46  +----------------------------------------------------------------------+
47  | Authors: Gregory Beaver <cellog@php.net>                             |
48  +----------------------------------------------------------------------+
49*/
50
51/* $Id$ */
52
53static inline void phar_get_stub(const char *index_php, const char *web, size_t *len, char **stub, const int name_len, const int web_len)
54{
55';
56$s1split = str_split($s1, 2046);
57$s3split = str_split($s3, 2046);
58$took = false;
59foreach ($s1split as $i => $chunk) {
60	if ($took) {
61		$s1split[$i] = substr($chunk, 1);
62		$took = false;
63	}
64	if ($chunk[strlen($chunk) - 1] == '\\') {
65		$s1split[$i] .= $s1split[$i + 1][0];
66		$took = true;
67	}
68}
69foreach ($s3split as $i => $chunk) {
70	if ($took) {
71		$s3split[$i] = substr($chunk, 1);
72		$took = false;
73	}
74	if ($chunk[strlen($chunk) - 1] == '\\') {
75		$s3split[$i] .= $s3split[$i + 1][0];
76		$took = true;
77	}
78}
79$stub .= "\tstatic const char newstub0[] = \"" . $webs . '";
80';
81foreach ($s1split as $i => $chunk) {
82	$s1count = $i + 1;
83	$stub .= "\tstatic const char newstub1_" . $i . '[] = "' . $chunk . '";
84';
85}
86$stub .= "\tstatic const char newstub2[] = \"" . $s2 . "\";
87";
88foreach ($s3split as $i => $chunk) {
89	$s3count = $i + 1;
90	$stub .= "\tstatic const char newstub3_" . $i . '[] = "' . $chunk . '";
91';
92}
93$stub .= "\n\tstatic const int newstub_len = " . $slen . ";
94
95\t*len = spprintf(stub, name_len + web_len + newstub_len, \"%s%s" . str_repeat('%s', $s1count) . '%s%s%d'
96	. str_repeat('%s', $s3count) . '", newstub0, web';
97foreach ($s1split as $i => $unused) {
98	$stub .= ', newstub1_' . $i;
99}
100$stub .= ', index_php, newstub2';
101$stub .= ", name_len + web_len + newstub_len";
102foreach ($s3split as $i => $unused) {
103	$stub .= ', newstub3_' . $i;
104}
105$stub .= ");
106}";
107
108file_put_contents(dirname(__FILE__) . '/stub.h', $stub."\n");
109?>
110