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/lib-names.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/lib-names.awk')
-rw-r--r-- | scripts/lib-names.awk | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/scripts/lib-names.awk b/scripts/lib-names.awk new file mode 100644 index 0000000000..31f248f47d --- /dev/null +++ b/scripts/lib-names.awk @@ -0,0 +1,68 @@ +# awk script for soversions.i -> gnu/lib-names.h; see Makeconfig. + +$1 != "DEFAULT" { multi = 1 } + +# +{ + lib = $2; + version = $3; + if ($3 ~ /[^0-9]/) { + soname = $3; + extra = $3; + sub(/\.so.*$/, "", extra); + } + else { + soname = lib ".so." $3; + extra = ""; + } + soname = "\"" soname "\""; + lib = toupper(lib); + extra = toupper(extra); + gsub(/-/, "_", lib); + gsub(/-/, "_", extra); + macros[$1 FS lib "_SO"] = soname; + if (extra) + macros[$1 FS extra "_SO"] = soname; +} + +END { + print "/* This file is automatically generated."; + print " It defines macros to allow user program to find the shared"; + print " library files which come as part of GNU libc. */"; + print "#ifndef __GNU_LIB_NAMES_H"; + print "#define __GNU_LIB_NAMES_H 1"; + print ""; + + pfx = multi ? "# define " : "#define "; + for (elt in macros) { + split(elt, x); + line = sprintf("%-40s%s", pfx x[2], macros[elt]); + if (x[1] in lines) + lines[x[1]] = lines[x[1]] "\n" line; + else + lines[x[1]] = line; + } + + default_lines = lines["DEFAULT"]; + delete lines["DEFAULT"]; + if (multi) { + print "#include <bits/wordsize.h>\n"; + pfx = "#if"; + for (kind in lines) { + l = lines[kind]; + sub(/WORDSIZE/, "", kind); + print pfx, "__WORDSIZE", "==", kind; + cmd = "LC_ALL=C sort"; print l | cmd; close(cmd); + pfx = "#elif"; + } + print "#else"; + cmd = "LC_ALL=C sort"; print default_lines | cmd; close(cmd); + print "#endif"; + } + else { + cmd = "LC_ALL=C sort"; print default_lines | cmd; close(cmd); + } + + print ""; + print "#endif /* gnu/lib-names.h */" +} |