from check_index import * import os class ExpectedVar(object): def __init__(self, name): self.name = name class ExpectedList(object): def __init__(self, name): self.name = name EXPECTED_TOOLCHAIN = { "language": "CXX", "compiler": { "path": ExpectedVar("CMAKE_CXX_COMPILER"), "id": ExpectedVar("CMAKE_CXX_COMPILER_ID"), "version": ExpectedVar("CMAKE_CXX_COMPILER_VERSION"), "target": ExpectedVar("CMAKE_CXX_COMPILER_TARGET"), "implicit": { "includeDirectories": \ ExpectedList("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES"), "linkDirectories": \ ExpectedList("CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES"), "linkFrameworkDirectories": \ ExpectedList( "CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES"), "linkLibraries": \ ExpectedList("CMAKE_CXX_IMPLICIT_LINK_LIBRARIES"), } }, "sourceFileExtensions": \ ExpectedList("CMAKE_CXX_SOURCE_FILE_EXTENSIONS"), } def check_objects(o): assert is_list(o) assert len(o) == 1 check_index_object(o[0], "toolchains", 1, 0, check_object_toolchains) def check_object_toolchains(o): assert sorted(o.keys()) == ["kind", "toolchains", "version"] # The "kind" and "version" members are handled by check_index_object. toolchains = o["toolchains"] assert is_list(toolchains) # Other platform-specific toolchains may exist (like RC on Windows). has_cxx_toolchain = False for toolchain in toolchains: assert is_dict(toolchain) assert "language" in toolchain if toolchain["language"] == "CXX": check_object_toolchain(toolchain, EXPECTED_TOOLCHAIN) has_cxx_toolchain = True assert has_cxx_toolchain def check_object_toolchain(o, expected): expected_keys = [ key for (key, value) in expected.items() if is_string(value) or is_dict(value) or (type(value) in (ExpectedVar, ExpectedList) and variables[value.name]["defined"])] assert sorted(o.keys()) == sorted(expected_keys) for key in expected_keys: value = expected[key] if is_string(value): assert o[key] == value elif is_dict(value): check_object_toolchain(o[key], value) elif type(value) == ExpectedVar: assert o[key] == variables[value.name]["value"] elif type(value) == ExpectedList: expected_items = filter( None, variables[value.name]["value"].split(";")) check_list_match(lambda a, b: a == b, o[key], expected_items) else: assert False with open(os.path.join(sys.argv[3], "toolchain_variables.json")) as f: variables = json.load(f) assert is_dict(variables) assert is_dict(index) assert sorted(index.keys()) == ["cmake", "objects", "reply"] check_objects(index["objects"])