Accept -Wno- prefix in ARI
[deliverable/binutils-gdb.git] / libiberty / maint-tool
index 75b0c508cd910051a305f5a120a22526ef473b8c..f100dd4a0d7bb05c8553cb50cc001d9ffed73ec1 100644 (file)
@@ -1,8 +1,7 @@
 #!/usr/bin/perl
 # -*- perl -*-
 
-#   Copyright (C) 2001
-#   Free Software Foundation
+#   Copyright (C) 2001-2019 Free Software Foundation, Inc.
 #
 # This file is part of the libiberty library.
 # Libiberty is free software; you can redistribute it and/or
@@ -17,8 +16,8 @@
 #
 # You should have received a copy of the GNU Library General Public
 # License along with libiberty; see the file COPYING.LIB.  If not,
-# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
+# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+# Boston, MA 02110-1301, USA.
 #
 # Originally written by DJ Delorie <dj@redhat.com>
 
@@ -36,6 +35,7 @@ if ($mode eq "-s") {
 
 &missing() if $mode eq "missing";
 &undoc() if $mode eq "undoc";
+&deps() if $mode eq "deps";
 
 exit 0;
 
@@ -75,7 +75,7 @@ sub missing {
     for $f (sort keys %listed) {
        if ($f =~ /(.*)\.c$/) {
            $base = $1;
-           if (! $listed{"$base.o"}) {
+           if (! $listed{"./$base.o"}) {
                print "O $f\n";
            }
        }
@@ -144,7 +144,6 @@ sub undoc {
            next unless /^\# *define/;
            s/\# *define *//;
        }
-       next if $filename =~ /mpw\.c/;
 
        s/ VPARAMS//;
        s/ *\177.*//;
@@ -178,3 +177,122 @@ 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 {
+
+    $crule  = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
+    $crule .= "\t  \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
+    $crule .= "\telse true; fi\n";
+    $crule .= "\tif [ x\"\$(NOASANFLAG)\" != x ]; then \\\n";
+    $crule .= "\t  \$(COMPILE.c) \$(PICFLAG) \$(NOASANFLAG) \$< -o noasan/\$@; \\\n";
+    $crule .= "\telse true; fi\n";
+    $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
+    $crule .= "\n";
+
+    $incdir = shift @ARGV;
+
+    opendir(INC, $incdir);
+    while ($f = readdir INC) {
+       next unless $f =~ /\.h$/ || $f =~ /\.def$/;
+       $mine{$f} = "\$(INCDIR)/$f";
+       $deps{$f} = join(' ', &deps_for("$incdir/$f"));
+    }
+    $mine{'config.h'} = "config.h";
+
+    opendir(INC, $srcdir);
+    while ($f = readdir INC) {
+       next unless $f =~ /\.h$/;
+       $mine{$f} = "\$(srcdir)/$f";
+       $deps{$f} = join(' ', &deps_for("$srcdir/$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$/.\$(objext)/;
+           $obj = "./$obj:";
+           if ($#deps >= 0) {
+               print OUT "$obj \$(srcdir)/$f";
+               $len = length("$obj $f");
+               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";
+           } else {
+               print OUT "$obj \$(srcdir)/$f\n";
+           }
+           $c = $crule;
+           $c =~ s@\$\<@\$\(srcdir\)\/$f@g;
+           print OUT $c;
+       }
+    }
+    closedir(S);
+    close(IN);
+    close(OUT);
+
+    rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in");
+}
This page took 0.025649 seconds and 4 git commands to generate.