mbox series

[v1,0/3] qt5: fix build issue with mesa w/out xcb

Message ID 20180212042524.28675-1-gael.portay@savoirfairelinux.com
Headers show
Series qt5: fix build issue with mesa w/out xcb | expand

Message

Gaël PORTAY Feb. 12, 2018, 4:25 a.m. UTC
Hi all,

Julien Corjon and I have noticed a build issue with qtmultimedia,
qtwayland and qtwebkit modules when using mesa3d (as EGL backend)
without using XCB. When BR2_PACKAGE_LIBXCB is set the issue is gone.
Julien has opened an issue in Qt tracker[1].

The mesa's EGL/eglplatform.h header includes X11 headers unless the
macro MESA_EGL_NO_X11_HEADERS is defined[2].

	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/eglplatform.h:118:22: fatal error: X11/Xlib.h: No such file or directory
	 #include <X11/Xlib.h>
	                      ^
	compilation terminated.

The workaround tells qmake to pass the cflag MESA_EGL_NO_X11_HEADERS to
make that prevents from including the missing X headers.

This workaround is performed in the situation when mesa3d is in use as
OpenGL EGL backend and when XCB library is *not* compiled.

[1]: https://bugreports.qt.io/browse/QTBUG-66233
[2]: https://github.com/mesa3d/mesa/blob/79ee1b2ff0b85f4eeb4165d23a7943c28d3a3d93/include/EGL/eglplatform.h#L109-L125

Regards,
Gaël PORTAY (3):
  qt5webkit: fix build issue with mesa3d w/out xcb
  qt5multimedia: fix build issue with mesa3d w/out xcb
  qt5wayland: fix build issue with mesa3d w/out xcb

 package/qt5/qt5multimedia/qt5multimedia.mk | 11 ++++++++++-
 package/qt5/qt5wayland/qt5wayland.mk       |  9 +++++++++
 package/qt5/qt5webkit/qt5webkit.mk         | 11 ++++++++++-
 3 files changed, 29 insertions(+), 2 deletions(-)

Comments

Gaël PORTAY Feb. 22, 2018, 4:47 p.m. UTC | #1
All,

On Sun, Feb 11, 2018 at 11:25:21PM -0500, Gaël PORTAY wrote:
> Hi all,
> 
> Julien Corjon and I have noticed a build issue with qtmultimedia,
> qtwayland and qtwebkit modules when using mesa3d (as EGL backend)
> without using XCB. When BR2_PACKAGE_LIBXCB is set the issue is gone.
> Julien has opened an issue in Qt tracker[1].
> 
> The mesa's EGL/eglplatform.h header includes X11 headers unless the
> macro MESA_EGL_NO_X11_HEADERS is defined[2].
> 
> 	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/eglplatform.h:118:22: fatal error: X11/Xlib.h: No such file or directory
> 	 #include <X11/Xlib.h>
> 	                      ^
> 	compilation terminated.
> 
> The workaround tells qmake to pass the cflag MESA_EGL_NO_X11_HEADERS to
> make that prevents from including the missing X headers.
> 
> This workaround is performed in the situation when mesa3d is in use as
> OpenGL EGL backend and when XCB library is *not* compiled.
> 
> [1]: https://bugreports.qt.io/browse/QTBUG-66233
> [2]: https://github.com/mesa3d/mesa/blob/79ee1b2ff0b85f4eeb4165d23a7943c28d3a3d93/include/EGL/eglplatform.h#L109-L125
> 

As discussed with Thomas on the #buildroot channel:

	2018-02-16 09:01:14	kos_tom	gportay: I think the OpenGL implementation should provide those flags in its .pc file, and qt should pick them up from there

Hopefully, the MESA_EGL_NO_X11_HEADERS cflags is present the egl.pc file
from mesa3d:

	$ output/host/bin/pkg-config --cflags-only-other egl
	 -DMESA_EGL_NO_X11_HEADERS

I will work on a proper solution that will be integrated in every Qt
projects that are impacted by this issue.

I need time/help to hundersand how qmake works in order to append the
egl cflags given by pkg-config in qmake.

I almost sure that I will miss the release. So, would you agree to
accept this patch serie as a temporary workaround since it fixes a real
build issue?

> Regards,
> Gaël PORTAY (3):
>   qt5webkit: fix build issue with mesa3d w/out xcb
>   qt5multimedia: fix build issue with mesa3d w/out xcb
>   qt5wayland: fix build issue with mesa3d w/out xcb
> 
>  package/qt5/qt5multimedia/qt5multimedia.mk | 11 ++++++++++-
>  package/qt5/qt5wayland/qt5wayland.mk       |  9 +++++++++
>  package/qt5/qt5webkit/qt5webkit.mk         | 11 ++++++++++-
>  3 files changed, 29 insertions(+), 2 deletions(-)
> 
> -- 
> 2.15.1
>

Regards,
Gael
Peter Seiderer Feb. 22, 2018, 6:32 p.m. UTC | #2
Hello Gaël,

On Thu, 22 Feb 2018 11:47:38 -0500, Gaël PORTAY <gael.portay@savoirfairelinux.com> wrote:

> All,
> 
> On Sun, Feb 11, 2018 at 11:25:21PM -0500, Gaël PORTAY wrote:
> > Hi all,
> > 
> > Julien Corjon and I have noticed a build issue with qtmultimedia,
> > qtwayland and qtwebkit modules when using mesa3d (as EGL backend)
> > without using XCB. When BR2_PACKAGE_LIBXCB is set the issue is gone.
> > Julien has opened an issue in Qt tracker[1].
> > 
> > The mesa's EGL/eglplatform.h header includes X11 headers unless the
> > macro MESA_EGL_NO_X11_HEADERS is defined[2].
> > 
> > 	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/eglplatform.h:118:22: fatal error: X11/Xlib.h: No such file or directory
> > 	 #include <X11/Xlib.h>
> > 	                      ^
> > 	compilation terminated.
> > 
> > The workaround tells qmake to pass the cflag MESA_EGL_NO_X11_HEADERS to
> > make that prevents from including the missing X headers.
> > 
> > This workaround is performed in the situation when mesa3d is in use as
> > OpenGL EGL backend and when XCB library is *not* compiled.
> > 
> > [1]: https://bugreports.qt.io/browse/QTBUG-66233
> > [2]: https://github.com/mesa3d/mesa/blob/79ee1b2ff0b85f4eeb4165d23a7943c28d3a3d93/include/EGL/eglplatform.h#L109-L125
> >   
> 
> As discussed with Thomas on the #buildroot channel:
> 
> 	2018-02-16 09:01:14	kos_tom	gportay: I think the OpenGL implementation should provide those flags in its .pc file, and qt should pick them up from there
> 
> Hopefully, the MESA_EGL_NO_X11_HEADERS cflags is present the egl.pc file
> from mesa3d:
> 
> 	$ output/host/bin/pkg-config --cflags-only-other egl
> 	 -DMESA_EGL_NO_X11_HEADERS
> 
> I will work on a proper solution that will be integrated in every Qt
> projects that are impacted by this issue.
> 
> I need time/help to hundersand how qmake works in order to append the
> egl cflags given by pkg-config in qmake.
> 

Maybe take a look at the openembedded patch [1] (and upstream bug report[2]
and patch [3]) 'egl.prf: Fix build error when egl headers need platform
definition', stating:

  Gain the value through pkg-config and pass it through QMAKE_CFLAGS_EGL.

Regards,
Peter

[1] https://patchwork.openembedded.org/patch/141287/
[2] https://bugreports.qt.io/browse/QTBUG-61712
[3] https://codereview.qt-project.org/#/c/198906/

> I almost sure that I will miss the release. So, would you agree to
> accept this patch serie as a temporary workaround since it fixes a real
> build issue?
> 
> > Regards,
> > Gaël PORTAY (3):
> >   qt5webkit: fix build issue with mesa3d w/out xcb
> >   qt5multimedia: fix build issue with mesa3d w/out xcb
> >   qt5wayland: fix build issue with mesa3d w/out xcb
> > 
> >  package/qt5/qt5multimedia/qt5multimedia.mk | 11 ++++++++++-
> >  package/qt5/qt5wayland/qt5wayland.mk       |  9 +++++++++
> >  package/qt5/qt5webkit/qt5webkit.mk         | 11 ++++++++++-
> >  3 files changed, 29 insertions(+), 2 deletions(-)
> > 
> > -- 
> > 2.15.1
> >  
> 
> Regards,
> Gael
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Peter Korsgaard Feb. 27, 2018, 8:56 p.m. UTC | #3
>>>>> "Gaël" == Gaël PORTAY <gael.portay@savoirfairelinux.com> writes:

Hi,

 > As discussed with Thomas on the #buildroot channel:

 > 	2018-02-16 09:01:14	kos_tom	gportay: I think the OpenGL implementation should provide those flags in its .pc file, and qt should pick them up from there

 > Hopefully, the MESA_EGL_NO_X11_HEADERS cflags is present the egl.pc file
 > from mesa3d:

 > 	$ output/host/bin/pkg-config --cflags-only-other egl
 > 	 -DMESA_EGL_NO_X11_HEADERS

 > I will work on a proper solution that will be integrated in every Qt
 > projects that are impacted by this issue.

 > I need time/help to hundersand how qmake works in order to append the
 > egl cflags given by pkg-config in qmake.

 > I almost sure that I will miss the release. So, would you agree to
 > accept this patch serie as a temporary workaround since it fixes a real
 > build issue?

Yes, I guess that is the best solution for 2018.02. I'll apply the 3 patches.
Peter Korsgaard Feb. 27, 2018, 9 p.m. UTC | #4
>>>>> "Gaël" == Gaël PORTAY <gael.portay@savoirfairelinux.com> writes:

 > The mesa's EGL/eglplatform.h header includes X11 headers unless the flag
 > MESA_EGL_NO_X11_HEADERS is defined[1].

 > A build issue happens when mesa3d is selected as then OpenGL EGL backend
 > but the XCB library is not selected.

 > This commit tells qmake to pass the cflag MESA_EGL_NO_X11_HEADERS to
 > make and prevent from including the missing X headers.

 > The issue QTBUG-66233 is opened in the Qt tracker[1].

 > Fixes:

 > 	In file included from /home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/egl.h:39:0,
 > 	                 from platform/graphics/opengl/Extensions3DOpenGLES.cpp:33:
 > 	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/eglplatform.h:118:22: fatal error: X11/Xlib.h: No such file or directory
 > 	 #include <X11/Xlib.h>
 > 	                      ^
 > 	compilation terminated.
 > 	Makefile.WebCore.Target:93596: recipe for target '.obj/platform/graphics/opengl/Extensions3DOpenGLES.o' failed

 > [1]: https://github.com/mesa3d/mesa/blob/79ee1b2ff0b85f4eeb4165d23a7943c28d3a3d93/include/EGL/eglplatform.h#L109-L125
 > [2]: https://bugreports.qt.io/browse/QTBUG-66233

 > Cc: Julien CORJON <corjon.j@ecagroup.com>
 > Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>

Committed after simplifying, thanks.
Peter Korsgaard Feb. 27, 2018, 9:01 p.m. UTC | #5
>>>>> "Gaël" == Gaël PORTAY <gael.portay@savoirfairelinux.com> writes:

 > The mesa's EGL/eglplatform.h header includes X11 headers unless the flag
 > MESA_EGL_NO_X11_HEADERS is defined[1].

 > A build issue happens when mesa3d is selected as then OpenGL EGL backend
 > but the XCB library is not selected.

 > This commit tells qmake to pass the cflag MESA_EGL_NO_X11_HEADERS to
 > make and prevent from including the missing X headers.

 > The issue QTBUG-66233 is opened in the Qt tracker[1].

 > Fixes:

 > 	In file included from
 > 	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/egl.h:39:0,
 > 	                 from qsgvideonode_egl.h:48,
 > 	                 from qsgvideonode_egl.cpp:40:
 > 	/home/gportay/src/buildroot/output-qt5.10/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/EGL/eglplatform.h:118:22:
 > 	fatal error: X11/Xlib.h: No such file or directory
 > 	 #include <X11/Xlib.h>
 > 	                      ^
 > 	compilation terminated.
 > 	Makefile:550: recipe for target '.obj/qsgvideonode_egl.o' failed

 > [1]: https://github.com/mesa3d/mesa/blob/79ee1b2ff0b85f4eeb4165d23a7943c28d3a3d93/include/EGL/eglplatform.h#L109-L125
 > [2]: https://bugreports.qt.io/browse/QTBUG-66233

 > Cc: Julien CORJON <corjon.j@ecagroup.com>
 > Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>

Committed after simplifying, thanks.