GNOME Bugzilla – Bug 796879
gst-plugins-good fails to build on ubuntu arm* (regression in fix for bug 796821)
Last modified: 2018-08-01 02:14:58 UTC
As said in bug: 796821 the fix regressed our builds, and reverting that one line change, made the whole gstreamer stack build again on arm*. I don't have a patch, if not reverting that chunk to something else see build logs and errors: https://launchpad.net/ubuntu/+source/gst-plugins-good1.0/1.14.2-1ubuntu1/+build/15163587 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/arm-linux-gnueabihf/gstreamer-1.0/include -I/usr/include/libdrm -I/usr/include/gstreamer-1.0 -I/usr/include/orc-0.4 -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I../../gst-libs -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -DGST_USE_UNSTABLE_API -fno-strict-aliasing -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -Wall -Wmissing-declarations -Wredundant-decls -Wwrite-strings -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar -g -fvisibility=hidden -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/include/arm-linux-gnueabihf/qt5/QtQuick -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtGui -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtQml -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtNetwork -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtCore -I/usr/include/arm-linux-gnueabihf/qt5 -DQT_X11EXTRAS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/include/arm-linux-gnueabihf/qt5/QtX11Extras -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtGui -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtCore -I/usr/include/arm-linux-gnueabihf/qt5 -std=c++11 -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wno-error -c gstplugin.cc -fPIC -DPIC -o .libs/libgstqmlgl_la-gstplugin.o In file included from gstqtsink.cc:33: /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:17: error: expected identifier before ‘*’ token ret (GSTGLAPI *name) args; ^ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:27:1: note: in expansion of macro ‘GST_GL_EXT_FUNCTION’ GST_GL_EXT_FUNCTION (GLsync, FenceSync, ^~~~~~~~~~~~~~~~~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:29:39: error: ISO C++ forbids declaration of ‘GLsync’ with no type [-fpermissive] GLbitfield flags)) ^ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:29:39: error: ‘GLsync’ declared as function returning a function GLbitfield flags)) ^ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:31:23: error: ‘GLsync’ has not been declared (GLsync sync)) ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:33:23: error: ‘GLsync’ has not been declared (GLsync sync)) ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:35:23: error: ‘GLsync’ has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:39:23: error: ‘GLsync’ has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:43:23: error: ‘GLsync’ has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro ‘GST_GL_EXT_FUNCTION’ ret (GSTGLAPI *name) args; ^~~~ gstqtsink.cc: In function ‘gboolean gst_qt_sink_propose_allocation(GstBaseSink*, GstQuery*)’: gstqtsink.cc:472:36: error: ‘GstGLFuncs’ {aka ‘struct _GstGLFuncs’} has no member named ‘FenceSync’; did you mean ‘DeleteSync’? if (qt_sink->context->gl_vtable->FenceSync) ^~~~~~~~~ DeleteSync
I'm not sure why this happens on Ubuntu but not on Debian: https://buildd.debian.org/status/package.php?p=gst-plugins-good1.0&suite=unstable
Ubuntu has qt5 with GLES enabled in arm64 and armhf, or something like that...
That shouldn't matter. Ubuntu also only builds libgstgl with GLES2/EGL support on arm as well. This needs proper debugging as to why this is happening. Double check that the gstglconfig.h value GST_GL_HAVE_GLSYNC matches what's in the GLES2/gl2.h and/or GLES3/gl3.h and/or GLES2/gl2ext.h and/or GLES3/gl3.h headers that are included. A 'g++ -E' pass might be needed to determine where and what could typedef GLSync but isn't.
(In reply to Gianfranco Costamagna from comment #2) > Ubuntu has qt5 with GLES enabled in arm64 and armhf, or something like > that... So does Debian :)
https://paste.ubuntu.com/p/dtz3mmxGSG/ this is the preprocessed source, leading to the error: /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:17: error: expected identifier before '*' token ret (GSTGLAPI *name) args; ^ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:27:1: note: in expansion of macro 'GST_GL_EXT_FUNCTION' GST_GL_EXT_FUNCTION (GLsync, FenceSync, ^~~~~~~~~~~~~~~~~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:29:39: error: ISO C++ forbids declaration of 'GLsync' with no type [-fpermissive] GLbitfield flags)) ^ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:29:39: error: 'GLsync' declared as function returning a function GLbitfield flags)) ^ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:31:23: error: 'GLsync' has not been declared (GLsync sync)) ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:33:23: error: 'GLsync' has not been declared (GLsync sync)) ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:35:23: error: 'GLsync' has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:39:23: error: 'GLsync' has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:43:23: error: 'GLsync' has not been declared (GLsync sync, ^~~~~~ /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ gstqtsink.cc: In function 'gboolean gst_qt_sink_propose_allocation(GstBaseSink*, GstQuery*)': gstqtsink.cc:472:36: error: 'GstGLFuncs' {aka 'struct _GstGLFuncs'} has no member named 'FenceSync'; did you mean 'DeleteSync'? if (qt_sink->context->gl_vtable->FenceSync) ^~~~~~~~~ DeleteSync
btw removing the line #define GLsync gst_qt_GLsync from this block (gstqtgl.h) #if defined(QT_OPENGL_ES_2) #define GLsync gst_qt_GLsync #include <QOpenGLContext> #include <QOpenGLFunctions> #undef GLsync #endif /* defined(QT_OPENGL_ES_2) */ "fixes" the issue.
Could you try adding a '#include <gst/gl/gstglfuncs.h>' to -good/ext/qt/gstqtgl.h somewhere before the '#define GLsync gst_qt_GLsync'?
it works, thanks! it fails testsuite, but probably this is unrelated! (new gcc-8 hit ubuntu few days ago) FAIL: elements/alpha
it works, the failing test is unrelated!
commit 5686a6b6091b49054d3d227752d0c8d87102a951 (HEAD -> master) Author: Matthew Waters <matthew@centricular.com> Date: Wed Aug 1 12:06:23 2018 +1000 qt: Ensure GL headers are included Otherwise there may be no valid typedef of GLsync. ... /usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION' ret (GSTGLAPI *name) args; ^~~~ /usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:33:23: error: 'GLsync' has not been declared (GLsync sync)) ^~~~~~ ... https://bugzilla.gnome.org/show_bug.cgi?id=796879 and 1.14 354e5d6501e66d097084425292a7bbab015ec022