5015cde4c8
the specified earliest version, be sure to emit the specified earliest version first if any renaming of an older version to that has been.
63 lines
1.8 KiB
Awk
63 lines
1.8 KiB
Awk
# Script to preprocess Versions.all lists based on "earliest version"
|
|
# specifications in the shlib-versions file.
|
|
|
|
NF > 2 && $2 == ":" {
|
|
for (i = 0; i <= NF - 3; ++i)
|
|
firstversion[$1, i] = $(3 + i);
|
|
idx[$1] = 0;
|
|
next;
|
|
}
|
|
|
|
NF == 2 && $2 == "{" { thislib = $1; print; next }
|
|
|
|
$1 == "}" {
|
|
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]];
|
|
idx[thislib]++;
|
|
}
|
|
print;
|
|
next;
|
|
}
|
|
|
|
/GLIBC_PRIVATE/ { print; next }
|
|
|
|
{
|
|
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.
|
|
f = v = firstversion[thislib, idx[thislib]];
|
|
while ($1 >= v) {
|
|
delete firstversion[thislib, idx[thislib]];
|
|
idx[thislib]++;
|
|
if ((thislib, idx[thislib]) in firstversion)
|
|
v = firstversion[thislib, idx[thislib]];
|
|
else
|
|
break;
|
|
}
|
|
if ($1 == v || $1 == f)
|
|
# This version was the specified earliest version itself.
|
|
print;
|
|
else if ($1 < v) {
|
|
# This version is older than the specified earliest version.
|
|
print " " $1, "=", v;
|
|
# Record that V has been referred to, so we will be sure to emit it
|
|
# if we hit a later one without hitting V itself.
|
|
usedversion[thislib, v] = 1;
|
|
}
|
|
else {
|
|
# This version is newer than the specified earliest version.
|
|
# We haven't seen that version itself or else we wouldn't be here
|
|
# because we would have removed it from the firstversion array.
|
|
# If there were any earlier versions that used that one, emit it now.
|
|
if ((thislib, v) in usedversion) {
|
|
print " " v;
|
|
}
|
|
print " " $1;
|
|
}
|
|
}
|
|
else
|
|
print;
|
|
}
|