map-to-def 825 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/env python
  2. """A script to generate MSVC Module-Definition files from version-script
  3. files (which are maintained manually)."""
  4. import re
  5. import sys
  6. import pathlib
  7. def symbols_from_map(path):
  8. return re.findall(r"^\s+(r?xkb_.*);", path.read_text("utf-8"), re.MULTILINE)
  9. if not (3 <= len(sys.argv) <= 4):
  10. raise SystemExit("Usage: {} file.map soname_version [file.def]".format(sys.argv[0]))
  11. map_file = pathlib.Path(sys.argv[1])
  12. map_file_version = sys.argv[2].split(".")[0]
  13. map_symbols = set(symbols_from_map(map_file))
  14. if len(sys.argv) == 4:
  15. def_file = open(sys.argv[3], "w", encoding="utf-8")
  16. else:
  17. def_file = sys.stdout
  18. def_file.write(f"LIBRARY {map_file.stem}-{map_file_version}\n")
  19. def_file.write("EXPORTS\n")
  20. for symbol in sorted(map_symbols):
  21. def_file.write("\t{}\n".format(symbol))