toolchains-v1-check.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from check_index import *
  2. import os
  3. class ExpectedVar(object):
  4. def __init__(self, name):
  5. self.name = name
  6. class ExpectedList(object):
  7. def __init__(self, name):
  8. self.name = name
  9. EXPECTED_TOOLCHAIN = {
  10. "language": "CXX",
  11. "compiler": {
  12. "path": ExpectedVar("CMAKE_CXX_COMPILER"),
  13. "id": ExpectedVar("CMAKE_CXX_COMPILER_ID"),
  14. "version": ExpectedVar("CMAKE_CXX_COMPILER_VERSION"),
  15. "target": ExpectedVar("CMAKE_CXX_COMPILER_TARGET"),
  16. "implicit": {
  17. "includeDirectories": \
  18. ExpectedList("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES"),
  19. "linkDirectories": \
  20. ExpectedList("CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES"),
  21. "linkFrameworkDirectories": \
  22. ExpectedList(
  23. "CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES"),
  24. "linkLibraries": \
  25. ExpectedList("CMAKE_CXX_IMPLICIT_LINK_LIBRARIES"),
  26. }
  27. },
  28. "sourceFileExtensions": \
  29. ExpectedList("CMAKE_CXX_SOURCE_FILE_EXTENSIONS"),
  30. }
  31. def check_objects(o):
  32. assert is_list(o)
  33. assert len(o) == 1
  34. check_index_object(o[0], "toolchains", 1, 0, check_object_toolchains)
  35. def check_object_toolchains(o):
  36. assert sorted(o.keys()) == ["kind", "toolchains", "version"]
  37. # The "kind" and "version" members are handled by check_index_object.
  38. toolchains = o["toolchains"]
  39. assert is_list(toolchains)
  40. # Other platform-specific toolchains may exist (like RC on Windows).
  41. has_cxx_toolchain = False
  42. for toolchain in toolchains:
  43. assert is_dict(toolchain)
  44. assert "language" in toolchain
  45. if toolchain["language"] == "CXX":
  46. check_object_toolchain(toolchain, EXPECTED_TOOLCHAIN)
  47. has_cxx_toolchain = True
  48. assert has_cxx_toolchain
  49. def check_object_toolchain(o, expected):
  50. expected_keys = [
  51. key for (key, value) in expected.items()
  52. if is_string(value) or is_dict(value)
  53. or (type(value) in (ExpectedVar, ExpectedList)
  54. and variables[value.name]["defined"])]
  55. assert sorted(o.keys()) == sorted(expected_keys)
  56. for key in expected_keys:
  57. value = expected[key]
  58. if is_string(value):
  59. assert o[key] == value
  60. elif is_dict(value):
  61. check_object_toolchain(o[key], value)
  62. elif type(value) == ExpectedVar:
  63. assert o[key] == variables[value.name]["value"]
  64. elif type(value) == ExpectedList:
  65. expected_items = filter(
  66. None, variables[value.name]["value"].split(";"))
  67. check_list_match(lambda a, b: a == b, o[key], expected_items)
  68. else:
  69. assert False
  70. with open(os.path.join(args.build_dir, "toolchain_variables.json")) as f:
  71. variables = json.load(f)
  72. assert is_dict(variables)
  73. assert is_dict(index)
  74. assert sorted(index.keys()) == ["cmake", "objects", "reply"]
  75. check_objects(index["objects"])