diff options
author | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-22 20:03:29 +0000 |
---|---|---|
committer | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-22 20:03:29 +0000 |
commit | 98b6fc70cac3a41dedfc45e5f84bf7f2f71e3092 (patch) | |
tree | 4668c0ff40f185a82c1b9c01b0388f432c6cf685 /libiberty/maint-tool | |
parent | 9ac60e098d7032c8613d05b9d29816869475e52d (diff) | |
download | gcc-98b6fc70cac3a41dedfc45e5f84bf7f2f71e3092.tar.gz |
* Makefile.in (TESTLIB): New. This library is for future
testsuites.
(CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize,
break down by letter.
(REQUIRED_OFILES): List long-to-compile files first.
(maint-deps): New, target for updating dependencies.
(dependencies): Update.
* maint-tool: Add dependency-generating option.
* configure.in: Check for _doprnt even if we're not providing it.
* configure: Regenerate.
* _doprnt.c: Modifications to allow compiling on any platform.
* copysign.c: Likewise.
* putenv.c: Likewise.
* setenv.c: Likewise.
* vsprintf.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49090 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libiberty/maint-tool')
-rw-r--r-- | libiberty/maint-tool | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/libiberty/maint-tool b/libiberty/maint-tool index 75b0c508cd9..ceeb48dbf39 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"); +} |