52
52
" #-- Everything below is generated by mkdep.pl - do not edit --#\n " ;
53
53
54
54
# This converts from filenames to full pathnames for our dependencies
55
+ # These are arrays of [full path, Makefile path]
55
56
my %dep_path = ();
56
57
57
58
# List of files that cannot be found; these *must* be excluded
73
74
74
75
#
75
76
# Scan files for dependencies
77
+ # $path is the full filesystem path, $file Makefile name
76
78
#
77
79
sub scandeps {
78
- # path is the filesystem path, file what the output should call it
79
80
my ($path , $file ) = @_ ;
80
81
my $line ;
81
82
my %xdeps ;
82
83
my %mdeps ;
83
84
84
- open (my $fh , ' <' , $path )
85
- or return ; # If not openable, assume generated
85
+ print STDERR " mkdep: scanning file: $path \n " if ( $debug );
86
+
87
+ my $fh ;
88
+ if (!open ($fh , ' <' , $path )) {
89
+ print STDERR " -> missing, assume generated\n " if ( $debug );
90
+ return ;
91
+ }
86
92
87
93
while ( defined ($line = <$fh >) ) {
88
94
chomp $line ;
89
95
$line =~ s : /\* .*\* /:: g ;
90
96
$line =~ s : //.*$:: ;
91
97
if ( $line =~ / ^\s *\#\s *include\s +\" (.*)\"\s *$ / ) {
92
98
my $nf = $1 ;
93
- if (!defined ($dep_path {$nf })) {
99
+ my $dp = $dep_path {$nf };
100
+ if (!defined ($dp )) {
94
101
push (@must_exclude , $nf );
102
+ print STDERR " -> $nf [missing]\n " if ( $debug );
95
103
next ;
96
104
}
97
- $nf = $dep_path {$nf };
98
- $mdeps {$nf }++;
99
- $xdeps {$nf }++ unless ( defined ($deps {$nf }) );
105
+ my $dn = $dp -> [1];
106
+ $mdeps {$dn }++;
107
+ $xdeps {$dn } = $dp unless ( defined ($deps {$dn }) );
108
+ printf STDERR " -> %s (%s )\n " , $nf , $dn if ( $debug );
100
109
}
101
110
}
102
111
close ($fh );
103
112
$deps {$file } = [keys (%mdeps )];
104
113
105
114
foreach my $xf ( keys (%xdeps ) ) {
106
- scandeps($xf );
115
+ scandeps(@{ $xdeps { $xf }} );
107
116
}
108
117
}
109
118
110
119
# %deps contains direct dependencies. This subroutine resolves
111
120
# indirect dependencies that result.
112
- sub alldeps ($$) {
113
- my ($file , $level ) = @_ ;
114
- my %adeps ;
121
+ sub _alldeps ($$$) {
122
+ my ($file , $level , $adeps ) = @_ ;
123
+
124
+ return if ($adeps -> {$file });
125
+
126
+ printf STDERR " %s -> %s \n " , (' ' x $level ), $file ;
127
+ $adeps -> {$file }++;
115
128
116
129
foreach my $dep ( @{$deps {$file }} ) {
117
- $adeps {$dep } = 1;
118
- foreach my $idep ( alldeps($dep , $level +1) ) {
119
- $adeps {$idep } = 1;
120
- }
130
+ _alldeps($dep , $level +1, $adeps );
121
131
}
132
+ }
133
+
134
+ sub alldeps ($) {
135
+ my ($file ) = @_ ;
136
+
137
+ my %adeps ;
138
+ _alldeps($file , 1, \%adeps );
122
139
return sort (keys (%adeps ));
123
140
}
124
141
177
194
my $fpath = $1 ;
178
195
my $fbase = basename($fpath );
179
196
if (!defined ($dep_path {$fbase })) {
180
- $dep_path {$fbase } = $fpath ;
197
+ $dep_path {$fbase } = [ $fpath , $fpath ] ;
181
198
print STDERR " Makefile: $fbase -> $fpath \n " ;
182
199
}
183
200
} elsif ( $line =~ / ^\s *\#\s *@([a-z0-9-]+):\s *\" ([^\" ]*)\" / ) {
249
266
@deps = sort (keys (%deps ));
250
267
} elsif ( $dfile =~ / ^(.*)\. [Cc]$ / ) {
251
268
$ofile = convert_file($1 , $sep ).$obj .' :' ;
252
- @deps = ($dfile ,alldeps($dfile ,1));
269
+ print STDERR " mkdep: dependencies for: $dfile \n " ;
270
+ @deps = alldeps($dfile );
253
271
}
254
272
255
273
if (defined ($ofile )) {
@@ -332,12 +350,15 @@ ($$)
332
350
333
351
foreach my $sdir ( @searchdirs ) {
334
352
my $dir = mycatdir($sdir , $fdir );
353
+
335
354
if ($scanned {$dir }) {
336
355
# Have already been here
337
356
$found = 1;
338
357
next ;
339
358
}
340
359
360
+ print STDERR " mkdep: scanning directory $dir \n " if ( $debug );
361
+
341
362
opendir (DIR, $dir ) or next ;
342
363
$scanned {$dir }++;
343
364
$found ++;
@@ -351,9 +372,12 @@ ($$)
351
372
if ( $file =~ / \. [Cc]$ / ) {
352
373
push (@cfiles , [$fullpath , $path ]);
353
374
} elsif ( $file =~ / \. [Hh]$ / ) {
354
- print STDERR " Filesystem: $file -> $path \n " if ( $debug );
355
- $dep_path {$file } = $path ; # Allow the blank filename
356
- $dep_path {$path } = $path ; # Also allow the full pathname
375
+ print STDERR " mkdep: filesystem: $file -> $path \n " if ( $debug );
376
+ if (defined ($dep_path {$file })) {
377
+ print STDERR " mkdep: warning: more than one instance of filename $file !\n " ;
378
+ }
379
+ $dep_path {$file } = [$fullpath , $path ];
380
+ $dep_path {$path } = [$fullpath , $path ];
357
381
}
358
382
}
359
383
closedir (DIR);
0 commit comments