From b936b959650128bb8befaaa069477629105c680d Mon Sep 17 00:00:00 2001 From: Donald Carr Date: Wed, 7 Mar 2012 14:07:07 +0000 Subject: [PATCH] EGLFS: Integrate building into configure. With the move to the QPA architecture EGL is now only required by individual platform plugins and the configure script has been adjusted to reflect this. Change-Id: Ieadacef0b970f29752d9e3e36a007e5cbb005b0d Reviewed-by: Oswald Buddenhagen Reviewed-by: Girish Ramakrishnan --- config.tests/{unix => qpa}/egl/egl.cpp | 0 config.tests/{unix => qpa}/egl/egl.pro | 0 configure | 139 +++++++++--------- src/gui/kernel/qguiapplication.cpp | 2 + src/opengl/opengl.pro | 2 - src/plugins/platforms/platforms.pro | 4 + src/tools/qdoc/doc/config/qt-defines.qdocconf | 1 - tests/auto/opengl/qgl/qgl.pro | 3 - tests/auto/opengl/qgl/tst_qgl.cpp | 4 - tests/auto/opengl/qglbuffer/qglbuffer.pro | 2 - .../auto/opengl/qglfunctions/qglfunctions.pro | 2 - tests/auto/opengl/qglthreads/qglthreads.pro | 2 - tools/configure/configureapp.cpp | 6 - 13 files changed, 76 insertions(+), 91 deletions(-) rename config.tests/{unix => qpa}/egl/egl.cpp (100%) rename config.tests/{unix => qpa}/egl/egl.pro (100%) diff --git a/config.tests/unix/egl/egl.cpp b/config.tests/qpa/egl/egl.cpp similarity index 100% rename from config.tests/unix/egl/egl.cpp rename to config.tests/qpa/egl/egl.cpp diff --git a/config.tests/unix/egl/egl.pro b/config.tests/qpa/egl/egl.pro similarity index 100% rename from config.tests/unix/egl/egl.pro rename to config.tests/qpa/egl/egl.pro diff --git a/configure b/configure index 0ec2d92133d..70979a398fb 100755 --- a/configure +++ b/configure @@ -679,8 +679,7 @@ CFG_OPENVG=auto CFG_OPENVG_LC_INCLUDES=no CFG_OPENVG_SHIVA=auto CFG_OPENVG_ON_OPENGL=auto -CFG_EGL=no -CFG_EGL_GLES_INCLUDES=no +CFG_EGL=auto CFG_SSE=auto CFG_FONTCONFIG=auto CFG_LIBFREETYPE=auto @@ -708,6 +707,7 @@ CFG_XINPUT=runtime CFG_XKB=auto CFG_XCB=auto CFG_XCB_LIMITED=yes +CFG_EGLFS=auto CFG_LIBUDEV=auto CFG_OBSOLETE_WAYLAND=no CFG_EVDEV=auto @@ -893,7 +893,7 @@ while [ "$#" -gt 0 ]; do VAL=no ;; #Qt style yes options - -profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-xcb|-nis|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-debug-and-release|-exceptions|-harfbuzz|-prefix-install|-silent|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-phonon-backend|-audio-backend|-declarative-debug|-javascript-jit|-rpath|-force-pkg-config|-icu|-force-asserts|-testcocoon) + -profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-xcb|-eglfs|-nis|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-debug-and-release|-exceptions|-harfbuzz|-prefix-install|-silent|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-phonon-backend|-audio-backend|-declarative-debug|-javascript-jit|-rpath|-force-pkg-config|-icu|-force-asserts|-testcocoon) VAR=`echo $1 | sed "s,^-\(.*\),\1,"` VAL=yes ;; @@ -1165,9 +1165,6 @@ while [ "$#" -gt 0 ]; do [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "es2" ]; then CFG_OPENGL="$VAL" - if [ "$VAL" = "es2" ]; then - CFG_EGL="yes" - fi else UNKNOWN_OPT=yes fi @@ -1175,9 +1172,6 @@ while [ "$#" -gt 0 ]; do openvg) if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_OPENVG="$VAL" - if [ "$CFG_EGL" = "no" ] && [ "$VAL" != "no" ]; then - CFG_EGL=auto - fi else UNKNOWN_OPT=yes fi @@ -1654,6 +1648,13 @@ while [ "$#" -gt 0 ]; do wayland) CFG_OBSOLETE_WAYLAND=yes ;; + eglfs) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EGLFS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; libudev) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_LIBUDEV="$VAL" @@ -2869,6 +2870,14 @@ if [ "$OPT_HELP" = "yes" ]; then XCBN=" " fi + if [ "$CFG_EGLFS" = "no" ]; then + EGLFSY=" " + EGLFSN="*" + else + EGLFSY="*" + EGLFSN=" " + fi + if [ "$CFG_XINPUT2" = "no" ]; then X2Y=" " X2N="*" @@ -3191,6 +3200,9 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then $XCBN -no-xcb ............ Do not compile Xcb (X protocol C-language Binding) support. $XCBY -xcb ............... Compile Xcb support. + $EGLFSN -no-eglfs .......... Do not compile EGLFS (EGL Full Screen/Single Surface) support. + $EGLFSY -eglfs ............. Compile EGLFS support. + EOF fi # X11 @@ -3309,12 +3321,6 @@ Qt/X11 only: -system-nas-sound .. Use NAS libaudio from the operating system. See http://radscan.com/nas.html - -egl ............... Use EGL instead of GLX to manage contexts. - When building for desktop OpenGL, this option will - make Qt use EGL to manage contexts rather than the - GLX, which is the default. Note: For OpenGL ES, EGL - is always used. - -no-opengl ......... Do not support OpenGL. + -opengl ...... Enable OpenGL support. With no parameter, this will auto-detect the "best" @@ -4103,6 +4109,14 @@ if [ "$CFG_ACCESSIBILITY" = "auto" ]; then CFG_ACCESSIBILITY=yes fi +if [ "$CFG_EGLFS" = "yes" ]; then + if [ "$CFG_EGL" = "no" ]; then + echo "The EGLFS plugin requires EGL support and cannot be built" + exit 101 + fi + CFG_EGL=yes +fi + # auto-detect SQL-modules support for _SQLDR in $CFG_SQL_AVAILABLE; do case $_SQLDR in @@ -4570,9 +4584,6 @@ if [ "$PLATFORM_X11" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then CFG_OPENGL=desktop elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS; then CFG_OPENGL=es2 - if [ "$CFG_EGL" = "no" ]; then - CFG_EGL=auto - fi else if [ "$CFG_OPENGL" = "yes" ]; then echo "All the OpenGL functionality tests failed!" @@ -4914,7 +4925,6 @@ if [ "$BUILD_ON_MAC" = "yes" ]; then fi fi - if [ "$PLATFORM_QPA" = "yes" ]; then # auto-detect OpenGL support (es2 = OpenGL ES 2.x) if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then @@ -4984,6 +4994,7 @@ if [ "$PLATFORM_QPA" = "yes" ]; then # Save these for a check later ORIG_CFG_XCB="$CFG_XCB" + ORIG_CFG_EGLFS="$CFG_EGLFS" if [ "$CFG_LIBUDEV" != "no" ]; then if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libudev 2>/dev/null; then @@ -5101,6 +5112,31 @@ if [ "$PLATFORM_QPA" = "yes" ]; then QMAKE_DEFINES_XCB=QT_NO_XCB_XKB fi + # EGL Support + if [ "$CFG_EGL" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists egl 2>/dev/null; then + QMAKE_INCDIR_EGL=`$PKG_CONFIG --cflags-only-I egl 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_EGL=`$PKG_CONFIG --libs egl 2>/dev/null` + QMAKE_CFLAGS_EGL=`$PKG_CONFIG --cflags egl 2>/dev/null` + QMakeVar set QMAKE_INCDIR_EGL "$QMAKE_INCDIR_EGL" + QMakeVar set QMAKE_LIBS_EGL "$QMAKE_LIBS_EGL" + fi # detect EGL support + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/qpa/egl" "EGL" $L_FLAGS $I_FLAGS $l_FLAGS $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then + CFG_EGL=yes + elif [ "$CFG_EGL" = "yes" ]; then + echo " The EGL functionality test failed; EGL is required by some QPA plugins to manage contexts & surfaces." + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in ${XQMAKESPEC}." + exit 1 + else + CFG_EGL=no + fi + fi + + if [ "$CFG_EGLFS" != "no" ]; then + CFG_EGLFS="$CFG_EGL" + fi + if [ -n "$QMAKE_CFLAGS_XCB" ] || [ -n "$QMAKE_LIBS_XCB" ]; then QMakeVar set QMAKE_CFLAGS_XCB "$QMAKE_CFLAGS_XCB" QMakeVar set QMAKE_LIBS_XCB "$QMAKE_LIBS_XCB" @@ -5116,13 +5152,13 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi if [ "$PLATFORM_QPA" = "yes" ] && [ "$BUILD_ON_MAC" = "no" ] && [ "$XPLATFORM_MINGW" = "no" ]; then - if [ "$CFG_XCB" = "no" ]; then + if [ "$CFG_XCB" = "no" ] && [ "$CFG_EGLFS" = "no" ]; then if [ "$QPA_PLATFORM_GUARD" = "yes" ] && - ( [ "$ORIG_CFG_XCB" = "auto" ] ); then + ( [ "$ORIG_CFG_XCB" = "auto" ] || [ "$ORIG_CFG_EGLFS" = "auto" ] ); then echo "No QPA platform plugin enabled!" echo " If you really want to build without a QPA platform plugin you must pass" - echo " -no-xcb. Doing this will produce a Qt that" - echo " cannot run GUI applications." + echo " -no-xcb and -no-eglfs to configure. Doing this will" + echo " produce a Qt that cannot run GUI applications." echo " The dependencies needed for xcb to build are listed in" echo " src/plugins/platforms/xcb/README" exit 1 @@ -5132,35 +5168,6 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi -EGL_VARIANT=none -# EGL Support -if [ "$PLATFORM_X11" = "yes" ]; then - if [ "$CFG_EGL" != "no" ]; then - # detect EGL support - if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/egl" "EGL (EGL/egl.h)" $L_FLAGS $I_FLAGS $l_FLAGS; then - # EGL specified by QMAKE_*_EGL, included with - EGL_VARIANT=regular - CFG_EGL=yes - fi - - if [ "$EGL_VARIANT" = "none" ]; then - if [ "$CFG_EGL" = "yes" ]; then - echo "The EGL functionality test failed!" - echo " EGL is required for OpenGL ES to manage contexts & surfaces." - echo " You might need to modify the include and library search paths by editing" - echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in" - echo " ${XQMAKESPEC}." - exit 1 - fi - CFG_EGL=no - # If QtOpenGL would be built against OpenGL ES, disable it as we can't to that if EGL is missing - if [ "$CFG_OPENGL" = "es2" ]; then - CFG_OPENGL=no - fi - fi - fi -fi - [ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_PHONON" != "no" ] && CFG_PHONON="yes" # freetype support @@ -5448,19 +5455,18 @@ else QT_CONFIG="$QT_CONFIG accessibility" fi -# egl stuff does not belong in lighthouse, but rather in plugins -if [ "$PLATFORM_QPA" = "yes" ]; then - CFG_EGL="no" +# enable egl +if [ "$CFG_EGL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG egl" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" fi -# enable egl -if [ "$CFG_EGL" = "no" ]; then - QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" +# enable eglfs +if [ "$CFG_EGLFS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs" else - QT_CONFIG="$QT_CONFIG egl" - if [ "$CFG_EGL_GLES_INCLUDES" = "yes" ]; then - QCONFIG_FLAGS="$QCONFIG_FLAGS QT_GLES_EGL" - fi + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGLFS" fi # enable openvg @@ -6552,13 +6558,7 @@ elif [ "$CFG_OPENGL" = "es2" ]; then else echo "OpenGL support ......... no" fi -if [ "$CFG_EGL" != "no" ]; then - if [ "$CFG_EGL_GLES_INCLUDES" = "yes" ]; then - echo "EGL support ............ yes " - else - echo "EGL support ............ yes " - fi -fi + if [ "$CFG_OPENVG" ]; then if [ "$CFG_OPENVG_SHIVA" = "yes" ]; then echo "OpenVG support ......... ShivaVG" @@ -6614,6 +6614,7 @@ echo "Xrender support ........ $CFG_XRENDER" if [ "$XPLATFORM_MAEMO" = "yes" ] && [ "$CFG_XCB" = "yes" ]; then echo "XInput2 support ........ $CFG_XINPUT2" fi +echo "EGLFS support .......... $CFG_EGLFS" echo # complain about not being able to use dynamic plugins if we are using a static build diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index df3371b2366..fe1c93ea296 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -512,6 +512,8 @@ static void init_platform(const QString &pluginArgument, const QString &platform const QString defaultPlatform = QLatin1String("xcb"); #elif !defined (QT_NO_WAYLAND) const QString defaultPlatform = QLatin1String("wayland"); +#elif !defined (QT_NO_EGLFS) + const QString defaultPlatform = QLatin1String("eglfs"); #else const QString defaultPlatform = QLatin1String("minimal"); #endif diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 89f8d0a3c24..b2b3790b29d 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -72,6 +72,4 @@ SOURCES += qglshaderprogram.cpp \ SOURCES += qgl_qpa.cpp \ qglpixelbuffer_stub.cpp -DEFINES += QT_NO_EGL - INCLUDEPATH += ../3rdparty/harfbuzz/src diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro index c97c1def0ce..692332291c8 100644 --- a/src/plugins/platforms/platforms.pro +++ b/src/plugins/platforms/platforms.pro @@ -15,3 +15,7 @@ win32: SUBDIRS += windows qnx-*-qcc { SUBDIRS += qnx } + +contains(QT_CONFIG, eglfs) { + SUBDIRS += eglfs +} diff --git a/src/tools/qdoc/doc/config/qt-defines.qdocconf b/src/tools/qdoc/doc/config/qt-defines.qdocconf index 50a355f04c0..e11b32dc4ca 100644 --- a/src/tools/qdoc/doc/config/qt-defines.qdocconf +++ b/src/tools/qdoc/doc/config/qt-defines.qdocconf @@ -3,7 +3,6 @@ defines = Q_QDOC \ QT_.*_LIB \ QT_COMPAT \ QT_KEYPAD_NAVIGATION \ - QT_NO_EGL \ QT3_SUPPORT \ Q_WS_.* \ Q_OS_.* \ diff --git a/tests/auto/opengl/qgl/qgl.pro b/tests/auto/opengl/qgl/qgl.pro index 963b2d7e558..db82d9a2569 100644 --- a/tests/auto/opengl/qgl/qgl.pro +++ b/tests/auto/opengl/qgl/qgl.pro @@ -7,9 +7,6 @@ TARGET = tst_qgl requires(contains(QT_CONFIG,opengl)) QT += widgets widgets-private opengl-private gui-private core-private testlib -contains(QT_CONFIG,egl):DEFINES += QGL_EGL -win32:!wince*: DEFINES += QT_NO_EGL - SOURCES += tst_qgl.cpp RESOURCES = qgl.qrc diff --git a/tests/auto/opengl/qgl/tst_qgl.cpp b/tests/auto/opengl/qgl/tst_qgl.cpp index f741fb92488..051e26f4af1 100644 --- a/tests/auto/opengl/qgl/tst_qgl.cpp +++ b/tests/auto/opengl/qgl/tst_qgl.cpp @@ -1396,10 +1396,6 @@ void tst_QGL::glWidgetRenderPixmap() QImage reference(fb.size(), QImage::Format_RGB32); reference.fill(0xffff0000); -#if defined(QGL_EGL) && !defined(Q_WS_X11) - QSKIP("renderPixmap() not yet supported under EGL on your platform"); -#endif - QFUZZY_COMPARE_IMAGES(fb, reference); } diff --git a/tests/auto/opengl/qglbuffer/qglbuffer.pro b/tests/auto/opengl/qglbuffer/qglbuffer.pro index 537f3c122a9..f766cb8944f 100644 --- a/tests/auto/opengl/qglbuffer/qglbuffer.pro +++ b/tests/auto/opengl/qglbuffer/qglbuffer.pro @@ -7,6 +7,4 @@ TARGET = tst_qglbuffer requires(contains(QT_CONFIG,opengl)) QT += opengl widgets testlib -win32:!wince*: DEFINES += QT_NO_EGL - SOURCES += tst_qglbuffer.cpp diff --git a/tests/auto/opengl/qglfunctions/qglfunctions.pro b/tests/auto/opengl/qglfunctions/qglfunctions.pro index 4b7c8758a94..0113068f1d4 100644 --- a/tests/auto/opengl/qglfunctions/qglfunctions.pro +++ b/tests/auto/opengl/qglfunctions/qglfunctions.pro @@ -3,6 +3,4 @@ TARGET = tst_qglfunctions requires(contains(QT_CONFIG,opengl)) QT += opengl widgets testlib -win32:!wince*: DEFINES += QT_NO_EGL - SOURCES += tst_qglfunctions.cpp diff --git a/tests/auto/opengl/qglthreads/qglthreads.pro b/tests/auto/opengl/qglthreads/qglthreads.pro index 9d3e86a03e7..1534472ef62 100644 --- a/tests/auto/opengl/qglthreads/qglthreads.pro +++ b/tests/auto/opengl/qglthreads/qglthreads.pro @@ -3,8 +3,6 @@ TARGET = tst_qglthreads requires(contains(QT_CONFIG,opengl)) QT += opengl widgets testlib -win32:!wince*: DEFINES += QT_NO_EGL - HEADERS += tst_qglthreads.h SOURCES += tst_qglthreads.cpp diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 5a6a04aee0d..0c9907f6d5b 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1544,8 +1544,6 @@ bool Configure::displayHelp() desc("OPENVG", "no","-no-openvg", "Disables OpenVG functionality\n"); desc("OPENVG", "yes","-openvg", "Enables OpenVG functionality"); - desc( "", "Requires EGL support, typically supplied by an OpenGL", false, ' '); - desc( "", "or other graphics implementation\n", false, ' '); desc( "-force-asserts", "Activate asserts in release mode.\n"); #endif desc( "-platform ", "The operating system and compiler you are building on.\n(default %QMAKESPEC%)\n"); @@ -2850,10 +2848,6 @@ void Configure::generateConfigfiles() if (dictionary["FREETYPE"] == "no") qconfigList += "QT_NO_FREETYPE"; if (dictionary["NATIVE_GESTURES"] == "no") qconfigList += "QT_NO_NATIVE_GESTURES"; - if (dictionary["OPENGL_ES_CM"] == "no" && - dictionary["OPENGL_ES_2"] == "no" && - dictionary["OPENVG"] == "no") qconfigList += "QT_NO_EGL"; - if (dictionary["OPENGL_ES_CM"] == "yes" || dictionary["OPENGL_ES_2"] == "yes") qconfigList += "QT_OPENGL_ES";