| 1 | ;;; GNU Guix --- Functional package management for GNU |
| 2 | ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> |
| 3 | ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com> |
| 4 | ;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl> |
| 5 | ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> |
| 6 | ;;; |
| 7 | ;;; This file is part of GNU Guix. |
| 8 | ;;; |
| 9 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
| 10 | ;;; under the terms of the GNU General Public License as published by |
| 11 | ;;; the Free Software Foundation; either version 3 of the License, or (at |
| 12 | ;;; your option) any later version. |
| 13 | ;;; |
| 14 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
| 15 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 17 | ;;; GNU General Public License for more details. |
| 18 | ;;; |
| 19 | ;;; You should have received a copy of the GNU General Public License |
| 20 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
| 21 | |
| 22 | (define-module (gnu packages jami) |
| 23 | #:use-module ((guix licenses) #:prefix license:) |
| 24 | #:use-module (gnu packages aidc) |
| 25 | #:use-module (gnu packages audio) |
| 26 | #:use-module (gnu packages autotools) |
| 27 | #:use-module (gnu packages backup) |
| 28 | #:use-module (gnu packages base) |
| 29 | #:use-module (gnu packages boost) |
| 30 | #:use-module (gnu packages check) |
| 31 | #:use-module (gnu packages compression) |
| 32 | #:use-module (gnu packages crypto) |
| 33 | #:use-module (gnu packages documentation) |
| 34 | #:use-module (gnu packages gettext) |
| 35 | #:use-module (gnu packages glib) |
| 36 | #:use-module (gnu packages gnome) |
| 37 | #:use-module (gnu packages gtk) |
| 38 | #:use-module (gnu packages libcanberra) |
| 39 | #:use-module (gnu packages linux) |
| 40 | #:use-module (gnu packages multiprecision) |
| 41 | #:use-module (gnu packages networking) |
| 42 | #:use-module (gnu packages pcre) |
| 43 | #:use-module (gnu packages perl) |
| 44 | #:use-module (gnu packages pkg-config) |
| 45 | #:use-module (gnu packages pulseaudio) |
| 46 | #:use-module (gnu packages python) |
| 47 | #:use-module (gnu packages qt) |
| 48 | #:use-module (gnu packages serialization) |
| 49 | #:use-module (gnu packages sqlite) |
| 50 | #:use-module (gnu packages telephony) |
| 51 | #:use-module (gnu packages tls) |
| 52 | #:use-module (gnu packages upnp) |
| 53 | #:use-module (gnu packages video) |
| 54 | #:use-module (gnu packages webkit) |
| 55 | #:use-module (gnu packages xiph) |
| 56 | #:use-module (gnu packages xorg) |
| 57 | #:use-module (gnu packages) |
| 58 | #:use-module (guix build-system cmake) |
| 59 | #:use-module (guix build-system gnu) |
| 60 | #:use-module (guix download) |
| 61 | #:use-module (guix git-download) |
| 62 | #:use-module (guix packages) |
| 63 | #:use-module (guix utils) |
| 64 | #:use-module (srfi srfi-1)) |
| 65 | |
| 66 | (define %jami-version "20200710.1.6bd18d2") |
| 67 | |
| 68 | (define* (jami-source #:key keep-contrib-patches?) |
| 69 | "Return an origin object of the tarball release sources archive of Jami. |
| 70 | When KEEP-CONTRIB-PATCHES? is #t, do not completely remove the contrib |
| 71 | subdirectory, which contains patches to be applied to some of the dependencies |
| 72 | of Jami." |
| 73 | (origin |
| 74 | (method url-fetch) |
| 75 | (uri (string-append "https://dl.jami.net/release/tarballs/jami_" |
| 76 | %jami-version |
| 77 | ".tar.gz")) |
| 78 | (modules '((guix build utils))) |
| 79 | (snippet |
| 80 | `(begin |
| 81 | ;; Delete over 200 MiB of bundled tarballs. The contrib directory |
| 82 | ;; contains the custom patches for pjproject and other libraries used |
| 83 | ;; by Savoir-faire Linux. |
| 84 | (if ,keep-contrib-patches? |
| 85 | (delete-file-recursively "daemon/contrib/tarballs") |
| 86 | (delete-file-recursively "daemon/contrib")) |
| 87 | ;; Remove code from unused Jami clients. |
| 88 | (for-each delete-file-recursively '("client-android" |
| 89 | "client-macosx" |
| 90 | "client-uwp" |
| 91 | "client-windows")) |
| 92 | #t)) |
| 93 | (sha256 |
| 94 | (base32 |
| 95 | "0lg61jv39x7kc9lq30by246xb6gcgp1rzj49ak7ff8nqpfzyfvva")))) |
| 96 | |
| 97 | (define %sfl-patches (jami-source #:keep-contrib-patches? #t)) |
| 98 | |
| 99 | (define %jami-sources (jami-source)) |
| 100 | |
| 101 | ;; Savoir-faire Linux modifies many libraries to add features |
| 102 | ;; to Jami. This procedure makes applying patches to a given |
| 103 | ;; package easy. |
| 104 | (define jami-apply-dependency-patches |
| 105 | '(lambda* (#:key inputs dep-name patches) |
| 106 | (let ((patches-directory "sfl-patches")) |
| 107 | (mkdir-p patches-directory) |
| 108 | (invoke "tar" "-xvf" (assoc-ref inputs "sfl-patches") |
| 109 | "-C" patches-directory |
| 110 | "--strip-components=5" |
| 111 | (string-append "ring-project/daemon/contrib/src/" |
| 112 | dep-name)) |
| 113 | (for-each |
| 114 | (lambda (file) |
| 115 | (invoke "patch" "--force" "-p1" "-i" |
| 116 | (string-append patches-directory "/" |
| 117 | file ".patch"))) |
| 118 | patches)))) |
| 119 | |
| 120 | (define-public pjproject-jami |
| 121 | (package |
| 122 | (inherit pjproject) |
| 123 | (name "pjproject-jami") |
| 124 | (native-inputs |
| 125 | `(("sfl-patches" ,%sfl-patches) |
| 126 | ,@(package-native-inputs pjproject))) |
| 127 | (arguments |
| 128 | (substitute-keyword-arguments (package-arguments pjproject) |
| 129 | ((#:phases phases '%standard-phases) |
| 130 | `(modify-phases ,phases |
| 131 | (add-after 'make-source-files-writable 'apply-patches |
| 132 | (lambda* (#:key inputs #:allow-other-keys) |
| 133 | (,jami-apply-dependency-patches |
| 134 | #:inputs inputs |
| 135 | #:dep-name "pjproject" |
| 136 | #:patches |
| 137 | '("0001-rfc6544" |
| 138 | "0002-rfc2466" |
| 139 | "0003-add-tcp-keep-alive" |
| 140 | "0004-multiple_listeners" |
| 141 | "0005-fix_ebusy_turn" |
| 142 | "0006-ignore_ipv6_on_transport_check" |
| 143 | "0007-pj_ice_sess" |
| 144 | "0008-fix_ioqueue_ipv6_sendto" |
| 145 | "0009-add-config-site" |
| 146 | ;; Note: The base pjproject is already patched with |
| 147 | ;; "0010-fix-pkgconfig". |
| 148 | "0011-fix-tcp-death-detection" |
| 149 | "0012-fix-turn-shutdown-crash")) |
| 150 | #t)))))))) |
| 151 | |
| 152 | ;; The following variables are configure flags used by ffmpeg-jami. They're |
| 153 | ;; from the ring-project/daemon/contrib/src/ffmpeg/rules.mak file. We try to |
| 154 | ;; keep it as close to the official Jami package as possible, to provide all |
| 155 | ;; the codecs and extra features that are expected. |
| 156 | ;; |
| 157 | ;; See: |
| 158 | ;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak |
| 159 | |
| 160 | (define %ffmpeg-default-configure-flags |
| 161 | '("--disable-everything" |
| 162 | "--enable-zlib" |
| 163 | "--enable-gpl" |
| 164 | "--enable-swscale" |
| 165 | "--enable-bsfs" |
| 166 | "--disable-filters" |
| 167 | "--disable-programs" |
| 168 | "--disable-postproc" |
| 169 | "--disable-protocols" |
| 170 | "--enable-protocol=crypto" |
| 171 | "--enable-protocol=file" |
| 172 | "--enable-protocol=rtp" |
| 173 | "--enable-protocol=srtp" |
| 174 | "--enable-protocol=tcp" |
| 175 | "--enable-protocol=udp" |
| 176 | "--enable-protocol=unix" |
| 177 | "--enable-protocol=pipe" |
| 178 | |
| 179 | ;; enable muxers/demuxers |
| 180 | "--disable-demuxers" |
| 181 | "--disable-muxers" |
| 182 | "--enable-muxer=rtp" |
| 183 | "--enable-muxer=g722" |
| 184 | "--enable-muxer=h263" |
| 185 | "--enable-muxer=h264" |
| 186 | "--enable-muxer=hevc" |
| 187 | "--enable-muxer=webm" |
| 188 | "--enable-muxer=ogg" |
| 189 | "--enable-muxer=pcm_s16be" |
| 190 | "--enable-muxer=pcm_s16le" |
| 191 | "--enable-demuxer=rtp" |
| 192 | "--enable-demuxer=mjpeg" |
| 193 | "--enable-demuxer=mjpeg_2000" |
| 194 | "--enable-demuxer=mpegvideo" |
| 195 | "--enable-demuxer=gif" |
| 196 | "--enable-demuxer=image_jpeg_pipe" |
| 197 | "--enable-demuxer=image_png_pipe" |
| 198 | "--enable-demuxer=image_webp_pipe" |
| 199 | "--enable-demuxer=matroska" |
| 200 | "--enable-demuxer=m4v" |
| 201 | "--enable-demuxer=mp3" |
| 202 | "--enable-demuxer=ogg" |
| 203 | "--enable-demuxer=flac" |
| 204 | "--enable-demuxer=wav" |
| 205 | "--enable-demuxer=ac3" |
| 206 | "--enable-demuxer=g722" |
| 207 | "--enable-demuxer=pcm_mulaw" |
| 208 | "--enable-demuxer=pcm_alaw" |
| 209 | "--enable-demuxer=pcm_s16be" |
| 210 | "--enable-demuxer=pcm_s16le" |
| 211 | "--enable-demuxer=h263" |
| 212 | "--enable-demuxer=h264" |
| 213 | "--enable-demuxer=hevc" |
| 214 | |
| 215 | ;; enable parsers |
| 216 | "--enable-parser=h263" |
| 217 | "--enable-parser=h264" |
| 218 | "--enable-parser=hevc" |
| 219 | "--enable-parser=mpeg4video" |
| 220 | "--enable-parser=vp8" |
| 221 | "--enable-parser=vp9" |
| 222 | "--enable-parser=opus" |
| 223 | |
| 224 | ;; encoders/decoders |
| 225 | "--enable-encoder=adpcm_g722" |
| 226 | "--enable-decoder=adpcm_g722" |
| 227 | "--enable-encoder=rawvideo" |
| 228 | "--enable-decoder=rawvideo" |
| 229 | "--enable-encoder=libx264" |
| 230 | "--enable-decoder=h264" |
| 231 | "--enable-encoder=pcm_alaw" |
| 232 | "--enable-decoder=pcm_alaw" |
| 233 | "--enable-encoder=pcm_mulaw" |
| 234 | "--enable-decoder=pcm_mulaw" |
| 235 | "--enable-encoder=mpeg4" |
| 236 | "--enable-decoder=mpeg4" |
| 237 | "--enable-encoder=libvpx_vp8" |
| 238 | "--enable-decoder=vp8" |
| 239 | "--enable-decoder=vp9" |
| 240 | "--enable-encoder=h263" |
| 241 | "--enable-encoder=h263p" |
| 242 | "--enable-decoder=h263" |
| 243 | "--enable-encoder=mjpeg" |
| 244 | "--enable-decoder=mjpeg" |
| 245 | "--enable-decoder=mjpegb" |
| 246 | "--enable-libspeex" |
| 247 | "--enable-libopus" |
| 248 | "--enable-libvpx" |
| 249 | "--enable-libx264" |
| 250 | "--enable-encoder=libspeex" |
| 251 | "--enable-decoder=libspeex" |
| 252 | "--enable-encoder=libopus" |
| 253 | "--enable-decoder=libopus" |
| 254 | |
| 255 | ;; decoders for ringtones and audio streaming |
| 256 | "--enable-decoder=flac" |
| 257 | "--enable-decoder=vorbis" |
| 258 | "--enable-decoder=aac" |
| 259 | "--enable-decoder=ac3" |
| 260 | "--enable-decoder=eac3" |
| 261 | "--enable-decoder=mp3" |
| 262 | "--enable-decoder=pcm_u24be" |
| 263 | "--enable-decoder=pcm_u24le" |
| 264 | "--enable-decoder=pcm_u32be" |
| 265 | "--enable-decoder=pcm_u32le" |
| 266 | "--enable-decoder=pcm_u8" |
| 267 | "--enable-decoder=pcm_f16le" |
| 268 | "--enable-decoder=pcm_f24le" |
| 269 | "--enable-decoder=pcm_f32be" |
| 270 | "--enable-decoder=pcm_f32le" |
| 271 | "--enable-decoder=pcm_f64be" |
| 272 | "--enable-decoder=pcm_f64le" |
| 273 | "--enable-decoder=pcm_s16be" |
| 274 | "--enable-decoder=pcm_s16be_planar" |
| 275 | "--enable-decoder=pcm_s16le" |
| 276 | "--enable-decoder=pcm_s16le_planar" |
| 277 | "--enable-decoder=pcm_s24be" |
| 278 | "--enable-decoder=pcm_s24le" |
| 279 | "--enable-decoder=pcm_s24le_planar" |
| 280 | "--enable-decoder=pcm_s32be" |
| 281 | "--enable-decoder=pcm_s32le" |
| 282 | "--enable-decoder=pcm_s32le_planar" |
| 283 | "--enable-decoder=pcm_s64be" |
| 284 | "--enable-decoder=pcm_s64le" |
| 285 | "--enable-decoder=pcm_s8" |
| 286 | "--enable-decoder=pcm_s8_planar" |
| 287 | "--enable-decoder=pcm_u16be" |
| 288 | "--enable-decoder=pcm_u16le" |
| 289 | |
| 290 | ;; encoders/decoders for images |
| 291 | "--enable-encoder=gif" |
| 292 | "--enable-decoder=gif" |
| 293 | "--enable-encoder=jpegls" |
| 294 | "--enable-decoder=jpegls" |
| 295 | "--enable-encoder=ljpeg" |
| 296 | "--enable-decoder=jpeg2000" |
| 297 | "--enable-encoder=png" |
| 298 | "--enable-decoder=png" |
| 299 | "--enable-encoder=bmp" |
| 300 | "--enable-decoder=bmp" |
| 301 | "--enable-encoder=tiff" |
| 302 | "--enable-decoder=tiff" |
| 303 | |
| 304 | ;; filters |
| 305 | "--enable-filter=scale" |
| 306 | "--enable-filter=overlay" |
| 307 | "--enable-filter=amix" |
| 308 | "--enable-filter=amerge" |
| 309 | "--enable-filter=aresample" |
| 310 | "--enable-filter=format" |
| 311 | "--enable-filter=aformat" |
| 312 | "--enable-filter=fps" |
| 313 | "--enable-filter=transpose" |
| 314 | "--enable-filter=pad")) |
| 315 | |
| 316 | (define %ffmpeg-linux-configure-flags |
| 317 | '("--enable-pic" |
| 318 | "--extra-cxxflags=-fPIC" |
| 319 | "--extra-cflags=-fPIC" |
| 320 | "--target-os=linux" |
| 321 | "--enable-indev=v4l2" |
| 322 | "--enable-indev=xcbgrab" |
| 323 | "--enable-vdpau" |
| 324 | "--enable-hwaccel=h264_vdpau" |
| 325 | "--enable-hwaccel=mpeg4_vdpau" |
| 326 | "--enable-vaapi" |
| 327 | "--enable-hwaccel=h264_vaapi" |
| 328 | "--enable-hwaccel=mpeg4_vaapi" |
| 329 | "--enable-hwaccel=h263_vaapi" |
| 330 | "--enable-hwaccel=vp8_vaapi" |
| 331 | "--enable-hwaccel=mjpeg_vaapi" |
| 332 | "--enable-hwaccel=hevc_vaapi" |
| 333 | "--enable-encoder=h264_vaapi" |
| 334 | "--enable-encoder=vp8_vaapi" |
| 335 | "--enable-encoder=mjpeg_vaapi" |
| 336 | "--enable-encoder=hevc_vaapi")) |
| 337 | |
| 338 | ;; ffnvcodec is not supported on ARM then we enable it here for i386 and |
| 339 | ;; x86_64 architectures. |
| 340 | (define %ffmpeg-linux-x86-configure-flags |
| 341 | '("--arch=x86" |
| 342 | "--enable-cuvid" |
| 343 | "--enable-ffnvcodec" |
| 344 | "--enable-nvdec" |
| 345 | "--enable-nvenc" |
| 346 | "--enable-hwaccel=h264_nvdec" |
| 347 | "--enable-hwaccel=hevc_nvdec" |
| 348 | "--enable-hwaccel=vp8_nvdec" |
| 349 | "--enable-hwaccel=mjpeg_nvdec" |
| 350 | "--enable-encoder=h264_nvenc" |
| 351 | "--enable-encoder=hevc_nvenc")) |
| 352 | |
| 353 | ;; This procedure composes the configure flags list for ffmpeg-jami. |
| 354 | (define (ffmpeg-compose-configure-flags) |
| 355 | (define (system=? s) |
| 356 | (string-prefix? s (%current-system))) |
| 357 | |
| 358 | `(,@%ffmpeg-default-configure-flags |
| 359 | ,@(if (string-contains (%current-system) "linux") |
| 360 | (if (or (system=? "i686") |
| 361 | (system=? "x86_64")) |
| 362 | (append %ffmpeg-linux-configure-flags |
| 363 | %ffmpeg-linux-x86-configure-flags) |
| 364 | %ffmpeg-linux-configure-flags) |
| 365 | '()))) |
| 366 | |
| 367 | (define-public ffmpeg-jami |
| 368 | (package |
| 369 | (inherit ffmpeg) |
| 370 | (name "ffmpeg-jami") |
| 371 | (native-inputs |
| 372 | `(("sfl-patches" ,%sfl-patches) |
| 373 | ("libiconv" ,libiconv) |
| 374 | ,@(package-native-inputs ffmpeg))) |
| 375 | (supported-systems '("x86_64-linux" "i686-linux" |
| 376 | "aarch64-linux" "armhf-linux")) |
| 377 | (arguments |
| 378 | (append |
| 379 | '(#:tests? #f) |
| 380 | (substitute-keyword-arguments (package-arguments ffmpeg) |
| 381 | ((#:configure-flags '()) |
| 382 | (ffmpeg-compose-configure-flags)) |
| 383 | ((#:phases phases) |
| 384 | `(modify-phases ,phases |
| 385 | (add-after 'unpack 'make-git-checkout-writable |
| 386 | (lambda _ |
| 387 | (for-each make-file-writable (find-files ".")) |
| 388 | #t)) |
| 389 | (add-after 'unpack 'apply-patches |
| 390 | (lambda* (#:key inputs #:allow-other-keys) |
| 391 | (let ((jami-apply-dependency-patches |
| 392 | ,jami-apply-dependency-patches)) |
| 393 | ;; These patches come from: |
| 394 | ;; "ring-project/daemon/contrib/src/ffmpeg/rules.mak". |
| 395 | (jami-apply-dependency-patches #:inputs inputs |
| 396 | #:dep-name "ffmpeg" |
| 397 | #:patches |
| 398 | '("remove-mjpeg-log" |
| 399 | "change-RTCP-ratio" |
| 400 | "rtp_ext_abs_send_time")) |
| 401 | #t)))))))))) |
| 402 | |
| 403 | (define-public libring |
| 404 | (package |
| 405 | (name "libring") |
| 406 | (version %jami-version) |
| 407 | (source %jami-sources) |
| 408 | (build-system gnu-build-system) |
| 409 | (inputs |
| 410 | `(("alsa-lib" ,alsa-lib) |
| 411 | ("boost" ,boost) |
| 412 | ("dbus-c++" ,dbus-c++) |
| 413 | ("eudev" ,eudev) |
| 414 | ("ffmpeg" ,ffmpeg-jami) |
| 415 | ("flac" ,flac) |
| 416 | ("gmp" ,gmp) |
| 417 | ("gsm" ,gsm) |
| 418 | ("jack" ,jack-1) |
| 419 | ("jsoncpp" ,jsoncpp) |
| 420 | ("libarchive" ,libarchive) |
| 421 | ("libnatpmp" ,libnatpmp) |
| 422 | ("libogg" ,libogg) |
| 423 | ("libva" ,libva) |
| 424 | ("opendht" ,opendht) |
| 425 | ("opus" ,opus) |
| 426 | ("pcre" ,pcre) |
| 427 | ("pulseaudio" ,pulseaudio) |
| 428 | ("libsamplerate" ,libsamplerate) |
| 429 | ("libsndfile" ,libsndfile) |
| 430 | ("speex" ,speex) |
| 431 | ("speexdsp" ,speexdsp) |
| 432 | ("libupnp" ,libupnp) |
| 433 | ("libvorbis" ,libvorbis) |
| 434 | ("libx264" ,libx264) |
| 435 | ("libvdpau" ,libvdpau) |
| 436 | ("yaml-cpp" ,yaml-cpp) |
| 437 | ("zlib" ,zlib) |
| 438 | ("openssl" ,openssl) |
| 439 | ("libsecp256k1" ,libsecp256k1) |
| 440 | ("python" ,python) |
| 441 | ("python-wrapper" ,python-wrapper) |
| 442 | ("restinio" ,restinio) |
| 443 | ("libx11" ,libx11) |
| 444 | ("asio" ,asio) |
| 445 | ;; TODO: Upstream seems to rely on a custom pjproject (a.k.a. pjsip) version. |
| 446 | ;; See https://git.jami.net/savoirfairelinux/ring-daemon/issues/24. |
| 447 | ("pjproject" ,pjproject-jami))) |
| 448 | (native-inputs |
| 449 | `(("autoconf" ,autoconf) |
| 450 | ("automake" ,automake) |
| 451 | ("libtool" ,libtool) |
| 452 | ("pkg-config" ,pkg-config) |
| 453 | ("which" ,which) |
| 454 | ("cppunit" ,cppunit) |
| 455 | ("perl" ,perl))) ; Needed for documentation. |
| 456 | (arguments |
| 457 | `(#:tests? #f ; The tests fail to compile due to missing headers. |
| 458 | #:phases |
| 459 | (modify-phases %standard-phases |
| 460 | (add-after 'unpack 'change-directory |
| 461 | (lambda _ |
| 462 | (chdir "daemon") |
| 463 | #t)) |
| 464 | (add-before 'build 'add-lib-dir |
| 465 | (lambda _ |
| 466 | (mkdir-p "src/lib") |
| 467 | #t))))) |
| 468 | (synopsis "Distributed multimedia communications platform") |
| 469 | (description "Jami (formerly GNU Ring) is a secure and distributed voice, |
| 470 | video and chat communication platform that requires no centralized server and |
| 471 | leaves the power of privacy in the hands of the user. It supports the SIP and |
| 472 | IAX protocols, as well as decentralized calling using P2P-DHT. |
| 473 | |
| 474 | This package provides a library and daemon implementing the Jami core |
| 475 | functionality.") |
| 476 | (home-page "https://jami.net/") |
| 477 | (license license:gpl3+))) |
| 478 | |
| 479 | (define-public libringclient |
| 480 | (package |
| 481 | (inherit libring) |
| 482 | (name "libringclient") |
| 483 | (build-system cmake-build-system) |
| 484 | (propagated-inputs |
| 485 | `(("libring" ,libring) ; For 'dring'. |
| 486 | ("qtbase" ,qtbase) ; Qt is included in several installed headers. |
| 487 | ("qttools" ,qttools))) |
| 488 | (arguments |
| 489 | `(#:tests? #f ; There is no testsuite. |
| 490 | #:configure-flags |
| 491 | (list (string-append "-DRING_BUILD_DIR=" |
| 492 | (assoc-ref %build-inputs "libring") "/include")) |
| 493 | #:phases |
| 494 | (modify-phases %standard-phases |
| 495 | (add-after 'unpack 'change-directory |
| 496 | (lambda _ |
| 497 | (chdir "lrc") |
| 498 | #t)) |
| 499 | (add-before 'configure 'fix-dbus-interfaces-path |
| 500 | (lambda* (#:key inputs #:allow-other-keys) |
| 501 | (substitute* "CMakeLists.txt" |
| 502 | (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix) |
| 503 | (string-append (assoc-ref inputs "libring") |
| 504 | dbus-interfaces-path-suffix)))))))) |
| 505 | (synopsis "Distributed multimedia communications platform") |
| 506 | (description "Jami (formerly GNU Ring) is a secure and distributed voice, |
| 507 | video and chat communication platform that requires no centralized server and |
| 508 | leaves the power of privacy in the hands of the user. It supports the SIP and |
| 509 | IAX protocols, as well as decentralized calling using P2P-DHT. |
| 510 | |
| 511 | This package provides a library common to all Jami clients.") |
| 512 | (home-page "https://jami.net") |
| 513 | (license license:gpl3+))) |
| 514 | |
| 515 | (define-public jami |
| 516 | (package |
| 517 | (inherit libring) |
| 518 | (name "jami") |
| 519 | (build-system cmake-build-system) |
| 520 | (inputs |
| 521 | `(("libringclient" ,libringclient) |
| 522 | ("gtk+" ,gtk+) |
| 523 | ("qrencode" ,qrencode) |
| 524 | ("libnotify" ,libnotify) |
| 525 | ("clutter" ,clutter) |
| 526 | ("clutter-gtk" ,clutter-gtk) |
| 527 | ("libcanberra" ,libcanberra) |
| 528 | ("webkitgtk" ,webkitgtk) |
| 529 | ("sqlite" ,sqlite))) |
| 530 | (native-inputs |
| 531 | `(("pkg-config" ,pkg-config) |
| 532 | ("gettext" ,gettext-minimal) |
| 533 | ("glib:bin" ,glib "bin") |
| 534 | ("doxygen" ,doxygen))) |
| 535 | (propagated-inputs |
| 536 | `(("libring" ,libring) ; Contains `dring', the daemon, which is automatically by d-bus. |
| 537 | ("adwaita-icon-theme" ,adwaita-icon-theme) |
| 538 | ("evolution-data-server" ,evolution-data-server))) |
| 539 | (arguments |
| 540 | `(#:tests? #f ; There is no testsuite. |
| 541 | #:phases |
| 542 | (modify-phases %standard-phases |
| 543 | (add-after 'unpack 'change-directory |
| 544 | (lambda _ |
| 545 | (chdir "client-gnome") |
| 546 | #t))))) |
| 547 | (synopsis "Distributed, privacy-respecting communication program") |
| 548 | (description "Jami (formerly GNU Ring) is a secure and distributed voice, |
| 549 | video and chat communication platform that requires no centralized server and |
| 550 | leaves the power of privacy in the hands of the user. It supports the SIP and |
| 551 | IAX protocols, as well as decentralized calling using P2P-DHT. |
| 552 | |
| 553 | This package provides the Jami client for the GNOME desktop.") |
| 554 | (home-page "https://jami.net") |
| 555 | (license license:gpl3+))) |