cmake_minimum_required(VERSION 3.10.0)

project(cui++ CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CURSES_NEED_NCURSES TRUE)
set(CURSES_NEED_WIDE TRUE)

find_package(Curses)

message("CURSES_INCLUDE_DIR = " ${CURSES_INCLUDE_DIR})
message("CURSES_HAVE_CURSES_H = " ${CURSES_HAVE_CURSES_H})
message("CURSES_HAVE_NCURSES_H = " ${CURSES_HAVE_NCURSES_H})
message("CURSES_HAVE_NCURSES_NCURSES_H = " ${CURSES_HAVE_NCURSES_NCURSES_H})
message("CURSES_HAVE_NCURSES_CURSES_H = " ${CURSES_HAVE_NCURSES_CURSES_H})
message("CURSES_LIBRARIES = " ${CURSES_LIBRARIES})

if (${CURSES_HAVE_CURSES_H})
        message("CURSES_INCLUDE_DIR = " ${CURSES_INCLUDE_DIR})
endif()

if (NOT "${CURSES_HAVE_NCURSES_NCURSES_H}" STREQUAL "")
        message("CURSES_HAVE_NCURSES_NCURSES_H = " ${CURSES_HAVE_NCURSES_NCURSES_H})
endif()

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/config.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/inc/cui/config.hpp)

set(HEADER
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/cui.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/keyevent.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/string.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/accelerator.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/application.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/button.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/check.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/dc.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/desktop.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/edit.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/hboxpacker.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/packer.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/pushbutton.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/list.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/listbox.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/group.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/label.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/mainwindow.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/memo.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/menu.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/menubar.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/message.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/progress.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/radio.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/scrollarea.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/selector.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/statusbar.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/table.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/tablepacker.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/terminal.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/timer.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/vboxpacker.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/window.hpp
        ${CMAKE_CURRENT_SOURCE_DIR}/inc/cui/windowdc.hpp
        )

set(SOURCE
        ${CMAKE_CURRENT_SOURCE_DIR}/src/keyevent.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/application.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/accelerator.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/button.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/check.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/desktop.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/edit.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/hboxpacker.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/packer.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/pushbutton.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/list.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/listbox.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/group.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/label.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/mainwindow.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/memo.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/menu.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/menubar.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/message.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/progress.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/radio.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/scrollarea.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/selector.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/statusbar.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/table.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/tablepacker.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/terminal.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/timer.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/vboxpacker.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/windowdc.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/src/window.cpp
        )

add_library(${PROJECT_NAME} ${HEADER} ${SOURCE})

target_link_libraries(${PROJECT_NAME} -lncursesw)

target_compile_options(${PROJECT_NAME} PUBLIC -std=c++11)

target_include_directories(${PROJECT_NAME} PUBLIC
        "${CMAKE_CURRENT_SOURCE_DIR}/inc"
        "${CMAKE_CURRENT_BINARY_DIR}/inc"
        "${CURSES_INCLUDE_DIRS}"
        )

add_subdirectory(examples)