# 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);
  idx[$1] = 0;
  next;
}

NF == 2 && $2 == "{" { thislib = $1; print; next }

$1 == "}" {
  if ((thislib, idx[thislib]) in firstversion) {
    # We haven't seen the stated version, but have produced
    # others pointing to it, so we synthesize it now.
    printf "  %s\n", firstversion[thislib, idx[thislib]];
    idx[thislib]++;
  }
  print;
  next;
}

/GLIBC_PRIVATE/ { print; next }

{
  if ((thislib, idx[thislib]) in firstversion) {
    f = v = firstversion[thislib, idx[thislib]];
    while (vers_compare($1, v) >= 0) {
      delete firstversion[thislib, idx[thislib]];
      idx[thislib]++;
      if ((thislib, idx[thislib]) in firstversion)
        v = firstversion[thislib, idx[thislib]];
      else
        break;
    }
    if ($1 == v || $1 == f)
      # This version was the specified earliest version itself.
      print;
    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
      # if we hit a later one without hitting V itself.
      usedversion[thislib, v] = 1;
    }
    else {
      # This version is newer than the specified earliest version.
      # We haven't seen that version itself or else we wouldn't be here
      # because we would have removed it from the firstversion array.
      # If there were any earlier versions that used that one, emit it now.
      if ((thislib, v) in usedversion) {
        print "  " v;
      }
      print "  " $1;
    }
  }
  else
    print;
}
