import lit.llvm

lit.llvm.initialize(lit_config, config)
lit.llvm.llvm_config.use_clang([], [], required=False)
lit.llvm.llvm_config.use_default_substitutions()

config.name = "Clangd"
config.suffixes = [".test"]
config.excludes = ["Inputs"]
config.test_format = lit.formats.ShTest(not lit.llvm.llvm_config.use_lit_shell)
config.test_source_root = config.clangd_source_dir + "/test"
config.test_exec_root = config.clangd_binary_dir + "/test"


# Used to enable tests based on the required targets. Can be queried with e.g.
#    REQUIRES: x86-registered-target
def calculate_arch_features(arch_string):
    return [arch.lower() + "-registered-target" for arch in arch_string.split()]


lit.llvm.llvm_config.feature_config([("--targets-built", calculate_arch_features)])

# Clangd-specific lit environment.
config.substitutions.append(
    ("%clangd-benchmark-dir", config.clangd_binary_dir + "/benchmarks")
)

if config.clangd_build_xpc:
    config.available_features.add("clangd-xpc-support")

if config.clangd_enable_remote:
    config.available_features.add("clangd-remote-index")

if config.clangd_tidy_checks:
    config.available_features.add("clangd-tidy-checks")

if config.have_zlib:
    config.available_features.add("zlib")

# It is not realistically possible to account for all options that could
# possibly be present in system and user configuration files, so disable
# default configs for the test runs.
config.environment["CLANG_NO_DEFAULT_CONFIG"] = "1"
