CMakeLists.txt 7.0 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()

J
jp9000 已提交
10 11 12 13 14 15
add_subdirectory(obs-frontend-api)

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

project(obs)

J
jp9000 已提交
16 17
set(ENABLE_WIN_UPDATER FALSE CACHE BOOL "Enable the windows updater")

18 19 20 21 22
if(DEFINED QTDIR${_lib_suffix})
	list(APPEND CMAKE_PREFIX_PATH "${QTDIR${_lib_suffix}}")
elseif(DEFINED QTDIR)
	list(APPEND CMAKE_PREFIX_PATH "${QTDIR}")
elseif(DEFINED ENV{QTDIR${_lib_suffix}})
B
BtbN 已提交
23 24 25 26 27 28 29 30
	list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
elseif(DEFINED ENV{QTDIR})
	list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
endif()

set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(CMAKE_AUTOMOC TRUE)

31 32 33 34 35 36 37
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
	set(_lib_suffix 64)
else()
	set(_lib_suffix 32)
endif()

find_package(Qt5Widgets ${FIND_MODE})
J
jp9000 已提交
38
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
39

C
Colin Edwards 已提交
40 41 42 43
if(APPLE)
	find_package(Qt5MacExtras REQUIRED)
endif(APPLE)

J
jp9000 已提交
44
if(NOT Qt5Widgets_FOUND)
45 46 47 48 49 50 51 52
	if (ENABLE_UI)
		message(FATAL_ERROR "Failed to find Qt5")
	else()
		message(STATUS "Qt5 not found - UI disabled")
		return()
	endif()
endif()

J
jp9000 已提交
53 54

include_directories(${FFMPEG_INCLUDE_DIRS})
J
jp9000 已提交
55
include_directories(SYSTEM "obs-frontend-api")
56
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
J
jp9000 已提交
57
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
B
BtbN 已提交
58

J
jp9000 已提交
59 60 61 62
find_package(Libcurl REQUIRED)
include_directories(${LIBCURL_INCLUDE_DIRS})
add_definitions(${LIBCURL_DEFINITIONS})

B
BtbN 已提交
63
if(WIN32)
J
jp9000 已提交
64
	include_directories(${OBS_JANSSON_INCLUDE_DIRS})
65
	include_directories(${BLAKE2_INCLUDE_DIR})
J
jp9000 已提交
66

B
BtbN 已提交
67
	set(obs_PLATFORM_SOURCES
J
jp9000 已提交
68
		platform-windows.cpp
J
jp9000 已提交
69 70 71
		win-update/update-window.cpp
		win-update/win-update.cpp
		win-update/win-update-helpers.cpp
J
jp9000 已提交
72
		obs.rc)
J
jp9000 已提交
73 74 75 76 77 78
	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
79
		blake2
J
jp9000 已提交
80 81 82 83 84
		${OBS_JANSSON_IMPORT})

	if(ENABLE_WIN_UPDATER)
		add_definitions(-DENABLE_WIN_UPDATER)
	endif()
B
BtbN 已提交
85 86 87
elseif(APPLE)
	set(obs_PLATFORM_SOURCES
		platform-osx.mm)
88 89

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

B
BtbN 已提交
92
	add_definitions(-fobjc-arc)
P
Palana 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106

	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 已提交
107
elseif(UNIX)
108 109
        find_package(Qt5X11Extras REQUIRED)

B
BtbN 已提交
110 111 112
	set(obs_PLATFORM_SOURCES
		platform-x11.cpp)

113
        set(obs_PLATFORM_LIBRARIES
B
BtbN 已提交
114
                Qt5::X11Extras)
B
BtbN 已提交
115 116
endif()

J
jp9000 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130
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 已提交
131 132
set(obs_SOURCES
	${obs_PLATFORM_SOURCES}
J
jp9000 已提交
133
	${obs_libffutil_SOURCES}
B
BtbN 已提交
134
	obs-app.cpp
J
jp9000 已提交
135
	api-interface.cpp
B
BtbN 已提交
136
	window-basic-main.cpp
J
jp9000 已提交
137
	window-basic-stats.cpp
J
jp9000 已提交
138
	window-basic-filters.cpp
J
jp9000 已提交
139
	window-basic-settings.cpp
J
John Bradley 已提交
140
	window-basic-interaction.cpp
141
	window-basic-properties.cpp
J
jp9000 已提交
142
	window-basic-auto-config.cpp
J
jp9000 已提交
143
	window-basic-main-outputs.cpp
J
jp9000 已提交
144
	window-basic-source-select.cpp
J
jp9000 已提交
145
	window-basic-auto-config-test.cpp
J
jp9000 已提交
146
	window-basic-main-scene-collections.cpp
147
	window-basic-main-transitions.cpp
J
jp9000 已提交
148
	window-basic-main-dropfiles.cpp
J
jp9000 已提交
149
	window-basic-main-profiles.cpp
J
jp9000 已提交
150
	window-license-agreement.cpp
J
jp9000 已提交
151
	window-basic-status-bar.cpp
J
jp9000 已提交
152
	window-basic-adv-audio.cpp
J
jp9000 已提交
153 154
	window-basic-transform.cpp
	window-basic-preview.cpp
B
BtbN 已提交
155
	window-namedialog.cpp
J
jp9000 已提交
156
	window-log-reply.cpp
J
jp9000 已提交
157
	window-projector.cpp
P
Palana 已提交
158
	window-remux.cpp
159
	properties-view.cpp
160
	focus-list.cpp
161
	menu-button.cpp
J
jp9000 已提交
162
	double-slider.cpp
163
	volume-control.cpp
J
jp9000 已提交
164
	adv-audio-control.cpp
J
jp9000 已提交
165
	item-widget-helpers.cpp
J
jp9000 已提交
166
	visibility-checkbox.cpp
167
	locked-checkbox.cpp
J
jp9000 已提交
168
	vertical-scroll-area.cpp
169
	visibility-item-widget.cpp
H
HomeWorld 已提交
170
	slider-absoluteset-style.cpp
171
	source-list-widget.cpp
172
	qt-display.cpp
J
jp9000 已提交
173
	crash-report.cpp
P
Palana 已提交
174
	hotkey-edit.cpp
P
Palana 已提交
175
	source-label.cpp
J
jp9000 已提交
176
	remote-text.cpp
177
	audio-encoders.cpp
B
BtbN 已提交
178 179 180
	qt-wrappers.cpp)

set(obs_HEADERS
J
jp9000 已提交
181
	${obs_PLATFORM_HEADERS}
J
jp9000 已提交
182
	${obs_libffutil_HEADERS}
B
BtbN 已提交
183 184
	obs-app.hpp
	platform.hpp
185
	window-main.hpp
B
BtbN 已提交
186
	window-basic-main.hpp
J
jp9000 已提交
187
	window-basic-stats.hpp
J
jp9000 已提交
188
	window-basic-filters.hpp
J
jp9000 已提交
189
	window-basic-settings.hpp
J
John Bradley 已提交
190
	window-basic-interaction.hpp
191
	window-basic-properties.hpp
J
jp9000 已提交
192
	window-basic-auto-config.hpp
J
jp9000 已提交
193
	window-basic-main-outputs.hpp
J
jp9000 已提交
194
	window-basic-source-select.hpp
J
jp9000 已提交
195
	window-license-agreement.hpp
J
jp9000 已提交
196
	window-basic-status-bar.hpp
J
jp9000 已提交
197
	window-basic-adv-audio.hpp
J
jp9000 已提交
198 199
	window-basic-transform.hpp
	window-basic-preview.hpp
B
BtbN 已提交
200
	window-namedialog.hpp
J
jp9000 已提交
201
	window-log-reply.hpp
J
jp9000 已提交
202
	window-projector.hpp
P
Palana 已提交
203
	window-remux.hpp
204
	properties-view.hpp
205
	properties-view.moc.hpp
206
	display-helpers.hpp
J
jp9000 已提交
207
	double-slider.hpp
208
	focus-list.hpp
209
	menu-button.hpp
J
jp9000 已提交
210
	mute-checkbox.hpp
211
	volume-control.hpp
J
jp9000 已提交
212
	adv-audio-control.hpp
J
jp9000 已提交
213
	item-widget-helpers.hpp
J
jp9000 已提交
214
	visibility-checkbox.hpp
215
	locked-checkbox.hpp
J
jp9000 已提交
216
	vertical-scroll-area.hpp
217
	visibility-item-widget.hpp
H
HomeWorld 已提交
218
	slider-absoluteset-style.hpp
219
	source-list-widget.hpp
B
BtbN 已提交
220
	qt-display.hpp
J
jp9000 已提交
221
	crash-report.hpp
P
Palana 已提交
222
	hotkey-edit.hpp
P
Palana 已提交
223
	source-label.hpp
J
jp9000 已提交
224
	remote-text.hpp
225
	audio-encoders.hpp
B
BtbN 已提交
226 227 228 229
	qt-wrappers.hpp)

set(obs_UI
	forms/NameDialog.ui
J
jp9000 已提交
230 231 232 233
	forms/AutoConfigStartPage.ui
	forms/AutoConfigVideoPage.ui
	forms/AutoConfigStreamPage.ui
	forms/AutoConfigTestPage.ui
J
jp9000 已提交
234
	forms/OBSLicenseAgreement.ui
J
jp9000 已提交
235
	forms/OBSLogReply.ui
B
BtbN 已提交
236
	forms/OBSBasic.ui
J
jp9000 已提交
237
	forms/OBSBasicTransform.ui
J
jp9000 已提交
238
	forms/OBSBasicFilters.ui
239
	forms/OBSBasicSettings.ui
J
jp9000 已提交
240
	forms/OBSBasicSourceSelect.ui
J
John Bradley 已提交
241
	forms/OBSBasicInteraction.ui
J
jp9000 已提交
242
	forms/OBSUpdate.ui
P
Palana 已提交
243
	forms/OBSRemux.ui)
B
BtbN 已提交
244 245 246 247 248 249 250 251 252 253 254 255

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})
256 257 258 259 260 261 262 263 264 265 266 267 268

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 已提交
269 270
target_link_libraries(obs
	libobs
B
BtbN 已提交
271
	Qt5::Widgets
J
jp9000 已提交
272
	obs-frontend-api
J
jp9000 已提交
273
	${FFMPEG_LIBRARIES}
J
jp9000 已提交
274
	${LIBCURL_LIBRARIES}
B
BtbN 已提交
275 276
	${obs_PLATFORM_LIBRARIES})

277
if (APPLE)
C
Colin Edwards 已提交
278 279
	target_link_libraries(obs
			Qt5::MacExtras)
280
	set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
281 282 283 284
	set_property(
		TARGET obs
		APPEND
		PROPERTY INSTALL_RPATH
C
Colin Edwards 已提交
285
		"/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
286 287 288 289 290
		"/Library/Frameworks/Python.framework/Versions/3.6/lib/"
		"/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
	)
endif()

291 292
define_graphic_modules(obs)

B
BtbN 已提交
293
install_obs_core(obs)
294
install_obs_data(obs data obs-studio)
295 296

if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
297
	install(FILES dist/obs.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
298
	install(FILES forms/images/obs.png
299
		DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/256x256/apps)
300
endif()
301 302

add_subdirectory(frontend-plugins)
J
jp9000 已提交
303 304 305
if(WIN32)
	add_subdirectory(win-update/updater)
endif()