diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-01-02 21:14:11 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2009-01-02 21:14:11 +0000 |
commit | e3e60f6bdc80109e6cfbd092049a4bbb2f43c457 (patch) | |
tree | d166064d5e5bfd7821e133a5c76d8aae50d81766 /scripts | |
parent | 033b8b2d4de5cd8abe4278cd2b30c50d7a78e886 (diff) | |
download | glibc-e3e60f6bdc80109e6cfbd092049a4bbb2f43c457.tar.gz glibc-e3e60f6bdc80109e6cfbd092049a4bbb2f43c457.tar.xz glibc-e3e60f6bdc80109e6cfbd092049a4bbb2f43c457.zip |
Updated to fedora-glibc-20090102T2110 cvs/fedora-glibc-2_9_90-1
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/firstversions.awk | 31 | ||||
-rw-r--r-- | scripts/versions.awk | 8 |
2 files changed, 30 insertions, 9 deletions
diff --git a/scripts/firstversions.awk b/scripts/firstversions.awk index 8da92ae485..4a20fc0f9d 100644 --- a/scripts/firstversions.awk +++ b/scripts/firstversions.awk @@ -1,6 +1,31 @@ # Script to preprocess Versions.all lists based on "earliest version" # specifications in the shlib-versions file. +# Return -1, 0 or 1 according to whether v1 is less than, equal to or +# greater than v2 as a version string. Simplified from GNU Autoconf +# version; this one does not need to handle .0x fraction-style versions. +function vers_compare (v1, v2) +{ + while (length(v1) && length(v2)) { + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue; + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue; + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1); + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1); + d1 += 0; + d2 += 0; + } else { + d1 = substr(v1, 1, 1); v1 = substr(v1, 2); + d2 = substr(v2, 1, 1); v2 = substr(v2, 2); + } + if (d1 < d2) return -1; + if (d1 > d2) return 1; + } + if (length(v2)) return -1; + if (length(v1)) return 1; + return 0; +} + NF > 2 && $2 == ":" { for (i = 0; i <= NF - 3; ++i) firstversion[$1, i] = $(3 + i); @@ -25,10 +50,8 @@ $1 == "}" { { if ((thislib, idx[thislib]) in firstversion) { - # XXX relative string comparison loses if we ever have multiple digits - # between dots in GLIBC_x.y[.z] names. f = v = firstversion[thislib, idx[thislib]]; - while ($1 >= v) { + while (vers_compare($1, v) >= 0) { delete firstversion[thislib, idx[thislib]]; idx[thislib]++; if ((thislib, idx[thislib]) in firstversion) @@ -39,7 +62,7 @@ $1 == "}" { if ($1 == v || $1 == f) # This version was the specified earliest version itself. print; - else if ($1 < v) { + else if (vers_compare($1, v) < 0) { # This version is older than the specified earliest version. print " " $1, "=", v; # Record that V has been referred to, so we will be sure to emit it diff --git a/scripts/versions.awk b/scripts/versions.awk index e642b3d16e..22b1c8edc8 100644 --- a/scripts/versions.awk +++ b/scripts/versions.awk @@ -28,10 +28,8 @@ BEGIN { close(defsfile); tmpfile = buildroot "Versions.tmp"; - # Note this sorting presumes only single digits between dots for proper - # numeric ordering. sort -n doesn't do quite the right thing either, - # and in some non-GNU sort implementations does not sort at all. - sort = "sort > " tmpfile; + # POSIX sort needed. + sort = "sort -t. -k 1,1 -k 2n,2n -k 3 > " tmpfile; } # Remove comment lines. @@ -135,5 +133,5 @@ END { printf("\n"); closeversion(oldver, veryoldver); close_and_move(outfile, real_outfile); - system("rm -f " tmpfile); + #system("rm -f " tmpfile); } |