mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-12 11:26:39 +00:00
099712338f
Instead of querying the Qt include path from the dependency or from qmake, rely on the qt5qml_dep to set the include path to QtGui correctly, and look for the header inside the private includedir. Then we can use that path to include the header directly. Reported in https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/780#note_548092 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/640>
165 lines
5.1 KiB
Meson
165 lines
5.1 KiB
Meson
sources = [
|
|
'gstplugin.cc',
|
|
'gstqsgtexture.cc',
|
|
'gstqtglutility.cc',
|
|
'gstqtoverlay.cc',
|
|
'gstqtsink.cc',
|
|
'gstqtsrc.cc',
|
|
'qtglrenderer.cc',
|
|
'qtitem.cc',
|
|
'qtwindow.cc',
|
|
]
|
|
|
|
moc_headers = [
|
|
'qtitem.h',
|
|
'qtwindow.h',
|
|
'gstqsgtexture.h',
|
|
'qtglrenderer.h',
|
|
]
|
|
|
|
# Define a not-found dependency so this variable is always defined when we're
|
|
# deciding whether to build the qt5 examples
|
|
qt5qml_dep = dependency('', required: false)
|
|
qt5_option = get_option('qt5')
|
|
|
|
if qt5_option.disabled()
|
|
subdir_done()
|
|
endif
|
|
|
|
if not have_gstgl
|
|
if qt5_option.enabled()
|
|
error('qt5 qmlglsink plugin is enabled, but gstreamer-gl-1.0 was not found')
|
|
endif
|
|
subdir_done()
|
|
endif
|
|
|
|
if not add_languages('cpp', native: false, required: qt5_option)
|
|
subdir_done()
|
|
endif
|
|
|
|
qt5_mod = import('qt5')
|
|
qt5qml_dep = dependency('qt5', modules : ['Core', 'Gui', 'Qml', 'Quick'],
|
|
required: qt5_option, static: host_machine.system() == 'ios')
|
|
|
|
# On Linux, distros often have the Qt5 pkg-config files and moc in separate
|
|
# packages, so the user may not have both installed. Check for moc and ensure
|
|
# that it's installed.
|
|
# We don't do this check on other OSes because they need to be able to simply
|
|
# point the `QMAKE` env var to `qmake` to build against a particular Qt5.
|
|
if host_system == 'linux' and not meson.is_cross_build()
|
|
moc = find_program('moc-qt5', 'moc', required : qt5_option)
|
|
else
|
|
# We only check if `moc` was found, and then discard it, so we can fake it.
|
|
# This is also a good unit test of the fact that we *don't* use it.
|
|
moc = declare_dependency()
|
|
endif
|
|
|
|
if not qt5qml_dep.found() or not moc.found()
|
|
subdir_done()
|
|
endif
|
|
|
|
optional_deps = []
|
|
qt_defines = []
|
|
have_qpa_include = false
|
|
have_qt_windowing = false
|
|
|
|
# Look for the QPA platform native interface header
|
|
qpa_header_path = join_paths(qt5qml_dep.version(), 'QtGui')
|
|
qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h')
|
|
if cxx.has_header(qpa_header, dependencies : qt5qml_dep)
|
|
qt_defines += '-DHAVE_QT_QPA_HEADER'
|
|
qt_defines += '-DQT_QPA_HEADER=' + '<@0@>'.format(qpa_header)
|
|
have_qpa_include = true
|
|
message('Found QtGui QPA header in ' + qpa_header_path)
|
|
endif
|
|
|
|
# Try to come up with all the platform/winsys combinations that will work
|
|
|
|
if gst_gl_have_window_x11 and gst_gl_have_platform_glx
|
|
# FIXME: automagic
|
|
qt5x11extras = dependency('qt5', modules : ['X11Extras'], required : false)
|
|
if qt5x11extras.found()
|
|
optional_deps += qt5x11extras
|
|
qt_defines += ['-DHAVE_QT_X11']
|
|
have_qt_windowing = true
|
|
endif
|
|
endif
|
|
|
|
if gst_gl_have_platform_egl
|
|
# Embedded linux (e.g. i.MX6) with or without windowing support
|
|
qt_defines += ['-DHAVE_QT_EGLFS']
|
|
egl_dep = dependency('egl', required : false)
|
|
optional_deps += egl_dep
|
|
have_qt_windowing = true
|
|
if have_qpa_include
|
|
# Wayland windowing
|
|
if gst_gl_have_window_wayland
|
|
# FIXME: automagic
|
|
qt5waylandextras = dependency('qt5', modules : ['WaylandClient'], required : false)
|
|
if qt5waylandextras.found()
|
|
optional_deps += qt5waylandextras
|
|
qt_defines += ['-DHAVE_QT_WAYLAND']
|
|
have_qt_windowing = true
|
|
endif
|
|
endif
|
|
# Android windowing
|
|
if gst_gl_have_window_android
|
|
# FIXME: automagic
|
|
qt5androidextras = dependency('qt5', modules : ['AndroidExtras'], required : false)
|
|
# for gl functions in QtGui/qopenglfunctions.h
|
|
# FIXME: automagic
|
|
glesv2_dep = cc.find_library('GLESv2', required : false)
|
|
if glesv2_dep.found() and qt5androidextras.found()
|
|
optional_deps += [qt5androidextras, glesv2_dep]
|
|
qt_defines += ['-DHAVE_QT_ANDROID']
|
|
have_qt_windowing = true
|
|
# Needed for C++11 support in Cerbero. People building with Android
|
|
# in some other way need to add the necessary bits themselves.
|
|
optional_deps += dependency('gnustl', required : false)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
if gst_gl_have_platform_wgl and gst_gl_have_window_win32
|
|
# for wglMakeCurrent()
|
|
# FIXME: automagic
|
|
opengl32_dep = cc.find_library('opengl32', required : false)
|
|
if opengl32_dep.found()
|
|
qt_defines += ['-DHAVE_QT_WIN32']
|
|
optional_deps += opengl32_dep
|
|
have_qt_windowing = true
|
|
endif
|
|
endif
|
|
|
|
if gst_gl_have_window_cocoa and gst_gl_have_platform_cgl
|
|
# FIXME: automagic
|
|
qt5macextras = dependency('qt5', modules : ['MacExtras'], required : false)
|
|
if qt5macextras.found()
|
|
qt_defines += ['-DHAVE_QT_MAC']
|
|
optional_deps += qt5macextras
|
|
have_qt_windowing = true
|
|
endif
|
|
endif
|
|
|
|
if gst_gl_have_window_eagl and gst_gl_have_platform_eagl
|
|
if host_machine.system() == 'ios'
|
|
qt_defines += ['-DHAVE_QT_IOS']
|
|
have_qt_windowing = true
|
|
endif
|
|
endif
|
|
|
|
if have_qt_windowing
|
|
# Build it!
|
|
moc_files = qt5_mod.preprocess(moc_headers : moc_headers)
|
|
gstqmlgl = library('gstqmlgl', sources, moc_files,
|
|
cpp_args : gst_plugins_good_args + qt_defines,
|
|
link_args : noseh_link_args,
|
|
include_directories: [configinc, libsinc],
|
|
dependencies : [glib_deps, gst_dep, gstvideo_dep, gstgl_dep, qt5qml_dep, optional_deps],
|
|
override_options : ['cpp_std=c++11'],
|
|
install: true,
|
|
install_dir : plugins_install_dir)
|
|
pkgconfig.generate(gstqmlgl, install_dir : plugins_pkgconfig_install_dir)
|
|
plugins += [gstqmlgl]
|
|
endif
|