CMakeLists.txt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. project(obs)
  2. option(ENABLE_UI "Enables the OBS user interfaces" ON)
  3. if(DISABLE_UI)
  4. message(STATUS "UI disabled")
  5. return()
  6. elseif(ENABLE_UI)
  7. set(FIND_MODE REQUIRED)
  8. else()
  9. set(FIND_MODE QUIET)
  10. endif()
  11. if(DEFINED ENV{QTDIR${_lib_suffix}})
  12. list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
  13. elseif(DEFINED ENV{QTDIR})
  14. list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
  15. endif()
  16. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  17. set(CMAKE_AUTOMOC TRUE)
  18. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  19. set(_lib_suffix 64)
  20. else()
  21. set(_lib_suffix 32)
  22. endif()
  23. find_package(Qt5Widgets ${FIND_MODE})
  24. find_package(Qt5Network ${FIND_MODE})
  25. if(NOT Qt5Widgets_FOUND OR NOT Qt5Network_FOUND)
  26. if (ENABLE_UI)
  27. message(FATAL_ERROR "Failed to find Qt5")
  28. else()
  29. message(STATUS "Qt5 not found - UI disabled")
  30. return()
  31. endif()
  32. endif()
  33. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
  34. if(WIN32)
  35. set(obs_PLATFORM_SOURCES
  36. platform-windows.cpp
  37. obs.rc)
  38. elseif(APPLE)
  39. set(obs_PLATFORM_SOURCES
  40. platform-osx.mm)
  41. find_package(AppKit REQUIRED)
  42. set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
  43. add_definitions(-fobjc-arc)
  44. option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
  45. if(ENABLE_SPARKLE_UPDATER)
  46. find_library(SPARKLE Sparkle)
  47. include_directories(${SPARKLE})
  48. set(obs_PLATFORM_SOURCES
  49. ${obs_PLATFORM_SOURCES}
  50. sparkle-updater.mm)
  51. set(obs_PLATFORM_LIBRARIES
  52. ${obs_PLATFORM_LIBRARIES}
  53. ${SPARKLE})
  54. add_definitions(-DUPDATE_SPARKLE=1)
  55. endif()
  56. elseif(UNIX)
  57. find_package(Qt5X11Extras REQUIRED)
  58. set(obs_PLATFORM_SOURCES
  59. platform-x11.cpp)
  60. find_package(XCB COMPONENTS XCB REQUIRED RANDR REQUIRED XINERAMA REQUIRED)
  61. include_directories(
  62. ${XCB_INCLUDE_DIRS}
  63. ${X11_XCB_INCLUDE_DIRS})
  64. add_definitions(
  65. ${XCB_DEFINITIONS}
  66. ${X11_XCB_DEFINITIONS})
  67. set(obs_PLATFORM_LIBRARIES
  68. ${XCB_LIBRARIES}
  69. ${X11_XCB_LIBRARIES}
  70. Qt5::X11Extras)
  71. endif()
  72. set(obs_SOURCES
  73. ${obs_PLATFORM_SOURCES}
  74. obs-app.cpp
  75. window-basic-main.cpp
  76. window-basic-filters.cpp
  77. window-basic-settings.cpp
  78. window-basic-interaction.cpp
  79. window-basic-properties.cpp
  80. window-basic-main-outputs.cpp
  81. window-basic-source-select.cpp
  82. window-license-agreement.cpp
  83. window-basic-status-bar.cpp
  84. window-basic-adv-audio.cpp
  85. window-basic-transform.cpp
  86. window-basic-preview.cpp
  87. window-namedialog.cpp
  88. window-log-reply.cpp
  89. window-projector.cpp
  90. window-remux.cpp
  91. properties-view.cpp
  92. focus-list.cpp
  93. double-slider.cpp
  94. volume-control.cpp
  95. adv-audio-control.cpp
  96. visibility-checkbox.cpp
  97. vertical-scroll-area.cpp
  98. visibility-item-widget.cpp
  99. slider-absoluteset-style.cpp
  100. source-list-widget.cpp
  101. crash-report.cpp
  102. qt-wrappers.cpp)
  103. set(obs_HEADERS
  104. obs-app.hpp
  105. platform.hpp
  106. window-main.hpp
  107. window-basic-main.hpp
  108. window-basic-filters.hpp
  109. window-basic-settings.hpp
  110. window-basic-interaction.hpp
  111. window-basic-properties.hpp
  112. window-basic-main-outputs.hpp
  113. window-basic-source-select.hpp
  114. window-license-agreement.hpp
  115. window-basic-status-bar.hpp
  116. window-basic-adv-audio.hpp
  117. window-basic-transform.hpp
  118. window-basic-preview.hpp
  119. window-namedialog.hpp
  120. window-log-reply.hpp
  121. window-projector.hpp
  122. window-remux.hpp
  123. properties-view.hpp
  124. display-helpers.hpp
  125. double-slider.hpp
  126. focus-list.hpp
  127. mute-checkbox.hpp
  128. volume-control.hpp
  129. adv-audio-control.hpp
  130. visibility-checkbox.hpp
  131. vertical-scroll-area.hpp
  132. visibility-item-widget.hpp
  133. slider-absoluteset-style.hpp
  134. source-list-widget.hpp
  135. qt-display.hpp
  136. crash-report.hpp
  137. qt-wrappers.hpp)
  138. set(obs_UI
  139. forms/NameDialog.ui
  140. forms/OBSLicenseAgreement.ui
  141. forms/OBSLogReply.ui
  142. forms/OBSBasic.ui
  143. forms/OBSBasicTransform.ui
  144. forms/OBSBasicFilters.ui
  145. forms/OBSBasicSettings.ui
  146. forms/OBSBasicSourceSelect.ui
  147. forms/OBSBasicInteraction.ui
  148. forms/OBSBasicProperties.ui
  149. forms/OBSRemux.ui)
  150. set(obs_QRC
  151. forms/obs.qrc)
  152. qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
  153. qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
  154. add_executable(obs WIN32
  155. ${obs_SOURCES}
  156. ${obs_HEADERS}
  157. ${obs_UI_HEADERS}
  158. ${obs_QRC_SOURCES})
  159. if(WIN32)
  160. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  161. set(_output_suffix "64")
  162. else()
  163. set(_output_suffix "32")
  164. endif()
  165. set_target_properties(obs
  166. PROPERTIES
  167. OUTPUT_NAME "obs${_output_suffix}")
  168. endif()
  169. target_link_libraries(obs
  170. libobs
  171. libff
  172. Qt5::Widgets
  173. Qt5::Network
  174. ${obs_PLATFORM_LIBRARIES})
  175. define_graphic_modules(obs)
  176. install_obs_core(obs)
  177. install_obs_data(obs data obs-studio)
  178. if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
  179. install(FILES dist/obs.desktop DESTINATION share/applications)
  180. install(FILES forms/images/obs.png
  181. DESTINATION share/icons/hicolor/256x256/apps)
  182. endif()