@AUTO_GEN_COMMENT@

import os
import site

config.cxx_headers              = "@LIBCXX_GENERATED_INCLUDE_DIR@"
config.cxx_under_test           = "@CMAKE_CXX_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.abi_library_root         = "@LIBCXX_CXX_ABI_LIBRARY_PATH@"
config.enable_exceptions        = @LIBCXX_ENABLE_EXCEPTIONS@
config.enable_debug_tests       = @LIBCXX_ENABLE_DEBUG_MODE_SUPPORT@
config.enable_experimental      = @LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY@
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.configuration_variant    = "@LIBCXX_LIT_VARIANT@"
config.host_triple              = "@LLVM_HOST_TRIPLE@"
config.target_triple            = "@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

# 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()
