]>
Commit | Line | Data |
---|---|---|
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 | |
15 | BEGIN { | |
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 | ||
57 | END { | |
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 | } |