site_init.py 1.1 KB

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