Merge branch 'staging' into core-updates
[jackhill/guix/guix.git] / gnu / packages / messaging.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
3 ;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
4 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
5 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
6 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2015, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
8 ;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
9 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
10 ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
11 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
12 ;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
13 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
14 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
15 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
16 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
17 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
18 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
19 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
20 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
21 ;;;
22 ;;; This file is part of GNU Guix.
23 ;;;
24 ;;; GNU Guix is free software; you can redistribute it and/or modify it
25 ;;; under the terms of the GNU General Public License as published by
26 ;;; the Free Software Foundation; either version 3 of the License, or (at
27 ;;; your option) any later version.
28 ;;;
29 ;;; GNU Guix is distributed in the hope that it will be useful, but
30 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
31 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 ;;; GNU General Public License for more details.
33 ;;;
34 ;;; You should have received a copy of the GNU General Public License
35 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
36
37 (define-module (gnu packages messaging)
38 #:use-module (gnu packages)
39 #:use-module (gnu packages admin)
40 #:use-module (gnu packages aidc)
41 #:use-module (gnu packages aspell)
42 #:use-module (gnu packages audio)
43 #:use-module (gnu packages autotools)
44 #:use-module (gnu packages avahi)
45 #:use-module (gnu packages base)
46 #:use-module (gnu packages bash)
47 #:use-module (gnu packages bison)
48 #:use-module (gnu packages boost)
49 #:use-module (gnu packages check)
50 #:use-module (gnu packages compression)
51 #:use-module (gnu packages crypto)
52 #:use-module (gnu packages curl)
53 #:use-module (gnu packages cyrus-sasl)
54 #:use-module (gnu packages databases)
55 #:use-module (gnu packages documentation)
56 #:use-module (gnu packages enchant)
57 #:use-module (gnu packages fontutils)
58 #:use-module (gnu packages gettext)
59 #:use-module (gnu packages glib)
60 #:use-module (gnu packages gnome)
61 #:use-module (gnu packages gnupg)
62 #:use-module (gnu packages gperf)
63 #:use-module (gnu packages gtk)
64 #:use-module (gnu packages guile)
65 #:use-module (gnu packages icu4c)
66 #:use-module (gnu packages image)
67 #:use-module (gnu packages less)
68 #:use-module (gnu packages libcanberra)
69 #:use-module (gnu packages libidn)
70 #:use-module (gnu packages linux)
71 #:use-module (gnu packages lua)
72 #:use-module (gnu packages man)
73 #:use-module (gnu packages ncurses)
74 #:use-module (gnu packages networking)
75 #:use-module (gnu packages pcre)
76 #:use-module (gnu packages perl)
77 #:use-module (gnu packages photo)
78 #:use-module (gnu packages php)
79 #:use-module (gnu packages pkg-config)
80 #:use-module (gnu packages protobuf)
81 #:use-module (gnu packages python)
82 #:use-module (gnu packages python-crypto)
83 #:use-module (gnu packages python-web)
84 #:use-module (gnu packages python-xyz)
85 #:use-module (gnu packages qt)
86 #:use-module (gnu packages readline)
87 #:use-module (gnu packages sqlite)
88 #:use-module (gnu packages tcl)
89 #:use-module (gnu packages texinfo)
90 #:use-module (gnu packages textutils)
91 #:use-module (gnu packages tls)
92 #:use-module (gnu packages video)
93 #:use-module (gnu packages web)
94 #:use-module (gnu packages xdisorg)
95 #:use-module (gnu packages xiph)
96 #:use-module (gnu packages xml)
97 #:use-module (gnu packages xorg)
98 #:use-module (guix build-system cmake)
99 #:use-module (guix build-system glib-or-gtk)
100 #:use-module (guix build-system gnu)
101 #:use-module (guix build-system meson)
102 #:use-module (guix build-system perl)
103 #:use-module (guix build-system python)
104 #:use-module (guix build-system qt)
105 #:use-module (guix build-system trivial)
106 #:use-module (guix download)
107 #:use-module (guix git-download)
108 #:use-module (guix hg-download)
109 #:use-module ((guix licenses) #:prefix license:)
110 #:use-module (guix packages)
111 #:use-module (guix utils))
112
113 (define-public libotr
114 (package
115 (name "libotr")
116 (version "4.1.1")
117 (source (origin
118 (method url-fetch)
119 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
120 version ".tar.gz"))
121 (sha256
122 (base32
123 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
124 (patches (search-patches "libotr-test-auth-fix.patch"))))
125 (build-system gnu-build-system)
126 (propagated-inputs
127 `(("libgcrypt" ,libgcrypt))) ; libotr headers include gcrypt.h
128 (inputs `(("libgpg-error" ,libgpg-error)))
129 (native-inputs `(("perl" ,perl))) ; for the test suite
130 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
131 (description
132 "OTR allows you to have private conversations over instant messaging by
133 providing: (1) Encryption: No one else can read your instant messages. (2)
134 Authentication: You are assured the correspondent is who you think it is. (3)
135 Deniability: The messages you send do not have digital signatures that are
136 checkable by a third party. Anyone can forge messages after a conversation to
137 make them look like they came from you. However, during a conversation, your
138 correspondent is assured the messages he sees are authentic and
139 unmodified. (4) Perfect forward secrecy: If you lose control of your private
140 keys, no previous conversation is compromised.")
141 (home-page "https://otr.cypherpunks.ca/")
142 (license (list license:lgpl2.1 license:gpl2))))
143
144 (define-public libsignal-protocol-c
145 (package
146 (name "libsignal-protocol-c")
147 (version "2.3.2")
148 (source (origin
149 (method url-fetch)
150 (uri (string-append "https://github.com/WhisperSystems/"
151 "libsignal-protocol-c/archive/v" version
152 ".tar.gz"))
153 (file-name (string-append name "-" version ".tar.gz"))
154 (sha256
155 (base32
156 "0380hl6fw3ppf265fg897pyrpqygpx4m9j8ifq118bim8lq6z0pk"))))
157 (arguments
158 `(;; Required for proper linking and for tests to run.
159 #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
160 (build-system cmake-build-system)
161 (inputs `( ;; Required for tests:
162 ("check" ,check)
163 ("openssl" ,openssl)))
164 (native-inputs `(("pkg-config" ,pkg-config)))
165 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
166 (synopsis "Implementation of a ratcheting forward secrecy protocol")
167 (description "libsignal-protocol-c is an implementation of a ratcheting
168 forward secrecy protocol that works in synchronous and asynchronous
169 messaging environments. It can be used with messaging software to provide
170 end-to-end encryption.")
171 (license license:gpl3+)))
172
173 (define-public bitlbee
174 (package
175 (name "bitlbee")
176 (version "3.6")
177 (source (origin
178 (method url-fetch)
179 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
180 version ".tar.gz"))
181 (sha256
182 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
183 (build-system gnu-build-system)
184 (native-inputs `(("pkg-config" ,pkg-config)
185 ;; Note: Change to 'check' for versions > 3.6.
186 ("check" ,check-0.12)))
187 (inputs `(("glib" ,glib)
188 ("libotr" ,libotr)
189 ("gnutls" ,gnutls)
190 ("python" ,python)
191 ("perl" ,perl)))
192 (arguments
193 `(#:phases
194 (modify-phases %standard-phases
195 (add-before 'configure 'set-python
196 (lambda _ (setenv "PYTHON" (which "python3")) #t))
197 (add-after 'install 'install-etc
198 (lambda* (#:key (make-flags '()) #:allow-other-keys)
199 (apply invoke "make" "install-etc" make-flags)))
200 (add-after 'install-etc 'install-lib
201 (lambda* (#:key (make-flags '()) #:allow-other-keys)
202 (apply invoke "make" "install-dev" make-flags)))
203 (replace 'configure
204 ;; bitlbee's configure script does not tolerate many of the
205 ;; variable settings that Guix would pass to it.
206 (lambda* (#:key outputs #:allow-other-keys)
207 (invoke "./configure"
208 (string-append "--prefix="
209 (assoc-ref outputs "out"))
210 "--otr=1"))))))
211 (synopsis "IRC to instant messaging gateway")
212 (description "BitlBee brings IM (instant messaging) to IRC clients, for
213 people who have an IRC client running all the time and don't want to run an
214 additional IM client. BitlBee currently supports XMPP/Jabber (including
215 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
216 microblogging network (plus all other Twitter API compatible services like
217 identi.ca and status.net).")
218 (home-page "https://www.bitlbee.org/")
219 (license (list license:gpl2+ license:bsd-2))))
220
221 (define-public bitlbee-discord
222 (package
223 (name "bitlbee-discord")
224 (version "0.4.2")
225 (source
226 (origin
227 (method git-fetch)
228 (uri (git-reference
229 (url "https://github.com/sm00th/bitlbee-discord.git")
230 (commit version)))
231 (file-name (git-file-name name version))
232 (sha256
233 (base32 "02pigk2vbz0jdz11f96sygdvp1j762yjn62h124fkcsc070g7a2f"))))
234 (build-system gnu-build-system)
235 (arguments
236 `(#:phases
237 (modify-phases %standard-phases
238 (add-after 'unpack 'patch-autogen
239 (lambda _
240 (let ((sh (which "sh")))
241 (substitute* "autogen.sh" (("/bin/sh") sh))
242 (setenv "CONFIG_SHELL" sh))
243 #t))
244 (replace 'configure
245 (lambda* (#:key inputs outputs #:allow-other-keys)
246 (invoke "./configure"
247 (string-append "--with-plugindir="
248 (assoc-ref outputs "out")
249 "/lib/bitlbee/")))))))
250 (inputs `(("glib" ,glib)))
251 (native-inputs `(("pkg-config" ,pkg-config)
252 ("autoconf" ,autoconf)
253 ("automake" ,automake)
254 ("texinfo" ,texinfo)
255 ("libtool" ,libtool)
256 ("bitlbee" ,bitlbee) ; needs bitlbee headers
257 ("bash" ,bash)))
258 (synopsis "Discord plugin for Bitlbee")
259 (description "Bitlbee-discord is a plugin for Bitlbee witch provides
260 access to servers running the Discord protocol.")
261 (home-page "https://github.com/sm00th/bitlbee-discord/")
262 (license license:gpl2+)))
263
264 (define-public hexchat
265 (package
266 (name "hexchat")
267 (version "2.14.3")
268 (source (origin
269 (method url-fetch)
270 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
271 version ".tar.xz"))
272 (sha256
273 (base32
274 "10p829jm1r6kidkgf5lhqhyqc5mxdcq96q3zhadsckasvc9rs6lh"))))
275 (build-system meson-build-system)
276 (native-inputs `(("gettext" ,gettext-minimal)
277 ("glib:bin" ,glib "bin") ;need glib-genmarshal
278 ("perl" ,perl)
279 ("pkg-config" ,pkg-config)))
280 (inputs `(("dbus-glib" ,dbus-glib)
281 ("dbus" ,dbus)
282 ("enchant" ,enchant)
283 ("gtk" ,gtk+-2)
284 ("libcanberra" ,libcanberra)
285 ("libnotify" ,libnotify)
286 ("libproxy" ,libproxy)
287 ("openssl" ,openssl)
288
289 ;; Bindings for add-on scripts.
290 ("luajit" ,luajit)
291 ("perl-xml-parser" ,perl-xml-parser)
292 ("python-2" ,python-2)))
293 (arguments
294 `(#:phases
295 (modify-phases %standard-phases
296 (add-after 'unpack 'skip-desktop-database-updates
297 (lambda _
298 ;; The build scripts update icon and desktop file databases when
299 ;; DESTDIR is not set. We can't update these databases from
300 ;; within the build chroot, but we also don't set DESTDIR. So, we
301 ;; just skip this code.
302 (substitute* "meson_post_install.py"
303 (("if 'DESTDIR' not in os.environ:")
304 "if False:"))
305 #t)))))
306 (synopsis "Graphical IRC Client")
307 (description
308 "HexChat lets you connect to multiple IRC networks at once. The main
309 window shows the list of currently connected networks and their channels, the
310 current conversation and the list of users. It uses colors to differentiate
311 between users and to highlight messages. It checks spelling using available
312 dictionaries. HexChat can be extended with multiple addons.")
313 (home-page "https://hexchat.net/")
314 (license license:gpl2+)))
315
316 (define-public ngircd
317 (package
318 (name "ngircd")
319 (version "25")
320 (source (origin
321 (method url-fetch)
322 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
323 version ".tar.xz"))
324 (sha256
325 (base32
326 "0kpf5qi98m9f833r4rx9n6h9p31biwk798jwc1mgzmix7sp7r6f4"))
327 (patches (search-patches "ngircd-handle-zombies.patch"))))
328 (build-system gnu-build-system)
329 ;; Needed for the test suite.
330 (native-inputs `(("procps" ,procps)
331 ("expect" ,expect)
332 ("inetutils" ,inetutils)))
333 ;; XXX Add libident.
334 (inputs `(("zlib" ,zlib)
335 ("libwrap" ,tcp-wrappers)
336 ("gnutls" ,gnutls)
337 ,@(if (string-suffix? "-linux"
338 (or (%current-target-system)
339 (%current-system)))
340 `(("linux-pam" ,linux-pam))
341 '())))
342 (arguments
343 `(#:configure-flags
344 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
345 ,@(if (string-suffix? "-linux"
346 (or (%current-target-system)
347 (%current-system)))
348 '("--with-pam")
349 '()))
350 #:phases
351 (modify-phases %standard-phases
352 ;; Necessary for the test suite.
353 (add-after 'configure 'post-configure
354 (lambda _
355 (substitute* "src/ngircd/Makefile"
356 (("/bin/sh") (which "sh")))
357 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
358 ;; which fails arbitrarily.
359 (with-output-to-file "src/testsuite/getpid.sh"
360 (lambda ()
361 (display
362 (string-append
363 "#!" (which "sh") "\n"
364 "ps -C \"$1\" -o pid=\n"))))
365 ;; Our variant of getpid.sh does not match interpreter names
366 ;; when the script's shebang is invoked directly as "./foo".
367 ;; Patch cases where the test suite relies on this.
368 (substitute* "src/testsuite/start-server.sh"
369 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
370 ;; 'make' instead.
371 (("getpid.sh sh") "getpid.sh make")))))))
372 (home-page "https://ngircd.barton.de/")
373 (synopsis "Lightweight Internet Relay Chat server for small networks")
374 (description
375 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
376 or private networks. It is easy to configure, can cope with dynamic IP
377 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
378 authentication.")
379 (license license:gpl2+)))
380
381 (define-public pidgin
382 (package
383 (name "pidgin")
384 (version "2.13.0")
385 (source
386 (origin
387 (method url-fetch)
388 (uri (string-append "mirror://sourceforge/pidgin/Pidgin/"
389 version "/pidgin-" version ".tar.bz2"))
390 (sha256
391 (base32 "13vdqj70315p9rzgnbxjp9c51mdzf1l4jg1kvnylc4bidw61air7"))
392 (patches (search-patches "pidgin-add-search-path.patch"))))
393 (build-system glib-or-gtk-build-system)
394 (native-inputs
395 `(("pkg-config" ,pkg-config)
396 ("check" ,check)
397 ("intltool" ,intltool)
398 ("gconf" ,gconf)
399 ("python" ,python-2)
400 ("doxygen" ,doxygen)))
401 (inputs
402 `(("gtk+" ,gtk+-2)
403 ("libgcrypt" ,libgcrypt)
404 ("gnutls" ,gnutls)
405 ("cyrus-sasl" ,cyrus-sasl)
406 ("dbus" ,dbus)
407 ("dbus-glib" ,dbus-glib)
408 ("python2-dbus" ,python2-dbus)
409 ("libidn" ,libidn)
410 ("libltdl" ,libltdl)
411 ("libxml2" ,libxml2)
412 ;; TODO: gstreamer: patches needed to support gstreamer-1.0 or later
413 ;; TODO: farstream
414 ;; TODO: meanwhile
415 ;; TODO: gtkspell
416 ;; TODO: libxephyr
417 ;; TODO: libgadu
418 ("libxslt" ,libxslt)
419 ("avahi" ,avahi)
420 ("ncurses" ,ncurses)
421 ("network-manager" ,network-manager)
422 ("sqlite" ,sqlite)
423 ("libice" ,libice)
424 ("libsm" ,libsm)
425 ("libxscrnsaver" ,libxscrnsaver)
426 ("startup-notification" ,startup-notification)))
427 (arguments
428 `(#:configure-flags
429 (list "--disable-gtkspell"
430 "--disable-tcl"
431 "--disable-meanwhile"
432 "--disable-vv" ; XXX remove when we have farstream and gstreamer
433 "--disable-gstreamer" ; XXX patches needed to support gstreamer-1.0
434 "--enable-cyrus-sasl"
435 (string-append "--with-ncurses-headers="
436 (assoc-ref %build-inputs "ncurses")
437 "/include"))))
438 (native-search-paths
439 (list (search-path-specification
440 (variable "PURPLE_PLUGIN_PATH")
441 (files (list (string-append "lib/purple-"
442 (version-major version))
443 "lib/pidgin")))))
444 (home-page "https://www.pidgin.im/")
445 (synopsis "Graphical multi-protocol instant messaging client")
446 (description
447 "Pidgin is a modular instant messaging client that supports many popular
448 chat protocols.")
449 (license
450 (list
451 license:gpl2+ ; Most of the code
452 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
453 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
454 ;; The following licenses cover the zephyr protocol plugin:
455 (license:non-copyleft
456 "file://libpurple/protocols/zephyr/mit-copyright.h"
457 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
458 (license:non-copyleft
459 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
460 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
461
462 (define-public pidgin-otr
463 (package
464 (name "pidgin-otr")
465 (version "4.0.2")
466 (source (origin
467 (method url-fetch)
468 (uri (string-append "https://otr.cypherpunks.ca/"
469 name "-" version ".tar.gz"))
470 (sha256
471 (base32
472 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
473 (build-system gnu-build-system)
474 (native-inputs
475 `(("pkg-config" ,pkg-config)
476 ("intltool" ,intltool)))
477 (inputs
478 `(("pidgin" ,pidgin)
479 ("libotr" ,libotr)
480 ("libgpg-error" ,libgpg-error)
481 ("libgcrypt" ,libgcrypt)
482 ("glib" ,glib)
483 ("gtk+" ,gtk+-2)))
484 (home-page "https://otr.cypherpunks.ca/")
485 (synopsis "Off-the-Record Messaging plugin for Pidgin")
486 (description
487 "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin instant
488 messaging client. OTR (Off-the-Record) Messaging allows you to have private
489 conversations over instant messaging by providing: (1) Encryption: No one else
490 can read your instant messages. (2) Authentication: You are assured the
491 correspondent is who you think it is. (3) Deniability: The messages you send
492 do not have digital signatures that are checkable by a third party. Anyone
493 can forge messages after a conversation to make them look like they came from
494 you. However, during a conversation, your correspondent is assured the
495 messages he sees are authentic and unmodified. (4) Perfect forward secrecy:
496 If you lose control of your private keys, no previous conversation is
497 compromised.")
498 (license license:gpl2)))
499
500 (define-public znc
501 (package
502 (name "znc")
503 (version "1.7.5")
504 (source (origin
505 (method url-fetch)
506 (uri (string-append "http://znc.in/releases/archive/znc-"
507 version ".tar.gz"))
508 (sha256
509 (base32
510 "08a7yb2xs85hyyz8dpzfbsfjwj2r6kcii022lj3l4rf8hl9ix558"))))
511 (build-system cmake-build-system)
512 (arguments
513 `(#:configure-flags
514 (list "-DWANT_CYRUS=ON"
515 "-DWANT_I18N=ON"
516 "-DWANT_PERL=ON"
517 "-DWANT_PYTHON=ON")
518 #:phases
519 (modify-phases %standard-phases
520 (add-after 'unpack 'unpack-googletest
521 ;; Copy the googletest sources to where the CMake build expects them.
522 (lambda* (#:key inputs #:allow-other-keys)
523 (let ((source (assoc-ref inputs "googletest-source"))
524 (target "third_party/googletest"))
525 (mkdir-p target)
526 (copy-recursively source target)
527 #t))))))
528 (native-inputs
529 `(("boost" ,boost)
530 ("gettext" ,gettext-minimal)
531 ("googletest-source" ,(package-source googletest))
532 ("pkg-config" ,pkg-config)))
533 (inputs
534 `(("cyrus-sasl" ,cyrus-sasl)
535 ("icu4c" ,icu4c)
536 ("openssl" ,openssl)
537 ("perl" ,perl)
538 ("python" ,python)
539 ("zlib" ,zlib)))
540 (home-page "https://znc.in")
541 (synopsis "IRC network bouncer")
542 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
543 detach the client from the actual IRC server, and also from selected channels.
544 Multiple clients from different locations can connect to a single ZNC account
545 simultaneously and therefore appear under the same nickname on IRC.")
546 (license license:asl2.0)))
547
548 (define-public python-nbxmpp
549 (package
550 (name "python-nbxmpp")
551 (version "0.6.10")
552 (source
553 (origin
554 (method url-fetch)
555 (uri (pypi-uri "nbxmpp" version))
556 (sha256
557 (base32
558 "1vq89nhamciblyi5579bppnm4sb0zk5cg5hdipfpz174fxvl2wyd"))))
559 (build-system python-build-system)
560 (arguments
561 `(#:tests? #f)) ; no tests
562 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
563 (synopsis "Non-blocking Jabber/XMPP module")
564 (description
565 "The goal of this python library is to provide a way for Python
566 applications to use Jabber/XMPP networks in a non-blocking way. This library
567 was initially a fork of xmpppy, but uses non-blocking sockets.")
568 (license license:gpl3+)))
569
570 (define-public python2-nbxmpp
571 (package-with-python2 python-nbxmpp))
572
573 (define-public gajim
574 (package
575 (name "gajim")
576 (version "1.1.3")
577 (source (origin
578 (method url-fetch)
579 (uri (string-append "https://gajim.org/downloads/"
580 (version-major+minor version)
581 "/gajim-" version ".tar.bz2"))
582 (sha256
583 (base32
584 "0bzxwcpdd4ydh6d6mzpr0gxwhcb0x9ympk55fpvm1hcw9d28a716"))))
585 (build-system python-build-system)
586 (arguments
587 `(#:phases
588 (modify-phases %standard-phases
589 (add-after 'unpack 'add-plugin-dirs
590 (lambda _
591 (substitute* "gajim/common/configpaths.py"
592 (("_paths\\['PLUGINS_USER'\\]\\]")
593 "_paths['PLUGINS_USER']] + \
594 ([os.getenv('GAJIM_PLUGIN_PATH')] \
595 if os.getenv('GAJIM_PLUGIN_PATH') \
596 and Path(os.getenv('GAJIM_PLUGIN_PATH')).is_dir() \
597 else [])"))
598 #t))
599 (replace 'check
600 (lambda _
601 (invoke "python" "./setup.py" "test" "-s" "test.no_gui")))
602 (add-after 'install 'wrap-gi-typelib-path
603 (lambda* (#:key outputs #:allow-other-keys)
604 (let ((out (assoc-ref outputs "out")))
605 (for-each
606 (lambda (name)
607 (let ((file (string-append out "/bin/" name))
608 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
609 (wrap-program file
610 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
611 ;; For translations
612 `("XDG_DATA_DIRS" ":" prefix
613 (,(string-append (assoc-ref outputs "out") "/share"))))))
614 '("gajim" "gajim-remote" "gajim-history-manager")))
615 #t))
616 (add-after 'install 'install-icons
617 (lambda* (#:key inputs outputs #:allow-other-keys)
618 (let* ((out (assoc-ref outputs "out"))
619 (adwaita (string-append
620 (assoc-ref inputs "adwaita-icon-theme")
621 "/share/icons/Adwaita"))
622 (hicolor (string-append
623 (assoc-ref inputs "hicolor-icon-theme")
624 "/share/icons/hicolor"))
625 (icons (string-append
626 out "/lib/python"
627 ,(version-major+minor (package-version python))
628 "/site-packages/gajim/data/icons")))
629 (with-directory-excursion icons
630 (symlink adwaita "Adwaita")
631 (copy-recursively hicolor "hicolor")))
632 #t))
633 (add-after 'install-icons 'wrap-gsettings-schema-dir
634 (lambda* (#:key inputs outputs #:allow-other-keys)
635 (wrap-program (string-append (assoc-ref outputs "out")
636 "/bin/gajim")
637 ;; For GtkFileChooserDialog.
638 `("GSETTINGS_SCHEMA_DIR" =
639 (,(string-append (assoc-ref inputs "gtk+")
640 "/share/glib-2.0/schemas"))))
641 #t)))))
642 (native-search-paths
643 (list (search-path-specification
644 (variable "GAJIM_PLUGIN_PATH")
645 (separator #f) ;single entry
646 (files '("share/gajim/plugins")))
647 ;; Gajim needs to use the propagated inputs of its plugins.
648 (search-path-specification
649 (variable "PYTHONPATH")
650 (files (list (string-append
651 "lib/python"
652
653 ;; FIXME: Cannot use this expression as it would
654 ;; introduce a circular dependency at the top level.
655 ;; (version-major+minor (package-version python))
656 "3.7"
657
658 "/site-packages"))))))
659 (native-inputs
660 `(("intltool" ,intltool)
661 ("python-docutils" ,python-docutils)
662 ("xorg-server" ,xorg-server-for-tests)))
663 (inputs
664 `(("adwaita-icon-theme" ,adwaita-icon-theme)
665 ("gnome-keyring" ,gnome-keyring)
666 ("gtk+" ,gtk+)
667 ("gtkspell3" ,gtkspell3)
668 ("hicolor-icon-theme" ,hicolor-icon-theme)
669 ("libsecret" ,libsecret)
670 ("python-cssutils" ,python-cssutils)
671 ("python-dbus" ,python-dbus)
672 ("python-gnupg" ,python-gnupg)
673 ("python-keyring" ,python-keyring)
674 ("python-nbxmpp" ,python-nbxmpp)
675 ("python-pillow" ,python-pillow)
676 ("python-precis-i18n" ,python-precis-i18n)
677 ("python-pycairo" ,python-pycairo)
678 ("python-pygobject" ,python-pygobject)
679 ("python-pyopenssl" ,python-pyopenssl)
680 ("python-qrcode" ,python-qrcode)))
681 (home-page "https://gajim.org/")
682 (synopsis "Jabber (XMPP) client")
683 (description "Gajim is a feature-rich and easy to use Jabber/XMPP client.
684 Among its features are: a tabbed chat window and single window modes; support
685 for group chat (with Multi-User Chat protocol), invitation, chat to group chat
686 transformation; audio and video conferences; file transfer; TLS, GPG and
687 end-to-end encryption support; XML console.")
688 (license license:gpl3)))
689
690 (define-public gajim-omemo
691 (package
692 (name "gajim-omemo")
693 (version "2.6.29")
694 (source (origin
695 (method url-fetch/zipbomb)
696 (uri (string-append
697 "https://ftp.gajim.org/plugins_releases/omemo_"
698 version ".zip"))
699 (sha256
700 (base32
701 "1mif5qkrvxclqbqmq6njini4laznbs5nn82w2f1hkl8c1284dvgi"))))
702 (build-system trivial-build-system)
703 (arguments
704 `(#:modules ((guix build utils))
705 #:builder
706 (begin
707 (use-modules (guix build utils))
708 (let* ((out (assoc-ref %outputs "out"))
709 (share (in-vicinity out "share/gajim/plugins"))
710 (source (assoc-ref %build-inputs "source")))
711 (mkdir-p share)
712 (copy-recursively source share)
713 #t))))
714 (propagated-inputs
715 `(("python-axolotl" ,python-axolotl)))
716 (home-page
717 "https://dev.gajim.org/gajim/gajim-plugins/wikis/OmemoGajimPlugin")
718 (synopsis "Gajim OMEMO plugin")
719 (description
720 "This package provides the Gajim OMEMO plugin. OMEMO is an XMPP
721 Extension Protocol (XEP) for secure multi-client end-to-end encryption based
722 on Axolotl and PEP.")
723 (license license:gpl3+)))
724
725 (define-public dino
726 ;; The only release tarball is for version 0.0, but it is very old and fails
727 ;; to build.
728 (let ((commit "8e14ac6d714b7f88e16de31a6c795e811dc27417")
729 (revision "4"))
730 (package
731 (name "dino")
732 (version (git-version "0.0" revision commit))
733 (source (origin
734 (method git-fetch)
735 (uri (git-reference
736 (url "https://github.com/dino/dino.git")
737 (commit commit)))
738 (file-name (git-file-name name version))
739 (sha256
740 (base32
741 "0xfmwnc2f8lsvmp7m8ggikzqjaw5z6wmxrv6j5ljha5ckffrdd9m"))))
742 (build-system cmake-build-system)
743 (arguments
744 `(#:tests? #f ; there are no tests
745 #:parallel-build? #f ; not supported
746 ; Use our libsignal-protocol-c instead of the git submodule.
747 #:configure-flags '("-DSHARED_SIGNAL_PROTOCOL=yes")
748 #:modules ((guix build cmake-build-system)
749 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
750 (guix build utils))
751 #:imported-modules (,@%gnu-build-system-modules
752 (guix build cmake-build-system)
753 (guix build glib-or-gtk-build-system))
754 #:phases
755 (modify-phases %standard-phases
756 ;; The signal-protocol plugin accesses internal headers of
757 ;; libsignal-protocol-c, so we need to put the sources there.
758 (add-after 'unpack 'unpack-sources
759 (lambda* (#:key inputs #:allow-other-keys)
760 (with-directory-excursion "plugins/signal-protocol/libsignal-protocol-c"
761 (invoke "tar" "xvf"
762 (assoc-ref inputs "libsignal-protocol-c-source")
763 "--strip-components=1"))))
764 (add-after 'install 'glib-or-gtk-wrap
765 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
766 (inputs
767 `(("libgee" ,libgee)
768 ("libsignal-protocol-c" ,libsignal-protocol-c)
769 ("libgcrypt" ,libgcrypt)
770 ("libsoup" ,libsoup)
771 ("qrencode" ,qrencode)
772 ("sqlite" ,sqlite)
773 ("gpgme" ,gpgme)
774 ("gtk+" ,gtk+)
775 ("glib-networking" ,glib-networking)
776 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
777 (native-inputs
778 `(("pkg-config" ,pkg-config)
779 ("libsignal-protocol-c-source" ,(package-source libsignal-protocol-c))
780 ("glib" ,glib "bin")
781 ("vala" ,vala)
782 ("gettext" ,gettext-minimal)))
783 (home-page "https://dino.im")
784 (synopsis "Graphical Jabber (XMPP) client")
785 (description "Dino is a Jabber (XMPP) client which aims to fit well into
786 a graphical desktop environment like GNOME.")
787 (license license:gpl3+))))
788
789 (define-public prosody
790 (package
791 (name "prosody")
792 (version "0.11.3")
793 (source (origin
794 (method url-fetch)
795 (uri (string-append "https://prosody.im/downloads/source/"
796 "prosody-" version ".tar.gz"))
797 (sha256
798 (base32
799 "11xz4milv2962qf75vrdwsvd8sy2332nf69202rmvz5989pvvnng"))))
800 (build-system gnu-build-system)
801 (arguments
802 `(#:tests? #f ;tests require "busted"
803 #:configure-flags (list "--no-example-certs")
804 #:modules ((ice-9 match)
805 (srfi srfi-1)
806 (guix build gnu-build-system)
807 (guix build utils))
808 #:phases
809 (modify-phases %standard-phases
810 (add-after 'unpack 'fix-configure-script
811 (lambda _
812 ;; The configure script aborts when it encounters unexpected
813 ;; arguments. Make it more tolerant.
814 (substitute* "configure"
815 (("exit 1") ""))
816 #t))
817 (add-after 'unpack 'fix-makefile
818 (lambda _
819 (substitute* "GNUmakefile"
820 ;; prosodyctl needs to read the configuration file.
821 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
822 ;; prosodyctl needs a place to put auto-generated certificates.
823 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
824 #t))
825 (add-after 'install 'wrap-programs
826 (lambda* (#:key inputs outputs #:allow-other-keys)
827 ;; Make sure all executables in "bin" find the required Lua
828 ;; modules at runtime.
829 (let* ((out (assoc-ref outputs "out"))
830 (bin (string-append out "/bin/"))
831 (deps (delete #f (map (match-lambda
832 ((label . directory)
833 (if (string-prefix? "lua" label)
834 directory #f)))
835 inputs)))
836 (lua-path (string-join
837 (map (lambda (path)
838 (string-append
839 path "/share/lua/5.2/?.lua;"
840 path "/share/lua/5.2/?/?.lua"))
841 (cons out deps))
842 ";"))
843 (lua-cpath (string-join
844 (map (lambda (path)
845 (string-append
846 path "/lib/lua/5.2/?.so;"
847 path "/lib/lua/5.2/?/?.so"))
848 (cons out deps))
849 ";"))
850 (openssl (assoc-ref inputs "openssl"))
851 (coreutils (assoc-ref inputs "coreutils"))
852 (path (map (lambda (dir)
853 (string-append dir "/bin"))
854 (list openssl coreutils))))
855 (for-each (lambda (file)
856 (wrap-program file
857 `("LUA_PATH" ";" = (,lua-path))
858 `("LUA_CPATH" ";" = (,lua-cpath))
859 `("PATH" ":" prefix ,path)))
860 (find-files bin ".*"))
861 #t))))))
862 (inputs
863 `(("libidn" ,libidn)
864 ("openssl" ,openssl)
865 ("lua" ,lua-5.2)
866 ("lua5.2-bitop" ,lua5.2-bitop)
867 ("lua5.2-expat" ,lua5.2-expat)
868 ("lua5.2-socket" ,lua5.2-socket)
869 ("lua5.2-filesystem" ,lua5.2-filesystem)
870 ("lua5.2-sec" ,lua5.2-sec)))
871 (home-page "https://prosody.im/")
872 (synopsis "Jabber (XMPP) server")
873 (description "Prosody is a modern XMPP communication server. It aims to
874 be easy to set up and configure, and efficient with system resources.
875 Additionally, for developers it aims to be easy to extend and give a flexible
876 system on which to rapidly develop added functionality, or prototype new
877 protocols.")
878 (license license:x11)))
879
880 (define-public prosody-http-upload
881 (let ((changeset "765735bb590b")
882 (revision "1"))
883 (package
884 (name "prosody-http-upload")
885 (version (string-append "0-" revision "." (string-take changeset 7)))
886 (source (origin
887 (method hg-fetch)
888 (uri (hg-reference
889 (url "https://hg.prosody.im/prosody-modules/")
890 (changeset changeset)))
891 (file-name (string-append name "-" version "-checkout"))
892 (sha256
893 (base32
894 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
895 (build-system trivial-build-system)
896 (arguments
897 '(#:modules ((guix build utils))
898 #:builder
899 (begin
900 (use-modules (guix build utils))
901 (let ((out (assoc-ref %outputs "out"))
902 (source (assoc-ref %build-inputs "source")))
903 (with-directory-excursion (in-vicinity source "mod_http_upload")
904 (install-file "mod_http_upload.lua" out))
905 #t))))
906 (home-page "https://modules.prosody.im/mod_http_upload.html")
907 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
908 (description "This module implements XEP-0363: it allows clients to
909 upload files over HTTP.")
910 (license (package-license prosody)))))
911
912 (define-public prosody-smacks
913 (let ((changeset "67f1d1f22625")
914 (revision "1"))
915 (package
916 (name "prosody-smacks")
917 (version (string-append "0-" revision "." (string-take changeset 7)))
918 (source (origin
919 (method hg-fetch)
920 (uri (hg-reference
921 (url "https://hg.prosody.im/prosody-modules/")
922 (changeset changeset)))
923 (file-name (string-append name "-" version "-checkout"))
924 (sha256
925 (base32
926 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
927 (build-system trivial-build-system)
928 (arguments
929 '(#:modules ((guix build utils))
930 #:builder
931 (begin
932 (use-modules (guix build utils))
933 (let ((out (assoc-ref %outputs "out"))
934 (source (assoc-ref %build-inputs "source")))
935 (with-directory-excursion (in-vicinity source "mod_smacks")
936 (install-file "mod_smacks.lua" out))
937 #t))))
938 (home-page "https://modules.prosody.im/mod_smacks.html")
939 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
940 (description "This module implements XEP-0198: when supported by both
941 the client and server, it can allow clients to resume a disconnected session,
942 and prevent message loss.")
943 (license (package-license prosody)))))
944
945 (define-public libtoxcore
946 (let ((revision "2")
947 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
948 (package
949 (name "libtoxcore")
950 (version (string-append "0.0.0" "-"
951 revision "."(string-take commit 7)))
952 (source (origin
953 (method git-fetch)
954 (uri (git-reference
955 (url "https://github.com/irungentoo/toxcore.git")
956 (commit commit)))
957 (file-name (string-append name "-" version "-checkout"))
958 (sha256
959 (base32
960 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
961 (build-system gnu-build-system)
962 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
963 (native-inputs
964 `(("autoconf" ,autoconf)
965 ("automake" ,automake)
966 ("libtool" ,libtool)
967 ("check" ,check)
968 ("pkg-config" ,pkg-config)))
969 (inputs
970 `(("libsodium" ,libsodium)
971 ("opus" ,opus)
972 ("libvpx" ,libvpx)))
973 (synopsis "Library for the Tox encrypted messenger protocol")
974 (description
975 "C library implementation of the Tox encrypted messenger protocol.")
976 (license license:gpl3+)
977 (home-page "https://tox.chat"))))
978
979 ;; Some tox clients move to c-toxcore, which seems to be where all the
980 ;; recent development happens. It is run by the same developers as toxcore,
981 ;; forked into a group namespace.
982 (define-public c-toxcore
983 (package
984 (name "c-toxcore")
985 (version "0.2.9")
986 (source
987 (origin
988 (method git-fetch)
989 (uri (git-reference
990 (url "https://github.com/TokTok/c-toxcore.git")
991 (commit (string-append "v" version))))
992 (file-name (git-file-name name version))
993 (sha256
994 (base32
995 "0aljr9hqybla6p61af6fdkv0x8gph7c2wacqqa9hq2z9w0p4fs5j"))))
996 (arguments
997 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
998 ; for now.
999 (build-system cmake-build-system)
1000 (native-inputs
1001 `(("pkg-config" ,pkg-config)))
1002 (propagated-inputs
1003 `(("libsodium" ,libsodium)
1004 ("opus" ,opus)
1005 ("libvpx" ,libvpx)))
1006 (home-page "https://tox.chat")
1007 (synopsis "Library for the Tox encrypted messenger protocol")
1008 (description
1009 "Official fork of the C library implementation of the Tox encrypted
1010 messenger protocol.")
1011 (license license:gpl3+)))
1012
1013 (define-public utox
1014 (package
1015 (name "utox")
1016 (version "0.17.1")
1017 (source
1018 (origin
1019 (method git-fetch)
1020 (uri (git-reference
1021 (url "https://github.com/uTox/uTox.git")
1022 (commit (string-append "v" version))
1023 (recursive? #t))) ;; Needed for 'minini' git submodule.
1024 (file-name (string-append name "-" version "-checkout"))
1025 (sha256
1026 (base32
1027 "17kwqw24iqljp2icih9k6ikx12gzr8zzqr8y5h35bg8m5s8pasq5"))))
1028 (build-system cmake-build-system)
1029 (arguments
1030 `(#:configure-flags '("-DENABLE_TESTS=on")
1031 #:phases
1032 (modify-phases %standard-phases
1033 (add-before 'build 'patch-absolute-filename-libgtk-3
1034 (lambda* (#:key inputs outputs #:allow-other-keys)
1035 (substitute* "../source/src/xlib/gtk.c"
1036 (("libgtk-3.so")
1037 (string-append (assoc-ref inputs "gtk+")
1038 "/lib/libgtk-3.so")))))
1039 (add-after 'install 'wrap-program
1040 (lambda* (#:key inputs outputs #:allow-other-keys)
1041 (wrap-program (string-append (assoc-ref outputs "out")
1042 "/bin/utox")
1043 ;; For GtkFileChooserDialog.
1044 `("GSETTINGS_SCHEMA_DIR" =
1045 (,(string-append (assoc-ref inputs "gtk+")
1046 "/share/glib-2.0/schemas")))))))))
1047 (inputs
1048 `(("dbus" ,dbus)
1049 ("filteraudio" ,filteraudio)
1050 ("fontconfig" ,fontconfig)
1051 ("freetype" ,freetype)
1052 ("libsodium" ,libsodium)
1053 ("c-toxcore" ,c-toxcore)
1054 ("gtk+" ,gtk+)
1055 ("libvpx" ,libvpx)
1056 ("libx11" ,libx11)
1057 ("libxext" ,libxext)
1058 ("libxrender" ,libxrender)
1059 ("openal" ,openal)
1060 ("v4l-utils" ,v4l-utils)))
1061 (native-inputs
1062 `(("check" ,check)
1063 ("pkg-config" ,pkg-config)))
1064 (synopsis "Lightweight Tox client")
1065 (description
1066 "Utox is a lightweight Tox client. Tox is a distributed and secure
1067 instant messenger with audio and video chat capabilities.")
1068 (home-page "http://utox.org/")
1069 (license license:gpl3)))
1070
1071 (define-public qtox
1072 (package
1073 (name "qtox")
1074 (version "1.16.3")
1075 (source (origin
1076 (method url-fetch)
1077 (uri (string-append "https://github.com/qTox/qTox/archive/v"
1078 version ".tar.gz"))
1079 (sha256
1080 (base32
1081 "10n3cgw9xaqin9la8wpd8v83bkjmimicgbyp5ninsdgsrgky4hmq"))
1082 (file-name (string-append name "-" version ".tar.gz"))))
1083 (build-system cmake-build-system)
1084 (arguments
1085 '(#:phases
1086 (modify-phases %standard-phases
1087 (add-after 'unpack 'fix-reproducibility-issues
1088 (lambda _
1089 (substitute* "src/main.cpp"
1090 (("__DATE__") "\"\"")
1091 (("__TIME__") "\"\"")
1092 (("TIMESTAMP") "\"\""))
1093 #t))
1094 ;; Ensure that icons are found at runtime.
1095 (add-after 'install 'wrap-executable
1096 (lambda* (#:key inputs outputs #:allow-other-keys)
1097 (let ((out (assoc-ref outputs "out")))
1098 (wrap-program (string-append out "/bin/qtox")
1099 `("QT_PLUGIN_PATH" prefix
1100 ,(list (string-append (assoc-ref inputs "qtsvg")
1101 "/lib/qt5/plugins/"))))))))))
1102 (inputs
1103 `(("ffmpeg" ,ffmpeg)
1104 ("filteraudio" ,filteraudio)
1105 ("glib" ,glib)
1106 ("gtk+" ,gtk+-2)
1107 ("libsodium" ,libsodium)
1108 ("c-toxcore" ,c-toxcore)
1109 ("libvpx" ,libvpx)
1110 ("libxscrnsaver" ,libxscrnsaver)
1111 ("libx11" ,libx11)
1112 ("libexif" ,libexif)
1113 ("sqlite" ,sqlite)
1114 ("openal" ,openal)
1115 ("qrencode" ,qrencode)
1116 ("qtbase" ,qtbase)
1117 ("qtsvg" ,qtsvg)
1118 ("sqlcipher" ,sqlcipher)))
1119 (native-inputs
1120 `(("pkg-config" ,pkg-config)
1121 ("qmake" ,qttools)))
1122 (home-page "https://qtox.github.io/")
1123 (synopsis "Tox chat client using Qt")
1124 (description "qTox is a Tox client that follows the Tox design
1125 guidelines. It provides an easy to use application that allows you to
1126 connect with friends and family without anyone else listening in.")
1127 (license license:gpl3+)))
1128
1129 (define-public pybitmessage
1130 (package
1131 (name "pybitmessage")
1132 (version "0.6.3.2")
1133 (source
1134 (origin
1135 (method git-fetch)
1136 (uri (git-reference
1137 (url "https://github.com/Bitmessage/PyBitmessage.git")
1138 (commit version)))
1139 (file-name (string-append name "-" version "-checkout"))
1140 (sha256
1141 (base32
1142 "1lmhbpwsqh1v93krlqqhafw2pc3y0qp8zby186yllbph6s8kdp35"))))
1143 (propagated-inputs
1144 ;; TODO:
1145 ;; Package "pyopencl", required in addition to numpy for OpenCL support.
1146 ;; Package "gst123", required in addition to alsa-utils and
1147 ;; mpg123 for sound support.
1148 `(("python2-msgpack" ,python2-msgpack)
1149 ("python2-pythondialog" ,python2-pythondialog)
1150 ("python2-pyqt-4" ,python2-pyqt-4)
1151 ("python2-sip" ,python2-sip)
1152 ("python2-pysqlite" ,python2-pysqlite)
1153 ("python2-pyopenssl" ,python2-pyopenssl)))
1154 (native-inputs
1155 `(("openssl" ,openssl)))
1156 (build-system python-build-system)
1157 (arguments
1158 `(#:modules ((guix build python-build-system)
1159 (guix build utils))
1160 #:tests? #f ;no test target
1161 #:python ,python-2
1162 #:phases
1163 (modify-phases %standard-phases
1164 (add-after 'unpack 'fix-unmatched-python-shebangs
1165 (lambda* (#:key inputs #:allow-other-keys)
1166 (substitute* "src/bitmessagemain.py"
1167 (("#!/usr/bin/env python2.7")
1168 (string-append "#!" (which "python"))))
1169 (substitute* "src/bitmessagecli.py"
1170 (("#!/usr/bin/env python2.7.x")
1171 (string-append "#!" (which "python"))))
1172 #t))
1173 (add-after 'unpack 'fix-depends
1174 (lambda* (#:key inputs #:allow-other-keys)
1175 (substitute* "src/depends.py"
1176 (("libcrypto.so")
1177 (string-append (assoc-ref inputs "openssl")
1178 "/lib/libcrypto.so")))
1179 #t))
1180 (add-after 'unpack 'fix-local-files-in-paths
1181 (lambda* (#:key outputs #:allow-other-keys)
1182 (substitute* "src/proofofwork.py"
1183 (("bitmsghash.so")
1184 (string-append (assoc-ref outputs "out")
1185 "/lib/bitmsghash.so")))
1186 #t))
1187 (add-after 'unpack 'fix-pyelliptic
1188 (lambda* (#:key inputs #:allow-other-keys)
1189 (substitute* "src/pyelliptic/openssl.py"
1190 (("libcrypto.so")
1191 (string-append (assoc-ref inputs "openssl")
1192 "/lib/libcrypto.so"))
1193 (("libssl.so")
1194 (string-append (assoc-ref inputs "openssl")
1195 "/lib/libssl.so")))
1196 #t))
1197 (add-after 'unpack 'noninteractive-build
1198 ;; This applies upstream commit 4c597d3f7cf9f83a763472aa165a1a4292019f20
1199 (lambda _
1200 (substitute* "setup.py"
1201 (("except NameError")
1202 "except EOFError, NameError"))
1203 #t))
1204 ;; XXX: python setup.py does not build and install bitmsghash,
1205 ;; without it PyBitmessage tries to compile it at first run
1206 ;; in the store, which due to obvious reasons fails. Do it
1207 ;; and place it in /lib.
1208 (add-after 'unpack 'build-and-install-bitmsghash
1209 (lambda* (#:key outputs #:allow-other-keys)
1210 (with-directory-excursion "src/bitmsghash"
1211 (system* "make")
1212 (install-file "bitmsghash.so"
1213 (string-append (assoc-ref outputs "out") "/lib")))
1214 #t)))))
1215 (license license:expat)
1216 (description
1217 "Distributed and trustless peer-to-peer communications protocol
1218 for sending encrypted messages to one person or many subscribers.")
1219 (synopsis "Distributed peer-to-peer communication")
1220 (home-page "https://bitmessage.org/")))
1221
1222 (define-public ytalk
1223 (package
1224 (name "ytalk")
1225 (version "3.3.0")
1226 (source
1227 (origin
1228 (method url-fetch)
1229 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1230 version ".tar.gz"))
1231 (sha256
1232 (base32
1233 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1234 (build-system gnu-build-system)
1235 (inputs
1236 `(("ncurses" ,ncurses)))
1237 (home-page "http://ytalk.ourproject.org")
1238 (synopsis "Multi-user chat program")
1239 (description "Ytalk is a replacement for the BSD talk program. Its main
1240 advantage is the ability to communicate with any arbitrary number of users at
1241 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
1242 with several different talk daemons at the same time.")
1243 (license license:gpl2+)))
1244
1245 (define-public gloox
1246 (package
1247 (name "gloox")
1248 (version "1.0.23")
1249 (source
1250 (origin
1251 (method url-fetch)
1252 (uri (string-append "https://camaya.net/download/gloox-"
1253 version ".tar.bz2"))
1254 (sha256
1255 (base32 "12jz8glg9zmyk0iyv1ywf5i0hq93dfq8lvn6lyjgy8730w66mjwp"))))
1256 (build-system gnu-build-system)
1257 (inputs
1258 `(("libidn" ,libidn)
1259 ("gnutls" ,gnutls)
1260 ("zlib" ,zlib)))
1261 (native-inputs
1262 `(("pkg-config" ,pkg-config)))
1263 (synopsis "Portable high-level Jabber/XMPP library for C++")
1264 (description
1265 "gloox is a full-featured Jabber/XMPP client library,
1266 written in ANSI C++. It makes writing spec-compliant clients easy
1267 and allows for hassle-free integration of Jabber/XMPP functionality
1268 into existing applications.")
1269 (home-page "https://camaya.net/gloox")
1270 (license license:gpl3)))
1271
1272 (define-public perl-net-psyc
1273 (package
1274 (name "perl-net-psyc")
1275 (version "1.3")
1276 (source
1277 (origin
1278 (method url-fetch)
1279 (uri (string-append "http://perlpsyc.psyc.eu/"
1280 "perlpsyc-" version ".zip"))
1281 (file-name (string-append name "-" version ".zip"))
1282 (sha256
1283 (base32
1284 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1285 (build-system perl-build-system)
1286 (native-inputs
1287 `(("unzip" ,unzip)))
1288 (inputs
1289 `(("perl-curses" ,perl-curses)
1290 ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
1291 (arguments
1292 `(#:phases
1293 (modify-phases %standard-phases
1294 (delete 'configure) ; No configure script
1295 ;; There is a Makefile, but it does not install everything
1296 ;; (leaves out psycion) and says
1297 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
1298 (replace 'build
1299 (lambda _ (invoke "make" "manuals")))
1300 (replace 'install
1301 (lambda* (#:key outputs #:allow-other-keys)
1302 (let* ((out (assoc-ref outputs "out"))
1303 (doc (string-append out "/share/doc/perl-net-psyc"))
1304 (man1 (string-append out "/share/man/man1"))
1305 (man3 (string-append out "/share/man/man3"))
1306 (bin (string-append out "/bin"))
1307 (libpsyc (string-append out "/lib/psyc/ion"))
1308 (libperl (string-append out "/lib/perl5/site_perl/"
1309 ,(package-version perl))))
1310
1311 (copy-recursively "lib/perl5" libperl)
1312 (copy-recursively "lib/psycion" libpsyc)
1313 (copy-recursively "bin" bin)
1314 (install-file "cgi/psycpager" (string-append doc "/cgi"))
1315 (copy-recursively "contrib" (string-append doc "/contrib"))
1316 (copy-recursively "hooks" (string-append doc "/hooks"))
1317 (copy-recursively "sdj" (string-append doc "/sdj"))
1318 (install-file "README.txt" doc)
1319 (install-file "TODO.txt" doc)
1320 (copy-recursively "share/man/man1" man1)
1321 (copy-recursively "share/man/man3" man3)
1322 #t)))
1323 (add-after 'install 'wrap-programs
1324 (lambda* (#:key outputs #:allow-other-keys)
1325 ;; Make sure all executables in "bin" find the Perl modules
1326 ;; provided by this package at runtime.
1327 (let* ((out (assoc-ref outputs "out"))
1328 (bin (string-append out "/bin/"))
1329 (path (getenv "PERL5LIB")))
1330 (for-each (lambda (file)
1331 (wrap-program file
1332 `("PERL5LIB" ":" prefix (,path))))
1333 (find-files bin "\\.*$"))
1334 #t))))))
1335 (description
1336 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1337 Gtk2 event loops. This package includes 12 applications and additional scripts:
1338 psycion (a @uref{http://about.psyc.eu,PSYC} chat client), remotor (a control console
1339 for @uref{https://torproject.org,tor} router) and many more.")
1340 (synopsis "Perl implementation of PSYC protocol")
1341 (home-page "http://perlpsyc.psyc.eu/")
1342 (license (list license:gpl2
1343 license:perl-license
1344 ;; contrib/irssi-psyc.pl:
1345 license:public-domain
1346 ;; bin/psycplay states AGPL with no version:
1347 license:agpl3+))))
1348
1349 (define-public libpsyc
1350 (package
1351 (name "libpsyc")
1352 (version "20160913")
1353 (source (origin
1354 (method url-fetch)
1355 (uri (string-append "http://www.psyced.org/files/"
1356 name "-" version ".tar.xz"))
1357 (sha256
1358 (base32
1359 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1360 (build-system gnu-build-system)
1361 (native-inputs
1362 `(("perl" ,perl)
1363 ("netcat" ,netcat)
1364 ("procps" ,procps)))
1365 (arguments
1366 `(#:make-flags
1367 (list "CC=gcc"
1368 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1369 #:phases
1370 (modify-phases %standard-phases
1371 ;; The rust bindings are the only ones in use, the lpc bindings
1372 ;; are in psyclpc. The other bindings are not used by anything,
1373 ;; the chances are high that the bindings do not even work,
1374 ;; therefore we do not include them.
1375 ;; TODO: Get a cargo build system in Guix.
1376 (delete 'configure)))) ; no configure script
1377 (home-page "http://about.psyc.eu/libpsyc")
1378 (description
1379 "@code{libpsyc} is a PSYC library in C which implements
1380 core aspects of PSYC, useful for all kinds of clients and servers
1381 including psyced.")
1382 (synopsis "PSYC library in C")
1383 (license license:agpl3+)))
1384
1385 ;; This commit removes the historic bundled pcre and makes psyclpc reproducible.
1386 (define-public psyclpc
1387 (let* ((commit "61cf9aa81297085e5c40170fd01221c752f8deba")
1388 (revision "2"))
1389 (package
1390 (name "psyclpc")
1391 (version (string-append "20160821-" revision "." (string-take commit 7)))
1392 (source (origin
1393 (method git-fetch)
1394 (uri (git-reference
1395 (url "git://git.psyced.org/git/psyclpc")
1396 (commit commit)))
1397 (file-name (string-append name "-" version "-checkout"))
1398 (sha256
1399 (base32
1400 "1viwqymbhn3cwvx0zl58rlzl5gw47zxn0ldg2nbi55ghm5zxl1z5"))))
1401 (build-system gnu-build-system)
1402 (arguments
1403 `(#:tests? #f ; There are no tests/checks.
1404 #:configure-flags
1405 ;; If you have questions about this part, look at
1406 ;; "src/settings/psyced" and the ebuild.
1407 (list
1408 "--enable-use-tls=yes"
1409 "--enable-use-mccp" ; Mud Client Compression Protocol, leave this enabled.
1410 (string-append "--prefix="
1411 (assoc-ref %outputs "out"))
1412 ;; src/Makefile: Set MUD_LIB to the directory which contains
1413 ;; the mud data. defaults to MUD_LIB = @libdir@
1414 (string-append "--libdir="
1415 (assoc-ref %outputs "out")
1416 "/opt/psyced/world")
1417 (string-append "--bindir="
1418 (assoc-ref %outputs "out")
1419 "/opt/psyced/bin")
1420 ;; src/Makefile: Set ERQ_DIR to directory which contains the
1421 ;; stuff which ERQ can execute (hopefully) savely. Was formerly
1422 ;; defined in config.h. defaults to ERQ_DIR= @libexecdir@
1423 (string-append "--libexecdir="
1424 (assoc-ref %outputs "out")
1425 "/opt/psyced/run"))
1426 #:phases
1427 (modify-phases %standard-phases
1428 (add-before 'configure 'chdir-to-src
1429 ;; We need to pass this as env variables
1430 ;; and manually change the directory.
1431 (lambda _
1432 (chdir "src")
1433 (setenv "CONFIG_SHELL" (which "sh"))
1434 (setenv "SHELL" (which "sh"))
1435 #t)))
1436 #:make-flags (list "install-all")))
1437 (inputs
1438 `(("zlib" ,zlib)
1439 ("openssl" ,openssl-1.0)
1440 ("pcre" ,pcre)))
1441 (native-inputs
1442 `(("pkg-config" ,pkg-config)
1443 ("bison" ,bison)
1444 ("gettext" ,gettext-minimal)
1445 ("help2man" ,help2man)
1446 ("autoconf" ,autoconf)
1447 ("automake" ,automake)))
1448 (home-page "http://lpc.psyc.eu/")
1449 (synopsis "psycLPC is a multi-user network server programming language")
1450 (description
1451 "LPC is a bytecode language, invented to specifically implement
1452 multi user virtual environments on the internet. This technology is used for
1453 MUDs and also the psyced implementation of the Protocol for SYnchronous
1454 Conferencing (PSYC). psycLPC is a fork of LDMud with some new features and
1455 many bug fixes.")
1456 (license license:gpl2))))
1457
1458 (define-public loudmouth
1459 (package
1460 (name "loudmouth")
1461 (version "1.5.3")
1462 (source
1463 (origin
1464 (method url-fetch)
1465 (uri (string-append "https://mcabber.com/files/loudmouth/"
1466 name "-" version ".tar.bz2"))
1467 (sha256
1468 (base32
1469 "0b6kd5gpndl9nzis3n6hcl0ldz74bnbiypqgqa1vgb0vrcar8cjl"))))
1470 (build-system gnu-build-system)
1471 (inputs
1472 `(("glib" ,glib)
1473 ("gnutls" ,gnutls)
1474 ("libidn" ,libidn)))
1475 (native-inputs
1476 `(("pkg-config" ,pkg-config)
1477 ("check" ,check)
1478 ("glib" ,glib "bin") ; gtester
1479 ("gtk-doc" ,gtk-doc)))
1480 (home-page "https://mcabber.com/")
1481 (description
1482 "Loudmouth is a lightweight and easy-to-use C library for programming
1483 with the XMPP (formerly known as Jabber) protocol. It is designed to be
1484 easy to get started with and yet extensible to let you do anything the XMPP
1485 protocol allows.")
1486 (synopsis "Asynchronous XMPP library")
1487 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
1488 (license license:lgpl2.0+)))
1489
1490 (define-public mcabber
1491 (package
1492 (name "mcabber")
1493 (version "1.1.0")
1494 (source
1495 (origin
1496 (method url-fetch)
1497 (uri (string-append "https://mcabber.com/files/"
1498 name "-" version ".tar.bz2"))
1499 (sha256
1500 (base32
1501 "1ggh865p1rf10ffsnf4g6qv9i8bls36dxdb1nzs5r9vdqci2rz04"))))
1502 (build-system gnu-build-system)
1503 (arguments
1504 '(#:configure-flags (list "--enable-otr"
1505 "--enable-aspell")))
1506 (inputs
1507 `(("gpgme" ,gpgme)
1508 ("libotr" ,libotr)
1509 ("aspell" ,aspell)
1510 ("libidn" ,libidn)
1511 ("glib" ,glib)
1512 ("ncurses" ,ncurses)
1513 ("loudmouth" ,loudmouth)))
1514 (native-inputs
1515 `(("pkg-config" ,pkg-config)))
1516 (home-page "https://mcabber.com")
1517 (description
1518 "Mcabber is a small XMPP (Jabber) console client, which includes features
1519 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
1520 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
1521 support, and more.")
1522 (synopsis "Small XMPP console client")
1523 (license license:gpl2+)))
1524
1525 (define-public freetalk
1526 (package
1527 (name "freetalk")
1528 (version "4.1")
1529 (source (origin
1530 (method url-fetch)
1531 (uri (string-append "mirror://gnu/freetalk/freetalk-"
1532 version ".tar.gz"))
1533 (sha256
1534 (base32
1535 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
1536 (build-system gnu-build-system)
1537 (arguments
1538 `(#:phases
1539 (modify-phases %standard-phases
1540 ;; For 'system' commands in Scheme code.
1541 (add-after 'install 'wrap-program
1542 (lambda* (#:key inputs outputs #:allow-other-keys)
1543 (let* ((out (assoc-ref outputs "out"))
1544 (bash (assoc-ref inputs "bash"))
1545 (coreutils (assoc-ref inputs "coreutils"))
1546 (less (assoc-ref inputs "less")))
1547 (wrap-program (string-append out "/bin/freetalk")
1548 `("PATH" ":" prefix
1549 ,(map (lambda (dir)
1550 (string-append dir "/bin"))
1551 (list bash coreutils less))))
1552 #t))))))
1553 (native-inputs
1554 `(("autoconf" ,autoconf)
1555 ("automake" ,automake)
1556 ("pkg-config" ,pkg-config)
1557 ("texinfo" ,texinfo)))
1558 (inputs
1559 `(("bash" ,bash)
1560 ("glib" ,glib)
1561 ("guile" ,guile-2.0)
1562 ("less" ,less)
1563 ("loudmouth" ,loudmouth)
1564 ("readline" ,readline)))
1565 (synopsis "Extensible console-based Jabber client")
1566 (description
1567 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
1568 the Readline library to handle input, so it features convenient navigation of
1569 text as well as tab-completion of buddy names, commands and English words. It
1570 is also scriptable and extensible via Guile.")
1571 (home-page "https://www.gnu.org/software/freetalk/")
1572 (license license:gpl3+)))
1573
1574 (define-public libmesode
1575 (package
1576 (name "libmesode")
1577 (version "0.9.3")
1578 (source (origin
1579 (method git-fetch)
1580 (uri (git-reference
1581 (url "https://github.com/boothj5/libmesode.git")
1582 (commit version)))
1583 (file-name (git-file-name name version))
1584 (sha256
1585 (base32
1586 "0xzfg1xx88cn36352nnjlb1p7xyw32yqkhjzq10px88iaaqz1vv0"))))
1587 (build-system gnu-build-system)
1588 (inputs
1589 `(("expat" ,expat)
1590 ("openssl" ,openssl)))
1591 (native-inputs
1592 `(("autoconf" ,autoconf)
1593 ("automake" ,automake)
1594 ("libtool" ,libtool)
1595 ("pkg-config" ,pkg-config)))
1596 (synopsis "C library for writing XMPP clients")
1597 (description "Libmesode is a fork of libstrophe for use with Profanity
1598 XMPP Client. In particular, libmesode provides extra TLS functionality such as
1599 manual SSL certificate verification.")
1600 (home-page "https://github.com/boothj5/libmesode")
1601 ;; Dual-licensed.
1602 (license (list license:gpl3+ license:x11))))
1603
1604 (define-public libstrophe
1605 (package
1606 (name "libstrophe")
1607 (version "0.9.3")
1608 (source
1609 (origin
1610 (method git-fetch)
1611 (uri (git-reference
1612 (url "https://github.com/strophe/libstrophe.git")
1613 (commit version)))
1614 (file-name (git-file-name name version))
1615 (sha256
1616 (base32 "1g1l0w9z9hdy5ncdvd9097gi7k7783did6py5h9camlpb2fnk5mk"))))
1617 (build-system gnu-build-system)
1618 (inputs
1619 `(("expat" ,expat)
1620 ("openssl" ,openssl)))
1621 (native-inputs
1622 `(("autoconf" ,autoconf)
1623 ("automake" ,automake)
1624 ("libtool" ,libtool)
1625 ("pkg-config" ,pkg-config)))
1626 (synopsis "C library for writing XMPP clients")
1627 (description "Libstrophe is a minimal XMPP library written in C. It has
1628 almost no external dependencies, only an XML parsing library (expat or libxml
1629 are both supported).")
1630 (home-page "http://strophe.im/libstrophe")
1631 ;; Dual-licensed.
1632 (license (list license:gpl3+ license:x11))))
1633
1634 (define-public profanity
1635 (package
1636 (name "profanity")
1637 (version "0.7.1")
1638 (source (origin
1639 (method url-fetch)
1640 (uri (string-append "https://profanity-im.github.io/profanity-"
1641 version ".tar.gz"))
1642 (sha256
1643 (base32
1644 "0nxh81j8ky0fzv47pip1jb7rs5rrin3jx0f3h632bvpjiya45r1z"))))
1645 (build-system gnu-build-system)
1646 (arguments
1647 '(#:configure-flags
1648 (list "--enable-c-plugins"
1649 "--enable-otr"
1650 "--enable-omemo"
1651 "--enable-pgp"
1652 "--enable-icons"
1653 "--enable-notifications")))
1654 (inputs
1655 `(("curl" ,curl)
1656 ("expat" ,expat)
1657 ("glib" ,glib)
1658 ("gpgme" ,gpgme)
1659 ("libmesode" ,libmesode)
1660 ("libotr" ,libotr)
1661 ("ncurses" ,ncurses)
1662 ("openssl" ,openssl)
1663 ("readline" ,readline)))
1664 (native-inputs
1665 `(("autoconf" ,autoconf)
1666 ("autoconf-archive" ,autoconf-archive)
1667 ("automake" ,automake)
1668 ("cmocka" ,cmocka)
1669 ("gtk+" ,gtk+-2)
1670 ("libnotify" ,libnotify)
1671 ("libtool" ,libtool)
1672 ("libsignal-protocol-c" ,libsignal-protocol-c)
1673 ("pkg-config" ,pkg-config)))
1674 (synopsis "Console-based XMPP client")
1675 (description "Profanity is a console based XMPP client written in C
1676 using ncurses and libmesode, inspired by Irssi.")
1677 (home-page "https://profanity-im.github.io")
1678 (license license:gpl3+)))
1679
1680 (define-public libircclient
1681 (package
1682 (name "libircclient")
1683 (version "1.10")
1684 (source
1685 (origin
1686 (method url-fetch)
1687 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
1688 version "/libircclient-" version ".tar.gz"))
1689 (sha256
1690 (base32
1691 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
1692 (build-system gnu-build-system)
1693 (inputs
1694 `(("openssl" ,openssl)))
1695 (arguments
1696 `(#:configure-flags
1697 (list (string-append "--libdir="
1698 (assoc-ref %outputs "out") "/lib")
1699 "--enable-shared"
1700 "--enable-ipv6"
1701 "--enable-openssl")
1702 #:tests? #f)) ; no test suite
1703 (home-page "https://www.ulduzsoft.com/libircclient/")
1704 (synopsis "Library implementing the client IRC protocol")
1705 (description "Libircclient is a library which implements the client IRC
1706 protocol. It is designed to be small, fast, portable and compatible with the
1707 RFC standards as well as non-standard but popular features. It can be used for
1708 building the IRC clients and bots.")
1709 (license license:lgpl3+)))
1710
1711 (define-public toxic
1712 (package
1713 (name "toxic")
1714 (version "0.8.3")
1715 (source
1716 (origin
1717 (method git-fetch)
1718 (uri (git-reference
1719 (url "https://github.com/JFreegman/toxic.git")
1720 (commit (string-append "v" version))))
1721 (sha256
1722 (base32 "09l2j3lwvrq7bf3051vjsnml9w63790ly3iylgf26gkrmld6k31w"))
1723 (file-name (git-file-name name version))))
1724 (build-system gnu-build-system)
1725 (arguments
1726 `(#:tests? #f ; no tests
1727 #:make-flags
1728 (list
1729 "CC=gcc"
1730 (string-append "PREFIX="
1731 (assoc-ref %outputs "out")))
1732 #:phases
1733 (modify-phases %standard-phases
1734 (delete 'configure)
1735 (add-before 'build 'enable-python-scripting
1736 (lambda _
1737 (setenv "ENABLE_PYTHON" "1")
1738 #t)))))
1739 (inputs
1740 `(("c-toxcore" ,c-toxcore)
1741 ("curl" ,curl)
1742 ("freealut" ,freealut)
1743 ("gdk-pixbuf" ,gdk-pixbuf) ; for libnotify.pc
1744 ("libconfig" ,libconfig)
1745 ("libnotify" ,libnotify)
1746 ("libpng" ,libpng)
1747 ("libvpx" ,libvpx)
1748 ("libx11" ,libx11)
1749 ("ncurses" ,ncurses)
1750 ("openal" ,openal)
1751 ("python" ,python)
1752 ("qrencode" ,qrencode)))
1753 (native-inputs
1754 `(("pkg-config" ,pkg-config)))
1755 (home-page "https://github.com/JFreegman/toxic")
1756 (synopsis "Tox chat client using ncurses")
1757 (description "Toxic is a console-based instant messaging client, using
1758 c-toxcore and ncurses. It provides audio calls, sound and desktop
1759 notifications, and Python scripting support.")
1760 (license license:gpl3+)))
1761
1762 (define-public libqmatrixclient
1763 (package
1764 (name "libqmatrixclient")
1765 (version "0.5.2")
1766 (source
1767 (origin
1768 (method git-fetch)
1769 (uri (git-reference
1770 (url "https://github.com/QMatrixClient/libqmatrixclient")
1771 (commit version)))
1772 (file-name (git-file-name name version))
1773 (sha256
1774 (base32 "1bhlqfs7251fss4icx794ka614npr6zyrpp4qwc4q5408ykfm7lr"))))
1775 (build-system cmake-build-system)
1776 (inputs
1777 `(("qtbase" ,qtbase)
1778 ("qtmultimedia" ,qtmultimedia)))
1779 (arguments
1780 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
1781 #:tests? #f)) ; no tests
1782 (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
1783 (synopsis "Qt5 client library for the Matrix instant messaging protocol")
1784 (description "libqmatrixclient is a Qt5 library to write clients for the
1785 Matrix instant messaging protocol. Quaternion is the reference client
1786 implementation. Quaternion and libqmatrixclient together form the
1787 QMatrixClient project.")
1788 (license license:lgpl2.1+)))
1789
1790 (define-public quaternion
1791 (package
1792 (name "quaternion")
1793 (version "0.0.9.4c")
1794 (source
1795 (origin
1796 (method git-fetch)
1797 (uri (git-reference
1798 (url "https://github.com/QMatrixClient/Quaternion")
1799 (commit version)))
1800 (file-name (git-file-name name version))
1801 (sha256
1802 (base32 "0gpv6b3nn3lsyym8809kiqkpdszfasldqjpk5s542zyn41gdlql4"))))
1803 (build-system qt-build-system)
1804 (inputs
1805 `(("libqmatrixclient" ,libqmatrixclient)
1806 ("qtbase" ,qtbase)
1807 ("qtdeclarative" ,qtdeclarative)
1808 ("qtmultimedia" ,qtmultimedia)
1809 ("qtquickcontrols" ,qtquickcontrols)
1810 ("qtquickcontrols2" ,qtquickcontrols2)
1811 ("qtsvg" ,qtsvg)
1812 ("qttools" ,qttools)))
1813 (arguments
1814 `(#:tests? #f)) ; no tests
1815 (home-page "https://matrix.org/docs/projects/client/quaternion.html")
1816 (synopsis "Graphical client for the Matrix instant messaging protocol")
1817 (description "Quaternion is a Qt5 desktop client for the Matrix instant
1818 messaging protocol. It uses libqmatrixclient and is its reference client
1819 implementation. Quaternion and libqmatriclient together form the
1820 QMatrixClient project.")
1821 (license (list license:gpl3+ ; all source code
1822 license:lgpl3+)))) ; icons/breeze
1823
1824 (define-public hangups
1825 (package
1826 (name "hangups")
1827 (version "0.4.10")
1828 (source
1829 (origin
1830 (method url-fetch)
1831 (uri (pypi-uri "hangups" version))
1832 (sha256
1833 (base32 "0ww9z9kcb02pwnr8q1ll31wkzspc1fci1ly8ifrwzxysp4rxy3j5"))))
1834 (build-system python-build-system)
1835 (arguments
1836 `(#:phases
1837 (modify-phases %standard-phases
1838 (add-before 'build 'relax-dependencies
1839 ;; Relax overly strict package version specifications.
1840 (lambda _
1841 (substitute* "setup.py"
1842 (("==") ">="))
1843 #t)))))
1844 (propagated-inputs
1845 `(("python-aiohttp" ,python-aiohttp)
1846 ("python-appdirs" ,python-appdirs)
1847 ("python-async-timeout" ,python-async-timeout)
1848 ("python-configargparse" ,python-configargparse)
1849 ("python-mechanicalsoup" ,python-mechanicalsoup)
1850 ("python-protobuf" ,python-protobuf-3.6)
1851 ("python-readlike" ,python-readlike)
1852 ("python-reparser" ,python-reparser)
1853 ("python-requests" ,python-requests)
1854 ("python-urwid" ,python-urwid)))
1855 (native-inputs
1856 `(("python-httpretty" ,python-httpretty)
1857 ("python-pytest" ,python-pytest)))
1858 (home-page "https://hangups.readthedocs.io/")
1859 (synopsis "Instant messaging client for Google Hangouts")
1860 (description
1861 "Hangups is an instant messaging client for Google Hangouts. It includes
1862 both a Python library and a reference client with a text-based user interface.
1863
1864 Hangups is implements a reverse-engineered version of Hangouts' proprietary,
1865 non-interoperable protocol, which allows it to support features like group
1866 messaging that aren’t available to clients that connect over XMPP.")
1867 (license license:expat)))
1868
1869 (define-public telegram-purple
1870 (package
1871 (name "telegram-purple")
1872 (version "1.4.2")
1873 (home-page "https://github.com/majn/telegram-purple")
1874 (source (origin
1875 (method git-fetch)
1876 (uri (git-reference
1877 (url home-page)
1878 (commit (string-append "v" version))
1879 (recursive? #t)))
1880 (sha256
1881 (base32
1882 "0imbzhhq9qbj6gvkckrnjhls2vvmmy8db7l6gsd7lng2pbfcn522"))
1883 (modules '((guix build utils)))
1884 (snippet
1885 '(begin
1886 (substitute* "Makefile.in"
1887 ;; By default these two directories point to Pidgin's own
1888 ;; prefix.
1889 (("^PLUGIN_DIR_PURPLE=.*")
1890 (string-append
1891 "exec_prefix := @exec_prefix@\n"
1892 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
1893 (("^DATA_ROOT_DIR_PURPLE=.*")
1894 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
1895
1896 ;; Honor sysconfdir instead of trying to write to /etc.
1897 (("DESTDIR\\)/etc/telegram-purple")
1898 "DESTDIR)@sysconfdir@/telegram-purple"))
1899 #t))
1900 (patches (search-patches "telegram-purple-adjust-test.patch"))
1901 (file-name (git-file-name name version))))
1902 (build-system gnu-build-system)
1903 (native-inputs
1904 `(("pkg-config" ,pkg-config)
1905 ("which" ,which)))
1906 (inputs
1907 `(("pidgin" ,pidgin)
1908 ("libgcrypt" ,libgcrypt)
1909 ("libwebp" ,libwebp)
1910 ("glib" ,glib)
1911 ("gettext" ,gnu-gettext)
1912 ("gtk+" ,gtk+-2)
1913 ("zlib" ,zlib)))
1914 (arguments
1915 `(#:phases
1916 (modify-phases %standard-phases
1917 ;; We're using release tag for repository checkout - let's prepare
1918 ;; header defining GIT_COMMIT manually instead of running git to
1919 ;; identify version which is being compiled. Git repository
1920 ;; is removed anyway and only source code is kept.
1921 (add-after 'unpack 'prepare-commit.h
1922 (lambda _
1923 (with-output-to-file "./commit.h"
1924 (lambda ()
1925 (display
1926 (string-append "//generated by guix, use version instead of "
1927 "commit\n"
1928 "#ifndef GIT_COMMIT\n"
1929 "# define GIT_COMMIT \"v"
1930 ,version "\"\n"
1931 "#endif\n"))))
1932 #t))
1933 (add-before 'configure 'set-SHELL-variables
1934 ;; Set these environment variables so that 'tgl/configure' uses the
1935 ;; right shell and not /bin/sh.
1936 (lambda _
1937 (let ((bash (which "bash")))
1938 (setenv "SHELL" bash)
1939 (setenv "CONFIG_SHELL" bash)
1940 #t))))))
1941 (synopsis "Telegram messaging support for Pidgin")
1942 (description
1943 "Telegram-purple is a plugin for Libpurple, the communication library
1944 used by the Pidgin instant messaging client, that adds support for the
1945 Telegram messenger.")
1946
1947 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
1948 ;; itself is GPLv2+.
1949 (license license:gpl2+)))
1950
1951 (define-public tdlib
1952 (let ((commit "80c35676a2eb1e9b71db355ee217bba79fbdce31")
1953 (revision "1")
1954 (version "1.5.4"))
1955 (package
1956 (name "tdlib")
1957 (version (git-version version revision commit))
1958 (source (origin
1959 (method git-fetch)
1960 (uri (git-reference
1961 (url "https://github.com/tdlib/td.git")
1962 (commit commit)))
1963 (sha256
1964 (base32
1965 "09c0pygqirapgxxzcc3sr0x67qhz8cx2klznrbdyi0118r9s8a7a"))
1966 (file-name (git-file-name name version))))
1967 (build-system cmake-build-system)
1968 (arguments
1969 `(#:tests? #t
1970 #:configure-flags
1971 (list "-DCMAKE_BUILD_TYPE=Release"
1972 "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
1973 #:phases
1974 (modify-phases %standard-phases
1975 (add-after 'unpack 'remove-failing-tests
1976 (lambda _
1977 (substitute* "test/CMakeLists.txt"
1978 ;; The test cases are compiled into a distinct binary
1979 ;; which uses mtproto.cpp to attempt to connect to
1980 ;; a remote server. Removing this file from the sources
1981 ;; list disables those specific test cases.
1982 (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
1983 #t)))))
1984 (native-inputs
1985 `(("gperf" ,gperf)
1986 ("openssl" ,openssl)
1987 ("zlib" ,zlib)
1988 ("php" ,php)
1989 ("doxygen" ,doxygen)))
1990 (synopsis "Cross-platform library for building Telegram clients")
1991 (description "Tdlib is a cross-platform library for creating custom
1992 Telegram clients following the official Telegram API. It can be easily used
1993 from almost any programming language with a C-FFI and features first-class
1994 support for high performance Telegram Bot creation.")
1995 (home-page "https://core.telegram.org/tdlib")
1996 (license license:boost1.0))))
1997
1998 ;;; messaging.scm ends here