include_directories(${CMAKE_SOURCE_DIR}/src)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(QML_PLUGIN_DIR "${CMAKE_INSTALL_LIBDIR}/qt5/qml/MediaScanner.0.1")

add_library(mediascanner-qml SHARED
  plugin.cpp
  MediaFileWrapper.cpp
  MediaFileWrapper.h
  MediaStoreWrapper.cpp
  MediaStoreWrapper.h
  StreamingModel.cpp
  StreamingModel.h
  MediaFileModelBase.cpp
  MediaFileModelBase.h
  AlbumModelBase.cpp
  AlbumModelBase.h
  AlbumsModel.cpp
  AlbumsModel.h
  ArtistsModel.cpp
  ArtistsModel.h
  GenresModel.cpp
  GenresModel.h
  SongsModel.cpp
  SongsModel.h
  SongsSearchModel.cpp
  SongsSearchModel.h
)
target_compile_definitions(mediascanner-qml PRIVATE -DQT_NO_KEYWORDS)
target_link_libraries(mediascanner-qml
    Qt5::Core
    Qt5::Gui
    Qt5::Qml
    Qt5::Concurrent
    Qt5::DBus
    PkgConfig::DBUSCPP
    mediascanner
    ms-dbus)

install(
  TARGETS mediascanner-qml
  LIBRARY DESTINATION ${QML_PLUGIN_DIR}
)

file(GLOB QMLFILES
  qmldir
)

add_custom_target(mediascanner-qmlfiles ALL
  COMMAND cp ${QMLFILES} ${CMAKE_CURRENT_BINARY_DIR}
  DEPENDS ${QMLFILES}
)

install(
  FILES ${QMLFILES}
  DESTINATION ${QML_PLUGIN_DIR}
)

if(NOT CMAKE_CROSSCOMPILING)
  find_program(qmlplugindump_exe qmlplugindump)
  if(NOT qmlplugindump_exe)
    msg(FATAL_ERROR "Could not locate qmlplugindump.")
  endif()

  # qmlplugindump doesn't run reliably in the CI environment (it seems
  # to be instantiating the types, which fails when there is no media
  # database).  So add a 
  add_custom_target(update-qmltypes
    COMMAND QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/src/qml ${qmlplugindump_exe} -notrelocatable MediaScanner 0.1 > ${CMAKE_CURRENT_SOURCE_DIR}/plugin.qmltypes
    DEPENDS mediascanner-qml mediascanner-qmlfiles
  )
endif()

install(
  FILES plugin.qmltypes
  DESTINATION ${QML_PLUGIN_DIR}
)
