# -*- Python -*-

# Common configuration for running leak detection tests under LSan/ASan.

import os

def get_required_attr(config, attr_name):
  attr_value = getattr(config, attr_name, None)
  if not attr_value:
    lit.fatal("No attribute %r in test configuration! You may need to run "
              "tests from your build directory or add this attribute "
              "to lit.site.cfg " % attr_name)
  return attr_value

# Setup source root.
lsan_lit_src_root = get_required_attr(config, 'lsan_lit_src_root')
config.test_source_root = os.path.join(lsan_lit_src_root, 'TestCases')

clang_cxxflags = ("-ccc-cxx "
                      + "-g "
                      + "-O0 "
                      + "-m64 ")

config.clang_cxxflags = clang_cxxflags

config.substitutions.append( ("%clangxx ", (" " + config.clang + " " +
                                                clang_cxxflags + " ")) )

# LeakSanitizer tests are currently supported on x86-64 Linux only.
if config.host_os not in ['Linux'] or config.host_arch not in ['x86_64']:
  config.unsupported = True

config.suffixes = ['.c', '.cc', '.cpp']
