import os

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)
config.substitutions.append(
    ('%update_cc_test_checks', "%s %s %s" % (
        shell_quote(config.python_executable), shell_quote(script_path),
        extra_args)))
config.substitutions.append(
    ('%clang_tools_dir', shell_quote(config.clang_tools_dir)))
