CMakeLists.txt 8.8 KB
Newer Older
1 2 3 4 5
if(DISABLE_UI)
	message(STATUS "UI disabled")
	return()
elseif(ENABLE_UI)
	set(FIND_MODE REQUIRED)
B
BtbN 已提交
6
else()
7
	set(FIND_MODE QUIET)
B
BtbN 已提交
8 9
endif()

10
if(BROWSER_AVAILABLE_INTERNAL)
11 12 13
	add_definitions(-DBROWSER_AVAILABLE)
endif()

J
jp9000 已提交
14 15 16 17 18 19
add_subdirectory(obs-frontend-api)

# ----------------------------------------------------------------------------

project(obs)

20
set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
J
jp9000 已提交
21

J
jp9000 已提交
22 23 24 25 26 27 28 29 30 31
if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR
   NOT DEFINED TWITCH_HASH     OR "${TWITCH_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(TWITCH_ENABLED FALSE)
	set(TWITCH_CLIENTID "")
	set(TWITCH_HASH "0")
else()
	set(TWITCH_ENABLED TRUE)
endif()

J
jp9000 已提交
32 33 34 35 36 37 38 39 40 41
if(NOT DEFINED MIXER_CLIENTID OR "${MIXER_CLIENTID}" STREQUAL "" OR
   NOT DEFINED MIXER_HASH     OR "${MIXER_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(MIXER_ENABLED FALSE)
	set(MIXER_CLIENTID "")
	set(MIXER_HASH "0")
else()
	set(MIXER_ENABLED TRUE)
endif()

S
SoftArch 已提交
42 43 44 45 46 47 48 49 50 51
if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR
   NOT DEFINED RESTREAM_HASH     OR "${RESTREAM_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(RESTREAM_ENABLED FALSE)
	set(RESTREAM_CLIENTID "")
	set(RESTREAM_HASH "0")
else()
	set(RESTREAM_ENABLED TRUE)
endif()

J
jp9000 已提交
52 53 54 55
configure_file(
	"${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
	"${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")

B
BtbN 已提交
56 57 58
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(CMAKE_AUTOMOC TRUE)

C
Clayton Groeneveld 已提交
59 60
find_package(Qt5Svg ${FIND_MODE})

J
jp9000 已提交
61
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
62

C
Colin Edwards 已提交
63 64 65 66
if(APPLE)
	find_package(Qt5MacExtras REQUIRED)
endif(APPLE)

J
jp9000 已提交
67
if(NOT Qt5Widgets_FOUND)
68 69 70 71 72 73 74 75
	if (ENABLE_UI)
		message(FATAL_ERROR "Failed to find Qt5")
	else()
		message(STATUS "Qt5 not found - UI disabled")
		return()
	endif()
endif()

J
jp9000 已提交
76 77

include_directories(${FFMPEG_INCLUDE_DIRS})
J
jp9000 已提交
78
include_directories(${CMAKE_CURRENT_BINARY_DIR})
J
jp9000 已提交
79
include_directories(SYSTEM "obs-frontend-api")
80
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
J
jp9000 已提交
81
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
J
jp9000 已提交
82
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
83 84 85
if(BROWSER_AVAILABLE_INTERNAL)
	include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
endif()
B
BtbN 已提交
86

J
jp9000 已提交
87 88 89 90
find_package(Libcurl REQUIRED)
include_directories(${LIBCURL_INCLUDE_DIRS})
add_definitions(${LIBCURL_DEFINITIONS})

B
BtbN 已提交
91
if(WIN32)
J
jp9000 已提交
92
	include_directories(${OBS_JANSSON_INCLUDE_DIRS})
93
	include_directories(${BLAKE2_INCLUDE_DIR})
J
jp9000 已提交
94

B
BtbN 已提交
95
	set(obs_PLATFORM_SOURCES
J
jp9000 已提交
96
		platform-windows.cpp
J
jp9000 已提交
97 98 99
		win-update/update-window.cpp
		win-update/win-update.cpp
		win-update/win-update-helpers.cpp
100
		${obs-studio_BINARY_DIR}/obs.rc)
J
jp9000 已提交
101 102 103 104 105 106
	set(obs_PLATFORM_HEADERS
		win-update/update-window.hpp
		win-update/win-update.hpp
		win-update/win-update-helpers.hpp)
	set(obs_PLATFORM_LIBRARIES
		crypt32
107
		blake2
J
jp9000 已提交
108
		${OBS_JANSSON_IMPORT})
109 110 111 112

	if(CMAKE_SIZEOF_VOID_P EQUAL 4)
		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
	endif()
B
BtbN 已提交
113 114 115
elseif(APPLE)
	set(obs_PLATFORM_SOURCES
		platform-osx.mm)
116 117

	find_package(AppKit REQUIRED)
B
BtbN 已提交
118
	set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
119

B
BtbN 已提交
120
	add_definitions(-fobjc-arc)
P
Palana 已提交
121 122 123 124 125 126 127 128 129 130 131 132 133 134

	option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
	if(ENABLE_SPARKLE_UPDATER)
		find_library(SPARKLE Sparkle)
		include_directories(${SPARKLE})
		set(obs_PLATFORM_SOURCES
			${obs_PLATFORM_SOURCES}
			sparkle-updater.mm)
		set(obs_PLATFORM_LIBRARIES
			${obs_PLATFORM_LIBRARIES}
			${SPARKLE})
		add_definitions(-DUPDATE_SPARKLE=1)
	endif()

B
BtbN 已提交
135
elseif(UNIX)
136 137
        find_package(Qt5X11Extras REQUIRED)

B
BtbN 已提交
138 139 140
	set(obs_PLATFORM_SOURCES
		platform-x11.cpp)

141
        set(obs_PLATFORM_LIBRARIES
B
BtbN 已提交
142
                Qt5::X11Extras)
B
BtbN 已提交
143 144
endif()

J
jp9000 已提交
145 146
if(BROWSER_AVAILABLE_INTERNAL)
	list(APPEND obs_PLATFORM_SOURCES
J
jp9000 已提交
147
		obf.c
J
jp9000 已提交
148 149 150
		auth-oauth.cpp
		)
	list(APPEND obs_PLATFORM_HEADERS
J
jp9000 已提交
151
		obf.h
J
jp9000 已提交
152 153
		auth-oauth.hpp
		)
J
jp9000 已提交
154

J
jp9000 已提交
155 156 157 158 159 160 161 162 163
	if(TWITCH_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-twitch.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-twitch.hpp
			)
	endif()

J
jp9000 已提交
164 165 166 167 168 169 170 171
	if(MIXER_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-mixer.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-mixer.hpp
			)
	endif()
S
SoftArch 已提交
172 173 174 175 176 177 178 179 180

	if(RESTREAM_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-restream.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-restream.hpp
			)
	endif()
J
jp9000 已提交
181 182
endif()

J
jp9000 已提交
183 184 185 186 187 188 189 190 191 192 193 194 195 196
set(obs_libffutil_SOURCES
	../deps/libff/libff/ff-util.c
	)
set(obs_libffutil_HEADERS
	../deps/libff/libff/ff-util.h
	)

if(MSVC)
	set_source_files_properties(
		../deps/libff/libff/ff-util.c
		PROPERTIES COMPILE_FLAGS -Dinline=__inline
		)
endif()

B
BtbN 已提交
197 198
set(obs_SOURCES
	${obs_PLATFORM_SOURCES}
J
jp9000 已提交
199
	${obs_libffutil_SOURCES}
J
jp9000 已提交
200
	../deps/json11/json11.cpp
B
BtbN 已提交
201
	obs-app.cpp
202
	window-dock.cpp
J
jp9000 已提交
203
	api-interface.cpp
B
BtbN 已提交
204
	window-basic-main.cpp
J
jp9000 已提交
205
	window-basic-stats.cpp
J
jp9000 已提交
206
	window-basic-filters.cpp
J
jp9000 已提交
207
	window-basic-settings.cpp
J
John Bradley 已提交
208
	window-basic-interaction.cpp
209
	window-basic-properties.cpp
J
jp9000 已提交
210
	window-basic-auto-config.cpp
J
jp9000 已提交
211
	window-basic-main-outputs.cpp
J
jp9000 已提交
212
	window-basic-source-select.cpp
213
	window-basic-settings-stream.cpp
J
jp9000 已提交
214
	window-basic-auto-config-test.cpp
J
jp9000 已提交
215
	window-basic-main-scene-collections.cpp
216
	window-basic-main-transitions.cpp
J
jp9000 已提交
217
	window-basic-main-dropfiles.cpp
J
jp9000 已提交
218
	window-basic-main-profiles.cpp
219
	window-basic-main-browser.cpp
J
jp9000 已提交
220
	window-basic-status-bar.cpp
J
jp9000 已提交
221
	window-basic-adv-audio.cpp
J
jp9000 已提交
222 223
	window-basic-transform.cpp
	window-basic-preview.cpp
C
cg2121 已提交
224
	window-basic-about.cpp
B
BtbN 已提交
225
	window-namedialog.cpp
J
jp9000 已提交
226
	window-log-reply.cpp
J
jp9000 已提交
227
	window-projector.cpp
P
Palana 已提交
228
	window-remux.cpp
J
jp9000 已提交
229
	auth-base.cpp
J
jp9000 已提交
230
	source-tree.cpp
231
	properties-view.cpp
232
	focus-list.cpp
233
	menu-button.cpp
J
jp9000 已提交
234
	double-slider.cpp
A
akapar 已提交
235
	slider-ignorewheel.cpp
J
jp9000 已提交
236 237
	combobox-ignorewheel.cpp
	spinbox-ignorewheel.cpp
J
jp9000 已提交
238
	record-button.cpp
239
	volume-control.cpp
J
jp9000 已提交
240
	adv-audio-control.cpp
J
jp9000 已提交
241
	item-widget-helpers.cpp
S
Shaolin 已提交
242
	horizontal-scroll-area.cpp
J
jp9000 已提交
243
	vertical-scroll-area.cpp
244
	visibility-item-widget.cpp
H
HomeWorld 已提交
245
	slider-absoluteset-style.cpp
246
	qt-display.cpp
J
jp9000 已提交
247
	crash-report.cpp
P
Palana 已提交
248
	hotkey-edit.cpp
P
Palana 已提交
249
	source-label.cpp
J
jp9000 已提交
250
	remote-text.cpp
251
	audio-encoders.cpp
B
BtbN 已提交
252 253 254
	qt-wrappers.cpp)

set(obs_HEADERS
J
jp9000 已提交
255
	${obs_PLATFORM_HEADERS}
J
jp9000 已提交
256
	${obs_libffutil_HEADERS}
J
jp9000 已提交
257
	../deps/json11/json11.hpp
B
BtbN 已提交
258 259
	obs-app.hpp
	platform.hpp
260
	window-dock.hpp
261
	window-main.hpp
B
BtbN 已提交
262
	window-basic-main.hpp
J
jp9000 已提交
263
	window-basic-stats.hpp
J
jp9000 已提交
264
	window-basic-filters.hpp
J
jp9000 已提交
265
	window-basic-settings.hpp
J
John Bradley 已提交
266
	window-basic-interaction.hpp
267
	window-basic-properties.hpp
J
jp9000 已提交
268
	window-basic-auto-config.hpp
J
jp9000 已提交
269
	window-basic-main-outputs.hpp
J
jp9000 已提交
270
	window-basic-source-select.hpp
C
cg2121 已提交
271
	window-basic-about.hpp
J
jp9000 已提交
272
	window-basic-status-bar.hpp
J
jp9000 已提交
273
	window-basic-adv-audio.hpp
J
jp9000 已提交
274 275
	window-basic-transform.hpp
	window-basic-preview.hpp
B
BtbN 已提交
276
	window-namedialog.hpp
J
jp9000 已提交
277
	window-log-reply.hpp
J
jp9000 已提交
278
	window-projector.hpp
P
Palana 已提交
279
	window-remux.hpp
J
jp9000 已提交
280
	auth-base.hpp
J
jp9000 已提交
281
	source-tree.hpp
282
	properties-view.hpp
283
	properties-view.moc.hpp
284
	display-helpers.hpp
285
	balance-slider.hpp
J
jp9000 已提交
286
	double-slider.hpp
A
akapar 已提交
287
	slider-ignorewheel.hpp
J
jp9000 已提交
288 289
	combobox-ignorewheel.hpp
	spinbox-ignorewheel.hpp
290
	focus-list.hpp
291
	menu-button.hpp
J
jp9000 已提交
292
	mute-checkbox.hpp
J
jp9000 已提交
293
	record-button.hpp
294
	volume-control.hpp
J
jp9000 已提交
295
	adv-audio-control.hpp
J
jp9000 已提交
296
	item-widget-helpers.hpp
J
jp9000 已提交
297
	visibility-checkbox.hpp
298
	locked-checkbox.hpp
S
Shaolin 已提交
299
	horizontal-scroll-area.hpp
J
jp9000 已提交
300
	expand-checkbox.hpp
J
jp9000 已提交
301
	vertical-scroll-area.hpp
302
	visibility-item-widget.hpp
H
HomeWorld 已提交
303
	slider-absoluteset-style.hpp
B
BtbN 已提交
304
	qt-display.hpp
J
jp9000 已提交
305
	crash-report.hpp
P
Palana 已提交
306
	hotkey-edit.hpp
P
Palana 已提交
307
	source-label.hpp
J
jp9000 已提交
308
	remote-text.hpp
309
	audio-encoders.hpp
C
cg2121 已提交
310 311
	qt-wrappers.hpp
	clickable-label.hpp)
B
BtbN 已提交
312 313 314

set(obs_UI
	forms/NameDialog.ui
J
jp9000 已提交
315 316 317 318
	forms/AutoConfigStartPage.ui
	forms/AutoConfigVideoPage.ui
	forms/AutoConfigStreamPage.ui
	forms/AutoConfigTestPage.ui
319
	forms/ColorSelect.ui
J
jp9000 已提交
320
	forms/OBSLogReply.ui
B
BtbN 已提交
321
	forms/OBSBasic.ui
J
jp9000 已提交
322
	forms/OBSBasicTransform.ui
J
jp9000 已提交
323
	forms/OBSBasicFilters.ui
324
	forms/OBSBasicSettings.ui
J
jp9000 已提交
325
	forms/OBSBasicSourceSelect.ui
J
John Bradley 已提交
326
	forms/OBSBasicInteraction.ui
J
jp9000 已提交
327
	forms/OBSUpdate.ui
C
cg2121 已提交
328 329
	forms/OBSRemux.ui
	forms/OBSAbout.ui)
B
BtbN 已提交
330 331 332 333 334 335 336 337 338 339 340 341

set(obs_QRC
	forms/obs.qrc)

qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})

add_executable(obs WIN32
	${obs_SOURCES}
	${obs_HEADERS}
	${obs_UI_HEADERS}
	${obs_QRC_SOURCES})
342 343 344 345 346 347 348 349 350 351 352 353 354

if(WIN32)
	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
		set(_output_suffix "64")
	else()
		set(_output_suffix "32")
	endif()

	set_target_properties(obs
		PROPERTIES
			OUTPUT_NAME "obs${_output_suffix}")
endif()

B
BtbN 已提交
355 356
target_link_libraries(obs
	libobs
B
BtbN 已提交
357
	Qt5::Widgets
C
Clayton Groeneveld 已提交
358
	Qt5::Svg
J
jp9000 已提交
359
	obs-frontend-api
J
jp9000 已提交
360
	${FFMPEG_LIBRARIES}
J
jp9000 已提交
361
	${LIBCURL_LIBRARIES}
B
BtbN 已提交
362 363
	${obs_PLATFORM_LIBRARIES})

364
if (APPLE)
C
Colin Edwards 已提交
365 366
	target_link_libraries(obs
			Qt5::MacExtras)
367
	set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
368 369 370 371
	set_property(
		TARGET obs
		APPEND
		PROPERTY INSTALL_RPATH
C
Colin Edwards 已提交
372
		"/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
373 374 375 376 377
		"/Library/Frameworks/Python.framework/Versions/3.6/lib/"
		"/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
	)
endif()

378 379
define_graphic_modules(obs)

B
BtbN 已提交
380
install_obs_core(obs)
381
install_obs_data(obs data obs-studio)
C
cg2121 已提交
382
install_obs_data_file(obs ../AUTHORS obs-studio/authors)
383 384

if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
P
Peter Eszlari 已提交
385
	add_subdirectory(xdg-data)
386
endif()
387 388

add_subdirectory(frontend-plugins)
J
jp9000 已提交
389 390 391
if(WIN32)
	add_subdirectory(win-update/updater)
endif()