summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-02-07 05:25:11 +0000
committerRoland McGrath <roland@gnu.org>2002-02-07 05:25:11 +0000
commit48a5e01019cd75b1a9f01773d583e0f0f923aa42 (patch)
treeb8b53418a9f02490a10b280de797e46dc1a8da9a /scripts
parent9813e10395627340586f7788a31ef22b80fe1b17 (diff)
* scripts/versions.awk: Improve error message for missing version.
Each version inherits from the last one only if they have the same nonnumeric prefix, i.e. GLIBC_x.y and GLIBC_x.z or FOO_x and FOO_y but not GLIBC_x and FOO_y. * scripts/firstversions.awk: Handle libraries that don't have each particular version named in the third column of shlib-versions.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/firstversions.awk13
-rw-r--r--scripts/versions.awk14
2 files changed, 20 insertions, 7 deletions
diff --git a/scripts/firstversions.awk b/scripts/firstversions.awk
index 89bbe5e871..736ef0365c 100644
--- a/scripts/firstversions.awk
+++ b/scripts/firstversions.awk
@@ -11,7 +11,7 @@ NF > 2 && $2 == ":" {
NF == 2 && $2 == "{" { thislib = $1; print; next }
$1 == "}" {
- if (firstversion[thislib, idx[thislib]]) {
+ if ((thislib, idx[thislib]) in firstversion) {
# We haven't seen the stated version, but have produced
# others pointing to it, so we synthesize it now.
printf " %s\n", firstversion[thislib, idx[thislib]];
@@ -25,12 +25,19 @@ $1 == "}" {
{
if ((thislib, idx[thislib]) in firstversion) {
+ # XXX relative string comparison loses if we ever have multiple digits
+ # between dots in GLIBC_x.y[.z] names.
v = firstversion[thislib, idx[thislib]];
- if ($1 == v) {
- print;
+ while ($1 >= v) {
firstversion[thislib, idx[thislib]] = 0;
idx[thislib]++;
+ if ((thislib, idx[thislib]) in firstversion)
+ v = firstversion[thislib, idx[thislib]];
+ else
+ break;
}
+ if ($1 >= v)
+ print;
else
print $1, "=", v;
}
diff --git a/scripts/versions.awk b/scripts/versions.awk
index 1c03fd3c59..785380a8ed 100644
--- a/scripts/versions.awk
+++ b/scripts/versions.awk
@@ -1,5 +1,5 @@
# Combine version map fragments into version scripts for our shared objects.
-# Copyright (C) 1998,99,2000 Free Software Foundation, Inc.
+# Copyright (C) 1998,99,2000,02 Free Software Foundation, Inc.
# Written by Ulrich Drepper <drepper@cygnus.com>, 1998.
# This script expects the following variables to be defined:
@@ -49,7 +49,7 @@ BEGIN {
if (renamed[actlib "::" $1])
actver = renamed[actlib "::" $1];
else if (!versions[$1]) {
- printf("version %s not defined\n", $1) > "/dev/stderr";
+ printf("version %s not defined for %s\n", $1, actlib) > "/dev/stderr";
exit 1;
}
else
@@ -73,7 +73,13 @@ function closeversion(name, oldname) {
printf(" local:\n *;\n") > outfile;
firstinfile = 0;
}
- printf("}%s;\n", oldname) > outfile;
+ # This version inherits from the last one only if they
+ # have the same nonnumeric prefix, i.e. GLIBC_x.y and GLIBC_x.z
+ # or FOO_x and FOO_y but not GLIBC_x and FOO_y.
+ pfx = oldname;
+ sub(/[0-9.]+/,".+",pfx);
+ if (oldname == "" || name !~ pfx) print "};" > outfile;
+ else printf("} %s;\n", oldname) > outfile;
}
function close_and_move(name, real_name) {
@@ -87,7 +93,7 @@ END {
oldlib = "";
oldver = "";
printf("version-maps =");
- while(getline < tmpfile) {
+ while (getline < tmpfile) {
if ($1 != oldlib) {
if (oldlib != "") {
closeversion(oldver, veryoldver);