]>
Commit | Line | Data |
---|---|---|
e7daca0a ER |
1 | #!/usr/bin/php |
2 | <?php | |
4553acd5 ER |
3 | /** |
4 | * | |
5 | * Check system dependences between php-pear modules. | |
4553acd5 | 6 | * |
01049366 ER |
7 | * Paweł Gołaszewski <blues@pld-linux.org> (Perl version) |
8 | * Michał Moskal <malekith@pld-linux.org> (Perl version) | |
4553acd5 | 9 | * Elan Ruusamäe <glen@pld-linux.org> |
784009ae ER |
10 | * |
11 | * Requires: php-pear-PHP_CompatInfo | |
12 | * Requires: php-pcre | |
4553acd5 | 13 | */ |
ec981489 | 14 | |
e7daca0a | 15 | /** |
01049366 ER |
16 | * Produce pear(Path/To/File.php) deps |
17 | * Ported to PHP from Perl version of rpm-php-requires. | |
18 | * | |
19 | * @TODO: use tokenizer to parse php files. | |
e7daca0a | 20 | */ |
ec981489 | 21 | function peardeps($files) { |
bf998152 | 22 | // files inside php_pear_dir have this prefix |
4083bfec | 23 | $prefix = RPM_BUILD_ROOT. PHP_PEAR_DIR . DIRECTORY_SEPARATOR; |
ec981489 | 24 | $length = strlen($prefix); |
01049366 ER |
25 | |
26 | $req = array(); | |
ec981489 | 27 | foreach ($files as $f) { |
01049366 ER |
28 | // skip non-php files |
29 | if (substr($f, -4) != '.php') { | |
30 | continue; | |
31 | } | |
32 | ||
33 | // subdir inside php_pear_dir | |
34 | if (substr($f, 0, $length) == $prefix) { | |
35 | $file_dir = dirname(substr($f, $length)); | |
36 | } else { | |
37 | $file_dir = null; | |
38 | } | |
39 | ||
784009ae | 40 | foreach (file($f) as $line) { |
01049366 ER |
41 | // skip comments |
42 | if (preg_match('/^\s*(#|\/\/|\*|\/\*)/', $line)) { | |
43 | continue; | |
44 | } | |
45 | ||
46 | while (preg_match("/(\W|^)(require|include)(_once)? | |
47 | \s* \(? \s* | |
48 | (\"([^\"]*)\"|'([^']*)') | |
49 | \s* \)? \s* ;/x", $line, $m)) { | |
50 | ||
51 | if ($m[5] != "") { | |
52 | $x = $m[5]; | |
53 | } else if ($m[6] != "") { | |
54 | $x = $m[6]; | |
55 | } else { | |
56 | continue 2; | |
57 | } | |
58 | ||
59 | if (substr($x, 0, 2) == './' || substr($x, -1) == '$') { | |
60 | continue 2; | |
61 | } | |
62 | ||
63 | if (substr($x, -4) != '.php') { | |
64 | continue 2; | |
65 | } | |
66 | $req[$x] = 1; | |
67 | continue 2; | |
68 | } | |
69 | ||
70 | if (is_null($file_dir)) { | |
71 | continue; | |
72 | } | |
73 | ||
74 | while (preg_match("/(\W|^)(require|include)(_once)? | |
75 | \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s* | |
76 | (\"([^\"]*)\"|'([^']*)') | |
77 | \s* \)? \s* ;/x", $line, $m)) { | |
78 | ||
79 | if ($m[5] != "") { | |
80 | $x = $m[5]; | |
81 | } else if ($m[6] != "") { | |
82 | $x = $m[6]; | |
83 | } else { | |
84 | continue 2; | |
85 | } | |
86 | ||
87 | if (substr($x, -1) == '$') { | |
88 | continue 2; | |
89 | } | |
90 | if (substr($x, -4) != '.php') { | |
91 | continue 2; | |
92 | } | |
93 | ||
94 | $x = "$file_dir/$x"; | |
95 | $req[$x] = 1; | |
96 | continue; | |
97 | } | |
98 | } | |
99 | } | |
100 | ||
101 | foreach (array_keys($req) as $f) { | |
102 | // skip self deps | |
103 | if (array_key_exists($f, $files)) { | |
ec981489 ER |
104 | continue; |
105 | } | |
784009ae | 106 | echo "pear($f)\n"; |
ec981489 ER |
107 | } |
108 | } | |
e7daca0a | 109 | |
ec981489 ER |
110 | /** |
111 | * Produce dependencies for extensions using PEAR PHP_CompatInfo package. | |
112 | */ | |
113 | function extdeps($files) { | |
114 | require_once 'PHP/CompatInfo.php'; | |
e7daca0a | 115 | |
ec981489 ER |
116 | $info = new PHP_CompatInfo('null'); |
117 | $res = $info->parseData($files); | |
e7daca0a | 118 | |
ec981489 ER |
119 | if (version_compare($res['version'], '5.0.0', 'ge')) { |
120 | $epoch = 4; | |
ec981489 ER |
121 | } else { |
122 | $epoch = 3; | |
ec981489 ER |
123 | } |
124 | echo "php-common >= ", $epoch, ":", $res['version'], "\n"; | |
e7daca0a | 125 | |
ec981489 ER |
126 | // process extensions |
127 | foreach ($res['extensions'] as $ext) { | |
7eb63ec6 ER |
128 | // bz2 ext is in php-bzip2 package |
129 | if ($ext == 'bz2') { | |
130 | $ext = 'bzip2'; | |
131 | } | |
b56286b3 | 132 | echo "php(", $ext, ")\n"; |
e7daca0a | 133 | } |
ec981489 | 134 | } |
e7daca0a | 135 | |
ec981489 ER |
136 | define('RPM_BUILD_ROOT', getenv('RPM_BUILD_ROOT')); |
137 | define('PHP_PEAR_DIR', '/usr/share/pear'); | |
138 | ||
139 | if ($argc > 1) { | |
140 | $files = array_splice($argv, 1); | |
141 | } else { | |
01049366 | 142 | $files = explode(PHP_EOL, trim(file_get_contents('php://stdin'))); |
e7daca0a | 143 | } |
ec981489 ER |
144 | |
145 | peardeps($files); | |
146 | extdeps($files); |