]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-php-requires.php
- PHP_CompatInfo 1.9.0 says SPL for spl ext
[packages/rpm.git] / rpm-php-requires.php
CommitLineData
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 21function 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 */
113function 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
58f4fffb
ER
119 // minimum php version we accept
120 // "%define php_min_version 5.1.2" in spec to minimum version to be 5.1.2
121 $version = max(PHP_MIN_VERSION, $res['version']);
122
123 if (version_compare($version, '5.0.0', 'ge')) {
005de36a
ER
124 # force php-<name> only deps when php5
125 # XXX what about php-pecl-<name> virtual provides?
126 $fmt = 'php-%s';
ec981489 127 $epoch = 4;
ec981489 128 } else {
005de36a 129 $fmt = 'php(%s)';
ec981489 130 $epoch = 3;
ec981489 131 }
58f4fffb 132 echo "php-common >= ", $epoch, ":", $version, "\n";
e7daca0a 133
ec981489
ER
134 // process extensions
135 foreach ($res['extensions'] as $ext) {
7eb63ec6
ER
136 // bz2 ext is in php-bzip2 package
137 if ($ext == 'bz2') {
138 $ext = 'bzip2';
139 }
65c3afbb
ER
140 // SPL ext is in php-spl package
141 if ($ext == 'SPL') {
142 $ext = 'spl';
143 }
005de36a
ER
144 // ereg
145 if ($ext == 'ereg') {
146 // not yet
147 continue;
148 }
149 printf("$fmt\n", $ext);
e7daca0a 150 }
ec981489 151}
e7daca0a 152
ec981489
ER
153define('RPM_BUILD_ROOT', getenv('RPM_BUILD_ROOT'));
154define('PHP_PEAR_DIR', '/usr/share/pear');
58f4fffb 155define('PHP_MIN_VERSION', getenv('PHP_MIN_VERSION'));
ec981489
ER
156
157if ($argc > 1) {
158 $files = array_splice($argv, 1);
159} else {
01049366 160 $files = explode(PHP_EOL, trim(file_get_contents('php://stdin')));
e7daca0a 161}
ec981489
ER
162
163peardeps($files);
164extdeps($files);
This page took 0.057184 seconds and 4 git commands to generate.