[roland/Versions.def] Get rid of Versions.def source file
diff mbox

Message ID 20140325182216.960597445E@topped-with-meat.com
State New
Headers show

Commit Message

Roland McGrath March 25, 2014, 6:22 p.m. UTC
This was the quickest fix that seems like it works, but it's a kludge (also
on branch roland/Versions.def-sort).  Please test it for the mips case.  I
think the really proper approach is to preserve the order sets appeared in
Versions files.  I'll look into implementing that now.


Thanks,
Roland


2014-03-25  Roland McGrath  <roland@hack.frob.com>

	* scripts/versionlist.awk: Partition the version sets and emit all
	GLIBC_* (sorted) before all others (sorted).

Comments

Joseph Myers March 25, 2014, 9:55 p.m. UTC | #1
On Tue, 25 Mar 2014, Roland McGrath wrote:

> This was the quickest fix that seems like it works, but it's a kludge (also
> on branch roland/Versions.def-sort).  Please test it for the mips case.  I
> think the really proper approach is to preserve the order sets appeared in
> Versions files.  I'll look into implementing that now.

Together with my addition of GLIBC_2.2.5 to elf/Versions (which I've now 
committed), this fixes the ABI tests for MIPS (tested for all three ABIs).
Roland McGrath March 25, 2014, 9:58 p.m. UTC | #2
> On Tue, 25 Mar 2014, Roland McGrath wrote:
> 
> > This was the quickest fix that seems like it works, but it's a kludge (also
> > on branch roland/Versions.def-sort).  Please test it for the mips case.  I
> > think the really proper approach is to preserve the order sets appeared in
> > Versions files.  I'll look into implementing that now.
> 
> Together with my addition of GLIBC_2.2.5 to elf/Versions (which I've now 
> committed), this fixes the ABI tests for MIPS (tested for all three ABIs).

Ok, I'll put this in now.  I'm not going to implement something better
today.


Thanks,
Roland

Patch
diff mbox

--- a/scripts/versionlist.awk
+++ b/scripts/versionlist.awk
@@ -3,14 +3,25 @@ 
 
 BEGIN { in_lib = ""; in_version = 0 }
 
-!in_lib && NF == 2 && $2 == "{" { in_lib = $1; next }
+!in_lib && NF == 2 && $2 == "{" {
+  in_lib = $1;
+  all_libs[in_lib] = 1;
+  next
+}
 !in_lib { next }
 
 NF == 2 && $2 == "{" {
   in_version = 1;
-  libs[in_lib] = libs[in_lib] "  " $1 "\n";
   lib_versions[in_lib, $1] = 1;
-  all_versions[$1] = 1;
+  # Partition the version sets into GLIBC_* and others.
+  if ($1 ~ /GLIBC_/) {
+    libs[in_lib] = libs[in_lib] "  " $1 "\n";
+    all_versions[$1] = 1;
+  }
+  else {
+    others_libs[in_lib] = others_libs[in_lib] "  " $1 "\n";
+    others_all_versions[$1] = 1;
+  }
   next
 }
 
@@ -20,20 +31,37 @@  in_version { next }
 $1 == "}" { in_lib = ""; next }
 
 END {
-  nlibs = asorti(libs, libs_order);
+  nlibs = asorti(all_libs, libs_order);
   for (i = 1; i <= nlibs; ++i) {
     lib = libs_order[i];
 
     for (v in all_versions) {
-      if (!((in_lib, v) in lib_versions)) {
+      if (!((lib, v) in lib_versions)) {
         libs[lib] = libs[lib] "  " v "\n";
       }
     }
 
+    for (v in others_all_versions) {
+      if (!((lib, v) in lib_versions)) {
+        others_libs[lib] = others_libs[lib] "  " v "\n";
+      }
+    }
+
     print lib, "{";
+
+    # Sort and print all the GLIBC_* sets first, then all the others.
+    # This is not really generically right, but it suffices
+    # for the cases we have so far.  e.g. GCC_3.0 is "later than"
+    # all GLIBC_* sets that matter for purposes of Versions files.
+
     sort = "sort -u -t. -k 1,1 -k 2n,2n -k 3";
     printf "%s", libs[lib] | sort;
     close(sort);
+
+    sort = "sort -u -t. -k 1,1 -k 2n,2n -k 3";
+    printf "%s", others_libs[lib] | sort;
+    close(sort);
+
     print "}";
   }
 }