]> git.pld-linux.org Git - packages/rpm.git/blobdiff - rpm-php-requires.php
- cleanup java deps generator
[packages/rpm.git] / rpm-php-requires.php
index 497b44dc6ae9174e537af1bf9509f0a200834ebe..b39802993bc09d5d25656eb32939a69a054b101e 100644 (file)
@@ -1,5 +1,9 @@
 #!/usr/bin/php
 <?php
+/*
+ * minify.spec does not see these: pear(HTTP/ConditionalGet.php) pear(HTTP/Encoder.php)
+ * perl version does
+ */
 /**
  *
  * Check system dependences between php-pear modules.
@@ -7,6 +11,11 @@
  * Paweł Gołaszewski <blues@pld-linux.org> (Perl version)
  * Michał Moskal <malekith@pld-linux.org> (Perl version)
  * Elan Ruusamäe <glen@pld-linux.org>
+ *
+ * URL: <http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/rpm/rpm-php-requires.php>
+ *
+ * Requires: php-pear-PHP_CompatInfo
+ * Requires: php-pcre
  */
 
 /**
@@ -16,7 +25,7 @@
  * @TODO: use tokenizer to parse php files.
  */
 function peardeps($files) {
-       // all files must begin with $RPM_BUILD_ROOT%{php_pear_dir}
+       // files inside php_pear_dir have this prefix
        $prefix = RPM_BUILD_ROOT. PHP_PEAR_DIR . DIRECTORY_SEPARATOR;
        $length = strlen($prefix);
 
@@ -34,26 +43,26 @@ function peardeps($files) {
                        $file_dir = null;
                }
 
-               foreach (explode(PHP_EOL, file_get_contents($f)) as $line) {
-                       // skip comments
+               foreach (file($f) as $line) {
+                       // skip comments -- not perfect, matches "*" at start of line (very rare altho)
                        if (preg_match('/^\s*(#|\/\/|\*|\/\*)/', $line)) {
                                continue;
                        }
 
-                       while (preg_match("/(\W|^)(require|include)(_once)?
+                       if (preg_match("/(\W|^)(require|include)(_once)?
                                        \s* \(? \s*
                                        (\"([^\"]*)\"|'([^']*)')
                                        \s* \)? \s* ;/x", $line, $m)) {
 
-                               if ($m[5] != "") {
+                               if ($m[5]) {
                                        $x = $m[5];
-                               } else if ($m[6] != "") {
+                               } else if ($m[6]) {
                                        $x = $m[6];
                                } else {
                                        continue 2;
                                }
 
-                               if (substr($x, 0, 2) == './' || substr($x, -1) == '$') {
+                               if (substr($x, 0, 2) == './' || substr($x, -1) == '$') {  # XXX must be: CONTAINS DOLLAR
                                        continue 2;
                                }
 
@@ -68,20 +77,20 @@ function peardeps($files) {
                                continue;
                        }
 
-                       while (preg_match("/(\W|^)(require|include)(_once)?
+                       if (preg_match("/(\W|^)(require|include)(_once)?
                                        \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s*
                                        (\"([^\"]*)\"|'([^']*)')
                                        \s* \)? \s* ;/x", $line, $m)) {
 
-                               if ($m[5] != "") {
+                               if ($m[5]) {
                                        $x = $m[5];
-                               } else if ($m[6] != "") {
+                               } else if ($m[6]) {
                                        $x = $m[6];
                                } else {
                                        continue 2;
                                }
 
-                               if (substr($x, -1) == '$') {
+                               if (substr($x, -1) == '$') { # XXX must be: CONTAINS DOLLAR
                                        continue 2;
                                }
                                if (substr($x, -4) != '.php') {
@@ -89,6 +98,9 @@ function peardeps($files) {
                                }
 
                                $x = "$file_dir/$x";
+                               // remove double slashes
+                               // TODO: resolve simpletest/test/../socket.php -> simpletest/socket.php
+                               $x = str_replace("//", "/", $x);
                                $req[$x] = 1;
                                continue;
                        }
@@ -100,7 +112,7 @@ function peardeps($files) {
                if (array_key_exists($f, $files)) {
                        continue;
                }
-               print "pear($f)\n";
+               echo "pear($f)\n";
        }
 }
 
@@ -113,31 +125,44 @@ function extdeps($files) {
        $info = new PHP_CompatInfo('null');
        $res = $info->parseData($files);
 
-       if (version_compare($res['version'], '5.0.0', 'ge')) {
+       // minimum php version we accept
+       // "%define php_min_version 5.1.2" in spec to minimum version to be 5.1.2
+       $version = max(PHP_MIN_VERSION, $res['version']);
+
+       if (version_compare($version, '5.0.0', 'ge')) {
+               # force php-<name> only deps when php5
+               # XXX what about php-pecl-<name> virtual provides?
+               $fmt = 'php-%s';
                $epoch = 4;
-               // session, pcre are statically compiled in
-               // date, SPL, SimpleXML are internal for php
-               // sapi_apache?
-               $staticmods = array('standard', 'ereg', 'session', 'pcre', 'date', 'spl', 'simplexml');
        } else {
+               $fmt = 'php(%s)';
                $epoch = 3;
-               // session has always been compiled in
-               $staticmods = array('standard', 'ereg', 'session');
        }
-       echo "php-common >= ", $epoch, ":", $res['version'], "\n";
+       echo "php-common >= ", $epoch, ":", $version, "\n";
 
        // process extensions
        foreach ($res['extensions'] as $ext) {
-               if (in_array($ext, $staticmods)) {
-                       continue;
+               // bz2 ext is in php-bzip2 package
+               if ($ext == 'bz2') {
+                       $ext = 'bzip2';
+               }
+               // libxml ext is in php-xml package
+               if ($ext == 'libxml') {
+                       $ext = 'xml';
+               }
+
+               // these need to be lowercased
+               if (in_array($ext, array('SPL', 'PDO', 'SQLite', 'Reflection', 'SimpleXML'))) {
+                       $ext = strtolower($ext);
                }
 
-               echo "php(", $ext, ")\n";
+               printf("$fmt\n", $ext);
        }
 }
 
 define('RPM_BUILD_ROOT', getenv('RPM_BUILD_ROOT'));
 define('PHP_PEAR_DIR', '/usr/share/pear');
+define('PHP_MIN_VERSION', getenv('PHP_MIN_VERSION'));
 
 if ($argc > 1) {
        $files = array_splice($argv, 1);
This page took 0.046278 seconds and 4 git commands to generate.