After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 796879 - gst-plugins-good fails to build on ubuntu arm* (regression in fix for bug 796821)
gst-plugins-good fails to build on ubuntu arm* (regression in fix for bug 796...
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
1.14.2
Other Linux
: Normal blocker
: 1.14.3
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2018-07-27 06:21 UTC by Gianfranco Costamagna
Modified: 2018-08-01 02:14 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Gianfranco Costamagna 2018-07-27 06:21:24 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
Comment 1 Sebastian Dröge (slomo) 2018-07-27 07:34:42 UTC
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
Comment 2 Gianfranco Costamagna 2018-07-27 09:10:31 UTC
Ubuntu has qt5 with GLES enabled in arm64 and armhf, or something like that...
Comment 3 Matthew Waters (ystreet00) 2018-07-27 09:39:54 UTC
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.
Comment 4 Sebastian Dröge (slomo) 2018-07-27 09:45:20 UTC
(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 :)
Comment 5 Gianfranco Costamagna 2018-07-30 15:01:04 UTC
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
Comment 6 Gianfranco Costamagna 2018-07-30 15:04:34 UTC
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.
Comment 7 Matthew Waters (ystreet00) 2018-07-31 01:02:27 UTC
Could you try adding a '#include <gst/gl/gstglfuncs.h>' to -good/ext/qt/gstqtgl.h somewhere before the '#define GLsync gst_qt_GLsync'?
Comment 8 Gianfranco Costamagna 2018-07-31 10:02:13 UTC
it works, thanks! it fails testsuite, but probably this is unrelated!
(new gcc-8 hit ubuntu few days ago)
FAIL: elements/alpha
Comment 9 Gianfranco Costamagna 2018-07-31 12:16:58 UTC
it works, the failing test is unrelated!
Comment 10 Matthew Waters (ystreet00) 2018-08-01 02:14:58 UTC
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