CMakeLists.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. if(DISABLE_UI)
  2. message(STATUS "UI disabled")
  3. return()
  4. elseif(ENABLE_UI)
  5. set(FIND_MODE REQUIRED)
  6. else()
  7. set(FIND_MODE QUIET)
  8. endif()
  9. if(BROWSER_AVAILABLE_INTERNAL)
  10. add_definitions(-DBROWSER_AVAILABLE)
  11. endif()
  12. add_subdirectory(obs-frontend-api)
  13. # ----------------------------------------------------------------------------
  14. project(obs)
  15. set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
  16. if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR
  17. NOT DEFINED TWITCH_HASH OR "${TWITCH_HASH}" STREQUAL "" OR
  18. NOT BROWSER_AVAILABLE_INTERNAL)
  19. set(TWITCH_ENABLED FALSE)
  20. set(TWITCH_CLIENTID "")
  21. set(TWITCH_HASH "0")
  22. else()
  23. set(TWITCH_ENABLED TRUE)
  24. endif()
  25. if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR
  26. NOT DEFINED RESTREAM_HASH OR "${RESTREAM_HASH}" STREQUAL "" OR
  27. NOT BROWSER_AVAILABLE_INTERNAL)
  28. set(RESTREAM_ENABLED FALSE)
  29. set(RESTREAM_CLIENTID "")
  30. set(RESTREAM_HASH "0")
  31. else()
  32. set(RESTREAM_ENABLED TRUE)
  33. endif()
  34. if(DEFINED ENV{YOUTUBE_CLIENTID} AND NOT DEFINED YOUTUBE_CLIENTID)
  35. set(YOUTUBE_CLIENTID "$ENV{YOUTUBE_CLIENTID}")
  36. endif()
  37. if(DEFINED ENV{YOUTUBE_CLIENTID_HASH} AND NOT DEFINED YOUTUBE_CLIENTID_HASH)
  38. set(YOUTUBE_CLIENTID_HASH "$ENV{YOUTUBE_CLIENTID_HASH}")
  39. endif()
  40. if(DEFINED ENV{YOUTUBE_SECRET} AND NOT DEFINED YOUTUBE_SECRET)
  41. set(YOUTUBE_SECRET "$ENV{YOUTUBE_SECRET}")
  42. endif()
  43. if(DEFINED ENV{YOUTUBE_SECRET_HASH} AND NOT DEFINED YOUTUBE_SECRET_HASH)
  44. set(YOUTUBE_SECRET_HASH "$ENV{YOUTUBE_SECRET_HASH}")
  45. endif()
  46. if(NOT DEFINED YOUTUBE_CLIENTID OR "${YOUTUBE_CLIENTID}" STREQUAL "" OR
  47. NOT DEFINED YOUTUBE_SECRET OR "${YOUTUBE_SECRET}" STREQUAL "" OR
  48. NOT DEFINED YOUTUBE_CLIENTID_HASH OR "${YOUTUBE_CLIENTID_HASH}" STREQUAL "" OR
  49. NOT DEFINED YOUTUBE_SECRET_HASH OR "${YOUTUBE_SECRET_HASH}" STREQUAL "")
  50. set(YOUTUBE_ENABLED FALSE)
  51. else()
  52. set(YOUTUBE_ENABLED TRUE)
  53. endif()
  54. configure_file(
  55. "${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
  56. "${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")
  57. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  58. set(CMAKE_AUTOMOC TRUE)
  59. find_package(Threads REQUIRED)
  60. find_package(Qt5Network ${FIND_MODE})
  61. find_package(Qt5Widgets ${FIND_MODE})
  62. find_package(Qt5Svg ${FIND_MODE})
  63. if(WIN32)
  64. find_package(Qt5WinExtras ${FIND_MODE})
  65. endif()
  66. find_package(Qt5Xml ${FIND_MODE})
  67. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  68. if(NOT Qt5Widgets_FOUND)
  69. if (ENABLE_UI)
  70. message(FATAL_ERROR "Failed to find Qt5")
  71. else()
  72. message(STATUS "Qt5 not found - UI disabled")
  73. return()
  74. endif()
  75. endif()
  76. include_directories(${FFMPEG_INCLUDE_DIRS})
  77. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  78. include_directories(SYSTEM "obs-frontend-api")
  79. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
  80. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
  81. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
  82. if(BROWSER_AVAILABLE_INTERNAL)
  83. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
  84. endif()
  85. find_package(Libcurl REQUIRED)
  86. include_directories(${LIBCURL_INCLUDE_DIRS})
  87. add_definitions(${LIBCURL_DEFINITIONS})
  88. if(WIN32)
  89. include_directories(${BLAKE2_INCLUDE_DIR})
  90. set(obs_PLATFORM_SOURCES
  91. platform-windows.cpp
  92. win-update/update-window.cpp
  93. win-update/win-update.cpp
  94. win-update/win-update-helpers.cpp
  95. ${obs-studio_BINARY_DIR}/obs.rc)
  96. set(obs_PLATFORM_HEADERS
  97. win-update/update-window.hpp
  98. win-update/win-update.hpp
  99. win-update/win-update-helpers.hpp)
  100. set(obs_PLATFORM_LIBRARIES
  101. crypt32
  102. blake2)
  103. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  104. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
  105. endif()
  106. elseif(APPLE)
  107. set(obs_PLATFORM_SOURCES
  108. platform-osx.mm)
  109. find_package(AppKit REQUIRED)
  110. set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
  111. add_definitions(-fobjc-arc)
  112. option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
  113. if(ENABLE_SPARKLE_UPDATER)
  114. find_library(SPARKLE Sparkle)
  115. include_directories(${SPARKLE})
  116. set(obs_PLATFORM_SOURCES
  117. ${obs_PLATFORM_SOURCES}
  118. sparkle-updater.mm)
  119. set(obs_PLATFORM_LIBRARIES
  120. ${obs_PLATFORM_LIBRARIES}
  121. ${SPARKLE})
  122. add_definitions(-DUPDATE_SPARKLE=1)
  123. endif()
  124. elseif(UNIX)
  125. find_package(Qt5Gui REQUIRED)
  126. include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
  127. set(obs_PLATFORM_SOURCES
  128. platform-x11.cpp)
  129. set(obs_PLATFORM_LIBRARIES
  130. ${obs_PLATFORM_LIBRARIES}
  131. Qt5::Gui
  132. Qt5::GuiPrivate)
  133. if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
  134. list(APPEND obs_PLATFORM_LIBRARIES
  135. procstat)
  136. endif()
  137. endif()
  138. if(BROWSER_AVAILABLE_INTERNAL)
  139. list(APPEND obs_PLATFORM_SOURCES
  140. obf.c
  141. window-dock-browser.cpp
  142. window-extra-browsers.cpp
  143. )
  144. list(APPEND obs_PLATFORM_HEADERS
  145. obf.h
  146. window-dock-browser.hpp
  147. window-extra-browsers.hpp
  148. )
  149. if(TWITCH_ENABLED)
  150. list(APPEND obs_PLATFORM_SOURCES
  151. auth-twitch.cpp
  152. )
  153. list(APPEND obs_PLATFORM_HEADERS
  154. auth-twitch.hpp
  155. )
  156. endif()
  157. if(RESTREAM_ENABLED)
  158. list(APPEND obs_PLATFORM_SOURCES
  159. auth-restream.cpp
  160. )
  161. list(APPEND obs_PLATFORM_HEADERS
  162. auth-restream.hpp
  163. )
  164. endif()
  165. endif()
  166. if(YOUTUBE_ENABLED)
  167. list(APPEND obs_PLATFORM_SOURCES
  168. auth-youtube.cpp
  169. youtube-api-wrappers.cpp
  170. )
  171. list(APPEND obs_PLATFORM_HEADERS
  172. auth-youtube.hpp
  173. youtube-api-wrappers.hpp
  174. )
  175. endif()
  176. set(obs_libffutil_SOURCES
  177. ../deps/libff/libff/ff-util.c
  178. )
  179. set(obs_libffutil_HEADERS
  180. ../deps/libff/libff/ff-util.h
  181. )
  182. if(MSVC)
  183. set_source_files_properties(
  184. ../deps/libff/libff/ff-util.c
  185. PROPERTIES COMPILE_FLAGS -Dinline=__inline
  186. )
  187. set(obs_PLATFORM_LIBRARIES
  188. ${obs_PLATFORM_LIBRARIES}
  189. w32-pthreads)
  190. endif()
  191. set(obs_SOURCES
  192. ${obs_PLATFORM_SOURCES}
  193. ${obs_libffutil_SOURCES}
  194. ../deps/json11/json11.cpp
  195. obs-app.cpp
  196. window-dock.cpp
  197. api-interface.cpp
  198. window-basic-main.cpp
  199. window-basic-stats.cpp
  200. window-basic-filters.cpp
  201. window-basic-settings.cpp
  202. window-basic-interaction.cpp
  203. window-basic-properties.cpp
  204. window-basic-auto-config.cpp
  205. window-basic-main-outputs.cpp
  206. window-basic-source-select.cpp
  207. window-basic-settings-stream.cpp
  208. window-basic-main-screenshot.cpp
  209. window-basic-auto-config-test.cpp
  210. window-basic-main-scene-collections.cpp
  211. window-basic-main-transitions.cpp
  212. window-basic-main-dropfiles.cpp
  213. window-basic-main-profiles.cpp
  214. window-basic-main-browser.cpp
  215. window-basic-main-icons.cpp
  216. window-basic-status-bar.cpp
  217. window-basic-adv-audio.cpp
  218. window-basic-transform.cpp
  219. window-basic-preview.cpp
  220. window-basic-about.cpp
  221. window-importer.cpp
  222. media-controls.cpp
  223. window-namedialog.cpp
  224. window-log-reply.cpp
  225. window-projector.cpp
  226. window-remux.cpp
  227. window-missing-files.cpp
  228. auth-base.cpp
  229. auth-oauth.cpp
  230. auth-listener.cpp
  231. source-tree.cpp
  232. scene-tree.cpp
  233. properties-view.cpp
  234. focus-list.cpp
  235. menu-button.cpp
  236. double-slider.cpp
  237. slider-ignorewheel.cpp
  238. combobox-ignorewheel.cpp
  239. spinbox-ignorewheel.cpp
  240. record-button.cpp
  241. ui-validation.cpp
  242. url-push-button.cpp
  243. volume-control.cpp
  244. adv-audio-control.cpp
  245. item-widget-helpers.cpp
  246. context-bar-controls.cpp
  247. horizontal-scroll-area.cpp
  248. vertical-scroll-area.cpp
  249. visibility-item-widget.cpp
  250. slider-absoluteset-style.cpp
  251. qt-display.cpp
  252. crash-report.cpp
  253. hotkey-edit.cpp
  254. source-label.cpp
  255. remote-text.cpp
  256. audio-encoders.cpp
  257. qt-wrappers.cpp
  258. log-viewer.cpp
  259. obs-proxy-style.cpp
  260. locked-checkbox.cpp
  261. visibility-checkbox.cpp
  262. media-slider.cpp
  263. undo-stack-obs.cpp)
  264. set(obs_HEADERS
  265. ${obs_PLATFORM_HEADERS}
  266. ${obs_libffutil_HEADERS}
  267. ../deps/json11/json11.hpp
  268. obs-app.hpp
  269. platform.hpp
  270. window-dock.hpp
  271. window-main.hpp
  272. window-basic-main.hpp
  273. window-basic-stats.hpp
  274. window-basic-filters.hpp
  275. window-basic-settings.hpp
  276. window-basic-interaction.hpp
  277. window-basic-properties.hpp
  278. window-basic-auto-config.hpp
  279. window-basic-main-outputs.hpp
  280. window-basic-source-select.hpp
  281. window-basic-about.hpp
  282. window-basic-status-bar.hpp
  283. window-basic-adv-audio.hpp
  284. window-basic-transform.hpp
  285. window-basic-preview.hpp
  286. window-importer.hpp
  287. media-controls.hpp
  288. window-namedialog.hpp
  289. window-log-reply.hpp
  290. window-projector.hpp
  291. window-remux.hpp
  292. window-missing-files.hpp
  293. auth-base.hpp
  294. auth-oauth.hpp
  295. auth-listener.hpp
  296. source-tree.hpp
  297. scene-tree.hpp
  298. properties-view.hpp
  299. properties-view.moc.hpp
  300. display-helpers.hpp
  301. balance-slider.hpp
  302. double-slider.hpp
  303. slider-ignorewheel.hpp
  304. combobox-ignorewheel.hpp
  305. spinbox-ignorewheel.hpp
  306. focus-list.hpp
  307. menu-button.hpp
  308. mute-checkbox.hpp
  309. record-button.hpp
  310. ui-validation.hpp
  311. screenshot-obj.hpp
  312. url-push-button.hpp
  313. volume-control.hpp
  314. adv-audio-control.hpp
  315. item-widget-helpers.hpp
  316. visibility-checkbox.hpp
  317. context-bar-controls.hpp
  318. locked-checkbox.hpp
  319. horizontal-scroll-area.hpp
  320. expand-checkbox.hpp
  321. vertical-scroll-area.hpp
  322. visibility-item-widget.hpp
  323. slider-absoluteset-style.hpp
  324. qt-display.hpp
  325. crash-report.hpp
  326. hotkey-edit.hpp
  327. source-label.hpp
  328. remote-text.hpp
  329. audio-encoders.hpp
  330. qt-wrappers.hpp
  331. clickable-label.hpp
  332. log-viewer.hpp
  333. obs-proxy-style.hpp
  334. obs-proxy-style.hpp
  335. media-slider.hpp
  336. undo-stack-obs.hpp)
  337. set(obs_importers_HEADERS
  338. importers/importers.hpp)
  339. set(obs_importers_SOURCES
  340. importers/importers.cpp
  341. importers/classic.cpp
  342. importers/sl.cpp
  343. importers/studio.cpp
  344. importers/xsplit.cpp)
  345. source_group("importers\\Source Files" FILES ${obs_importers_SOURCES})
  346. source_group("importers\\Header Files" FILES ${obs_importers_HEADERS})
  347. set(obs_UI
  348. forms/source-toolbar/browser-source-toolbar.ui
  349. forms/source-toolbar/device-select-toolbar.ui
  350. forms/source-toolbar/game-capture-toolbar.ui
  351. forms/source-toolbar/image-source-toolbar.ui
  352. forms/source-toolbar/color-source-toolbar.ui
  353. forms/source-toolbar/text-source-toolbar.ui
  354. forms/source-toolbar/media-controls.ui
  355. forms/AutoConfigStartPage.ui
  356. forms/AutoConfigVideoPage.ui
  357. forms/AutoConfigStreamPage.ui
  358. forms/AutoConfigTestPage.ui
  359. forms/ColorSelect.ui
  360. forms/OBSLogReply.ui
  361. forms/OBSBasic.ui
  362. forms/OBSBasicTransform.ui
  363. forms/OBSBasicFilters.ui
  364. forms/OBSBasicSettings.ui
  365. forms/OBSBasicSourceSelect.ui
  366. forms/OBSBasicInteraction.ui
  367. forms/OBSExtraBrowsers.ui
  368. forms/OBSUpdate.ui
  369. forms/OBSRemux.ui
  370. forms/OBSImporter.ui
  371. forms/OBSMissingFiles.ui
  372. forms/OBSAbout.ui)
  373. set(obs_QRC
  374. forms/obs.qrc)
  375. if(YOUTUBE_ENABLED)
  376. list(APPEND obs_SOURCES
  377. window-youtube-actions.cpp
  378. )
  379. list(APPEND obs_HEADERS
  380. window-youtube-actions.hpp
  381. )
  382. list(APPEND obs_UI
  383. forms/OBSYoutubeActions.ui
  384. )
  385. endif()
  386. qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
  387. qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
  388. add_executable(obs WIN32
  389. obs.manifest
  390. ${obs_SOURCES}
  391. ${obs_HEADERS}
  392. ${obs_importers_SOURCES}
  393. ${obs_importers_HEADERS}
  394. ${obs_UI_HEADERS}
  395. ${obs_QRC_SOURCES})
  396. if(WIN32)
  397. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  398. set(_output_suffix "64")
  399. else()
  400. set(_output_suffix "32")
  401. endif()
  402. set_target_properties(obs
  403. PROPERTIES
  404. OUTPUT_NAME "obs${_output_suffix}")
  405. target_link_libraries(obs
  406. Qt5::WinExtras)
  407. endif()
  408. target_link_libraries(obs
  409. libobs
  410. Threads::Threads
  411. Qt5::Network
  412. Qt5::Widgets
  413. Qt5::Svg
  414. Qt5::Xml
  415. obs-frontend-api
  416. ${FFMPEG_LIBRARIES}
  417. ${LIBCURL_LIBRARIES}
  418. ${obs_PLATFORM_LIBRARIES})
  419. set_target_properties(obs PROPERTIES FOLDER "frontend")
  420. define_graphic_modules(obs)
  421. install_obs_core(obs)
  422. install_obs_data(obs data obs-studio)
  423. install_obs_data_file(obs ../AUTHORS obs-studio/authors)
  424. if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
  425. add_subdirectory(xdg-data)
  426. endif()
  427. add_subdirectory(frontend-plugins)
  428. if(WIN32)
  429. add_subdirectory(win-update/updater)
  430. endif()