cmake_minimum_required(VERSION 3.16)
project(shuffleplayer LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

option(SHUFFLEPLAYER_BUILD_TESTS "Build Shuffle Player regression tests" OFF)

find_package(Qt5 REQUIRED COMPONENTS Core Gui Multimedia Qml Quick)
if(SHUFFLEPLAYER_BUILD_TESTS)
   find_package(Qt5 REQUIRED COMPONENTS Test)
   enable_testing()
endif()

if(NOT DEFINED ENV{ARCH_TRIPLET})
   message(FATAL_ERROR "ARCH_TRIPLET is not set. Build this project with Clickable.")
endif()

set(ARCH "$ENV{ARCH}")
set(ARCH_TRIPLET "$ENV{ARCH_TRIPLET}")
set(CLICK_FRAMEWORK "$ENV{CLICK_FRAMEWORK}")
set(APPARMOR_POLICY "$ENV{APPARMOR_POLICY}")

configure_file(
   ${CMAKE_CURRENT_SOURCE_DIR}/manifest.json.in
   ${CMAKE_CURRENT_BINARY_DIR}/manifest.json
   @ONLY
)

configure_file(
   ${CMAKE_CURRENT_SOURCE_DIR}/shuffleplayer.apparmor.in
   ${CMAKE_CURRENT_BINARY_DIR}/shuffleplayer.apparmor
   @ONLY
)

qt5_add_resources(APP_RESOURCES resources.qrc)

add_executable(
   shuffleplayer
   src/main.cpp
   src/AlbumArtResolver.cpp
   src/AlbumArtResolver.h
   src/BackupManager.cpp
   src/BackupManager.h
   src/SettingsStore.cpp
   src/SettingsStore.h
   src/ShufflePlayerBackend.cpp
   src/ShufflePlayerBackend.h
   ${APP_RESOURCES}
)

target_link_libraries(
   shuffleplayer
   PRIVATE
   Qt5::Core
   Qt5::Gui
   Qt5::Multimedia
   Qt5::Qml
   Qt5::Quick
)

if(SHUFFLEPLAYER_BUILD_TESTS)
   add_executable(
      test-settings-persistence
      tests/test-settings-persistence.cpp
      src/SettingsStore.cpp
      src/SettingsStore.h
   )
   target_include_directories(
      test-settings-persistence
      PRIVATE
      ${CMAKE_CURRENT_SOURCE_DIR}/src
   )
   target_link_libraries(
      test-settings-persistence
      PRIVATE
      Qt5::Core
      Qt5::Test
   )
   add_test(
      NAME settings-persistence
      COMMAND test-settings-persistence
   )

   add_executable(
      test-album-art-resolver
      tests/test-album-art-resolver.cpp
      src/AlbumArtResolver.cpp
      src/AlbumArtResolver.h
   )
   target_include_directories(
      test-album-art-resolver
      PRIVATE
      ${CMAKE_CURRENT_SOURCE_DIR}/src
   )
   target_link_libraries(
      test-album-art-resolver
      PRIVATE
      Qt5::Core
      Qt5::Gui
      Qt5::Test
   )
   add_test(
      NAME album-art-resolver
      COMMAND test-album-art-resolver
   )
endif()

install(
   TARGETS shuffleplayer
   RUNTIME DESTINATION lib/${ARCH_TRIPLET}/bin
)

install(
   FILES
   ${CMAKE_CURRENT_BINARY_DIR}/manifest.json
   ${CMAKE_CURRENT_BINARY_DIR}/shuffleplayer.apparmor
   ${CMAKE_CURRENT_SOURCE_DIR}/shuffleplayer.desktop
   DESTINATION .
)

install(
   DIRECTORY assets
   DESTINATION .
)

install(
   FILES
   ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
   ${CMAKE_CURRENT_SOURCE_DIR}/README.md
   ${CMAKE_CURRENT_SOURCE_DIR}/THIRD-PARTY.md
   ${CMAKE_CURRENT_SOURCE_DIR}/OPENSTORE-DESCRIPTION.txt
   ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md
   ${CMAKE_CURRENT_SOURCE_DIR}/PERSISTENCE-AUDIT.md
   DESTINATION share/shuffleplayer
)
