# -*- Python -*-

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 attributes common for all compiler-rt projects.
compiler_rt_src_root = get_required_attr(config, 'compiler_rt_src_root')
compiler_rt_lit_unit_cfg = os.path.join(compiler_rt_src_root, "lib",
                                        "lit.common.unit.cfg")
lit.load_config(config, compiler_rt_lit_unit_cfg)

# Setup config name.
config.name = 'MemorySanitizer-Unit'

# Setup test source and exec root. For unit tests, we define
# it as build directory with MSan unit tests.
msan_binary_dir = get_required_attr(config, "msan_binary_dir")
config.test_exec_root = os.path.join(msan_binary_dir, "tests")
config.test_source_root = config.test_exec_root
