]> git.pld-linux.org Git - packages/rpm.git/commitdiff
- ported rpm-php-requires to php
authorElan Ruusamäe <glen@pld-linux.org>
Wed, 22 Oct 2008 14:59:58 +0000 (14:59 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    rpm-php-requires.php -> 1.7

rpm-php-requires.php

index a0979e75b69563d6a4fd95b3a24b24faaf695e9f..497b44dc6ae9174e537af1bf9509f0a200834ebe 100644 (file)
 /**
  *
  * Check system dependences between php-pear modules.
- * Based on Perl version rpm-php-requires.
  *
- * Paweł Gołaszewski <blues@pld-linux.org>
- * Michał Moskal <malekith@pld-linux.org>
+ * Paweł Gołaszewski <blues@pld-linux.org> (Perl version)
+ * Michał Moskal <malekith@pld-linux.org> (Perl version)
  * Elan Ruusamäe <glen@pld-linux.org>
  */
 
 /**
- * Produce old style pear(Path/To/File.php) deps
+ * Produce pear(Path/To/File.php) deps
+ * Ported to PHP from Perl version of rpm-php-requires.
+ *
+ * @TODO: use tokenizer to parse php files.
  */
 function peardeps($files) {
        // all files must begin with $RPM_BUILD_ROOT%{php_pear_dir}
        $prefix = RPM_BUILD_ROOT. PHP_PEAR_DIR . DIRECTORY_SEPARATOR;
        $length = strlen($prefix);
+
+       $req = array();
        foreach ($files as $f) {
-               if (substr($f, 0, $length) != $prefix) {
+               // skip non-php files
+               if (substr($f, -4) != '.php') {
+                       continue;
+               }
+
+               // subdir inside php_pear_dir
+               if (substr($f, 0, $length) == $prefix) {
+                       $file_dir = dirname(substr($f, $length));
+               } else {
+                       $file_dir = null;
+               }
+
+               foreach (explode(PHP_EOL, file_get_contents($f)) as $line) {
+                       // skip comments
+                       if (preg_match('/^\s*(#|\/\/|\*|\/\*)/', $line)) {
+                               continue;
+                       }
+
+                       while (preg_match("/(\W|^)(require|include)(_once)?
+                                       \s* \(? \s*
+                                       (\"([^\"]*)\"|'([^']*)')
+                                       \s* \)? \s* ;/x", $line, $m)) {
+
+                               if ($m[5] != "") {
+                                       $x = $m[5];
+                               } else if ($m[6] != "") {
+                                       $x = $m[6];
+                               } else {
+                                       continue 2;
+                               }
+
+                               if (substr($x, 0, 2) == './' || substr($x, -1) == '$') {
+                                       continue 2;
+                               }
+
+                               if (substr($x, -4) != '.php') {
+                                       continue 2;
+                               }
+                               $req[$x] = 1;
+                               continue 2;
+                       }
+
+                       if (is_null($file_dir)) {
+                               continue;
+                       }
+
+                       while (preg_match("/(\W|^)(require|include)(_once)?
+                                       \s* \(? \s* dirname \s* \( \s* __FILE__ \s* \) \s* \. \s*
+                                       (\"([^\"]*)\"|'([^']*)')
+                                       \s* \)? \s* ;/x", $line, $m)) {
+
+                               if ($m[5] != "") {
+                                       $x = $m[5];
+                               } else if ($m[6] != "") {
+                                       $x = $m[6];
+                               } else {
+                                       continue 2;
+                               }
+
+                               if (substr($x, -1) == '$') {
+                                       continue 2;
+                               }
+                               if (substr($x, -4) != '.php') {
+                                       continue 2;
+                               }
+
+                               $x = "$file_dir/$x";
+                               $req[$x] = 1;
+                               continue;
+                       }
+               }
+       }
+
+       foreach (array_keys($req) as $f) {
+               // skip self deps
+               if (array_key_exists($f, $files)) {
                        continue;
                }
-               $f = substr($f, $length);
-               echo "pear($f)\n";
+               print "pear($f)\n";
        }
 }
 
@@ -64,7 +142,7 @@ define('PHP_PEAR_DIR', '/usr/share/pear');
 if ($argc > 1) {
        $files = array_splice($argv, 1);
 } else {
-       $files = split(PHP_EOL, trim(file_get_contents('php://stdin')));
+       $files = explode(PHP_EOL, trim(file_get_contents('php://stdin')));
 }
 
 peardeps($files);
This page took 0.040275 seconds and 4 git commands to generate.