include(${CMAKE_CURRENT_LIST_DIR}/cm_message_checks_compat.cmake)
cm_message_checks_compat(
  "Checking for curses support" __checkStart __checkPass __checkFail)
message(${__checkStart})

# Try compiling a simple project using curses.
# Pass in any cache entries that the user may have set.
set(CMakeCheckCurses_ARGS "")
foreach(v
    CURSES_INCLUDE_PATH
    CURSES_CURSES_LIBRARY
    CURSES_NCURSES_LIBRARY
    CURSES_EXTRA_LIBRARY
    CURSES_FORM_LIBRARY
    )
  if(${v})
    list(APPEND CMakeCheckCurses_ARGS -D${v}=${${v}})
  endif()
endforeach()
file(REMOVE_RECURSE "${CMake_BINARY_DIR}/Source/Checks/Curses-build")
try_compile(CMakeCheckCurses_COMPILED
  ${CMake_BINARY_DIR}/Source/Checks/Curses-build
  ${CMake_SOURCE_DIR}/Source/Checks/Curses
  CheckCurses # project name
  CheckCurses # target name
  CMAKE_FLAGS
    "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}"
    ${CMakeCheckCurses_ARGS}
  OUTPUT_VARIABLE CMakeCheckCurses_OUTPUT
  )

# Convert result from cache entry to normal variable.
set(CMakeCheckCurses_COMPILED "${CMakeCheckCurses_COMPILED}")
unset(CMakeCheckCurses_COMPILED CACHE)

if(CMakeCheckCurses_COMPILED)
  message(${__checkPass} "Success")
  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
    "Checking for curses support passed with the following output:\n${CMakeCheckCurses_OUTPUT}\n\n")
else()
  message(${__checkFail} "Failed")
  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
    "Checking for curses support failed with the following output:\n${CMakeCheckCurses_OUTPUT}\n\n")
endif()
