1 # Script to preprocess Versions.all lists based on "earliest version"
2 # specifications in the shlib-versions file.
4 # Return -1, 0 or 1 according to whether v1 is less than, equal to or
5 # greater than v2 as a version string. Simplified from GNU Autoconf
6 # version; this one does not need to handle .0x fraction-style versions.
7 function vers_compare
(v1
, v2
)
9 while (length(v1
) && length(v2
)) {
10 if (v1 ~
/^
[0-9]/ && v2 ~
/^
[0-9]/) {
11 for (len1 =
1; substr(v1
, len1
+ 1) ~
/^
[0-9]/; len1
++) continue;
12 for (len2 =
1; substr(v2
, len2
+ 1) ~
/^
[0-9]/; len2
++) continue;
13 d1 =
substr(v1
, 1, len1
); v1 =
substr(v1
, len1
+ 1);
14 d2 =
substr(v2
, 1, len2
); v2 =
substr(v2
, len2
+ 1);
18 d1 =
substr(v1
, 1, 1); v1 =
substr(v1
, 2);
19 d2 =
substr(v2
, 1, 1); v2 =
substr(v2
, 2);
21 if (d1
< d2
) return -1;
22 if (d1
> d2
) return 1;
24 if (length(v2
)) return -1;
25 if (length(v1
)) return 1;
30 for (i =
0; i
<=
NF - 3; ++i
)
31 firstversion
[$
1, i
] = $
(3 + i
);
36 NF ==
2 && $
2 ==
"{" { thislib = $
1; print; next }
39 if ((thislib
, idx
[thislib
]) in firstversion
) {
40 # We haven't seen the stated version, but have produced
41 # others pointing to it, so we synthesize it now.
42 printf " %s\n", firstversion
[thislib
, idx
[thislib
]];
49 /GLIBC_PRIVATE
/ { print; next }
52 if ((thislib
, idx
[thislib
]) in firstversion
) {
53 f = v = firstversion
[thislib
, idx
[thislib
]];
54 while (vers_compare
($
1, v
) >=
0) {
55 delete firstversion
[thislib
, idx
[thislib
]];
57 if ((thislib
, idx
[thislib
]) in firstversion
) {
58 # If we're skipping a referenced version to jump ahead to a
59 # later version, synthesize the earlier referenced version now.
60 if (v
!= $
1 && (thislib
, v
) in usedversion
)
62 v = firstversion
[thislib
, idx
[thislib
]];
66 if ($
1 == v
|| $
1 == f
)
67 # This version was the specified earliest version itself.
69 else if (vers_compare
($
1, v
) < 0) {
70 # This version is older than the specified earliest version.
72 # Record that V has been referred to, so we will be sure to emit it
73 # if we hit a later one without hitting V itself.
74 usedversion
[thislib
, v
] =
1;
77 # This version is newer than the specified earliest version.
78 # We haven't seen that version itself or else we wouldn't be here
79 # because we would have removed it from the firstversion array.
80 # If there were any earlier versions that used that one, emit it now.
81 if ((thislib
, v
) in usedversion
) {