
# TUI part of mtr085-CMakeLists

set(TUIKIND)
set(WIDELIB)

set(libs ncursesw curses ncurses)
foreach(lib ${libs})
  pkg_check_modules(TUI${lib} IMPORTED_TARGET "${lib}")
  if(TUI${lib}_FOUND)
    target_link_libraries("${NAME}" PRIVATE PkgConfig::TUI${lib})
    set(TUIKIND ${lib})
    if(lib STREQUAL "ncursesw")
      set(WIDELIB ON)
    endif()
    break()
  endif()
endforeach()
if(NOT TUIKIND)
  message(FATAL_ERROR "TUI is enabled, but no suitable library found")
endif()
set(TUIKIND "${TUIKIND}" PARENT_SCOPE)

set(fns curses_version use_default_colors)
if(MOUSE)
  list(APPEND fns mousemask)
endif()

foreach(fn ${fns})
  string(TOUPPER ${fn} CFN)
  check_library_exists("${TUIKIND}" "${fn}" "${CMAKE_LIBRARY_PATH}"
                         HAVE_${TUIKIND}_${CFN})
  if(HAVE_${TUIKIND}_${CFN})
    set(HAVE_${CFN} ON PARENT_SCOPE)
    set(HAVE_${CFN} ON)
  endif()
endforeach()

check_include_file("ncursesw/ncurses.h" HAVE_NCURSESW_NCURSES_H)
check_include_file("ncursesw/curses.h" HAVE_NCURSESW_CURSES_H)
check_include_file("ncurses/ncurses.h" HAVE_NCURSES_NCURSES_H)
check_include_file("ncurses/curses.h" HAVE_NCURSES_CURSES_H)
check_include_file("ncurses.h" HAVE_NCURSES_H)
check_include_file("curses.h" HAVE_CURSES_H)

if(HAVE_MOUSEMASK)
  set(WITH_MOUSE ON PARENT_SCOPE)
else()
  unset(MOUSE PARENT_SCOPE)
endif()

if(MENU)
  check_symbol_exists(NCURSES_VERSION "curses.h" HAVE_NCURSES_VERSION)
  if(NOT HAVE_NCURSES_VERSION)
    message(FATAL_ERROR "Non-ncurses menus are not supported yet")
  endif()
  set(mlibs menu form panel)
  foreach(lib ${mlibs})
    string(TOUPPER ${lib} HDR)
    check_include_file("ncursesw/${lib}.h" HAVE_NCURSESW_${HDR}_H)
    check_include_file("ncurses/${lib}.h"  HAVE_NCURSES_${HDR}_H)
    check_include_file("${lib}.h"          HAVE_${HDR}_H)
    if(WIDELIB)
      set(lib "${lib}w")
    endif()
    pkg_check_modules(MTUI${lib} REQUIRED IMPORTED_TARGET "${lib}")
    target_link_libraries("${NAME}" PRIVATE ${lib})
  endforeach()
  target_sources("${NAME}" PRIVATE kit.c)
  set(WITH_MENU ON PARENT_SCOPE)
  list(APPEND fns set_menu_spacing)
  check_library_exists("menu" "set_menu_spacing" "${CMAKE_LIBRARY_PATH}"
    HAVE_SET_MENU_SPACING)
endif()

if(UNICODE)
  set(wide add_wch)
  check_library_exists("${TUIKIND}" "${wide}" "${CMAKE_LIBRARY_PATH}"
                       HAVE_WIDE_CHARS)
  if(NOT HAVE_WIDE_CHARS)
    message(FATAL_ERROR "UNICODE is enabled, but no wchar library found")
  endif()
endif()

target_include_directories("${NAME}" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/..")
target_sources("${NAME}" PRIVATE tui.c chart.c action.c)

