-#!/bin/sh
+#!/usr/bin/perl
#####################################################################
# #
# Check system dependences between php-pear modules #
# #
# Pawe³ Go³aszewski <blues@ds.pg.gda.pl> #
+# Micha³ Moskal <malekith@pld-linux.org> #
# ------------------------------------------------------------------#
# TODO: #
#####################################################################
-if [ $# -lt 1 ]; then
- echo "You have to specify input file"
- exit 1
-fi
+die "You have to specify input files" if (@ARGV < 1);
-filelist=`echo $@`
-for i in $filelist; do
- i=`echo $i | grep "\.php$"`
- if [ -n "$i" ]; then
- j=`cat $i | egrep -i "^Class" | cut -f 2 -d " " | sed "s/{/ /" | tr -d "\r"`
- if [ -n "$j" ]; then
- for p in $j; do
- echo "pear($p)"
- done
- j=""
- fi
- fi
-done
+$pear = "/usr/share/pear";
+
+while (@ARGV > 0) {
+ $f = shift;
+ next unless ($f =~ /$pear.*\.php$/);
+ $f =~ s/.*$pear\///;
+ print "pear($f)\n";
+}
-#!/bin/sh
+#!/usr/bin/perl
#####################################################################
# #
# Check system dependences between php-pear modules #
# #
# Pawe³ Go³aszewski <blues@ds.pg.gda.pl> #
+# Micha³ Moskal <malekith@pld-linux.org> #
# ------------------------------------------------------------------#
# TODO: #
# - extension_loaded - dependencies. #
# - some clean-up... #
#####################################################################
-if [ $# -lt 1 ]; then
- echo "You have to specify input file"
- exit 1
-fi
-for files in `echo $@`; do
- files=`echo $files | grep "\.php$"`
- if [ -n "$files" ]; then
- # Requires trough new call:
- j=`cat $files | grep -iw new | egrep "(=|return)" | egrep -v "^[[:space:]*]*(\/\/|#|\*|/\*)" | tr -d "\r" | egrep "[;|(|)|{|}|,][[:space:]*]*$" | awk -F "new " '{ print $2 }' | sed "s/[(|;|.]/ /g" | cut -f 1 -d " " | sed "s/^$.*//"`
- if [ -n "$j" ]; then
- for feature in $j; do
- echo "pear($feature)"
- done
- j=""
- fi
- # requires trough class extension
- k=`cat $files | egrep -i "(^Class.*extends)" | awk -F " extends " '{ print $2 }' | sed "s/{.*/ /" | cut -f 1 -d " " | tr -d "\r"`
- if [ -n "$k" ]; then
- for feature in $k; do
- echo "pear($feature)"
- done
- k=""
- fi
- # requires trough class:: call
- l=`cat $files | grep "::" | egrep -v "^[[:space:]*]*(\/\/|#|\*|/\*)" | sed "s/[(|)|'|!|\"|&|@|;]/ /g" | awk -F "::" '{ print $1 }' | sed "s/.*\ \([:alphanum:]*\)/\1/" | sed "s/^$.*//" | sed "s/[.]//g" | tr -d "\r"`
- if [ -n "$l" ]; then
- for feature in $l; do
- echo "pear($feature)"
- done
- l=""
- fi
- fi
-done
+die "You have to specify input files" if (@ARGV < 1);
+@files = ();
+%req = ();
+
+while (@ARGV > 0) {
+ $f = shift;
+ push @files, $f;
+ # skip non-php files
+ next unless ($f =~ /\.php$/);
+ open(F, "< $f") or die;
+
+ while (<F>) {
+ # skip comments
+ next if (/^\s*(#|\/\/|\*|\/\*)/);
+
+ while (/(\W|^)(require|include)(_once)?
+ \s* \(? \s* ("([^"]*)"|'([^']*)')
+ \s* \)? \s* ;/xg) {
+ if ($5 ne "") {
+ $x = $5;
+ } elsif ($6 ne "") {
+ $x = $6;
+ } else {
+ next;
+ }
+
+ next if ($x =~ m|^\./| or $x =~ /\$/);
+ $req{$x} = 1;
+ }
+ }
+}
+
+f: for $f (keys %req) {
+ for $g (@files) { next f if ($g =~ /\Q$f\E$/); }
+ print "pear($f)\n";
+}