Add support for billing date
[infodrom.org/service.infodrom.org] / bin / wmldepend.pl
1 #! /usr/bin/perl
2
3 $INCPATH = "";
4 $FILES = "";
5
6 # expandfile() {
7 #         for i in $INCPATH
8 #         do
9 #                 if [ -f $i/$1 ] 
10 #                 then
11 #                         echo $i/$1
12 #                         exit 0
13 #                 fi
14 #         done
15 #         echo "Error: Include file \`$1' does not exist" > /dev/stderr
16 # #     echo "Fehler: Includedatei $1 existiert nicht" > /dev/stderr
17 #         exit 1
18 # }
19
20
21 sub expandfile
22 {
23     my $f = shift;
24     my %var = @_;
25     my $p;
26
27     if ($f =~ m,\$\((.*)\),) {
28         $pivot = $1;
29         $f =~ s,\$\($1\),$var{$pivot},;
30     }
31
32     return "$f" if (-f "$f");
33
34     foreach $p (@INCPATH) {
35         return "$p/$f" if (-f "$p/$f");
36     }
37
38     printf STDERR "Error: Include file `$f' does not exist.\n"
39 }
40
41 sub findincludes
42 {
43     my $f = shift;
44     my %var = @_;
45     my @lines = ();
46     my ($l, $foo, $p);
47     my ($v, $e, $pivot);
48
49     open (F, $f) || printf STDERR "Error: Can't open $f, $!\n";
50     while (<F>) {
51         push (@lines, $_) if (m,^#(include|read)\s+[<"][^><"]*[>"].*,);
52     }
53     close (F);
54
55     foreach $l (@lines) {
56         if ($l =~ m,^#(include|read)\s+[<"]([^>"]*)[><"]\s+(.*),) {
57             $p = $2;
58             $foo = expandfile ($p, %var);
59             if ($3 =~ m,(\S+)="([^"]*)",) {
60                 $v=$1; $e=$2;
61                 if ($e =~ m,\$\((.*)\),) {
62                     $pivot = $1;
63                     $e =~ s,\$\($1\),$var{$pivot},;
64                 }
65                 $var{$v} = $e;
66             }
67         } elsif ($l =~ m,^#(include|read)\s+[<"]([^><"]*)[>"].*,) {
68             $p = $2;
69             $foo = expandfile ($p, %var);
70         }
71         printf " \\\n\t%s", $foo;
72         findincludes ($foo, %var);
73     }
74 }
75
76 # Argument parsing
77 #
78 while ($foo = shift (@ARGV)) {
79     if ($foo =~ m,-I(.*),) {
80         push (@INCPATH, $1);
81     } else {
82         push (@FILES, $foo);
83     }
84 }
85
86 %var=();
87 for $f (@FILES) {
88     $foo = $f;
89     $foo =~ s/\.wml$/\.php/;
90     printf "%s: %s", $foo, $f;
91     findincludes ($f, %var);
92     print "\n";
93 }