Autodetect the xcb backend
authorJørgen Lind <jorgen.lind@nokia.com>
Fri, 10 Jun 2011 14:05:03 +0000 (16:05 +0200)
committerJørgen Lind <jorgen.lind@nokia.com>
Fri, 10 Jun 2011 14:09:08 +0000 (16:09 +0200)
config.tests/qpa/xcb-render/xcb-render.cpp [new file with mode: 0644]
config.tests/qpa/xcb-render/xcb-render.pro [new file with mode: 0644]
config.tests/qpa/xcb-xlib/xcb-xlib.cpp [new file with mode: 0644]
config.tests/qpa/xcb-xlib/xcb-xlib.pro [new file with mode: 0644]
config.tests/qpa/xcb/xcb.cpp [new file with mode: 0644]
config.tests/qpa/xcb/xcb.pro [new file with mode: 0644]
configure
src/plugins/platforms/xcb/xcb.pro

diff --git a/config.tests/qpa/xcb-render/xcb-render.cpp b/config.tests/qpa/xcb-render/xcb-render.cpp
new file mode 100644 (file)
index 0000000..9e6c9c8
--- /dev/null
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the config.tests of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <xcb/xcb.h>
+#include <xcb/render.h>
+
+// 'template' is used as a function argument name in xcb_renderutil.h
+#define template template_param
+// extern "C" is missing too
+extern "C" {
+#include <xcb/xcb_renderutil.h>
+}
+#undef template
+
+int main(int, char **)
+{
+    int primaryScreen = 0;
+    xcb_generic_error_t *error = 0;
+
+    xcb_connection_t *connection = xcb_connect("", &primaryScreen);
+    xcb_render_query_pict_formats_cookie_t formatsCookie =
+        xcb_render_query_pict_formats(connection);
+
+    xcb_render_query_pict_formats_reply_t *formatsReply =
+        xcb_render_query_pict_formats_reply(
+                connection,
+                formatsCookie,
+                &error);
+
+    xcb_render_util_find_standard_format(formatsReply,
+            XCB_PICT_STANDARD_ARGB_32);
+
+    return 0;
+}
diff --git a/config.tests/qpa/xcb-render/xcb-render.pro b/config.tests/qpa/xcb-render/xcb-render.pro
new file mode 100644 (file)
index 0000000..33526fa
--- /dev/null
@@ -0,0 +1,5 @@
+SOURCES = xcb-render.cpp
+CONFIG -= qt
+
+LIBS += -lxcb-render -lxcb-render-util
+
diff --git a/config.tests/qpa/xcb-xlib/xcb-xlib.cpp b/config.tests/qpa/xcb-xlib/xcb-xlib.cpp
new file mode 100644 (file)
index 0000000..ede80d6
--- /dev/null
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the config.tests of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <xcb/xcb.h>
+#include <X11/Xlib.h>
+#include <X11/Xlib-xcb.h>
+
+int main(int, char **)
+{
+    Display *dpy = XOpenDisplay("");
+    xcb_connection_t *connection =  XGetXCBConnection(dpy);
+
+    return 0;
+}
diff --git a/config.tests/qpa/xcb-xlib/xcb-xlib.pro b/config.tests/qpa/xcb-xlib/xcb-xlib.pro
new file mode 100644 (file)
index 0000000..03250b4
--- /dev/null
@@ -0,0 +1,5 @@
+SOURCES = xcb-xlib.cpp
+CONFIG -= qt
+
+LIBS += -lxcb -lX11 -lX11-xcb
+
diff --git a/config.tests/qpa/xcb/xcb.cpp b/config.tests/qpa/xcb/xcb.cpp
new file mode 100644 (file)
index 0000000..71b30fe
--- /dev/null
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the config.tests of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <xcb/xcb.h>
+#include <xcb/xcb_icccm.h>
+#include <xcb/xfixes.h>
+#include <xcb/xcb_image.h>
+#include <xcb/xcb_keysyms.h>
+#include <xcb/sync.h>
+#include <xcb/shm.h>
+
+int main(int, char **)
+{
+    int primaryScreen = 0;
+
+    xcb_connection_t *connection = xcb_connect("", &primaryScreen);
+
+    return 0;
+}
diff --git a/config.tests/qpa/xcb/xcb.pro b/config.tests/qpa/xcb/xcb.pro
new file mode 100644 (file)
index 0000000..ed68bca
--- /dev/null
@@ -0,0 +1,5 @@
+SOURCES = xcb.cpp
+CONFIG -= qt
+
+LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm -lxcb-sync -lxcb-xfixes
+
index 74fa273..5539df0 100755 (executable)
--- a/configure
+++ b/configure
@@ -751,7 +751,7 @@ CFG_DECORATION_PLUGIN_AVAILABLE=
 CFG_DECORATION_PLUGIN=
 CFG_XINPUT=runtime
 CFG_XKB=auto
-CFG_XCB=no
+CFG_XCB=auto
 CFG_NIS=auto
 CFG_CUPS=auto
 CFG_ICONV=auto
@@ -6298,6 +6298,21 @@ if [ "$PLATFORM_QPA" = "yes" ]; then
         QT_CONFIG="$QT_CONFIG xlib"
     fi
 
+    if [ "$CFG_XCB" != "no" ]; then
+        if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/xcb "xcb" $L_FLAGS $I_FLAGS $l_FLAGS; then
+            CFG_XCB=yes
+            if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/xcb-render "xcb-render" $L_FLAGS $I_FLAGS $l_FLAGS; then
+                QT_CONFIG="$QT_CONFIG xcb-render"
+            fi
+
+            if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/xcb-xlib "xcb-xlib" $L_FLAGS $I_FLAGS $l_FLAGS; then
+                QT_CONFIG="$QT_CONFIG xcb-xlib"
+            fi
+        else
+            CFG_XCB=no
+        fi
+    fi
+
     # Detect libxkbcommon
     if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xkbcommon 2>/dev/null; then
         QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon 2>/dev/null`"
index c8814b0..e5d9b98 100644 (file)
@@ -37,13 +37,18 @@ HEADERS = \
         qxcbcursor.h \
         qxcbimage.h
 
-QT += gui-private core-private
 
 # needed by GLX, Xcursor, XLookupString, ...
-DEFINES += XCB_USE_XLIB
+contains(QT_CONFIG, xcb-xlib) {
+    DEFINES += XCB_USE_XLIB
+    LIBS += -lX11 -lX11-xcb
+}
 
 # to support custom cursors with depth > 1
-DEFINES += XCB_USE_RENDER
+contains(QT_CONFIG, xcb-render) {
+    DEFINES += XCB_USE_RENDER
+    LIBS += -lxcb-render -lxcb-render-util
+}
 
 contains(QT_CONFIG, opengl) {
     QT += opengl
@@ -71,8 +76,6 @@ contains(QT_CONFIG, opengl) {
 }
 
 LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm -lxcb-sync -lxcb-xfixes
-contains(DEFINES, XCB_USE_XLIB): LIBS += -lX11 -lX11-xcb
-contains(DEFINES, XCB_USE_RENDER): LIBS += -lxcb-render -lxcb-render-util
 
 DEFINES += $$QMAKE_DEFINES_XCB
 LIBS += $$QMAKE_LIBS_XCB