# -*- Python -*-

# Configuration file for the 'lit' test runner.

def getRoot(config):
    if not config.parent:
        return config
    return getRoot(config.parent)

root = getRoot(config)

# testFormat: The test format to use to interpret tests.
config.test_format = lit.formats.SyntaxCheckTest(compiler=root.clang,
                                                 dir='%s/tools/clang/include/clang' % root.llvm_src_root,
                                                 recursive=True,
                                                 pattern='^(.*\\.h)$',
                                                 extra_cxx_args=['-D__STDC_LIMIT_MACROS',
                                                                 '-D__STDC_CONSTANT_MACROS',
                                                                 '-Wno-sign-compare',
                                                                 '-Werror',
                                                                 '-I%s/include' % root.llvm_src_root,
                                                                 '-I%s/include' % root.llvm_obj_root,
                                                                 '-I%s/tools/clang/include' % root.llvm_src_root,
                                                                 '-I%s/tools/clang/include' % root.llvm_obj_root])
