mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-13 11:56:35 +00:00
8a0ccb6d3f
Without this, the plugin cannot be loaded in a devenv because the RPATH is not added to the plugin dylib. This RPATH will be stripped on install, which is what we want. When deploying apps, people are supposed to use `macdeployqt` to create an AppBundle that bundles Qt for you and sets the RPATHs correctly to point to that bundled Qt. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4776>
175 lines
5.5 KiB
Meson
175 lines
5.5 KiB
Meson
sources = [
|
|
'gstplugin.cc',
|
|
'gstqtelement.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')
|
|
qt5_method = get_option('qt-method')
|
|
|
|
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'],
|
|
method: qt5_method, required: qt5_option, static: host_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'], method: qt5_method, required : false)
|
|
if qt5x11extras.found()
|
|
optional_deps += [qt5x11extras, gstglx11_dep]
|
|
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']
|
|
optional_deps += gstglegl_dep
|
|
have_qt_windowing = true
|
|
if have_qpa_include
|
|
# Wayland windowing
|
|
if gst_gl_have_window_wayland
|
|
# FIXME: automagic
|
|
qt5waylandextras = dependency('qt5', modules : ['WaylandClient'], method: qt5_method, required : false)
|
|
if qt5waylandextras.found()
|
|
optional_deps += [qt5waylandextras, gstglwayland_dep]
|
|
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'], method: qt5_method, 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'], method: qt5_method, 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
|
|
# rpath is needed to be able to load the plugin on macOS inside the devenv
|
|
qmlgl_kwargs = {}
|
|
if host_system == 'darwin'
|
|
fs = import('fs')
|
|
qt_bindir = fs.parent(find_program('qmake').full_path())
|
|
qt_libdir = fs.parent(qt_bindir) / 'lib'
|
|
qmlgl_kwargs += {'build_rpath': qt_libdir}
|
|
endif
|
|
|
|
# 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 : [gst_dep, gstvideo_dep, gstgl_dep, gstglproto_dep, qt5qml_dep, optional_deps],
|
|
override_options : ['cpp_std=c++11'],
|
|
kwargs: qmlgl_kwargs,
|
|
install: true,
|
|
install_dir : plugins_install_dir)
|
|
plugins += [gstqmlgl]
|
|
endif
|