
cmake_minimum_required(VERSION 3.10)

project(
  mosh-me
  VERSION 0.1.0
  LANGUAGES CXX)

find_package(spdlog REQUIRED)
find_package(avcpp REQUIRED)


# ##############################################################################

add_library(mosh-me-lib STATIC
    ${PROJECT_SOURCE_DIR}/src/avpipe.cpp
    ${PROJECT_SOURCE_DIR}/src/pipeline.cpp
)
target_link_libraries(mosh-me-lib PUBLIC avcpp::avcpp spdlog::spdlog)
target_compile_features(mosh-me-lib PUBLIC cxx_std_23)
target_include_directories(mosh-me-lib PUBLIC ${PROJECT_SOURCE_DIR}/include)

add_executable(mosh-me
    ${PROJECT_SOURCE_DIR}/app/mosh-me.cpp
)
target_link_libraries(mosh-me avcpp::avcpp spdlog::spdlog)
target_compile_features(mosh-me PUBLIC cxx_std_23)
target_include_directories(mosh-me PRIVATE ${PROJECT_SOURCE_DIR}/include)

add_executable(mk-moshable
    ${PROJECT_SOURCE_DIR}/app/mk-moshable.cpp
)
target_link_libraries(mk-moshable avcpp::avcpp spdlog::spdlog)
target_compile_features(mk-moshable PUBLIC cxx_std_23)
target_include_directories(mk-moshable PRIVATE ${PROJECT_SOURCE_DIR}/include)

add_executable(mosh-pipe
    ${PROJECT_SOURCE_DIR}/app/mosh-pipe.cpp
)
target_link_libraries(mosh-pipe mosh-me-lib)


install(TARGETS mosh-me mk-moshable mosh-pipe)

################################################################################

include(CTest)
if (BUILD_TESTING)
  find_package(Catch2 REQUIRED)
  include(Catch)
  add_executable(mosh-me_test
    ${PROJECT_SOURCE_DIR}/test/pipeline.cpp
  )
  target_link_libraries(mosh-me_test mosh-me-lib Catch2::Catch2WithMain)
  catch_discover_tests(mosh-me_test)
endif()

################################################################################

if(CMAKE_EXPORT_COMPILE_COMMANDS)
  set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
  set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES})
endif()


