cmake_minimum_required(VERSION 3.18)
project(easy_connect VERSION 0.1.0 LANGUAGES C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
option(EASY_CONNECT_POCKETBOOK "Build the InkView device interface" OFF)
if(EASY_CONNECT_POCKETBOOK)
  # The package carries no shared libcrypto; use the SDK's ARM static archive.
  set(OPENSSL_USE_STATIC_LIBS TRUE)
  set(CMAKE_SKIP_RPATH TRUE)
endif()
find_package(OpenSSL REQUIRED COMPONENTS Crypto)
add_library(ec_core src/config.c src/doctor.c src/services.c src/credentials.c)
target_link_libraries(ec_core PUBLIC OpenSSL::Crypto)
target_include_directories(ec_core PUBLIC src)
target_compile_definitions(ec_core PRIVATE _GNU_SOURCE)
target_compile_options(ec_core PRIVATE -Wall -Wextra -Werror -Wformat=2)
add_executable(easy-connect src/main.c)
target_link_libraries(easy-connect PRIVATE ec_core)
set(EC_UI_SOURCES src/ui.c src/ui_view.c src/ui_layout.c)
if(EASY_CONNECT_POCKETBOOK)
  add_executable(easy-connect-ui ${EC_UI_SOURCES})
  find_path(INKVIEW_INCLUDE_DIR inkview.h REQUIRED)
  find_library(INKVIEW_LIBRARY inkview REQUIRED)
  target_include_directories(easy-connect-ui PRIVATE ${INKVIEW_INCLUDE_DIR})
  target_link_libraries(easy-connect-ui PRIVATE ec_core ${INKVIEW_LIBRARY})
  set_target_properties(easy-connect-ui PROPERTIES OUTPUT_NAME easy-connect.app)
endif()
include(CTest)
if(BUILD_TESTING AND NOT CMAKE_CROSSCOMPILING)
  find_package(Python3 REQUIRED COMPONENTS Interpreter)
  add_test(NAME controller COMMAND ${Python3_EXECUTABLE}
    ${CMAKE_SOURCE_DIR}/tests/test_controller.py $<TARGET_FILE:easy-connect>)
  add_executable(ec-core-test tests/core_driver.c)
  target_compile_definitions(ec-core-test PRIVATE _GNU_SOURCE)
  target_link_libraries(ec-core-test PRIVATE ec_core)
  target_compile_options(ec-core-test PRIVATE -Wall -Wextra -Werror)
  add_test(NAME core COMMAND ${Python3_EXECUTABLE}
    ${CMAKE_SOURCE_DIR}/tests/test_core.py $<TARGET_FILE:ec-core-test>)
  add_test(NAME tools COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_tools.py)
  add_executable(ec-layout-test tests/test_ui_layout.c src/ui_layout.c)
  target_include_directories(ec-layout-test PRIVATE src)
  target_compile_options(ec-layout-test PRIVATE -Wall -Wextra -Werror)
  add_test(NAME ui-layout COMMAND ec-layout-test)
  add_executable(ec-ui-test ${EC_UI_SOURCES} tests/inkview_stub.c)
  target_compile_definitions(ec-ui-test PRIVATE EC_UI_TEST=1)
  target_include_directories(ec-ui-test PRIVATE tests/inkview)
  target_link_libraries(ec-ui-test PRIVATE ec_core)
  target_compile_options(ec-ui-test PRIVATE -Wall -Wextra -Werror)
  add_test(NAME device-ui COMMAND ${Python3_EXECUTABLE}
    ${CMAKE_SOURCE_DIR}/tests/test_ui.py $<TARGET_FILE:ec-ui-test>)
  set_tests_properties(controller core tools ui-layout device-ui PROPERTIES TIMEOUT 60)
endif()
