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")
  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)

  set(LIBCXX_COMPILER ${CMAKE_CXX_COMPILER})
  set(LIBCXX_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
  set(LIBCXX_BINARY_DIR ${CMAKE_BINARY_DIR})
  set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
  pythonize_bool(LIBCXX_ENABLE_SHARED)
  pythonize_bool(LIBCXX_HAS_STDCXX0X_FLAG)

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