From 297407bdc61022cb64c15023afbefe618c09e59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 10 Jun 2011 16:05:03 +0200 Subject: [PATCH] Autodetect the xcb backend --- config.tests/qpa/xcb-render/xcb-render.cpp | 72 ++++++++++++++++++++++ config.tests/qpa/xcb-render/xcb-render.pro | 5 ++ config.tests/qpa/xcb-xlib/xcb-xlib.cpp | 52 ++++++++++++++++ config.tests/qpa/xcb-xlib/xcb-xlib.pro | 5 ++ config.tests/qpa/xcb/xcb.cpp | 57 +++++++++++++++++ config.tests/qpa/xcb/xcb.pro | 5 ++ configure | 17 ++++- src/plugins/platforms/xcb/xcb.pro | 13 ++-- 8 files changed, 220 insertions(+), 6 deletions(-) create mode 100644 config.tests/qpa/xcb-render/xcb-render.cpp create mode 100644 config.tests/qpa/xcb-render/xcb-render.pro create mode 100644 config.tests/qpa/xcb-xlib/xcb-xlib.cpp create mode 100644 config.tests/qpa/xcb-xlib/xcb-xlib.pro create mode 100644 config.tests/qpa/xcb/xcb.cpp create mode 100644 config.tests/qpa/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 index 0000000000..9e6c9c847c --- /dev/null +++ b/config.tests/qpa/xcb-render/xcb-render.cpp @@ -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 +#include + +// 'template' is used as a function argument name in xcb_renderutil.h +#define template template_param +// extern "C" is missing too +extern "C" { +#include +} +#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 index 0000000000..33526fad0d --- /dev/null +++ b/config.tests/qpa/xcb-render/xcb-render.pro @@ -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 index 0000000000..ede80d6360 --- /dev/null +++ b/config.tests/qpa/xcb-xlib/xcb-xlib.cpp @@ -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 +#include +#include + +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 index 0000000000..03250b4480 --- /dev/null +++ b/config.tests/qpa/xcb-xlib/xcb-xlib.pro @@ -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 index 0000000000..71b30fea5a --- /dev/null +++ b/config.tests/qpa/xcb/xcb.cpp @@ -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 +#include +#include +#include +#include +#include +#include + +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 index 0000000000..ed68bca242 --- /dev/null +++ b/config.tests/qpa/xcb/xcb.pro @@ -0,0 +1,5 @@ +SOURCES = xcb.cpp +CONFIG -= qt + +LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm -lxcb-sync -lxcb-xfixes + diff --git a/configure b/configure index 74fa27352b..5539df0e3f 100755 --- 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`" diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index c8814b04f6..e5d9b98bd0 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -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