CMakeLists.txt 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. include_directories(
  2. ${CMAKE_SOURCE_DIR}/external/qhttpserver/src
  3. ${CMAKE_SOURCE_DIR}/external/qslog
  4. ${CMAKE_SOURCE_DIR}/external/SPMediaKeyTap
  5. ${CMAKE_SOURCE_DIR}/external/plistparser
  6. ${CMAKE_SOURCE_DIR}/src/player
  7. shared
  8. )
  9. set(CMAKE_AUTOMOC ON)
  10. add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}")
  11. find_package(Breakpad)
  12. if(BREAKPAD_FOUND)
  13. include_directories(${BREAKPAD_INCLUDE_DIR})
  14. set(BREAKPAD_LIBRARIES ${BREAKPAD_LIBRARY})
  15. if(UNIX)
  16. # cmake issue: breakpad-client.pc adds this, but cmake discards it
  17. set(BREAKPAD_LIBRARIES ${BREAKPAD_LIBRARIES} -lpthread)
  18. endif()
  19. endif()
  20. add_subdirectory(shared)
  21. add_subdirectory(display)
  22. add_subdirectory(player)
  23. add_subdirectory(utils)
  24. add_subdirectory(server)
  25. add_subdirectory(ui)
  26. add_subdirectory(input)
  27. add_subdirectory(system)
  28. add_subdirectory(breakpad)
  29. add_subdirectory(settings)
  30. add_subdirectory(power)
  31. add_subdirectory(remote)
  32. add_subdirectory(tools)
  33. get_property(ALL_SRCS GLOBAL PROPERTY SRCS_LIST)
  34. set(MAIN_SRCS
  35. Version.h
  36. ComponentManager.cpp
  37. ComponentManager.h
  38. main.cpp
  39. )
  40. # add unix signal management classes
  41. if (UNIX)
  42. set(MAIN_SRCS ${MAIN_SRCS}
  43. SignalManager.h
  44. SignalManager.cpp
  45. )
  46. endif()
  47. source_group("Source Files" FILES ${MAIN_SRCS})
  48. set(SOURCES ${MAIN_SRCS} ${ALL_SRCS})
  49. # Set some Objective-C flags.
  50. # We need to force the Language to C instead of C++
  51. # and also make sure that we use ARC
  52. #
  53. foreach(S ${SOURCES})
  54. string(REGEX MATCH ".*\\.m$" MATCH_OBJC ${S})
  55. if(MATCH_OBJC)
  56. set_property(SOURCE ${S} PROPERTY COMPILE_FLAGS "-fobjc-arc")
  57. set_property(SOURCE ${S} PROPERTY LANGUAGE C)
  58. endif()
  59. endforeach(S SOURCE)
  60. foreach(sfile in ${ALL_SRCS})
  61. get_filename_component(REALNAME ${sfile} REALPATH)
  62. get_filename_component(DIRNAME ${REALNAME} DIRECTORY)
  63. string(REPLACE "${CMAKE_SOURCE_DIR}/src/" "" SUBDIR ${DIRNAME})
  64. string(TOLOWER ${SUBDIR} SUBDIR)
  65. string(REPLACE "/" "\\\\" GNAME ${SUBDIR})
  66. source_group("Source Files\\\\${GNAME}" FILES ${sfile})
  67. endforeach(sfile in ${ALL_SRCS})
  68. file(GLOB_RECURSE RESOURCE_FILES ${CMAKE_SOURCE_DIR}/resources/*)
  69. # generate resources.qrc from directory tree listings
  70. add_custom_command(OUTPUT resources.qrc
  71. COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/build-qt-resources.py
  72. ${CMAKE_CURRENT_BINARY_DIR}/resources.qrc
  73. /=${CMAKE_SOURCE_DIR}/resources/
  74. ui/webview.qml=${CMAKE_SOURCE_DIR}/src/ui/webview.qml
  75. ui/errormessage.qml=${CMAKE_SOURCE_DIR}/src/ui/errormessage.qml
  76. COMMENT "Creating resources.qrc"
  77. DEPENDS ${CMAKE_SOURCE_DIR}/scripts/build-qt-resources.py
  78. ${RESOURCE_FILES}
  79. ${CMAKE_SOURCE_DIR}/src/ui/webview.qml
  80. ${CMAKE_SOURCE_DIR}/src/ui/errormessage.qml
  81. )
  82. set_source_files_properties(resources.qrc PROPERTIES GENERATED TRUE)
  83. add_custom_command(OUTPUT qrc_resources.cpp
  84. COMMAND ${Qt5Core_RCC_EXECUTABLE} -name resources -o qrc_resources.cpp resources.qrc
  85. DEPENDS resources.qrc ${CMAKE_SOURCE_DIR}/src/ui/webview.qml ${RESOURCE_FILES}
  86. )
  87. set_source_files_properties(qrc_resources.cpp PROPERTIES GENERATED TRUE)
  88. # handle Web-Client resource
  89. include(WebClientResources)
  90. set_source_files_properties(${PROJECT_SOURCE_DIR}/bundle/osx/Plex.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  91. list(APPEND RESOURCE_FILES qrc_resources.cpp ${WEB_CLIENT_CPP})
  92. if(APPLE)
  93. list(APPEND RESOURCE_FILES ${PROJECT_SOURCE_DIR}/bundle/osx/Plex.icns)
  94. if(HAVE_UPDATER)
  95. list(APPEND RESOURCE_FILES ${UPDATER_PATH})
  96. set_source_files_properties(${UPDATER_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  97. endif(HAVE_UPDATER)
  98. set(PLISTPARSER plistparser)
  99. endif()
  100. set(MACOSX_BUNDLE_ICON_FILE Plex.icns)
  101. set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION_STRING})
  102. set(MACOSX_BUNDLE_BUNDLE_NAME "Plex Media Player")
  103. set(MACOSX_BUNDLE_BUNDLE_VERSION ${VERSION_STRING})
  104. set(MACOSX_BUNDLE_GUI_IDENTIFIER tv.plex.player)
  105. if(WIN32)
  106. list(APPEND RESOURCE_FILES ${CMAKE_SOURCE_DIR}/bundle/win/iconres.rc)
  107. install(PROGRAMS ${CMAKE_BINARY_DIR}/updater.exe DESTINATION ${INSTALL_BIN_DIR})
  108. endif()
  109. get_property(BUNDLED_FILES GLOBAL PROPERTY CONFIG_BUNDLED_FILES)
  110. add_executable(${MAIN_TARGET} WIN32 MACOSX_BUNDLE ${SOURCES} ${BUNDLED_FILES} ${RESOURCE_FILES})
  111. set_target_properties(${MAIN_TARGET} PROPERTIES
  112. MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/bundle/osx/Info.plist.in
  113. INSTALL_RPATH "${QTROOT}/lib"
  114. OUTPUT_NAME ${MAIN_NAME}
  115. CXX_STANDARD 11
  116. CXX_STANDARD_REQUIRED TRUE
  117. )
  118. target_link_libraries(${MAIN_TARGET}
  119. shared
  120. qhttpserver
  121. qslog
  122. ${PLISTPARSER}
  123. ${MPV_LIBRARY}
  124. ${OPENGL_LIBS}
  125. ${QT5_LIBRARIES}
  126. ${OS_LIBS}
  127. ${EXTRA_LIBS}
  128. ${X11_LIBRARIES}
  129. ${X11_Xrandr_LIB}
  130. ${BREAKPAD_LIBRARIES}
  131. ${ICU_LIBRARIES}
  132. ${CMAKE_THREAD_LIBS_INIT}
  133. ${RPI_LIBS}
  134. )
  135. install(TARGETS ${MAIN_TARGET} DESTINATION ${INSTALL_BIN_DIR})
  136. set(EXE "${MAIN_NAME}.app")
  137. set(LIBPATH ${CMAKE_FIND_ROOT_PATH})
  138. set(SOURCE_ROOT ${CMAKE_SOURCE_DIR})
  139. dumpsyms(${MAIN_TARGET} ${CMAKE_BINARY_DIR}/${MAIN_TARGET}.symbols)
  140. include(CompleteBundle)