summaryrefslogtreecommitdiff
path: root/scripts/merge-abilist.awk
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/merge-abilist.awk')
-rw-r--r--scripts/merge-abilist.awk156
1 files changed, 0 insertions, 156 deletions
diff --git a/scripts/merge-abilist.awk b/scripts/merge-abilist.awk
deleted file mode 100644
index 91999d9221..0000000000
--- a/scripts/merge-abilist.awk
+++ /dev/null
@@ -1,156 +0,0 @@
-# awk script to merge a config-specific .symlist file with others.
-# The input files should be existing .abilist files, and a .symlist
-# file. This must be run with awk -v config=REGEXP to specify a
-# regexp matching configuration tuples for which the .symlist input
-# defines an ABI. The result merges all duplicate occurrences of any
-# symbol into a stanza listing the regexps matching configurations
-# that contain it and giving associated versions.
-# The merged file contains stanzas in the form:
-# GLIBC_x.y regexp...
-# | GLIBC_x.y.z regexp...
-# | GLIBC_m.n regexp...
-# function F
-# variable D 0x4
-
-BEGIN { current = "UNSET" }
-
-/^[^| ]/ {
- if (NF < 2 && config == "") {
- print FILENAME ":" FNR ": BAD SET LINE:", $0 > "/dev/stderr";
- exit 2;
- }
-
- if (NF < 2) {
- current = $1 ":" config;
- }
- else {
- # Filter out the old stanzas from the config we are merging in.
- # That way, if a set disappears from the .symlist file for this
- # config, the old stanza doesn't stay in the merged output tagged
- # for this config. (Disappearing sets might happen during development,
- # and between releases could happen on a soname change).
- nc = 0;
- for (i = 2; i <= NF; ++i)
- if ($i != config)
- c[nc++] = $i;
- if (nc == 0)
- current = "";
- else {
- current = $1 ":" c[0];
- for (i = 1; i < nc; ++i)
- current = current "," $1 ":" c[i];
- }
- }
-
- next;
-}
-
-/^\| / {
- if (NF < 3 || current == "UNSET") {
- print FILENAME ":" FNR ": BAD | LINE:", $0 > "/dev/stderr";
- exit 2;
- }
-
- nc = 0;
- for (i = 3; i <= NF; ++i)
- if ($i != config)
- c[nc++] = $i;
- for (i = 0; i < nc; ++i)
- current = current "," $2 ":" c[i];
-
- next;
-}
-
-{
- if (current == "") next;
- if (current == "UNSET") {
- print FILENAME ":" FNR ": IGNORED LINE:", $0 > "/dev/stderr";
- next;
- }
-
- ns = split(seen[$0], s, ",");
- nc = split(current, c, ",");
- for (i = 1; i <= nc; ++i) {
- if (c[i] == "")
- continue;
- # Sorted insert.
- for (j = 1; j <= ns; ++j) {
- if (c[i] == s[j])
- break;
- if (c[i] < s[j]) {
- for (k = ns; k >= j; --k)
- s[k + 1] = s[k];
- s[j] = c[i];
- ++ns;
- break;
- }
- }
- if (j > ns)
- s[++ns] = c[i];
- }
-
- seen[$0] = s[1];
- for (i = 2; i <= ns; ++i)
- seen[$0] = seen[$0] "," s[i];
-
- next;
-}
-
-END {
- for (line in seen) {
- if (seen[line] in stanzas)
- stanzas[seen[line]] = stanzas[seen[line]] "\n" line;
- else
- stanzas[seen[line]] = line;
- }
-
- ns = split("", s);
- for (configs in stanzas) {
- # Sorted insert.
- for (j = 1; j <= ns; ++j) {
- if (configs == s[j])
- break;
- if (configs < s[j]) {
- for (k = ns; k >= j; --k)
- s[k + 1] = s[k];
- s[j] = configs;
- ++ns;
- break;
- }
- }
- if (j > ns)
- s[++ns] = configs;
- }
-
- # S[1..NS] is now a sorted list of stanza identifiers.
- # STANZAS[ID] contains the lines for that stanza.
- # All we have to do is pretty-print the stanza ID,
- # and then print the sorted list.
-
- for (i = 1; i <= ns; ++i) {
- # S[I] is a sorted, comma-separated list of SET:CONFIG pairs.
- # All we have to do is pretty-print them.
- nc = split(s[i], c, ",");
- lastvers = lastconf = "";
- for (j = 1; j <= nc; ++j) {
- split(c[j], temp, ":");
- version = temp[1];
- conf = temp[2];
- if (version != lastvers)
- printf "%s%s", (lastvers != "" ? "\n| " : ""), version;
- # Hack: if CONF is foo.*/bar and LASTCONF was foo.*,
- # then we can omit the foo.*/bar since foo.* matches already.
- # Note we don't update LASTCONF, so foo.*/baz next time will match too.
- else if ((slash = index(conf, ".*/")) > 0 && \
- substr(conf, 1, slash + 2 - 1) == lastconf)
- continue;
- printf " %s", conf;
- lastvers = version;
- lastconf = conf;
- }
- print "";
- outpipe = "sort";
- print stanzas[s[i]] | outpipe;
- close(outpipe);
- }
-}