Improve make depend.
[openssl.git] / util / clean-depend.pl
1 #!/usr/local/bin/perl -w
2 # Clean the dependency list in a makefile of standard includes...
3 # Written by Ben Laurie <ben@algroup.co.uk> 19 Jan 1999
4
5 use strict;
6 use Cwd;
7
8 my $path = getcwd();
9 $path =~ /([^\/]+)$/;
10 $path = $1;
11
12 while(<STDIN>) {
13     print;
14     last if /^# DO NOT DELETE THIS LINE/;
15 }
16
17 my %files;
18
19 # Fetch all the dependency output first
20 my $thisfile="";
21 while(<STDIN>) {
22     my ($dummy, $file,$deps)=/^((.*):)? (.*)$/;
23     $thisfile=$file if defined $file;
24     next if !defined $deps;
25     my @deps=split ' ',$deps;
26     @deps=grep(!/^\\$/,@deps);
27     push @{$files{$thisfile}},@deps;
28 }
29
30 my $file;
31
32 # Time to clean out possible system directories and normalise quirks
33 # from different makedepend methods
34 foreach $file (sort keys %files) {
35     # This gets around a quirk with gcc, which removes all directory
36     # information from the original file
37     my $tmpfile=$file;
38     $tmpfile=~s/\.o$/.c/;
39     (my $origfile)=grep(/(^|\/)${tmpfile}$/,@{$files{$file}});
40     my $newfile=$origfile;
41     $newfile=~s/\.c$/.o/;
42     if ($newfile ne $file) {
43         $files{$newfile} = $files{$file};
44         delete $files{$file};
45         $file = $newfile;
46     }
47
48     @{$files{$file}} =
49         grep(!/^\//,
50              grep(!/^$origfile$/, @{$files{$file}}));
51 }
52
53 foreach $file (sort keys %files) {
54     my $len=0;
55     my $dep;
56     my $origfile=$file;
57     $origfile=~s/\.o$/.c/;
58     $file=~s/^\.\///;
59     push @{$files{$file}},$origfile;
60     my $prevdep="";
61
62     # Remove leading ./ before sorting
63     my @deps = map { $_ =~ s/^\.\///; $_ } @{$files{$file}};
64     # Remove ../thisdir/
65     @deps = map { $_ =~ s|^../$path/||; $_ } @deps;
66
67     foreach $dep (sort @deps) {
68         $dep=~s/^\.\///;
69         next if $prevdep eq $dep; # to exterminate duplicates...
70         $prevdep = $dep;
71         $len=0 if $len+length($dep)+1 >= 80;
72         if($len == 0) {
73             print "\n$file:";
74             $len=length($file)+1;
75         }
76         print " $dep";
77         $len+=length($dep)+1;
78     }
79 }
80
81 print "\n";