CMakeLists.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. include_directories(
  2. ${CMAKE_SOURCE_DIR}/external/SPMediaKeyTap
  3. ${CMAKE_SOURCE_DIR}/external/HIDRemote
  4. ${CMAKE_SOURCE_DIR}/external/plistparser
  5. ${CMAKE_SOURCE_DIR}/external/letsmove
  6. ${CMAKE_SOURCE_DIR}/src/player
  7. core
  8. shared
  9. )
  10. set(CMAKE_AUTOMOC ON)
  11. add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}")
  12. add_subdirectory(shared)
  13. add_subdirectory(core)
  14. add_subdirectory(display)
  15. add_subdirectory(player)
  16. add_subdirectory(utils)
  17. add_subdirectory(ui)
  18. add_subdirectory(input)
  19. add_subdirectory(system)
  20. add_subdirectory(settings)
  21. add_subdirectory(power)
  22. add_subdirectory(taskbar)
  23. get_property(ALL_SRCS GLOBAL PROPERTY SRCS_LIST)
  24. set(MAIN_SRCS main.cpp)
  25. source_group("Source Files" FILES ${MAIN_SRCS})
  26. set(SOURCES ${MAIN_SRCS} ${ALL_SRCS})
  27. # Set some Objective-C flags.
  28. # We need to force the Language to C instead of C++
  29. # and also make sure that we use ARC
  30. #
  31. foreach(S ${SOURCES})
  32. string(REGEX MATCH ".*\\.m$" MATCH_OBJC ${S})
  33. if(MATCH_OBJC)
  34. set_property(SOURCE ${S} PROPERTY COMPILE_FLAGS "-fobjc-arc")
  35. set_property(SOURCE ${S} PROPERTY LANGUAGE C)
  36. endif()
  37. endforeach(S SOURCE)
  38. foreach(sfile in ${ALL_SRCS})
  39. get_filename_component(REALNAME ${sfile} REALPATH)
  40. get_filename_component(DIRNAME ${REALNAME} DIRECTORY)
  41. string(REPLACE "${CMAKE_SOURCE_DIR}/src/" "" SUBDIR ${DIRNAME})
  42. string(TOLOWER ${SUBDIR} SUBDIR)
  43. string(REPLACE "/" "\\\\" GNAME ${SUBDIR})
  44. source_group("Source Files\\\\${GNAME}" FILES ${sfile})
  45. endforeach(sfile in ${ALL_SRCS})
  46. file(GLOB_RECURSE RESOURCE_FILES ${CMAKE_SOURCE_DIR}/resources/*)
  47. # generate resources.qrc from directory tree listings
  48. add_custom_command(OUTPUT resources.qrc
  49. COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/build-qt-resources.py
  50. ${CMAKE_CURRENT_BINARY_DIR}/resources.qrc
  51. /=${CMAKE_SOURCE_DIR}/resources/
  52. ui/webview.qml=${CMAKE_SOURCE_DIR}/src/ui/webview.qml
  53. COMMENT "Creating resources.qrc"
  54. DEPENDS ${CMAKE_SOURCE_DIR}/scripts/build-qt-resources.py
  55. ${RESOURCE_FILES}
  56. ${CMAKE_SOURCE_DIR}/src/ui/webview.qml
  57. )
  58. set_source_files_properties(resources.qrc PROPERTIES GENERATED TRUE)
  59. add_custom_command(OUTPUT qrc_resources.cpp
  60. COMMAND ${Qt5Core_RCC_EXECUTABLE} -name resources -o qrc_resources.cpp resources.qrc
  61. DEPENDS resources.qrc ${CMAKE_SOURCE_DIR}/src/ui/webview.qml ${RESOURCE_FILES}
  62. )
  63. set_source_files_properties(qrc_resources.cpp PROPERTIES GENERATED TRUE)
  64. list(APPEND RESOURCE_FILES qrc_resources.cpp)
  65. set(MACOSX_BUNDLE_ICON_FILE jellyfin.icns)
  66. set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION_STRING})
  67. set(MACOSX_BUNDLE_BUNDLE_NAME "Jellyfin Media Player")
  68. set(MACOSX_BUNDLE_BUNDLE_VERSION ${VERSION_STRING})
  69. set(MACOSX_BUNDLE_GUI_IDENTIFIER tv.jellyfin.player)
  70. if(APPLE)
  71. if(HAVE_UPDATER)
  72. add_resources(TARGET ${MAIN_TARGET} SOURCES ${UPDATER_PATH} DEST ${INSTALL_RESOURCE_DIR})
  73. endif(HAVE_UPDATER)
  74. set_source_files_properties(
  75. input/apple/HIDRemote/HIDRemote.m
  76. PROPERTIES COMPILE_FLAGS -fno-objc-arc
  77. )
  78. # copy the qt.conf so that when running PMP from a debugger it finds the plugins and QML files
  79. if(EXISTS ${QTROOT}/bin/qt.conf)
  80. add_resources(TARGET ${MAIN_TARGET} SOURCES ${QTROOT}/bin/qt.conf DEST ${INSTALL_RESOURCE_DIR})
  81. endif()
  82. set(ICON_FILE ${CMAKE_SOURCE_DIR}/bundle/osx/${MACOSX_BUNDLE_ICON_FILE})
  83. list(APPEND RESOURCE_FILES ${ICON_FILE})
  84. set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
  85. endif()
  86. if(WIN32)
  87. list(APPEND RESOURCE_FILES ${CMAKE_SOURCE_DIR}/bundle/win/iconres.rc)
  88. endif()
  89. set(RESOURCE_ROOT .)
  90. if(APPLE)
  91. set(RESOURCE_ROOT Resources)
  92. if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/)
  93. add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DEST ${RESOURCE_ROOT}/web-client/desktop)
  94. endif()
  95. add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_SOURCE_DIR}/native/ DEST ${RESOURCE_ROOT}/web-client/extension)
  96. endif()
  97. if(NOT APPLE)
  98. set(rsrc_locations
  99. ${QTROOT}/resources
  100. /usr/share/qt/resources
  101. )
  102. foreach(loc ${rsrc_locations})
  103. if(EXISTS ${loc}/qtwebengine_devtools_resources.pak)
  104. install(FILES ${loc}/qtwebengine_devtools_resources.pak DESTINATION resources)
  105. endif()
  106. endforeach()
  107. if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/)
  108. install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/desktop)
  109. endif()
  110. install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/extension)
  111. endif()
  112. if(XCODE)
  113. get_resources_source_list(${MAIN_TARGET} XCODE_RESOURCES)
  114. endif()
  115. get_property(BUNDLED_FILES GLOBAL PROPERTY CONFIG_BUNDLED_FILES)
  116. add_executable(${MAIN_TARGET} WIN32 MACOSX_BUNDLE ${SOURCES} ${BUNDLED_FILES} ${RESOURCE_FILES} ${XCODE_RESOURCES})
  117. std_target_properties(${MAIN_TARGET})
  118. set_target_properties(${MAIN_TARGET} PROPERTIES
  119. MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/bundle/osx/Info.plist.in
  120. INSTALL_RPATH "${QTROOT}/lib"
  121. OUTPUT_NAME ${MAIN_NAME}
  122. )
  123. copy_resources(${MAIN_TARGET})
  124. clang_tidy(${MAIN_TARGET})
  125. find_library(MINIZIP_LIBRARY minizip)
  126. if(WIN32)
  127. # FindZLIB doesn't find this. (It might be possible to fix the minizip build
  128. # to not require this.)
  129. find_library(ZLIB_LIBRARIES zlibwapi)
  130. if(ZLIB_LIBRARIES)
  131. set(ZLIB_FOUND on)
  132. endif()
  133. else()
  134. include(FindZLIB)
  135. endif()
  136. if(ZLIB_FOUND AND MINIZIP_LIBRARY)
  137. message(STATUS "Using minizip")
  138. set(MINIZIP_LIBS ${MINIZIP_LIBRARY} ${ZLIB_LIBRARIES})
  139. add_definitions(-DHAVE_MINIZIP)
  140. else()
  141. if(ENABLE_CODECS)
  142. if (ZLIB_FOUND)
  143. message(FATAL_ERROR "minizip required in this configuration")
  144. else()
  145. message(FATAL_ERROR "zlib required in this configuration")
  146. endif()
  147. endif()
  148. endif()
  149. target_link_libraries(${MAIN_TARGET}
  150. shared
  151. ${MPV_LIBRARY}
  152. ${OPENGL_LIBS}
  153. ${QT5_LIBRARIES}
  154. ${OS_LIBS}
  155. ${EXTRA_LIBS}
  156. ${X11_LIBRARIES}
  157. ${X11_Xrandr_LIB}
  158. ${ICU_LIBRARIES}
  159. ${CMAKE_THREAD_LIBS_INIT}
  160. ${RPI_LIBS}
  161. ${MINIZIP_LIBS}
  162. )
  163. install(TARGETS ${MAIN_TARGET} DESTINATION ${INSTALL_BIN_DIR})
  164. set(EXE "${MAIN_NAME}.app")
  165. set(LIBPATH ${CMAKE_FIND_ROOT_PATH})
  166. set(SOURCE_ROOT ${CMAKE_SOURCE_DIR})
  167. include(CompleteBundle)