cmake_minimum_required(VERSION 3.24)
project(media_player LANGUAGES CXX)
# Plugin-owned playback: media-player loads it through vtour.native
# (library.lua). FFmpeg (LGPL, shared, beside the vtour executable), miniaudio
# and the shared HTTP client module. No vtour, Lua, ImGui or GL dependency.
find_package(Threads REQUIRED)
set(MEDIA_PLAYER_SOURCES media.cpp player.cpp ffmpeg_decoder.cpp http_source.cpp media_log.cpp miniaudio.cpp)
function(media_player_configure target)
  target_compile_features(${target} PUBLIC cxx_std_17)
  target_include_directories(${target} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
  target_include_directories(${target} SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/vendor/third")  # miniaudio
  target_link_libraries(${target} PUBLIC vtour_ffmpeg nlohmann_json::nlohmann_json)
  target_link_libraries(${target} PRIVATE vtour_http_client Threads::Threads ${CMAKE_DL_LIBS})
  if(WIN32)
    target_compile_definitions(${target} PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN)
  elseif(NOT APPLE)
    target_link_libraries(${target} PRIVATE m)
  endif()
  add_dependencies(${target} sync_ffmpeg)
endfunction()
add_library(vtour_media_player SHARED ${MEDIA_PLAYER_SOURCES})
media_player_configure(vtour_media_player)
# FFmpeg shared libraries sit beside the vtour executable (cmake/ffmpeg/Deploy.cmake).
set_target_properties(vtour_media_player PROPERTIES PREFIX "" OUTPUT_NAME "media-player"
  CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES)
if(APPLE)
  set(_media_rpath "@executable_path;@loader_path/../..")
elseif(UNIX)
  set(_media_rpath "$ORIGIN/../..")  # bin/plugins/media-player -> bin
endif()
if(DEFINED _media_rpath)
  set_target_properties(vtour_media_player PROPERTIES BUILD_RPATH "${_media_rpath}" INSTALL_RPATH "${_media_rpath}")
endif()
# Tests use MediaPlayer and the same C ABI statically.
add_library(vtour_media_player_static STATIC ${MEDIA_PLAYER_SOURCES})
media_player_configure(vtour_media_player_static)
target_compile_definitions(vtour_media_player_static PUBLIC MEDIA_STATIC)
