macro(pythonize_bool var)
  if (${var})
    set(${var} True)
  else()
    set(${var} False)
  endif()
endmacro()

include(FindPythonInterp)
if(PYTHONINTERP_FOUND)
  if(LIBCXX_BUILT_STANDALONE)
    set(LIT_EXECUTABLE "" CACHE FILEPATH "Path to LLVM's lit.py.")
  else()
    set(LIT_EXECUTABLE "${CMAKE_SOURCE_DIR}/utils/lit/lit.py")
  endif()

  set(LIT_ARGS_DEFAULT "-sv --show-unsupported --show-xfail")
  if (MSVC OR XCODE)
    set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
  endif()
  set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}"
      CACHE STRING "Default options for lit")
  set(LIT_ARGS "${LLVM_LIT_ARGS}")
  separate_arguments(LIT_ARGS)

  pythonize_bool(LIBCXX_ENABLE_EXCEPTIONS)
  pythonize_bool(LIBCXX_ENABLE_RTTI)
  pythonize_bool(LIBCXX_ENABLE_SHARED)
  pythonize_bool(LIBCXX_BUILD_32_BITS)
  pythonize_bool(LIBCXX_ENABLE_THREADS)
  pythonize_bool(LIBCXX_ENABLE_MONOTONIC_CLOCK)

  set(AUTO_GEN_COMMENT "## Autogenerated by libcxx configuration.\n# Do not edit!")

  configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
    ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
    @ONLY)

  add_custom_target(check-libcxx
    COMMAND ${PYTHON_EXECUTABLE}
            ${LIT_EXECUTABLE}
            ${LIT_ARGS}
            ${CMAKE_CURRENT_BINARY_DIR}
    DEPENDS cxx
    COMMENT "Running libcxx tests")
else()
  message(WARNING "Could not find Python, no check target will be available!")
endif()
