summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--scripts/soversions.awk24
2 files changed, 19 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 25b0b8d9b6..af6789bc43 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-02-11  Roland McGrath  <roland@redhat.com>
+
+	* scripts/soversions.awk: Fix default version set handling.
+
 2005-02-10  Roland McGrath  <roland@redhat.com>
 
 	[BZ #157]
diff --git a/scripts/soversions.awk b/scripts/soversions.awk
index 3d50c4deeb..eab2e17677 100644
--- a/scripts/soversions.awk
+++ b/scripts/soversions.awk
@@ -20,11 +20,8 @@ $2 ~ /WORDSIZE[3264]/ {
 
 # Obey the first matching DEFAULT line.
 $2 == "DEFAULT" {
-  if (!matched_default[thiscf]) {
-    matched_default[thiscf] = 1;
-    $1 = $2 = "";
-    default_set[thiscf] = $0;
-  }
+  $1 = $2 = "";
+  default_set[++ndefault_set] = thiscf "\n" $0;
   next
 }
 
@@ -48,12 +45,21 @@ END {
     split(elt, x);
     cf = x[1];
     lib = x[2];
-    if (default_setname && !(cf in default_set) && config ~ cf)
-      default_set[cf] = default_setname;
-    set = (elt in versions) ? versions[elt] : default_set[cf];
-    line = set ? (lib FS numbers[elt] FS set) : (lib FS numbers[elt]);
     for (c in configs)
       if (c ~ cf) {
+	if (elt in versions)
+	  set = versions[elt];
+	else {
+	  set = (c == config) ? default_setname : "";
+	  for (i = 1; i <= ndefault_set; ++i) {
+	    split(default_set[i], x, "\n");
+	    if (c ~ x[1]) {
+	      set = x[2];
+	      break;
+	    }
+	  }
+	}
+	line = set ? (lib FS numbers[elt] FS set) : (lib FS numbers[elt]);
 	if (!((c FS lib) in lineorder) || order[elt] < lineorder[c FS lib]) {
 	  lineorder[c FS lib] = order[elt];
 	  lines[c FS lib] = configs[c] FS line;