]> git.ipfire.org Git - thirdparty/glibc.git/blame - scripts/extract-abilist.awk
conformtest: Fix typo in handling typed-constant from allow-header.
[thirdparty/glibc.git] / scripts / extract-abilist.awk
CommitLineData
c823a4d2
RM
1# awk script to extract a config-specific .symlist file from a merged file.
2# This must be passed run with awk -v config=TUPLE to specify the configuration
3# tuple we will match. The merged file contains stanzas in the form:
4# GLIBC_x.y regexp...
81043d1a
RM
5# | GLIBC_x.y.z regexp...
6# | GLIBC_m.n regexp...
c823a4d2
RM
7# function F
8# variable D 0x4
9# Each regexp is matched against TUPLE, and only matching stanzas go
81043d1a
RM
10# into the output, with the regexp list removed. Multiple version lines
11# can match with the same regexp, meaning the stanza is duplicated in
12# multiple version sets. The result matches the original .symlist file
13# from abilist.awk that was fed into merge-abilist.awk.
c823a4d2
RM
14
15BEGIN {
81043d1a 16 inside = 0;
c823a4d2
RM
17}
18
81043d1a
RM
19/^ / {
20 inside = 1;
21 if (!ignore) {
22 for (version in current) {
23 if (version in versions)
24 versions[version] = versions[version] "\n" $0;
25 else
26 versions[version] = $0;
27 }
28 }
29 next;
30}
c823a4d2
RM
31
32{
81043d1a
RM
33 second = ($1 == "|");
34 if (second && inside) {
35 printf "%s:%d: bad input line inside stanza: %s\n", FILENAME, FNR, $0;
36 exit 1;
37 }
38 inside = 0;
39
40 for (i = second ? 3 : 2; i <= NF; ++i) {
c823a4d2
RM
41 regex = "^" $i "$";
42 if (match(config, regex) != 0) {
81043d1a
RM
43 if (!second || ignore)
44 # Clear old array.
45 split("", current);
46 current[second ? $2 : $1] = 1;
c823a4d2
RM
47 ignore = 0;
48 next;
49 }
50 }
81043d1a
RM
51
52 if (!second)
53 ignore = 1;
c823a4d2
RM
54 next;
55}
56
57END {
81043d1a
RM
58 nverlist = 0;
59 for (version in versions) {
60 if (nverslist == 0) {
61 verslist = version;
62 nverslist = 1;
63 continue;
64 }
65 split(verslist, s, "\n");
66 if (version < s[1]) {
67 verslist = version;
68 for (i = 1; i <= nverslist; ++i) {
69 verslist = verslist "\n" s[i];
70 }
71 }
72 else {
73 verslist = s[1];
74 for (i = 2; i <= nverslist; ++i) {
75 if (version < s[i]) break;
76 verslist = verslist "\n" s[i];
77 }
78 verslist = verslist "\n" version;
79 for (; i <= nverslist; ++i) {
80 verslist = verslist "\n" s[i];
81 }
82 }
83 ++nverslist;
c823a4d2 84 }
81043d1a
RM
85
86 split(verslist, order, "\n");
87 for (i = 1; i <= nverslist; ++i) {
88 version = order[i];
89
90 print version;
91 outpipe = "sort";
92 print versions[version] | outpipe;
c823a4d2 93 close(outpipe);
d2e75f65
RM
94
95 if (version == lastversion)
96 break;
81043d1a 97 }
c823a4d2 98}