diff options
author | Roland McGrath <roland@gnu.org> | 2005-02-10 09:18:34 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2005-02-10 09:18:34 +0000 |
commit | 91adb529b07eca93e25a84d0054418335e2fc6cf (patch) | |
tree | 4ec4dbe583b69bcdac6c37b87a32688fafa422a6 /scripts/soversions.awk | |
parent | 677dda3f2779b8696689708998129e770d1b8a86 (diff) | |
download | glibc-91adb529b07eca93e25a84d0054418335e2fc6cf.tar.gz glibc-91adb529b07eca93e25a84d0054418335e2fc6cf.tar.xz glibc-91adb529b07eca93e25a84d0054418335e2fc6cf.zip |
[BZ #632]
2005-02-10 Roland McGrath <roland@redhat.com> [BZ #632] * scripts/soversions.awk: Expect cpu, vendor, os as separate variables from command line. Grok shlib-versions lines with WORDSIZE* in second column. Add new leading column to output, DEFAULT for existing output lines. Also emit lines with WORDSIZE* for alternate configurations. * Makeconfig ($(common-objpfx)soversions.i): Pass those variables. ($(common-objpfx)soversions.mk): Grok new column, use only DEFAULT. ($(common-objpfx)gnu/lib-names.stmp): Depend on soversions.i instead of soversions.mk; replace inline shell script with use of ... * scripts/lib-names.awk: New file. If input has non-DEFAULT lines, emit multiple sets of macros under #if. * shlib-versions (x86_64-.*-.*): Add WORDSIZE32 line mapping to i686. (s390x-.*-.*): Likewise for s390. (powerpc64-.*-.*): Likewise for powerpc. (sparc64-.*-.*): Likewise for sparc.
Diffstat (limited to 'scripts/soversions.awk')
-rw-r--r-- | scripts/soversions.awk | 58 |
1 files changed, 43 insertions, 15 deletions
diff --git a/scripts/soversions.awk b/scripts/soversions.awk index 6207088514..3d50c4deeb 100644 --- a/scripts/soversions.awk +++ b/scripts/soversions.awk @@ -1,14 +1,29 @@ -# awk script for shlib-versions.v.i -> soversions.i; see Makeconfig. +# awk script for shlib-versions.v -> soversions.i; see Makeconfig. -# Only lines matching `config' (set with -v) are relevant to us. -config !~ $1 { next } +BEGIN { + config = cpu "-" vendor "-" os; + configs[config] = "DEFAULT"; +} + +{ thiscf = $1 } + +$2 ~ /WORDSIZE[3264]/ { + if (config ~ thiscf) { + othercf = $3; + sub(/@CPU@/, cpu, othercf); + sub(/@VENDOR@/, vendor, othercf); + sub(/@OS@/, os, othercf); + configs[othercf] = $2; + } + next; +} # Obey the first matching DEFAULT line. $2 == "DEFAULT" { - if (!matched_default) { - matched_default = 1; + if (!matched_default[thiscf]) { + matched_default[thiscf] = 1; $1 = $2 = ""; - default_setname = $0; + default_set[thiscf] = $0; } next } @@ -19,20 +34,33 @@ $2 == "DEFAULT" { lib = number = $2; sub(/=.*$/, "", lib); sub(/^.*=/, "", number); - if (lib in numbers) next; - numbers[lib] = number; + if ((thiscf FS lib) in numbers) next; + numbers[thiscf FS lib] = number; + order[thiscf FS lib] = ++order_n; if (NF > 2) { $1 = $2 = ""; - versions[lib] = $0 + versions[thiscf FS lib] = $0 } } END { - for (lib in numbers) { - set = (lib in versions) ? versions[lib] : default_setname; - if (set) - print lib, numbers[lib], set; - else - print lib, numbers[lib]; + for (elt in numbers) { + split(elt, x); + cf = x[1]; + lib = x[2]; + if (default_setname && !(cf in default_set) && config ~ cf) + default_set[cf] = default_setname; + set = (elt in versions) ? versions[elt] : default_set[cf]; + line = set ? (lib FS numbers[elt] FS set) : (lib FS numbers[elt]); + for (c in configs) + if (c ~ cf) { + if (!((c FS lib) in lineorder) || order[elt] < lineorder[c FS lib]) { + lineorder[c FS lib] = order[elt]; + lines[c FS lib] = configs[c] FS line; + } + } + } + for (c in lines) { + print lines[c] } } |