diff options
Diffstat (limited to 'util')
-rwxr-xr-x | util/clean-depend.pl | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/util/clean-depend.pl b/util/clean-depend.pl index 04d86b6d09..30197b798d 100755 --- a/util/clean-depend.pl +++ b/util/clean-depend.pl @@ -11,22 +11,40 @@ while(<STDIN>) { my %files; +# Fetch all the dependency output first my $thisfile=""; while(<STDIN>) { my ($dummy, $file,$deps)=/^((.*):)? (.*)$/; - my $origfile=""; $thisfile=$file if defined $file; next if !defined $deps; - $origfile=$thisfile; - $origfile=~s/\.o$/.c/; my @deps=split ' ',$deps; - @deps=grep(!/^\//,@deps); @deps=grep(!/^\\$/,@deps); - @deps=grep(!/^$origfile$/,@deps); push @{$files{$thisfile}},@deps; } my $file; + +# Time to clean out possible system directories and normalise quirks +# from different makedepend methods +foreach $file (sort keys %files) { + # This gets around a quirk with gcc, which removes all directory + # information from the original file + my $tmpfile=$file; + $tmpfile=~s/\.o$/.c/; + (my $origfile)=grep(/(^|\/)${tmpfile}$/,@{$files{$file}}); + my $newfile=$origfile; + $newfile=~s/\.c$/.o/; + if ($newfile ne $file) { + $files{$newfile} = $files{$file}; + delete $files{$file}; + $file = $newfile; + } + + @{$files{$file}} = + grep(!/^\//, + grep(!/^$origfile$/, @{$files{$file}})); +} + foreach $file (sort keys %files) { my $len=0; my $dep; |