#!/usr/bin/env python

import os
import sys

# Variables configured at build time.
llvm_source_root = "C:/Users/nicolascapens/Development/SwiftShader/src/LLVM"
llvm_obj_root = "C:/Users/nicolascapens/Development/SwiftShader/build/VisualStudio2013"

# Make sure we can find the lit package.
sys.path.insert(0, os.path.join(llvm_source_root, 'utils', 'lit'))

# Set up some builtin parameters, so that by default the LLVM test suite
# configuration file knows how to find the object tree.
builtin_parameters = {
    'build_mode' : "$(Configuration)",
    'llvm_site_config' : os.path.join(llvm_obj_root, 'test', 'lit.site.cfg')
    }

clang_obj_root = os.path.join(llvm_obj_root, 'tools', 'clang')

if os.path.exists(clang_obj_root):
    builtin_parameters['clang_site_config'] = \
        os.path.join(clang_obj_root, 'test', 'lit.site.cfg')
    clang_tools_extra_obj_root = os.path.join(clang_obj_root, 'tools', 'extra')
    if os.path.exists(clang_tools_extra_obj_root):
        builtin_parameters['clang_tools_extra_site_config'] = \
            os.path.join(clang_tools_extra_obj_root, 'test', 'lit.site.cfg')

if __name__=='__main__':
    import lit
    lit.main(builtin_parameters)
