soversions.awk 909 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # awk script for shlib-versions.v -> soversions.i; see Makeconfig.
  2. # Obey the first matching DEFAULT line.
  3. $1 == "DEFAULT" {
  4. $1 = "";
  5. default_set[++ndefault_set] = $0;
  6. next
  7. }
  8. # Collect all lib lines before emitting anything, so DEFAULT
  9. # can be interspersed.
  10. {
  11. lib = number = $1;
  12. sub(/=.*$/, "", lib);
  13. sub(/^.*=/, "", number);
  14. if (lib in numbers) next;
  15. numbers[lib] = number;
  16. order[lib] = ++order_n;
  17. if (NF > 1) {
  18. $1 = "";
  19. versions[lib] = $0
  20. }
  21. }
  22. END {
  23. for (lib in numbers) {
  24. if (lib in versions)
  25. set = versions[lib];
  26. else {
  27. set = "";
  28. if (ndefault_set >= 1)
  29. set = default_set[1];
  30. }
  31. line = set ? (lib FS numbers[lib] FS set) : (lib FS numbers[lib]);
  32. if (!(lib in lineorder) || order[lib] < lineorder[lib]) {
  33. lineorder[lib] = order[lib];
  34. lines[lib] = "DEFAULT" FS line;
  35. }
  36. }
  37. for (c in lines) {
  38. print lines[c]
  39. }
  40. }