Looks like the current Red Hat gcc on Athena emits duplicates and "./foo.h",
authorKen Raeburn <raeburn@mit.edu>
Thu, 22 Dec 2005 05:08:11 +0000 (05:08 +0000)
committerKen Raeburn <raeburn@mit.edu>
Thu, 22 Dec 2005 05:08:11 +0000 (05:08 +0000)
neither of which we've properly addressed before.

* depfix.pl (uniquify): New subroutine.
(do_subs_2): Use it.
(do_subs): Fix substitution pattern for " ./".

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@17573 dc483132-0cff-0310-8789-dd5450dbe970

src/util/ChangeLog
src/util/depfix.pl

index c3f031cef8fff2d3207c2bf1966d77f02192341b..a306f5d92aed327c967e2b1fd67f698a60ec7344 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-22  Ken Raeburn  <raeburn@mit.edu>
+
+       * depfix.pl (uniquify): New subroutine.
+       (do_subs_2): Use it.
+       (do_subs): Fix substitution pattern for " ./".
+
 2005-11-03  Tom Yu  <tlyu@mit.edu>
 
        * mkrel: Delete .svn directories to avoid pathname length bloat.
index b17bf9fc2041da22fe720ecdf7b8b99d01ce029e..09a15dd571429b4cb78f2fdf83c05c08c8a02349 100644 (file)
@@ -62,7 +62,7 @@ sub strrep {
 sub do_subs {
     local($_) = @_;
     s,\\$, \\,g; s, + \\$, \\,g;
-    s,//+,/,g; s, \\./, ,g;
+    s,//+,/,g; s, \./, ,g;
     if ($STLIBOBJS ne "") {
        # Only care about the additional prefixes if we're building
        # shared libraries.
@@ -127,6 +127,8 @@ sub do_subs_2 {
     s;\$\(BUILDTOP\)/include/ss/ss.h \$\(BUILDTOP\)/include/ss/ss_err.h ;\$(SS_DEPS) ;g;
     s;\$\(BUILDTOP\)/include/db.h \$\(BUILDTOP\)/include/db-config.h ;\$(DB_DEPS) ;g;
 
+    $_ = &uniquify($_);
+
     # Some krb4 dependencies should only be present if building with krb4
     # enabled.
     s;\$\(BUILDTOP\)/include/kerberosIV/krb_err.h ;\$(KRB_ERR_H_DEP) ;g;
@@ -137,6 +139,25 @@ sub do_subs_2 {
     return $_;
 }
 
+sub uniquify {
+    # Apparently some versions of gcc -- like
+    # "gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)"
+    # -- will sometimes emit duplicate header file names.
+    local($_) = @_;
+    my(@words) = split " ", $_;
+    my($w);
+    my($result) = "";
+    my(%seen);
+    undef %seen;
+    foreach $w (@words) {
+       next if defined($seen{$w});
+       $seen{$w} = 1;
+       if ($result ne "") { $result .= " "; }
+       $result .= $w;
+    }
+    return $result . " ";
+}
+
 sub split_lines {
     local($_) = @_;
     s/(.{50}[^ ]*) /$1 \\\n  /g;