aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2023-08-18 01:11:25 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2024-01-09 22:10:13 -0500
commit8237f4e9970623f4e7d91d49fcfa12b2854ddef6 (patch)
treef5e59b6105d0b21da6ef6b0eb8448f39da80fd22
parentd9c9b97e93f21b2ece3f16a050e7c2935b60a03f (diff)
downloadguix-8237f4e9970623f4e7d91d49fcfa12b2854ddef6.tar.gz
guix-8237f4e9970623f4e7d91d49fcfa12b2854ddef6.zip
gnu: jami: Update to 20231222.2.
* gnu/packages/jami.scm (%jami-version): Rename to... (%jami-nightly-version): ... this. Update to 20231222.2. (%jami-daemon-commit): New variable. (%jami-sources): Delete variable. (libjami) Adjust source to use %jami-nightly-version, %jami-daemon-commit. [source]: Fetch from git. Apply libjami-ac-config-files.patch. [arguments] <make-flags>: Skip ut_media_player test. <phases>: Add extend-scheduler-test-timeout and extend-scheduler-test-timeout phases. [inputs]: Replace dbus-c++ with sdbus-c++. Add dhtnet. Replace libgit2 with libgit2-1.6. (jami): Set version to %jami-nightly-version. [source]: Fetch from git. Apply new jami-qml-tests-discovery.patch, jami-skip-tests-requiring-internet.patch and jami-unbundle-dependencies.patch patches. [arguments] <configure-flags>: Add -DWITH_DAEMON_SUBMODULE=OFF. <phases>: Delete change-directory/maybe. Adjust check phase. Add fake-x11-environment, copy-3rdparty-source-dependencies and disable-problematic-tests phases. [inputs]: Add md4c and tidy-html. * gnu/packages/patches/jami-qml-tests-discovery.patch: New file. * gnu/packages/patches/libjami-ac-config-files.patch: Likewise. * gnu/packages/patches/jami-skip-tests-requiring-internet.patch: Likewise. * gnu/packages/patches/jami-unbundle-dependencies.patch: Likewise. * gnu/packages/patches/jami-libjami-headers-search.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Update accordingly. * gnu/packages/patches/jami-disable-integration-tests.patch: Adjust patch. Series-changes: 2 - Update Jami to latest nightly version (20231222.2) Change-Id: If30f1178bdfa29c4ea3e54dbb7997e360788adae
-rw-r--r--gnu/local.mk4
-rw-r--r--gnu/packages/jami.scm124
-rw-r--r--gnu/packages/patches/jami-disable-integration-tests.patch10
-rw-r--r--gnu/packages/patches/jami-libjami-headers-search.patch5
-rw-r--r--gnu/packages/patches/jami-qml-tests-discovery.patch15
-rw-r--r--gnu/packages/patches/jami-skip-tests-requiring-internet.patch51
-rw-r--r--gnu/packages/patches/jami-unbundle-dependencies.patch71
-rw-r--r--gnu/packages/patches/libjami-ac-config-files.patch52
8 files changed, 280 insertions, 52 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 63d2e333cf..62242d8c62 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1467,6 +1467,9 @@ dist_patch_DATA = \
%D%/packages/patches/itk-snap-alt-glibc-compat.patch \
%D%/packages/patches/jami-disable-integration-tests.patch \
%D%/packages/patches/jami-libjami-headers-search.patch \
+ %D%/packages/patches/jami-qml-tests-discovery.patch \
+ %D%/packages/patches/jami-skip-tests-requiring-internet.patch \
+ %D%/packages/patches/jami-unbundle-dependencies.patch \
%D%/packages/patches/jamvm-1.5.1-aarch64-support.patch \
%D%/packages/patches/jamvm-1.5.1-armv7-support.patch \
%D%/packages/patches/jamvm-2.0.0-aarch64-support.patch \
@@ -1557,6 +1560,7 @@ dist_patch_DATA = \
%D%/packages/patches/libgnome-encoding.patch \
%D%/packages/patches/libgnomeui-utf8.patch \
%D%/packages/patches/libgrss-CVE-2016-2001.patch \
+ %D%/packages/patches/libjami-ac-config-files.patch \
%D%/packages/patches/libjxr-fix-function-signature.patch \
%D%/packages/patches/libjxr-fix-typos.patch \
%D%/packages/patches/libofa-ftbfs-1.diff \
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 4d1b3a3db2..0987ac5e5e 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
-;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -38,6 +38,7 @@
#:use-module (gnu packages guile)
#:use-module (gnu packages libcanberra)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages markup)
#:use-module (gnu packages networking)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -54,6 +55,7 @@
#:use-module (gnu packages version-control)
#:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
+ #:use-module (gnu packages web)
#:use-module (gnu packages webkit)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xiph)
@@ -68,32 +70,33 @@
#:use-module (guix packages)
#:use-module (guix utils))
-(define %jami-version "20230323.0")
+;;; We use nightlies as stable versions are a bit far in-between, and often
+;;; have bugs anyway. When the nightly version change, do not forget to
+;;; retrieve the associated daemon submodule commit and update it in
+;;; %jami-daemon-commit variable below.
-(define %jami-sources
- ;; Return an origin object of the tarball release sources archive of the
- ;; Jami project.
- (origin
- (method url-fetch)
- (uri (string-append "https://dl.jami.net/release/tarballs/jami-"
- %jami-version ".tar.gz"))
- (modules '((guix build utils)))
- (snippet
- ;; Delete multiple MiBs of bundled tarballs. The daemon/contrib
- ;; directory contains the custom patches for pjproject and other
- ;; libraries used by Jami.
- '(delete-file-recursively "daemon/contrib/tarballs"))
- (sha256
- (base32
- "0vjsjr37cb87j9hqbmipyxn4877k1wn3l0vzca3l3ldgknglz7v2"))
- (patches (search-patches "jami-disable-integration-tests.patch"
- "jami-libjami-headers-search.patch"))))
+;;; When updating Jami, make sure that the patches used for ffmpeg-jami are up
+;;; to date with those listed in
+;;; <https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak>.
+(define %jami-nightly-version "20231222.2")
+(define %jami-daemon-commit "317b7317dcda4afb733ddb9bd5b450d4635941ae")
(define-public libjami
(package
(name "libjami")
- (version %jami-version)
- (source %jami-sources)
+ (version %jami-nightly-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://review.jami.net/jami-daemon")
+ (commit %jami-daemon-commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "16qx50xz2mkw894irjsvql82iw7wpc5xncxpvw1nqd2sxhgfiq0i"))
+ (patches (search-patches
+ "libjami-ac-config-files.patch"
+ "jami-disable-integration-tests.patch"))))
(outputs '("out" "bin" "debug")) ;"bin' contains jamid
(build-system gnu-build-system)
(arguments
@@ -103,13 +106,25 @@
;; user scripts too, until more general purpose Scheme bindings are made
;; available (see: test/agent/README.md).
#:configure-flags #~(list "--enable-agent" "--enable-debug")
- #:make-flags #~(list "V=1") ;build verbosely
+ #:make-flags
+ #~(list
+ "V=1" ;build verbosely
+ ;; The 'ut_media_player' is known to fail (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/935).
+ "XFAIL_TESTS=ut_media_player")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'change-directory/maybe
(lambda _
;; Allow building from the tarball or a git checkout.
(false-if-exception (chdir "daemon"))))
+ (add-after 'change-directory/maybe 'extend-scheduler-test-timeout
+ (lambda _
+ ;; The ut_scheduler unit test may fail on slower machines (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/939).
+ (substitute* "test/unitTest/scheduler.cpp"
+ (("std::chrono::seconds\\(3)")
+ "std::chrono::seconds(30)"))))
(add-after 'install 'delete-static-libraries
;; Remove 100+ MiB of static libraries. "--disable-static" cannot
;; be used as the test suite requires access to private symbols
@@ -134,14 +149,14 @@
(inputs
(list alsa-lib
asio
- dbus-c++
+ dhtnet
eudev
ffmpeg-jami
guile-3.0
jack-1
jsoncpp
libarchive
- libgit2
+ libgit2-1.6
libnatpmp
libsecp256k1
libupnp
@@ -149,6 +164,7 @@
openssl
pjproject-jami
pulseaudio
+ sdbus-c++
speex
speexdsp
webrtc-audio-processing
@@ -214,15 +230,29 @@ QSortFilterProxyModel conveniently exposed for QML.")
(define-public jami
(package
(name "jami")
- (version %jami-version)
- (source %jami-sources)
+ (version %jami-nightly-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://review.jami.net/jami-client-qt")
+ (commit (string-append "nightly/" %jami-nightly-version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ypbbyqmq6x9zq4sr550k38v8pg7yq685bmwqmigqzhqgfazcg97"))
+ (patches (search-patches
+ "jami-libjami-headers-search.patch"
+ "jami-qml-tests-discovery.patch"
+ "jami-skip-tests-requiring-internet.patch"
+ "jami-unbundle-dependencies.patch"))))
(build-system qt-build-system)
(outputs '("out" "debug"))
(arguments
(list
#:qtbase qtbase
#:configure-flags
- #~(list "-DENABLE_TESTS=ON"
+ #~(list "-DWITH_DAEMON_SUBMODULE=OFF"
+ "-DENABLE_TESTS=ON"
;; Disable the webengine since it grows the closure size by
;; about 450 MiB and requires more resources.
"-DWITH_WEBENGINE=OFF"
@@ -231,11 +261,7 @@ QSortFilterProxyModel conveniently exposed for QML.")
"-DENABLE_LIBWRAP=ON")
#:phases
#~(modify-phases %standard-phases
- (add-after 'unpack 'change-directory/maybe
- (lambda _
- ;; Allow building from the tarball or a git checkout.
- (false-if-exception (chdir "client-qt"))))
- (add-after 'change-directory/maybe 'fix-version-string
+ (add-after 'unpack 'fix-version-string
(lambda _
(substitute* "src/app/version.h"
(("VERSION_STRING")
@@ -244,6 +270,17 @@ QSortFilterProxyModel conveniently exposed for QML.")
(string-append "const char VERSION_STRING[] = \""
#$version "\";\n"
anchor)))))
+ (add-after 'unpack 'copy-3rdparty-source-dependencies
+ (lambda _
+ (copy-recursively #$(package-source sortfilterproxymodel)
+ "3rdparty/SortFilterProxyModel")))
+ (add-before 'configure 'fake-x11-environment
+ (lambda _
+ ;; This works around the lack of configuration for the X11
+ ;; push-to-talk feature, which is auto-detected via the
+ ;; XDG_SESSION_TYPE environment variable (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1504).
+ (setenv "XDG_SESSION_TYPE" "x11")))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
@@ -252,22 +289,13 @@ QSortFilterProxyModel conveniently exposed for QML.")
;; The tests require a writable HOME.
(setenv "HOME" "/tmp")
- (display "Running unittests...\n")
- (invoke "tests/unittests" "-mutejamid")
+ (display "Running unit tests...\n")
+ (invoke "tests/unit_tests")
- ;; XXX: There are currently multiple failures with the
- ;; functional tests (see:
- ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/883),
- ;; so the code below is disabled for now.
- ;;
+ ;; XXX: The QML test suite fails, exiting with status code 1 (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/883).
;; (display "Running functional tests...\n")
- ;; ;; This is to allow building from the source tarball or
- ;; ;; directly from the git repository.
- ;; (let ((tests-qml (if (file-exists? "../client-qt/tests")
- ;; "../client-qt/tests/qml"
- ;; "../tests/qml")))
- ;; (invoke "tests/qml_tests" "-mutejamid"
- ;; "-input" tests-qml))
+ ;; (invoke "tests/qml_tests")
))))))
(native-inputs
(list googletest
@@ -282,6 +310,7 @@ QSortFilterProxyModel conveniently exposed for QML.")
libnotify
libxcb
libxkbcommon
+ md4c
network-manager
qrencode
qt5compat
@@ -290,6 +319,7 @@ QSortFilterProxyModel conveniently exposed for QML.")
qtnetworkauth
qtpositioning
qtsvg
+ tidy-html ;used by src/app/htmlparser.h
vulkan-loader))
(home-page "https://jami.net")
(synopsis "Qt Jami client")
diff --git a/gnu/packages/patches/jami-disable-integration-tests.patch b/gnu/packages/patches/jami-disable-integration-tests.patch
index 1efb7d552e..18f13800ac 100644
--- a/gnu/packages/patches/jami-disable-integration-tests.patch
+++ b/gnu/packages/patches/jami-disable-integration-tests.patch
@@ -1,3 +1,5 @@
+This issue is tracked at https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/824.
+
From 3fd7acc6e5a8c316c366827956d7c06affdc9685 Mon Sep 17 00:00:00 2001
From: Olivier Dion <olivier.dion@savoirfairelinux.com>
Date: Fri, 7 Oct 2022 15:20:37 -0400
@@ -17,8 +19,8 @@ With file names adjusted for the source tarball.
diff --git a/configure.ac b/configure.ac
index 27215d044..aaeef1c1b 100644
---- a/daemon/configure.ac
-+++ b/daemon/configure.ac
+--- a/configure.ac
++++ b/configure.ac
@@ -40,6 +40,11 @@ AS_IF([test "x$enable_debug" = "xyes"],
[DAEMONCFLAGS+=" -DNDEBUG=1 -O3"
DAEMONCXXFLAGS+=" -DNDEBUG=1 -O3 -Wno-deprecated"])
@@ -33,8 +35,8 @@ index 27215d044..aaeef1c1b 100644
[Build fuzzing tools]))
diff --git a/test/unitTest/Makefile.am b/test/unitTest/Makefile.am
index f2b0fd994..ab232ddb7 100644
---- a/daemon/test/unitTest/Makefile.am
-+++ b/daemon/test/unitTest/Makefile.am
+--- a/test/unitTest/Makefile.am
++++ b/test/unitTest/Makefile.am
@@ -13,30 +13,6 @@ check_PROGRAMS =
####### Unit Test ########
diff --git a/gnu/packages/patches/jami-libjami-headers-search.patch b/gnu/packages/patches/jami-libjami-headers-search.patch
index 92cc92a4a6..3e7e19d703 100644
--- a/gnu/packages/patches/jami-libjami-headers-search.patch
+++ b/gnu/packages/patches/jami-libjami-headers-search.patch
@@ -1,4 +1,7 @@
-Upstream status: https://review.jami.net/c/jami-client-qt/+/24273.
+It was applied, then reverted (by mistake?) in 4d2c55348bc014.
+
+It's been resubmitted here:
+https://lists.gnu.org/archive/html/jami/2024-01/msg00005.html
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d71b84b..36729698 100644
diff --git a/gnu/packages/patches/jami-qml-tests-discovery.patch b/gnu/packages/patches/jami-qml-tests-discovery.patch
new file mode 100644
index 0000000000..11fd69571c
--- /dev/null
+++ b/gnu/packages/patches/jami-qml-tests-discovery.patch
@@ -0,0 +1,15 @@
+Upstream status: https://review.jami.net/c/jami-client-qt/+/25640
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index d50908cf..587c9d15 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -73,6 +73,8 @@ endif()
+
+ string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
+
++set(QUICK_TEST_SOURCE_DIR "${CMAKE_SOURCE_DIR}tests/qml/src")
++
+ set(QML_TESTS_SOURCE_FILES
+ ${CMAKE_SOURCE_DIR}/tests/qml/main.cpp
+ ${TEST_QML_RESOURCES}
diff --git a/gnu/packages/patches/jami-skip-tests-requiring-internet.patch b/gnu/packages/patches/jami-skip-tests-requiring-internet.patch
new file mode 100644
index 0000000000..1abc0e80cb
--- /dev/null
+++ b/gnu/packages/patches/jami-skip-tests-requiring-internet.patch
@@ -0,0 +1,51 @@
+Forwarded upstream: https://lists.gnu.org/archive/html/jami/2024-01/msg00010.html
+
+From 1d3b044c85c32341cca392254fe8bbf34a4639e1 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 9 Jan 2024 11:14:04 -0500
+Subject: [PATCH] tests: Skip tests that need Internet when there's none.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* tests/unittests/messageparser_unittest.cpp (ALinkIsParsedCorrectly)
+(YoutubeLinkIsParsedCorrectly): Skip when there is no Internet.
+
+Series-to: jami@gnu.org
+Series-cc: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
+Fixes: <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1507>
+Change-Id: I0a5b57cd82f93fd7edf3fbeb73fb3db5a04c628c
+---
+ tests/unittests/messageparser_unittest.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/tests/unittests/messageparser_unittest.cpp b/tests/unittests/messageparser_unittest.cpp
+index c10b0d0b..df7a0692 100644
+--- a/tests/unittests/messageparser_unittest.cpp
++++ b/tests/unittests/messageparser_unittest.cpp
+@@ -69,6 +69,9 @@ TEST_F(MessageParserFixture, TextIsParsedCorrectly)
+ */
+ TEST_F(MessageParserFixture, ALinkIsParsedCorrectly)
+ {
++ if (!globalEnv.connectivityMonitor->isOnline())
++ GTEST_SKIP() << "ALinkIsParsedCorrectly requires Internet connectivity";
++
+ auto linkColor = QColor::fromRgb(0, 0, 255);
+ auto backgroundColor = QColor::fromRgb(0, 0, 255);
+
+@@ -174,6 +177,9 @@ TEST_F(MessageParserFixture, FencedCodeIsParsedCorrectly)
+ */
+ TEST_F(MessageParserFixture, YoutubeLinkIsParsedCorrectly)
+ {
++ if (!globalEnv.connectivityMonitor->isOnline())
++ GTEST_SKIP() << "YoutubeLinkIsParsedCorrectly requires Internet connectivity";
++
+ auto url = "https://www.youtube.com/watch?v=1234567890";
+ auto msg = "blah blah " + QString(url) + " blah blah";
+
+
+base-commit: a4300308dc8d03d59f620bb5fed753df5cf31ed9
+prerequisite-patch-id: 90a419e7de1f4fa5bb68bc58ad0da2817ed268e0
+--
+2.41.0
+
diff --git a/gnu/packages/patches/jami-unbundle-dependencies.patch b/gnu/packages/patches/jami-unbundle-dependencies.patch
new file mode 100644
index 0000000000..dab82b26cb
--- /dev/null
+++ b/gnu/packages/patches/jami-unbundle-dependencies.patch
@@ -0,0 +1,71 @@
+Forwarded here: https://lists.gnu.org/archive/html/jami/2024-01/msg00007.html
+
+From a302dc0a0faf2778331745a1d01bc3071e182d4d Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Mon, 8 Jan 2024 16:07:05 -0500
+Subject: [PATCH] build: Allow using system-provided md4c and tidy libraries.
+
+* CMakeLists.txt <md4c, tidy>: Search for libraries in the system
+first, falling back to bundled copies in case they aren't found.
+
+Series-to: jami@gnu.org
+Fixes: <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1506>
+Change-Id: I637959fefce6a21b0ee73a793acb6c3c42dcdce0
+---
+ CMakeLists.txt | 36 +++++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 38e7a4e2..3f1bd599 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -545,19 +545,33 @@ add_subdirectory(3rdparty/SortFilterProxyModel)
+ set(SFPM_OBJECTS $<TARGET_OBJECTS:SortFilterProxyModel>)
+
+ # md4c
+-set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
+-add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
+-list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
+-list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
+-list(APPEND CLIENT_LIBS md4c-html)
++find_package(md4c)
++if(md4c_FOUND)
++ message(STATUS "Using system-provided md4c-html")
++ list(APPEND CLIENT_LIBS md4c::md4c-html)
++else()
++ message("Using bundled md4c-html library")
++ set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
++ add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
++ list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
++ list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
++ list(APPEND CLIENT_LIBS md4c-html)
++endif()
+
+ # tidy-html5
+-set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
+-set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
+-add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
+-list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
+-list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
+-list(APPEND CLIENT_LIBS tidy-static)
++pkg_check_modules(tidy IMPORTED_TARGET tidy)
++if(tidy_FOUND)
++ message(STATUS "Using system-provided tidy")
++ list(APPEND CLIENT_LIBS PkgConfig::tidy)
++else()
++ message("Using bundled tidy library")
++ set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
++ set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
++ add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
++ list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
++ list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
++ list(APPEND CLIENT_LIBS tidy-static)
++endif()
+
+ # common executable sources
+ qt_add_executable(
+
+base-commit: a4300308dc8d03d59f620bb5fed753df5cf31ed9
+--
+2.41.0
+
diff --git a/gnu/packages/patches/libjami-ac-config-files.patch b/gnu/packages/patches/libjami-ac-config-files.patch
new file mode 100644
index 0000000000..8508d55ee1
--- /dev/null
+++ b/gnu/packages/patches/libjami-ac-config-files.patch
@@ -0,0 +1,52 @@
+Forwarded here: https://lists.gnu.org/archive/html/jami/2024-01/msg00003.html
+
+From 20a1702d881b381979d31c456f1b8cf5e0f728ad Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sun, 7 Jan 2024 16:40:41 -0500
+Subject: [PATCH] configure.ac: Expand AC_CONFIG_FILES to fix a race.
+
+The commands apparently run for each file listed, or something
+similar, leading to:
+
+ configure: creating ./config.status
+ config.status: creating test/agent/Makefile
+ chmod: cannot access 'test/agent/pre-inst-env': No such file or directory
+ chmod: cannot access 'test/agent/scenarios/bulk-calls/run-scenario': No such file or directory
+ config.status: creating test/agent/pre-inst-env
+ chmod: cannot access 'test/agent/scenarios/bulk-calls/run-scenario': No such file or directory
+
+* configure.ac [ENABLE_AGENT]: Separate AC_CONFIG_FILES uses per file.
+
+Series-to: jami@gnu.org
+Series-postfix: daemon
+Change-Id: Ib283955b73540248e09bf31ef44ef3d178b216fa
+---
+ configure.ac | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index cdea5ff1c..2ab96d817 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -61,11 +61,11 @@ AC_ARG_ENABLE([agent],
+ [Build agent]))
+ AM_CONDITIONAL([ENABLE_AGENT], [test "x$enable_agent" = "xyes"])
+ AM_COND_IF([ENABLE_AGENT],
+- [AC_CONFIG_FILES([test/agent/Makefile
+- test/agent/pre-inst-env:test/agent/build-aux/pre-inst-env.in
+- test/agent/scenarios/bulk-calls/run-scenario],
+- [chmod +x test/agent/pre-inst-env
+- chmod +x test/agent/scenarios/bulk-calls/run-scenario])])
++ [AC_CONFIG_FILES([test/agent/Makefile])
++ AC_CONFIG_FILES([test/agent/pre-inst-env:test/agent/build-aux/pre-inst-env.in],
++ [chmod +x test/agent/pre-inst-env])
++ AC_CONFIG_FILES([test/agent/scenarios/bulk-calls/run-scenario],
++ [chmod +x test/agent/scenarios/bulk-calls/run-scenario])])
+
+ AC_ARG_ENABLE([tracepoints], AS_HELP_STRING([--enable-tracepoints], [Enable tracepoints]))
+
+
+base-commit: e246fb2e090c9b3de55e2d455eee5a6f05a5b286
+--
+2.41.0
+