summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-11-07 21:32:19 -0500
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-11-12 00:39:35 -0500
commit008f3a28c6ca6f689f00f11af1f195f14625a51a (patch)
tree3b773b9c9f923b49563e72f6b6d28a91ba07c32c /gnu/packages/patches
parentd7d09a277376744a17500ad62f6ba5580a53c878 (diff)
downloadguix-008f3a28c6ca6f689f00f11af1f195f14625a51a.tar.gz
gnu: jami: Enable unit tests.
* gnu/packages/patches/jami-fix-qml-imports.patch: New file.
* gnu/packages/patches/jami-fix-unit-tests-build.patch: Likewise.
* gnu/packages/patches/jami-libjami-headers-search.patch: Likewise.
* gnu/packages/patches/jami-sip-unregister.patch: Likewise.
* gnu/packages/patches/jami-xcb-link.patch: Likewise.
* gnu/local.mk: Register them.
* gnu/packages/jami.scm (%jami-sources): Apply new patches.
(jami) [tests?]: Delete argument to run tests.
[configure-flags]: Remove TESTS? argument.
Enable tests with -DENABLE_TESTS=ON.  Remove -DLIBJAMI_INCLUDE_DIR.
[phases] {check}: New phase override.
[native-inputs]: Add settings-desktop-schemas.
[inputs]: Add glib and libxcb.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/jami-fix-qml-imports.patch78
-rw-r--r--gnu/packages/patches/jami-fix-unit-tests-build.patch139
-rw-r--r--gnu/packages/patches/jami-libjami-headers-search.patch109
-rw-r--r--gnu/packages/patches/jami-sip-unregister.patch48
-rw-r--r--gnu/packages/patches/jami-xcb-link.patch72
5 files changed, 446 insertions, 0 deletions
diff --git a/gnu/packages/patches/jami-fix-qml-imports.patch b/gnu/packages/patches/jami-fix-qml-imports.patch
new file mode 100644
index 0000000000..e24171785d
--- /dev/null
+++ b/gnu/packages/patches/jami-fix-qml-imports.patch
@@ -0,0 +1,78 @@
+From 9c4d065093d18b5495d3193028457b7393daea4b Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
+Date: Mon, 7 Nov 2022 16:26:50 -0500
+Subject: [PATCH] tests: Fix broken QML import directives.
+
+Fixes
+<https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/883>.
+
+Automated via:
+  $ find tests -name '*.qml'  | xargs sed -i 's,qrc:/src,../../../src,'
+
+Change-Id: Ic1a2f419e3e328e8bf861e7fdf370f15da66675f
+---
+Upstream status: https://review.jami.net/c/jami-client-qt/+/22990
+
+ tests/qml/src/tst_ChatViewFooter.qml       | 2 +-
+ tests/qml/src/tst_FilesToSendContainer.qml | 2 +-
+ tests/qml/src/tst_PresenceIndicator.qml    | 2 +-
+ tests/qml/src/tst_WizardView.qml           | 4 ++--
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/client-qt/tests/qml/src/tst_ChatViewFooter.qml b/client-qt/tests/qml/src/tst_ChatViewFooter.qml
+index 84316d78..b0cffe1a 100644
+--- a/client-qt/tests/qml/src/tst_ChatViewFooter.qml
++++ b/client-qt/tests/qml/src/tst_ChatViewFooter.qml
+@@ -25,7 +25,7 @@ import QtTest
+ import net.jami.Models 1.1
+ import net.jami.Constants 1.1
+ 
+-import "qrc:/src/app/mainview/components"
++import "../../../src/app/mainview/components"
+ 
+ ColumnLayout {
+     id: root
+diff --git a/client-qt/tests/qml/src/tst_FilesToSendContainer.qml b/client-qt/tests/qml/src/tst_FilesToSendContainer.qml
+index b7f4810a..9432a44d 100644
+--- a/client-qt/tests/qml/src/tst_FilesToSendContainer.qml
++++ b/client-qt/tests/qml/src/tst_FilesToSendContainer.qml
+@@ -25,7 +25,7 @@ import QtTest
+ import net.jami.Models 1.1
+ import net.jami.Constants 1.1
+ 
+-import "qrc:/src/app/mainview/components"
++import "../../../src/app/mainview/components"
+ 
+ ColumnLayout {
+     id: root
+diff --git a/client-qt/tests/qml/src/tst_PresenceIndicator.qml b/client-qt/tests/qml/src/tst_PresenceIndicator.qml
+index 0eda9169..46c048e8 100644
+--- a/client-qt/tests/qml/src/tst_PresenceIndicator.qml
++++ b/client-qt/tests/qml/src/tst_PresenceIndicator.qml
+@@ -22,7 +22,7 @@ import QtTest
+ import net.jami.Models 1.1
+ import net.jami.Constants 1.1
+ 
+-import "qrc:/src/app/commoncomponents"
++import "../../../src/app/commoncomponents"
+ 
+ PresenceIndicator {
+     id: uut
+diff --git a/client-qt/tests/qml/src/tst_WizardView.qml b/client-qt/tests/qml/src/tst_WizardView.qml
+index 08698b7a..6a4f971d 100644
+--- a/client-qt/tests/qml/src/tst_WizardView.qml
++++ b/client-qt/tests/qml/src/tst_WizardView.qml
+@@ -24,8 +24,8 @@ import net.jami.Models 1.1
+ import net.jami.Constants 1.1
+ import net.jami.Enums 1.1
+ 
+-import "qrc:/src/app/wizardview"
+-import "qrc:/src/app/commoncomponents"
++import "../../../src/app/wizardview"
++import "../../../src/app/commoncomponents"
+ 
+ WizardView {
+     id: uut
+-- 
+2.37.3
+
diff --git a/gnu/packages/patches/jami-fix-unit-tests-build.patch b/gnu/packages/patches/jami-fix-unit-tests-build.patch
new file mode 100644
index 0000000000..0216a4bd67
--- /dev/null
+++ b/gnu/packages/patches/jami-fix-unit-tests-build.patch
@@ -0,0 +1,139 @@
+From 82ecd786a29344d57e6dd95ef0800bef9dd44542 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
+Date: Sun, 6 Nov 2022 00:16:34 -0400
+Subject: [PATCH 3/3] tests: Fix various compilation failures.
+
+Fixes <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/882>.
+
+* tests/CMakeLists.txt: Add "Widgets" Qt module to find_package call.
+(QML_TEST_LIBS): Add Qt::Widgets.
+* tests/CMakeLists.txt: Rename QML_LIBS to QT_LIBS, a regression
+introduced in d82e3820706214d15d7cb7462978b7a43b798355.  Remove the
+dependency on on the Widgets module, now provided via QT_LIBS.
+* tests/qml/main.cpp [WITH_WEBENGINE]: Include QtWebEngine modules
+conditionally.
+(main) [WITH_WEBENGINE]: Initialize webengine conditionally.
+* tests/CMakeLists.txt: Link test objects with ${LIBCLIENT_NAME}.
+* src/app/qmlregister.h (registerTypes): Change parent type from
+MainApplication* to QObject*
+* src/app/qmlregister.cpp (registerTypes): Likewise.
+* tests/unittests/account_unittest.cpp (globalEnv): Remove variable.
+* tests/unittests/contact_unittest.cpp: Likewise.
+---
+Upstream status: https://review.jami.net/c/jami-client-qt/+/22984/1
+
+ src/app/qmlregister.cpp              | 2 +-
+ src/app/qmlregister.h                | 2 +-
+ tests/CMakeLists.txt                 | 6 +++---
+ tests/qml/main.cpp                   | 7 ++++---
+ tests/unittests/account_unittest.cpp | 2 --
+ tests/unittests/contact_unittest.cpp | 2 --
+ 6 files changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/client-qt/client-qt/src/app/qmlregister.cpp b/client-qt/src/app/qmlregister.cpp
+index 285f7814..67222eb5 100644
+--- a/client-qt/client-qt/src/app/qmlregister.cpp
++++ b/client-qt/src/app/qmlregister.cpp
+@@ -105,7 +105,7 @@ registerTypes(QQmlEngine* engine,
+               AppSettingsManager* settingsManager,
+               PreviewEngine* previewEngine,
+               ScreenInfo* screenInfo,
+-              MainApplication* parent)
++              QObject* parent)
+ {
+     // setup the adapters (their lifetimes are that of MainApplication)
+     auto callAdapter = new CallAdapter(systemTray, lrcInstance, parent);
+diff --git a/client-qt/client-qt/src/app/qmlregister.h b/client-qt/src/app/qmlregister.h
+index 38bfd091..aac0a887 100644
+--- a/client-qt/client-qt/src/app/qmlregister.h
++++ b/client-qt/src/app/qmlregister.h
+@@ -67,5 +67,5 @@ void registerTypes(QQmlEngine* engine,
+                    AppSettingsManager* appSettingsManager,
+                    PreviewEngine* previewEngine,
+                    ScreenInfo* screenInfo,
+-                   MainApplication* parent);
++                   QObject* parent);
+ }
+diff --git a/client-qt/client-qt/tests/CMakeLists.txt b/client-qt/tests/CMakeLists.txt
+index 8904d5ec..4e42b307 100644
+--- a/client-qt/client-qt/tests/CMakeLists.txt
++++ b/client-qt/tests/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_package(Qt${QT_VERSION_MAJOR} CONFIG REQUIRED QuickTest Test)
++find_package(Qt${QT_VERSION_MAJOR} CONFIG REQUIRED QuickTest Test Widgets)
+ 
+ if(MSVC)
+     # Download and unpack googletest for windows
+@@ -15,7 +15,7 @@ else()
+ endif()
+ 
+ enable_testing(true)
+-set(QML_TEST_LIBS ${QML_LIBS} Qt::QuickTest Qt::Test)
++set(QML_TEST_LIBS ${QT_LIBS} ${LIBCLIENT_NAME} Qt::QuickTest Qt::Test Qt::Widgets)
+ set(TESTS_INCLUDES
+     ${CMAKE_SOURCE_DIR}/src
+     ${CMAKE_SOURCE_DIR}/tests/qml
+@@ -192,4 +192,4 @@ else()
+                                ${LRC}/include)
+ 
+     add_test(NAME UnitTests COMMAND unittests)
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/client-qt/client-qt/tests/qml/main.cpp b/client-qt/tests/qml/main.cpp
+index 09c02f3e..4c42027c 100644
+--- a/client-qt/client-qt/tests/qml/main.cpp
++++ b/client-qt/tests/qml/main.cpp
+@@ -31,9 +31,10 @@
+ #include <QQmlEngine>
+ #include <QQmlContext>
+ #include <QFontDatabase>
++#ifdef WITH_WEBENGINE
+ #include <QtWebEngineCore>
+ #include <QtWebEngineQuick>
+-
++#endif
+ #ifdef Q_OS_WIN
+ #include <windows.h>
+ #endif
+@@ -155,9 +156,9 @@ main(int argc, char** argv)
+         // Adjust the argument count.
+         argc = std::distance(argv, end);
+     }
+-
++#ifdef WITH_WEBENGINE
+     QtWebEngineQuick::initialize();
+-
++#endif
+     QTEST_SET_MAIN_SOURCE_PATH
+     Setup setup(muteDring);
+     return quick_test_main_with_setup(argc, argv, "qml_test", nullptr, &setup);
+diff --git a/client-qt/client-qt/tests/unittests/account_unittest.cpp b/client-qt/tests/unittests/account_unittest.cpp
+index aa98453e..5af2ad6e 100644
+--- a/client-qt/client-qt/tests/unittests/account_unittest.cpp
++++ b/client-qt/tests/unittests/account_unittest.cpp
+@@ -19,8 +19,6 @@
+ 
+ #include "globaltestenvironment.h"
+ 
+-TestEnvironment globalEnv;
+-
+ /*!
+  * Test fixture for AccountAdapter testing
+  */
+diff --git a/client-qt/client-qt/tests/unittests/contact_unittest.cpp b/client-qt/tests/unittests/contact_unittest.cpp
+index af8a9a22..b05cc856 100644
+--- a/client-qt/client-qt/tests/unittests/contact_unittest.cpp
++++ b/client-qt/tests/unittests/contact_unittest.cpp
+@@ -18,8 +18,6 @@
+ 
+ #include "globaltestenvironment.h"
+ 
+-TestEnvironment globalEnv;
+-
+ /*!
+  * Test fixture for AccountAdapter testing
+  */
+-- 
+2.37.3
+
diff --git a/gnu/packages/patches/jami-libjami-headers-search.patch b/gnu/packages/patches/jami-libjami-headers-search.patch
new file mode 100644
index 0000000000..44e099a610
--- /dev/null
+++ b/gnu/packages/patches/jami-libjami-headers-search.patch
@@ -0,0 +1,109 @@
+From 1168aba6181e30ee4c322e5f437bde22bece5698 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
+Date: Sat, 5 Nov 2022 23:18:13 -0400
+Subject: [PATCH 1/3] cmake: Simplify lookup logic for libjami headers.
+
+* extras/build/cmake/modules/FindLibJami.cmake: Rename
+LIBJAMI_INCLUDE_DIRS to LIBJAMI_INCLUDE_DIR.  Use find_path to search
+for jami.h directory.
+* CMakeLists.txt: Adjust accordingly.
+* src/libclient/CMakeLists.txt: Likewise.
+* src/libclient/qtwrapper/CMakeLists.txt: Likewise.
+
+Change-Id: I494358f9bfafb41f000daeec4196747b2c184401
+---
+Upstream status: https://review.jami.net/c/jami-client-qt/+/22973
+
+ CMakeLists.txt                               |  2 +-
+ extras/build/cmake/modules/FindLibJami.cmake | 21 ++++++--------------
+ src/libclient/CMakeLists.txt                 |  2 +-
+ src/libclient/qtwrapper/CMakeLists.txt       |  2 +-
+ 4 files changed, 9 insertions(+), 18 deletions(-)
+
+diff --git a/client-qt/CMakeLists.txt b/CMakeLists.txt
+index d0a8fd70..94ac6074 100644
+--- a/client-qt/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -118,7 +118,7 @@ set(CMAKE_MODULE_PATH
+   ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
+ find_package(LibJami REQUIRED)
+ if(LIBJAMI_FOUND)
+-  include_directories(${LIBJAMI_INCLUDE_DIRS})
++  include_directories(${LIBJAMI_INCLUDE_DIR})
+ endif()
+ 
+ include(FindPython3)
+diff --git a/client-qt/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
+index ddb05319..9ad20d2b 100644
+--- a/client-qt/extras/build/cmake/modules/FindLibJami.cmake
++++ b/extras/build/cmake/modules/FindLibJami.cmake
+@@ -20,28 +20,19 @@
+ 
+ # Once done, this find module will set:
+ #
+-#   LIBJAMI_INCLUDE_DIRS - libjami include directories
++#   LIBJAMI_INCLUDE_DIR - libjami include directories
+ #   LIBJAMI_FOUND - whether it was able to find the include directories
+ #   LIBJAMI_LIB - path to libjami or libring library
+ 
+ set(LIBJAMI_FOUND true)
+ 
+ if(WITH_DAEMON_SUBMODULE)
+-  set(LIBJAMI_INCLUDE_DIRS ${DAEMON_DIR}/src/jami)
++  set(LIBJAMI_INCLUDE_DIR ${DAEMON_DIR}/src/jami)
+ else()
+-  if(EXISTS ${LIBJAMI_INCLUDE_DIR}/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_INCLUDE_DIR})
+-  elseif(EXISTS ${LIBJAMI_BUILD_DIR}/jami/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_BUILD_DIR}/jami)
+-  elseif(EXISTS ${RING_INCLUDE_DIR}/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${RING_INCLUDE_DIR})
+-  elseif(EXISTS ${RING_BUILD_DIR}/jami/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${RING_BUILD_DIR}/jami)
+-  elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/include/jami/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/jami)
+-  else()
++  find_path(LIBJAMI_INCLUDE_DIR jami.h PATH_SUFFIXES jami)
++  if(NOT LIBJAMI_INCLUDE_DIR)
+     message(STATUS "Jami daemon headers not found!
+-Set -DLIBJAMI_BUILD_DIR or -DCMAKE_INSTALL_PREFIX")
++Set -DCMAKE_INSTALL_PREFIX or use -DWITH_DAEMON_SUBMODULE")
+     set(LIBJAMI_FOUND false)
+   endif()
+ endif()
+@@ -102,5 +93,5 @@ endif()
+ # Restore the original value of CMAKE_FIND_LIBRARY_SUFFIXES.
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_orig})
+ 
+-message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIRS})
++message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR})
+ message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB})
+diff --git a/client-qt/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt
+index 2676c9c4..ac58ea2b 100644
+--- a/client-qt/src/libclient/CMakeLists.txt
++++ b/src/libclient/CMakeLists.txt
+@@ -62,7 +62,7 @@ set(CMAKE_MODULE_PATH
+   ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
+ find_package(LibJami REQUIRED)
+ if(LIBJAMI_FOUND)
+-  include_directories(${LIBJAMI_INCLUDE_DIRS})
++  include_directories(${LIBJAMI_INCLUDE_DIR})
+ endif()
+ 
+ string(SUBSTRING ${CMAKE_GENERATOR} 0 14 CMAKE_GENERATOR_SHORT)
+diff --git a/client-qt/src/libclient/qtwrapper/CMakeLists.txt b/src/libclient/qtwrapper/CMakeLists.txt
+index acee0d0c..ba68aac4 100644
+--- a/client-qt/src/libclient/qtwrapper/CMakeLists.txt
++++ b/client-qt/src/libclient/qtwrapper/CMakeLists.txt
+@@ -46,7 +46,7 @@ else()
+ endif()
+ 
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+-include_directories(${LIBJAMI_INCLUDE_DIRS})
++include_directories(${LIBJAMI_INCLUDE_DIR})
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dbus)
+ 
+-- 
+2.37.3
+
diff --git a/gnu/packages/patches/jami-sip-unregister.patch b/gnu/packages/patches/jami-sip-unregister.patch
new file mode 100644
index 0000000000..1f0302bb12
--- /dev/null
+++ b/gnu/packages/patches/jami-sip-unregister.patch
@@ -0,0 +1,48 @@
+From c1e6d664601b35a466f4e02e86a2c8181fdcca12 Mon Sep 17 00:00:00 2001
+From: Antoine Noreau <antoine.noreau@savoirfairelinux.com>
+Date: Thu, 3 Nov 2022 15:35:40 -0400
+Subject: [PATCH] sip: ensure correct unregister upon closure
+
+Ensure SIP connections are gracefully terminated:
+Removed duplicated register calls to SIP server
+
+Change-Id: I330e67cf9534504f92517996eb7b693b43d359d3
+Gitlab: #786
+---
+ src/upnp/upnp_context.cpp | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/daemon/src/upnp/upnp_context.cpp b/daemon/src/upnp/upnp_context.cpp
+index a447e2d75..c68fe502c 100644
+--- a/daemon/src/upnp/upnp_context.cpp
++++ b/daemon/src/upnp/upnp_context.cpp
+@@ -143,7 +143,7 @@ void
+ UPnPContext::stopUpnp(bool forceRelease)
+ {
+     if (not isValidThread()) {
+-        runOnUpnpContextQueue([this] { stopUpnp(); });
++        runOnUpnpContextQueue([this, forceRelease] { stopUpnp(forceRelease); });
+         return;
+     }
+ 
+@@ -168,10 +168,15 @@ UPnPContext::stopUpnp(bool forceRelease)
+         preferredIgd_.reset();
+         validIgdList_.clear();
+     }
+-
+     for (auto const& map : toRemoveList) {
+         requestRemoveMapping(map);
+-        updateMappingState(map, MappingState::FAILED);
++
++        /* Notify is not needed in updateMappingState when
++        shutting down (hence set it to false). NotifyCallback
++        would trigger a new SIP registration and create a
++        false registered state upon program close.  */
++
++        updateMappingState(map, MappingState::FAILED, false);
+         // We dont remove mappings with auto-update enabled,
+         // unless forceRelease is true.
+         if (not map->getAutoUpdate() or forceRelease) {
+-- 
+2.37.3
+
diff --git a/gnu/packages/patches/jami-xcb-link.patch b/gnu/packages/patches/jami-xcb-link.patch
new file mode 100644
index 0000000000..6879493123
--- /dev/null
+++ b/gnu/packages/patches/jami-xcb-link.patch
@@ -0,0 +1,72 @@
+From 3db2a7802422e69f50030db854abfb72fbc9caa4 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
+Date: Fri, 11 Nov 2022 22:38:32 -0500
+Subject: [PATCH] Move xcb include/link directives from jami to libclient.
+
+Relates to <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/882>.
+
+This problem was discovered when attempting to build the test suite:
+
+   ld: ../src/libclient/liblibjamiclient.a(avmodel.cpp.o): undefined
+   reference to symbol 'xcb_get_setup'
+
+* CMakeLists.txt: [!(APPLE or MSVC] Move xcb includes and link directives to...
+* src/libclient/CMakeLists.txt [!(APPLE or MSVC]: ... here.
+
+Change-Id: If9b6653e157081300caad8f13cafe4979a49630b
+---
+ CMakeLists.txt               | 6 +-----
+ src/libclient/CMakeLists.txt | 6 ++++++
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/client-qt/CMakeLists.txt b/client-qt/CMakeLists.txt
+index d0a8fd70..2a09fd6c 100644
+--- a/client-qt/CMakeLists.txt
++++ b/client-qt/CMakeLists.txt
+@@ -384,8 +384,6 @@ elseif (NOT APPLE)
+     add_definitions(${LIBGDKPIXBUF_CFLAGS})
+   endif()
+ 
+-  pkg_check_modules(XCB xcb)
+-
+   list(PREPEND CMAKE_PREFIX_PATH
+     ${LIBJAMI_CONTRIB_DIR}/native/ffmpeg/libavutil)
+   pkg_check_modules(LIBAVUTIL libavutil>=55.75.100)
+@@ -398,7 +396,6 @@ elseif (NOT APPLE)
+     ${LIBNOTIFY_INCLUDE_DIRS}
+     ${LIBGDKPIXBUF_INCLUDE_DIRS}
+     ${GLIB_INCLUDE_DIRS}
+-    ${XCB_INCLUDE_DIRS}
+     ${LIBAVUTIL_INCLUDE_DIRS})
+ 
+   set(JAMI_DATA_PREFIX "${CMAKE_INSTALL_PREFIX}/share")
+@@ -586,8 +583,7 @@ elseif (NOT APPLE)
+     ${LIBNOTIFY_LIBRARIES}
+     ${LIBGDKPIXBUF_LIBRARIES}
+     ${GLIB_LIBRARIES}
+-    ${GIO_LIBRARIES}
+-    ${XCB_LIBRARIES})
++    ${GIO_LIBRARIES})
+ 
+   # Installation rules
+   install(
+diff --git a/client-qt/src/libclient/CMakeLists.txt b/client-qt/src/libclient/CMakeLists.txt
+index 99780f5f..1dd32677 100644
+--- a/client-qt/src/libclient/CMakeLists.txt
++++ b/client-qt/src/libclient/CMakeLists.txt
+@@ -475,6 +475,12 @@ add_library(${LIBCLIENT_NAME} STATIC
+ foreach(QT_LIB ${QT_LIBS})
+   target_link_libraries(${LIBCLIENT_NAME} ${QT_LIB})
+ endforeach()
++
++if(NOT(APPLE OR MSVC))
++  pkg_check_modules(XCB xcb IMPORTED_TARGET)
++  target_link_libraries(${LIBCLIENT_NAME} PkgConfig::XCB)
++endif()
++
+ if(ENABLE_LIBWRAP)
+   target_link_libraries(${LIBCLIENT_NAME} qtwrapper ${LIBJAMI_LIB})
+   if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC"))
+-- 
+2.37.3
+