about summary refs log tree commit diff
path: root/scripts/abilist.awk
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2015-10-29 15:33:54 +0100
committerFlorian Weimer <fweimer@redhat.com>2015-11-06 13:58:53 +0100
commit8c77b6ad4063534fb1e5a6904217c4586060334a (patch)
tree523517a67c4b852dfd6c849c11270b8a997a2e88 /scripts/abilist.awk
parent8b7b7f75d91f7bac323dd6a370aeb3e9c5c4a7d5 (diff)
downloadglibc-8c77b6ad4063534fb1e5a6904217c4586060334a.tar.gz
glibc-8c77b6ad4063534fb1e5a6904217c4586060334a.tar.xz
glibc-8c77b6ad4063534fb1e5a6904217c4586060334a.zip
Simplify the abilist format
The new format lists the version on each line, as in:

	VERSION SYMBOL TYPE [VALUE]

This makes it easier to process the files with line-oriented tools.

The abilist files were converted with this awk script:

/^[^ ]/ { version = $1 }
/^ / { print version, substr($0, 2) }

And sorted under the "C" locale with sort.
Diffstat (limited to 'scripts/abilist.awk')
-rw-r--r--scripts/abilist.awk67
1 files changed, 9 insertions, 58 deletions
diff --git a/scripts/abilist.awk b/scripts/abilist.awk
index 52b5b32b75..bd740d4693 100644
--- a/scripts/abilist.awk
+++ b/scripts/abilist.awk
@@ -100,17 +100,13 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
   # Disabled -- weakness should not matter to shared library ABIs any more.
   #if (weak == "w") type = tolower(type);
   if (desc == "")
-    desc = " " symbol " " type size;
+    desc = symbol " " type size;
 
   if (combine)
     version = soname " " version (combine_fullname ? " " sofullname : "");
 
-  if (version in versions) {
-    versions[version] = versions[version] "\n" desc;
-  }
-  else {
-    versions[version] = desc;
-  }
+  # Append to the string which collects the results.
+  descs = descs version " " desc "\n";
   next;
 }
 
@@ -126,65 +122,20 @@ function emit(end) {
     return;
   tofile = parse_names && !combine;
 
-  nverslist = 0;
-  for (version in versions) {
-    if (nverslist == 0) {
-      verslist = version;
-      nverslist = 1;
-      continue;
-    }
-    split(verslist, s, "\n");
-    if (version < s[1]) {
-      verslist = version;
-      for (i = 1; i <= nverslist; ++i) {
-	verslist = verslist "\n" s[i];
-      }
-    }
-    else {
-      verslist = s[1];
-      for (i = 2; i <= nverslist; ++i) {
-	if (version < s[i]) break;
-	verslist = verslist "\n" s[i];
-      }
-      verslist = verslist "\n" version;
-      for (; i <= nverslist; ++i) {
-	verslist = verslist "\n" s[i];
-      }
-    }
-    ++nverslist;
-  }
-
   if (tofile) {
     out = prefix soname ".symlist";
     if (soname in outfiles)
       out = out "." ++outfiles[soname];
     else
       outfiles[soname] = 1;
-    printf "" > out;
+    outpipe = "LC_ALL=C sort -u > " out;
+  } else {
+    outpipe = "LC_ALL=C sort -u";
   }
 
-  split(verslist, order, "\n");
-  for (i = 1; i <= nverslist; ++i) {
-    version = order[i];
-
-    if (tofile) {
-      print version >> out;
-      close(out);
-      outpipe = "sort >> " out;
-    }
-    else {
-      if (combine)
-	print "";
-      print prefix version;
-      outpipe = "sort";
-    }
-    print versions[version] | outpipe;
-    close(outpipe);
-
-    delete versions[version];
-  }
-  for (version in versions)
-    delete versions[version];
+  printf "%s", descs | outpipe;
+
+  descs = "";
 
   if (tofile)
     print "wrote", out, "for", sofullname;