site_init.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import atexit
  2. import SCons.Errors
  3. from ansi.color import fg, fx
  4. from SCons.Script import GetBuildFailures
  5. def bf_to_str(bf):
  6. """Convert an element of GetBuildFailures() to a string
  7. in a useful way."""
  8. if bf is None: # unknown targets product None in list
  9. return "(unknown tgt)"
  10. elif isinstance(bf, SCons.Errors.StopError):
  11. return fg.yellow(str(bf))
  12. elif bf.node:
  13. return fg.yellow(str(bf.node)) + ": " + bf.errstr
  14. elif bf.filename:
  15. return fg.yellow(bf.filename) + ": " + bf.errstr
  16. return fg.yellow("unknown failure: ") + bf.errstr
  17. def display_build_status():
  18. """Display the build status. Called by atexit.
  19. Here you could do all kinds of complicated things."""
  20. bf = GetBuildFailures()
  21. if bf:
  22. # bf is normally a list of build failures; if an element is None,
  23. # it's because of a target that scons doesn't know anything about.
  24. failures_message = "\n".join([bf_to_str(x) for x in bf if x is not None])
  25. print()
  26. print(fg.brightred(fx.bold("*" * 10 + " FBT ERRORS " + "*" * 10)))
  27. print(failures_message)
  28. atexit.register(display_build_status)