project(cecclient)
cmake_minimum_required(VERSION 3.12.0)

set(cecclient_NAME cecclient)
set(cecclient_DESCRIPTION "libCEC test client")
set(cecclient_VERSION_MAJOR ${LIBCEC_VERSION_MAJOR})
set(cecclient_VERSION_MINOR ${LIBCEC_VERSION_MINOR})
set(cecclient_VERSION_PATCH ${LIBCEC_VERSION_PATCH})

enable_language(CXX)
include(CheckCXXSourceCompiles)
include(CheckLibraryExists)
include(CheckIncludeFiles)
include(CheckCXXCompilerFlag)
include(CheckSymbolExists)
include(../../cmake/WindowsDebug.cmake)

check_cxx_compiler_flag("-std=c++11" SUPPORTS_CXX11)
if (SUPPORTS_CXX11)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()

find_package(Threads REQUIRED)

set(cecclient_SOURCES cec-client.cpp)

# curses
check_library_exists(curses initscr "" HAVE_CURSES_API)
if (HAVE_CURSES_API)
  list(APPEND cecclient_SOURCES curses/CursesControl.cpp)

  # tinfo
  find_library(HAVE_CURSES_TINFO tinfo)
endif()


add_executable(cec-client ${cecclient_SOURCES})
set_target_properties(cec-client PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH})
target_link_libraries(cec-client ${CMAKE_THREAD_LIBS_INIT})

if (NOT WIN32)
  # check for dlopen
  check_library_exists(dl dlopen "" HAVE_DLOPEN)
  if (HAVE_DLOPEN)
    target_link_libraries(cec-client dl)
  endif()

  # curses
  if (HAVE_CURSES_API)
    target_link_libraries(cec-client curses)
    if (HAVE_CURSES_TINFO)
      target_link_libraries(cec-client tinfo)
    endif()
  endif()

  # rt
  check_library_exists(rt clock_gettime "" HAVE_RT)
  if (HAVE_RT)
    target_link_libraries(cec-client rt)
  endif()
else()
  add_definitions(-DTARGET_WINDOWS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -D_WINSOCKAPI_)
  check_symbol_exists(_AMD64_ Windows.h WIN64)
  check_symbol_exists(_ARM64_ Windows.h ARM64)
  if (WIN64 OR ARM64)
    string(REPLACE "/arch:SSE2" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
  else()
    add_definitions(-D_USE_32BIT_TIME_T)
  endif()
endif()

include_directories(${PROJECT_SOURCE_DIR}
                    ${PROJECT_SOURCE_DIR}/../libcec
                    ${PROJECT_SOURCE_DIR}/../../include)

# write env.h
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/env.h.in ${CMAKE_CURRENT_SOURCE_DIR}/env.h)

# bin/ on every platform: Windows used to drop executables in the prefix root,
# which left the install tree half GNUInstallDirs and half flat
install(TARGETS     cec-client
        DESTINATION ${CMAKE_INSTALL_BINDIR})
