@AUTO_GEN_COMMENT@

import os
import site

config.cxx_under_test           = "@LIBCXX_COMPILER@"
config.project_obj_root         = "@CMAKE_BINARY_DIR@"
config.libcxx_src_root          = "@LIBCXX_SOURCE_DIR@"
config.libcxx_obj_root          = "@LIBCXX_BINARY_DIR@"
config.cxx_library_root         = "@LIBCXX_LIBRARY_DIR@"
config.enable_exceptions        = @LIBCXX_ENABLE_EXCEPTIONS@
config.enable_experimental      = @LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY@
config.enable_filesystem        = @LIBCXX_ENABLE_FILESYSTEM@
config.enable_rtti              = @LIBCXX_ENABLE_RTTI@
config.enable_shared            = @LIBCXX_LINK_TESTS_WITH_SHARED_LIBCXX@
config.enable_32bit             = @LIBCXX_BUILD_32_BITS@
config.cxx_abi                  = "@LIBCXX_CXX_ABI_LIBNAME@"
config.use_sanitizer            = "@LLVM_USE_SANITIZER@"
config.sanitizer_library        = "@LIBCXX_SANITIZER_LIBRARY@"
config.abi_library_path         = "@LIBCXX_CXX_ABI_LIBRARY_PATH@"
config.configuration_variant    = "@LIBCXX_LIT_VARIANT@"
config.host_triple              = "@LLVM_HOST_TRIPLE@"
config.target_triple            = "@TARGET_TRIPLE@"
config.use_target               = bool("@LIBCXX_TARGET_TRIPLE@")
config.sysroot                  = "@LIBCXX_SYSROOT@"
config.gcc_toolchain            = "@LIBCXX_GCC_TOOLCHAIN@"
config.generate_coverage        = @LIBCXX_GENERATE_COVERAGE@
config.target_info              = "@LIBCXX_TARGET_INFO@"
config.test_linker_flags        = "@LIBCXX_TEST_LINKER_FLAGS@"
config.test_compiler_flags      = "@LIBCXX_TEST_COMPILER_FLAGS@"

config.executor                 = "@LIBCXX_EXECUTOR@"
config.llvm_unwinder            = @LIBCXXABI_USE_LLVM_UNWINDER@
config.builtins_library         = "@LIBCXX_BUILTINS_LIBRARY@"
config.has_libatomic            = @LIBCXX_HAS_ATOMIC_LIB@
config.debug_build              = @LIBCXX_DEBUG_BUILD@
config.libcxxabi_shared         = @LIBCXX_LINK_TESTS_WITH_SHARED_LIBCXXABI@
config.cxx_ext_threads          = @LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY@
config.pstl_src_root            = "@ParallelSTL_SOURCE_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None
config.pstl_obj_root            = "@ParallelSTL_BINARY_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None
config.libcxx_gdb               = "@LIBCXX_GDB@"

# Code signing
config.llvm_codesign_identity   = "@LLVM_CODESIGNING_IDENTITY@"

site.addsitedir(os.path.join(config.libcxx_src_root, 'utils'))

# name: The name of this test suite.
config.name = 'libc++'

# suffixes: A list of file extensions to treat as test files.
config.suffixes = ['.pass.cpp', '.fail.cpp', '.sh.cpp', '.pass.mm']

# test_source_root: The root path where tests are located.
config.test_source_root = os.path.join(config.libcxx_src_root, 'test')

# Allow expanding substitutions that are based on other substitutions
config.recursiveExpansionLimit = 10

# Infer the test_exec_root from the libcxx_object root.
config.test_exec_root = os.path.join(config.libcxx_obj_root, 'test')

import libcxx.test.format
config.test_format = libcxx.test.format.CxxStandardLibraryTest()

lit_config.note('Using configuration variant: {}'.format(config.configuration_variant))
import libcxx.test.config
configuration = libcxx.test.config.Configuration(lit_config, config)
configuration.configure()
configuration.print_config_info()
