builder.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import os
  2. import importlib
  3. from sccd.compiler.sccdc import generate
  4. def dropext(file):
  5. return os.path.splitext(src_file)[0]
  6. class Builder:
  7. def __init__(self, build_dir: str):
  8. self.build_dir = build_dir
  9. def dropext(self, src_file: str) -> str:
  10. def target_file(self, src_file: str) -> str:
  11. return os.path.join(self.build_dir, dropext(src_file)+".py")
  12. def module_name(self, src_file: str) -> str:
  13. return os.path.join(self.build_dir, dropext(src_file)).replace(os.path.sep, ".")
  14. def build(self, src_file: str):
  15. target_file = self.target_file(src_file)
  16. # Get src_file and target_file modification times
  17. src_file_mtime = os.path.getmtime(src_file)
  18. target_file_mtime = 0
  19. try:
  20. target_file_mtime = os.path.getmtime(target_file)
  21. except FileNotFoundError:
  22. pass
  23. if src_file_mtime > target_file_mtime:
  24. # (Re-)Compile test
  25. os.makedirs(os.path.dirname(target_file), exist_ok=True)
  26. generate(src_file, target_file, "python", Platforms.Threads)
  27. def build_and_load(self, src_file: str):
  28. self.build(src_file)
  29. return importlib.import_module(self.module_name(src_file))