aboutsummaryrefslogtreecommitdiff
path: root/libiberty/maint-tool
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2002-01-22 20:14:53 +0000
committerDJ Delorie <dj@redhat.com>2002-01-22 20:14:53 +0000
commitcc096b7166610e6cca71574ef936acbabc922708 (patch)
treee1f498ad212739694972f83364c71a374ce90a3d /libiberty/maint-tool
parent069e84fd968e0561b436e2af0bd2310e028fd04f (diff)
downloadgdb-cc096b7166610e6cca71574ef936acbabc922708.zip
gdb-cc096b7166610e6cca71574ef936acbabc922708.tar.gz
gdb-cc096b7166610e6cca71574ef936acbabc922708.tar.bz2
merge from gcc
Diffstat (limited to 'libiberty/maint-tool')
-rw-r--r--libiberty/maint-tool98
1 files changed, 98 insertions, 0 deletions
diff --git a/libiberty/maint-tool b/libiberty/maint-tool
index 75b0c50..ceeb48d 100644
--- a/libiberty/maint-tool
+++ b/libiberty/maint-tool
@@ -36,6 +36,7 @@ if ($mode eq "-s") {
&missing() if $mode eq "missing";
&undoc() if $mode eq "undoc";
+&deps() if $mode eq "deps";
exit 0;
@@ -178,3 +179,100 @@ sub undoc {
write;
}
}
+
+######################################################################
+
+sub deps_for {
+ my($f) = @_;
+ my(%d);
+ open(F, $f);
+ %d = ();
+ while (<F>) {
+ if (/^#\s*include\s+["<](.*)[">]/) {
+ $d{$1} = 1;
+ }
+ }
+ close(F);
+ return keys %d;
+}
+
+sub canonicalize {
+ my ($p) = @_;
+ 0 while $p =~ s@/\./@/@g;
+ 0 while $p =~ s@^\./@@g;
+ 0 while $p =~ s@/[^/]+/\.\./@/@g;
+ return $p;
+}
+
+sub locals_first {
+ my ($a,$b) = @_;
+ return -1 if $a eq "config.h";
+ return 1 if $b eq "config.h";
+ return $a cmp $b;
+}
+
+sub deps {
+
+ $incdir = shift @ARGV;
+
+ opendir(INC, $incdir);
+ while ($f = readdir INC) {
+ next unless $f =~ /\.h$/;
+ $mine{$f} = "\$(INCDIR)/$f";
+ $deps{$f} = join(' ', &deps_for("$incdir/$f"));
+ }
+ $mine{'config.h'} = "config.h";
+
+ open(IN, "$srcdir/Makefile.in");
+ open(OUT, ">$srcdir/Makefile.tmp");
+ while (<IN>) {
+ last if /remainder of this file/;
+ print OUT;
+ }
+ print OUT "# The dependencies in the remainder of this file are automatically\n";
+ print OUT "# generated by \"make maint-deps\". Manual edits will be lost.\n\n";
+
+ opendir(S, $srcdir);
+ for $f (sort readdir S) {
+ if ($f =~ /\.c$/) {
+
+ %scanned = ();
+ @pending = &deps_for("$srcdir/$f");
+ while (@pending) {
+ @tmp = @pending;
+ @pending = ();
+ for $p (@tmp) {
+ next unless $mine{$p};
+ if (!$scanned{$p}) {
+ push(@pending, split(' ', $deps{$p}));
+ $scanned{$p} = 1;
+ }
+ }
+ }
+ @deps = sort { &locals_first($a,$b) } keys %scanned;
+ $obj = $f;
+ $obj =~ s/\.c$/.o/;
+ $obj = "$obj:";
+ if ($#deps >= 0) {
+ print OUT $obj;
+ $len = length($obj);
+ for $dt (@deps) {
+ $d = $mine{$dt};
+ if ($len + length($d) > 70) {
+ printf OUT " \\\n\t$d";
+ $len = 8 + length($d);
+ } else {
+ print OUT " $d";
+ $len += length($d) + 1;
+ }
+ }
+ print OUT "\n";
+ }
+ }
+ }
+ closedir(S);
+ close(IN);
+ close(OUT);
+
+ rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in");
+}