]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-php-requires.php
- bz2 ext is in php-bzip2 package
[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
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
136define('RPM_BUILD_ROOT', getenv('RPM_BUILD_ROOT'));
137define('PHP_PEAR_DIR', '/usr/share/pear');
138
139if ($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
145peardeps($files);
146extdeps($files);
This page took 0.059623 seconds and 4 git commands to generate.