import os
import glob

import lit.util

# python 2.7 backwards compatibility
try:
    from shlex import quote as shell_quote
except ImportError:
    from pipes import quote as shell_quote


config.test_format = lit.formats.ShTest(execute_external=False)
config.suffixes = ['.test']

clang_path = os.path.join(config.clang_tools_dir, 'clang')
extra_args = '--clang ' + shell_quote(clang_path)
opt_path = os.path.join(config.llvm_tools_dir, 'opt')
extra_args += ' --opt ' + shell_quote(opt_path)
script_path = os.path.join(config.llvm_src_root, 'utils',
                           'update_cc_test_checks.py')
assert os.path.isfile(script_path)
# Windows: llvm-lit.py, Linux: llvm-lit
if config.llvm_external_lit:
    lit = config.llvm_external_lit
else:
    lit = shell_quote(glob.glob(os.path.join(config.llvm_tools_dir, 'llvm-lit*'))[0])
python = shell_quote(config.python_executable)
config.substitutions.append(
    ('%update_cc_test_checks', "%s %s %s" % (
        python, shell_quote(script_path), extra_args)))
config.substitutions.append(
    ('%clang_tools_dir', shell_quote(config.clang_tools_dir)))
config.substitutions.append(
    ('%lit', "%s %s -Dclang_lit_site_cfg=%s -j1 -vv" % (
        python, lit, shell_quote(config.clang_lit_site_cfg))))
