You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.9 KiB
87 lines
2.9 KiB
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"])
|