egl: Reshuffle headers to help less fortunate systems with X11

EGL headers including X headers has traditionally been problematic due
to getting macros for Status, None, etc.

In most cases this is not an issue anymore because on embedded one will
almost always use a driver targeting the framebuffer or DRM/KMS and
therefore the EGL headers do not pull in X dependencies.

Furthermore, Mesa supports MESA_EGL_NO_X11_HEADERS which we set, avoiding
the problem altogether with Mesa regardless of targeting X11 or KMS.

However, other drivers do not have this option. On i.MX6 for instance,
targeting X11 is problematic due to not having EGL_API_FB defined, which
in turn means the EGL headers pulls in X headers in order to be able to
define the native display and window types as Display and Window.

Try to play nice with this use case by reshuffling the includes and
undefining the problematic names.

Task-number: QTBUG-52928
Change-Id: I059f26b340b6e442e7296055915d18f5a1ce7a7f
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
This commit is contained in:
Laszlo Agocs 2016-04-22 17:13:38 +02:00
parent e6b1e918e1
commit ecf127505e
18 changed files with 83 additions and 21 deletions

View File

@ -1,7 +1,8 @@
contains(QT_CONFIG,egl) {
HEADERS += \
$$PWD/qeglconvenience_p.h \
$$PWD/qeglstreamconvenience_p.h
$$PWD/qeglstreamconvenience_p.h \
$$PWD/qt_egl_p.h
SOURCES += \
$$PWD/qeglconvenience.cpp \

View File

@ -48,7 +48,7 @@
#include <QtGui/QSurfaceFormat>
#include <QtCore/QVector>
#include <QtCore/QSizeF>
#include <EGL/egl.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE

View File

@ -45,9 +45,9 @@
// We mean it.
//
#include <EGL/egl.h>
#include <qpa/qplatformoffscreensurface.h>
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE

View File

@ -49,7 +49,7 @@
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformopenglcontext.h>
#include <QtCore/QVariant>
#include <EGL/egl.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE

View File

@ -46,8 +46,7 @@
//
#include <qglobal.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
// This provides runtime EGLDevice/Output/Stream support even when eglext.h in
// the sysroot is not up-to-date.

View File

@ -0,0 +1,67 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** As a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QT_EGL_P_H
#define QT_EGL_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <EGL/egl.h>
#include <EGL/eglext.h>
#undef Status
#undef None
#undef Bool
#undef CursorShape
#undef KeyPress
#undef KeyRelease
#undef FocusIn
#undef FocusOut
#undef FontChange
#undef Expose
#undef Unsorted
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
#endif // QT_EGL_P_H

View File

@ -31,6 +31,7 @@
**
****************************************************************************/
#include "qeglfsglobal.h"
#include <QtGui/QSurface>
#include <QtPlatformSupport/private/qeglconvenience_p.h>
#include <QtPlatformSupport/private/qeglpbuffer_p.h>

View File

@ -34,9 +34,9 @@
#ifndef QEGLFSCONTEXT_H
#define QEGLFSCONTEXT_H
#include "qeglfsglobal.h"
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
#include <QtCore/QVariant>
#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE

View File

@ -45,13 +45,12 @@
// We mean it.
//
#include "qeglfsglobal.h"
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformscreen.h>
#include <QtCore/QString>
#include <QtGui/QSurfaceFormat>
#include <QtGui/QImage>
#include <EGL/egl.h>
#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE

View File

@ -35,6 +35,7 @@
#define QEGLFSGLOBAL_H
#include <qglobal.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
#ifdef QT_BUILD_EGL_DEVICE_LIB
#define Q_EGLFS_EXPORT Q_DECL_EXPORT

View File

@ -34,8 +34,8 @@
#ifndef QEGLFSHOOKS_H
#define QEGLFSHOOKS_H
#include "qeglfsdeviceintegration.h"
#include "qeglfsglobal.h"
#include "qeglfsdeviceintegration.h"
QT_BEGIN_NAMESPACE

View File

@ -79,8 +79,6 @@
#include <QtPlatformHeaders/qeglfsfunctions.h>
#include <EGL/egl.h>
static void initResources()
{
#ifndef QT_NO_CURSOR

View File

@ -34,12 +34,11 @@
#ifndef QEGLFSINTEGRATION_H
#define QEGLFSINTEGRATION_H
#include "qeglfsglobal.h"
#include <QtCore/QVariant>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qplatformscreen.h>
#include <EGL/egl.h>
#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE

View File

@ -34,9 +34,8 @@
#ifndef QEGLFSOFFSCREENWINDOW_H
#define QEGLFSOFFSCREENWINDOW_H
#include <EGL/egl.h>
#include <qpa/qplatformoffscreensurface.h>
#include "qeglfsglobal.h"
#include <qpa/qplatformoffscreensurface.h>
QT_BEGIN_NAMESPACE

View File

@ -36,7 +36,6 @@
#include "qeglfsglobal.h"
#include <QtCore/QPointer>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE

View File

@ -34,13 +34,12 @@
#ifndef QEGLFSWINDOW_H
#define QEGLFSWINDOW_H
#include "qeglfsglobal.h"
#include "qeglfsintegration.h"
#include "qeglfsscreen.h"
#include "qeglfsglobal.h"
#include <qpa/qplatformwindow.h>
#include <QtPlatformSupport/private/qopenglcompositor_p.h>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE

View File

@ -40,7 +40,7 @@
#include <QtGui/private/qcssparser_p.h>
#include <QtGui/private/qtextengine_p.h>
#include <EGL/egl.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE

View File

@ -59,7 +59,7 @@
#include <QtGui/private/qguiapplication_p.h>
#ifdef XCB_USE_EGL
#include <EGL/egl.h>
#include <QtPlatformSupport/private/qt_egl_p.h>
#endif
#ifdef XCB_USE_XLIB