Commit | Line | Data |
---|---|---|
15c6e426 JW |
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> | |
a5b44d99 | 5 | ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> |
15c6e426 JW |
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) | |
1c15d305 | 27 | #:use-module (gnu packages backup) |
15c6e426 JW |
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) | |
da358e8c JW |
63 | #:use-module (guix utils) |
64 | #:use-module (srfi srfi-1)) | |
15c6e426 | 65 | |
1c15d305 | 66 | (define %jami-version "20200710.1.6bd18d2") |
15c6e426 | 67 | |
0531ea98 MC |
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." | |
15c6e426 JW |
73 | (origin |
74 | (method url-fetch) | |
aaa199ca | 75 | (uri (string-append "https://dl.jami.net/release/tarballs/jami_" |
15c6e426 JW |
76 | %jami-version |
77 | ".tar.gz")) | |
78 | (modules '((guix build utils))) | |
79 | (snippet | |
0531ea98 MC |
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") | |
15c6e426 | 86 | (delete-file-recursively "daemon/contrib")) |
0531ea98 MC |
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)) | |
15c6e426 JW |
93 | (sha256 |
94 | (base32 | |
1c15d305 | 95 | "0lg61jv39x7kc9lq30by246xb6gcgp1rzj49ak7ff8nqpfzyfvva")))) |
15c6e426 | 96 | |
0531ea98 MC |
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 | |
f60699af JW |
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 | ||
15c6e426 JW |
120 | (define-public pjproject-jami |
121 | (package | |
122 | (inherit pjproject) | |
123 | (name "pjproject-jami") | |
124 | (native-inputs | |
0531ea98 | 125 | `(("sfl-patches" ,%sfl-patches) |
15c6e426 JW |
126 | ,@(package-native-inputs pjproject))) |
127 | (arguments | |
a5b44d99 MC |
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 | |
f60699af JW |
134 | #:inputs inputs |
135 | #:dep-name "pjproject" | |
136 | #:patches | |
2ff4e549 JW |
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" | |
1c15d305 | 145 | "0009-add-config-site" |
839bb42f MC |
146 | ;; Note: The base pjproject is already patched with |
147 | ;; "0010-fix-pkgconfig". | |
1c15d305 JW |
148 | "0011-fix-tcp-death-detection" |
149 | "0012-fix-turn-shutdown-crash")) | |
a5b44d99 | 150 | #t)))))))) |
15c6e426 | 151 | |
da358e8c JW |
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 | |
0531ea98 | 372 | `(("sfl-patches" ,%sfl-patches) |
da358e8c JW |
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 | ||
15c6e426 JW |
403 | (define-public libring |
404 | (package | |
405 | (name "libring") | |
406 | (version %jami-version) | |
0531ea98 | 407 | (source %jami-sources) |
15c6e426 JW |
408 | (build-system gnu-build-system) |
409 | (inputs | |
15c6e426 JW |
410 | `(("alsa-lib" ,alsa-lib) |
411 | ("boost" ,boost) | |
412 | ("dbus-c++" ,dbus-c++) | |
413 | ("eudev" ,eudev) | |
da358e8c | 414 | ("ffmpeg" ,ffmpeg-jami) |
15c6e426 JW |
415 | ("flac" ,flac) |
416 | ("gmp" ,gmp) | |
417 | ("gsm" ,gsm) | |
418 | ("jack" ,jack-1) | |
419 | ("jsoncpp" ,jsoncpp) | |
1c15d305 | 420 | ("libarchive" ,libarchive) |
63e6f1cd | 421 | ("libnatpmp" ,libnatpmp) |
15c6e426 JW |
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) | |
15c6e426 JW |
527 | ("libcanberra" ,libcanberra) |
528 | ("webkitgtk" ,webkitgtk) | |
12bcfced | 529 | ("sqlite" ,sqlite))) |
15c6e426 JW |
530 | (native-inputs |
531 | `(("pkg-config" ,pkg-config) | |
f06eefa3 | 532 | ("gettext" ,gettext-minimal) |
15c6e426 JW |
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") | |
15c6e426 JW |
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+))) |