# -*- Python -*-

import os

## Autogenerated by llbuild configuration.
# Do not edit!
config.llbuild_src_root = "@LLBUILD_SRC_DIR@"
config.llbuild_obj_root = "@LLBUILD_OBJ_DIR@"

config.llbuild_tools_dir = "@LLBUILD_TOOLS_DIR@"
config.llbuild_lib_dir = "@LLBUILD_LIBS_DIR@"

# Tools found by the build system.
config.filecheck_path = "@FILECHECK_EXECUTABLE@"
config.swiftc_path = "@SWIFTC_EXECUTABLE@"
config.swiftc_found = "@SWIFTC_FOUND@"
config.osx_sysroot = "@CMAKE_OSX_SYSROOT@"

# Support substitution of the tools_dir with user parameters. This is
# used when we can't determine the tool dir at configuration time.
try:
    config.llbuild_tools_dir = config.llbuild_tools_dir % lit_config.params
except KeyError:
    e = sys.exc_info()[1]
    key, = e.args
    lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (
        key, key))

# Let the main config do the real work.
if config.test_exec_root is None:
  config.test_exec_root = os.path.dirname(os.path.realpath(__file__))
lit_config.load_config(config, "@LLBUILD_SRC_DIR@/tests/lit.cfg")
