projects/guix·blob python-team · refs

1393 lines · 56.8 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014 John Darrington <[email protected]>
3;;; Copyright © 2015 Andreas Enge <[email protected]>
4;;; Copyright © 2015 David Hashe <[email protected]>
5;;; Copyright © 2015, 2016, 2020 Efraim Flashner <[email protected]>
6;;; Copyright © 2016 Lukas Gradl <[email protected]>
7;;; Copyright © 2016 Francesco Frassinelli <[email protected]>
8;;; Copyright © 2016, 2017 Nikita <[email protected]>
9;;; Copyright © 2017, 2018, 2023 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2018, 2021 Tobias Geerinckx-Rice <[email protected]>
11;;; Copyright © 2017 Adonay Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <[email protected]>
12;;; Copyright © 2018 Jovany Leandro G.C <[email protected]>
13;;; Copyright © 2018 Tim Gesthuizen <[email protected]>
14;;; Copyright © 2019 Pierre Neidhardt <[email protected]>
15;;; Copyright © 2019 Jan Wielkiewicz <[email protected]>
16;;; Copyright © 2019, 2024 Ivan Vilata i Balaguer <[email protected]>
17;;; Copyright © 2020 Brett Gilio <[email protected]>
18;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
19;;; Copyright © 2020 Raghav Gururajan <[email protected]>
20;;; Copyright © 2020-2024, 2026 Maxim Cournoyer <[email protected]>
21;;; Copyright © 2020 Vincent Legoll <[email protected]>
22;;; Copyright © 2021 LibreMiami <[email protected]>
23;;; Copyright © 2021 Sarah Morgensen <[email protected]>
24;;; Copyright © 2021 Demis Balbach <[email protected]>
25;;; Copyright © 2022 Thomas Albers Raviola <[email protected]>
26;;; Copyright © 2023 Ivan Gankevich <[email protected]>
27;;; Copyright © 2025 Brice Waegeneire <[email protected]>
28;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
29;;; Copyright © 2025 Igorj Gorjaĉev <[email protected]>
30;;; Copyright © 2026 Artyom V. Poptsov <[email protected]>
31;;;
32;;; This file is part of GNU Guix.
33;;;
34;;; GNU Guix is free software; you can redistribute it and/or modify it
35;;; under the terms of the GNU General Public License as published by
36;;; the Free Software Foundation; either version 3 of the License, or (at
37;;; your option) any later version.
38;;;
39;;; GNU Guix is distributed in the hope that it will be useful, but
40;;; WITHOUT ANY WARRANTY; without even the implied warranty of
41;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42;;; GNU General Public License for more details.
43;;;
44;;; You should have received a copy of the GNU General Public License
45;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
46
47(define-module (gnu packages telephony)
48 #:use-module (guix gexp)
49 #:use-module (gnu packages)
50 #:use-module (gnu packages admin)
51 #:use-module (gnu packages algebra)
52 #:use-module (gnu packages autotools)
53 #:use-module (gnu packages audio)
54 #:use-module (gnu packages base)
55 #:use-module (gnu packages boost)
56 #:use-module (gnu packages check)
57 #:use-module (gnu packages compression)
58 #:use-module (gnu packages cpp)
59 #:use-module (gnu packages databases)
60 #:use-module (gnu packages sdl)
61 #:use-module (gnu packages sqlite)
62 #:use-module (gnu packages dns)
63 #:use-module (gnu packages docbook)
64 #:use-module (gnu packages documentation)
65 #:use-module (gnu packages file)
66 #:use-module (gnu packages protobuf)
67 #:use-module (gnu packages gl)
68 #:use-module (gnu packages glib)
69 #:use-module (gnu packages gstreamer)
70 #:use-module (gnu packages gtk)
71 #:use-module (gnu packages gnupg)
72 #:use-module (gnu packages image)
73 #:use-module (gnu packages libusb)
74 #:use-module (gnu packages linphone)
75 #:use-module (gnu packages linux)
76 #:use-module (gnu packages maths)
77 #:use-module (gnu packages multiprecision)
78 #:use-module (gnu packages ncurses)
79 #:use-module (gnu packages netpbm)
80 #:use-module (gnu packages networking)
81 #:use-module (gnu packages perl)
82 #:use-module (gnu packages pkg-config)
83 #:use-module (gnu packages pulseaudio)
84 #:use-module (gnu packages python)
85 #:use-module (gnu packages qt)
86 #:use-module (gnu packages samba)
87 #:use-module (gnu packages security-token)
88 #:use-module (gnu packages speech)
89 #:use-module (gnu packages tls)
90 #:use-module (gnu packages xiph)
91 #:use-module (gnu packages xorg)
92 #:use-module (gnu packages xml)
93 #:use-module (gnu packages readline)
94 #:use-module (gnu packages bison)
95 #:use-module (gnu packages compiler-tools)
96 #:use-module (gnu packages libevent)
97 #:use-module (gnu packages video)
98 #:use-module ((guix licenses) #:prefix license:)
99 #:use-module (guix utils)
100 #:use-module (guix packages)
101 #:use-module (guix gexp)
102 #:use-module (guix download)
103 #:use-module (guix git-download)
104 #:use-module (guix build-system cmake)
105 #:use-module (guix build-system gnu)
106 #:use-module (guix build-system meson)
107 #:use-module (guix build-system qt))
108
109(define-public phonesim
110 (package
111 (name "phonesim")
112 (version "1.21")
113 (source
114 (origin
115 (method git-fetch)
116 (uri (git-reference
117 (url "https://git.kernel.org/pub/scm/network/ofono/phonesim")
118 (commit "a7c844d45b047b2dae5b0877816c346fce4c47b9")))
119 (file-name (git-file-name name version))
120 (sha256
121 (base32 "0rc1c2vr03dmi1dr3skj57v77ga9c22g29xs1qiphqms4isby9cq"))))
122 (build-system gnu-build-system)
123 (arguments
124 `(#:configure-flags
125 (list "--enable-maintainer-mode"
126 "CC=" ,(cc-for-target))))
127 (native-inputs
128 (list automake autoconf pkg-config))
129 (inputs
130 (list qtbase-5 qtdeclarative-5))
131 (synopsis "Phone Simulator for modem testing")
132 (description
133 "Phonesim is a modem emulator that oFono uses for development and
134testing. This allows oFono to be used by any host without requiring special
135GSM (or other) hardware.")
136 (home-page "https://git.kernel.org/pub/scm/network/ofono/phonesim")
137 (license license:gpl2+)))
138
139(define-public libilbc
140 (package
141 (name "libilbc")
142 (version "2.0.2")
143 (source
144 (origin
145 (method git-fetch)
146 (uri
147 (git-reference
148 (url "https://github.com/TimothyGu/libilbc")
149 (commit
150 (string-append "v" version))))
151 (file-name
152 (git-file-name name version))
153 (sha256
154 (base32
155 "1j1pn1w1198qvdiq2hgv9hkyq2nqcvmfnwlgppac633idkjnjrqx"))))
156 (build-system cmake-build-system)
157 (arguments
158 `(#:tests? #f)) ; No target
159 (native-inputs
160 (list pkg-config))
161 (synopsis "Libre iLBC codec")
162 (description "LibiLBC is a packaging friendly copy of the iLBC codec from
163the WebRTC project. It provides a base for distribution packages and can be
164used as drop-in replacement for the non-free code from RFC 3591.")
165 (home-page "https://github.com/TimothyGu/libilbc")
166 (license license:bsd-3)))
167
168(define-public spandsp
169 (package
170 (name "spandsp")
171 (version "0.0.6")
172 (source
173 (origin
174 (method url-fetch)
175 (uri
176 ;; The original upstream has been down since the end of March 2020.
177 (string-append "https://web.archive.org/web/20180626203108/"
178 "https://www.soft-switch.org/downloads/" name "/"
179 name "-" version ".tar.gz"))
180 (sha256
181 (base32 "0rclrkyspzk575v8fslzjpgp4y2s4x7xk3r55ycvpi4agv33l1fc"))))
182 (build-system gnu-build-system)
183 (outputs '("out" "doc" "static")) ;doc contains HTML documentation
184 (arguments
185 (list
186 #:configure-flags #~'("--enable-doc=yes" "--enable-tests=yes")
187 #:parallel-build? #f ;non-deterministic build failures may occur otherwise
188 #:parallel-tests? #f ;fails removing the same the files twice otherwise
189 #:phases
190 #~(modify-phases %standard-phases
191 (add-after 'unpack 'patch-configure.ac
192 (lambda _
193 ;; spandsp looks at hard coded locations of the FHS to
194 ;; find libxml2.
195 (substitute* "configure.ac"
196 (("AC_MSG_CHECKING\\(for libxml/xmlmemory\\.h.*" all)
197 (string-append all
198 "PKG_CHECK_MODULES(XML2, libxml-2.0)\n"
199 "CPPFLAGS+=\" $XML2_CFLAGS\"\n")))
200 ;; Force a regeneration of the autotools build system.
201 (delete-file "autogen.sh")
202 (delete-file "configure")))
203 (add-after 'unpack 'do-not-install-data-files
204 ;; The .tiff images produced for tests are not
205 ;; reproducible and it is not desirable to have those
206 ;; distributed.
207 (lambda _
208 (substitute* '("test-data/itu/fax/Makefile.am"
209 "test-data/etsi/fax/Makefile.am")
210 (("nobase_data_DATA")
211 "noinst_DATA"))))
212 (add-after 'install 'install-doc
213 (lambda _
214 (copy-recursively "doc/t38_manual"
215 (string-append #$output:doc
216 "/share/doc/"
217 #$name "-"
218 #$version))))
219 (add-after 'install 'move-static-libraries
220 (lambda _
221 (let ((static #$output:static))
222 (mkdir-p (string-append static "/lib"))
223 (with-directory-excursion #$output
224 (for-each (lambda (file)
225 (rename-file file
226 (string-append static "/" file)))
227 (find-files "lib" "\\.a$")))))))))
228 (native-inputs
229 (list autoconf
230 automake
231 libtool
232 pkg-config
233 ;; For the tests
234 fftw
235 libpcap
236 libsndfile
237 libjpeg-turbo ;XXX: should be propagated from libtiff
238 libtiff
239 netpbm
240 sox
241 ;; For the documentation
242 docbook-xml-4.3
243 docbook-xsl
244 doxygen
245 libxml2
246 libxslt))
247 (synopsis "DSP library for telephony")
248 (description "SpanDSP is a library of DSP functions for telephony, in the
2498000 sample per second world of E1s, T1s, and higher order PCM channels. It
250contains low level functions, such as basic filters. It also contains higher
251level functions, such as cadenced supervisory tone detection, and a complete
252software FAX machine.")
253 (home-page "https://web.archive.org/web/20180626203108/\
254https://www.soft-switch.org/index.html")
255 (license (list license:lgpl2.1+ ;for the library
256 license:gpl2+)))) ;for the test suites and support programs
257
258(define-public commoncpp
259 (package
260 (name "commoncpp")
261 (version "1.8.1")
262 (source (origin
263 (method url-fetch)
264 (uri (string-append "mirror://gnu/" name "/commoncpp2-"
265 version ".tar.gz"))
266 (sha256 (base32
267 "0kmgr5w3b1qwzxnsnw94q6rqs0hr8nbv9clf07ca2a2fyypx9kjk"))))
268 (arguments
269 (list #:make-flags #~(list "CXXFLAGS=-std=c++11 -fpermissive")
270 #:phases
271 #~(modify-phases %standard-phases
272 (add-before 'configure 'pre-configure
273 (lambda _
274 (substitute* "src/applog.cpp"
275 (("^// TODO sc.*")
276 "#include <sys/types.h>\n#include <sys/stat.h>\n")))))))
277 (build-system gnu-build-system)
278 (synopsis "(u)Common C++ framework for threaded applications")
279 (description "GNU Common C++ is an portable, optimized class framework for
280threaded applications, supporting concurrent synchronization, inter-process
281communications via sockets, and various methods for data handling, such as
282serialization and XML parsing. It includes the uCommon C++ library, a smaller
283reimplementation.")
284 (license license:gpl2+) ; plus runtime exception
285 (properties '((ftp-directory . "/gnu/commoncpp")
286 (upstream-name . "commoncpp2")))
287 (home-page "https://www.gnu.org/software/commoncpp/")))
288
289(define-public ucommon
290 (package
291 (name "ucommon")
292 (version "7.0.0")
293 (source (origin
294 (method url-fetch)
295 (uri (string-append "mirror://gnu/commoncpp/" name "-"
296 version ".tar.gz"))
297 (sha256 (base32
298 "1mv080rvrhyxyhgqiqr8r9jdqhg3xhfawjvfj5zgj47h59nggjba"))))
299 (build-system gnu-build-system)
300 (arguments
301 ;; Does not work with std=c++17, which is the default in modern GCC versions.
302 `(#:configure-flags '("CXXFLAGS=-std=c++14")))
303 (inputs (list gnutls))
304 (synopsis "Common C++ framework for threaded applications")
305 (description "GNU uCommon C++ is meant as a very light-weight C++ library
306to facilitate using C++ design patterns even for very deeply embedded
307applications, such as for systems using uclibc along with posix threading
308support.")
309 (license license:gpl3+)
310 (home-page "https://www.gnu.org/software/commoncpp/")
311 (properties '((ftp-directory . "/gnu/commoncpp")))))
312
313(define-public ccrtp
314 (package
315 (name "ccrtp")
316 (version "2.1.2")
317 (source (origin
318 (method url-fetch)
319 (uri (string-append "mirror://gnu/ccrtp/ccrtp-"
320 version ".tar.gz"))
321 (sha256 (base32
322 "17ili8l7zqbbkzr1rcy4hlnazkf50mds41wg6n7bfdsx3c7cldgh"))))
323 (build-system gnu-build-system)
324 (inputs (list ucommon libgcrypt))
325 (native-inputs (list pkg-config))
326 (synopsis "Implementation of RTP (real-time transport protocol)")
327 (description "GNU ccRTP is an implementation of RTP, the real-time transport
328protocol from the IETF. It is suitable both for high capacity servers and
329personal client applications. It is flexible in its design, allowing it to
330function as a framework for the framework, rather than just being a
331packet-manipulation library.")
332 (license license:gpl2+) ; plus runtime exception
333 (home-page "https://www.gnu.org/software/ccrtp/")))
334
335(define-public zrtpcpp
336 (package
337 (name "zrtpcpp")
338 (version "4.6.6")
339 (source
340 (origin
341 (method git-fetch)
342 (uri
343 (git-reference
344 (url "https://github.com/wernerd/ZRTPCPP")
345 (commit
346 (string-append "V" version))))
347 (file-name
348 (git-file-name name version))
349 (sha256
350 (base32
351 "06vphvh4dgi7ah5qkq53wqvswv8l273x0xwbc447qmgvamm0x1vs"))))
352 (build-system cmake-build-system)
353 (arguments
354 `(#:tests? #f)) ; No target
355 (native-inputs
356 (list pkg-config))
357 (inputs
358 (list ccrtp ucommon))
359 (synopsis "C++ Implementation of ZRTP protocol")
360 (description "GNU ZRTP C++ provides a library that adds ZRTP support to the
361GNU ccRTP stack and serves as library for other RTP stacks
362(PJSIP, GStreamer).")
363 (home-page "https://www.gnu.org/software/ccrtp/zrtp")
364 (license license:lgpl3+)))
365
366(define-public osip
367 (package
368 (name "osip")
369 (version "5.3.2")
370 (source (origin
371 (method url-fetch)
372 (uri (string-append "mirror://gnu/osip/libosip2-" version ".tar.gz"))
373 (sha256
374 (base32
375 "001vkps1bqiv74mqihxb4b6jbbz11626xjmaqdi6p4s0ampny60n"))))
376 (build-system gnu-build-system)
377
378 (synopsis "Library implementing SIP (RFC-3261)")
379 (description "GNU oSIP is an implementation of the SIP protocol. It is
380used to provide multimedia and telecom software developers with an interface
381to initiate and control SIP sessions.")
382 (license license:lgpl2.1+)
383 (properties '((ftp-directory . "/gnu/osip")
384 (upstream-name . "libosip2")))
385 (home-page "https://www.gnu.org/software/osip/")))
386
387(define-public exosip
388 (package
389 (name "exosip")
390 (version "5.3.0")
391 (source (origin
392 (method url-fetch)
393 (uri (string-append "mirror://savannah/exosip/libexosip2-"
394 version ".tar.gz"))
395 (sha256 (base32
396 "1hn9xgy8ny04hjqd1rra7c4nz5nf9abdd5ghr7nmrsiicjc26y2v"))))
397 (build-system gnu-build-system)
398 (inputs (list osip))
399 (synopsis "Sip abstraction library")
400 (description "EXosip is a library that hides the complexity of using the
401SIP protocol for multimedia session establishment. This protocol is mainly to
402be used by VoIP telephony applications (endpoints or conference server) but
403might be also useful for any application that wish to establish sessions like
404multiplayer games.")
405 (license license:gpl2+)
406 ;; (plus OpenSSL linking exception)
407 ;; http://git.savannah.gnu.org/cgit/exosip.git/plain/LICENSE.OpenSSL
408 (home-page "https://savannah.nongnu.org/projects/exosip")))
409
410(define-public sipwitch
411 (package
412 (name "sipwitch")
413 (version "1.9.15")
414 (source (origin
415 (method url-fetch)
416 (uri (string-append "mirror://gnu/sipwitch/sipwitch-"
417 version ".tar.gz"))
418 (sha256 (base32
419 "10lli9c703d7qbarzc0lgmz963ppncvnrklwrnri0s1zcmmahyia"))
420 (patches
421 (search-patches "sipwitch-fix-build-with-exosip5.patch"))))
422 (build-system gnu-build-system)
423 ;; The configure.ac uses pkg-config but in a kludgy way which breaks when
424 ;; cross-compiling. Among other issues there the program name "pkg-config"
425 ;; is hard coded instead of respecting the PKG_CONFIG environment variable.
426 ;; Fortunately we can avoid the use of pkg-config and set the dependency
427 ;; flags ourselves.
428 (arguments `(#:configure-flags
429 `("--without-pkg-config"
430 ,(string-append "UCOMMON_CFLAGS=-I"
431 (assoc-ref %build-inputs "ucommon") "/include")
432 "UCOMMON_LIBS=-lusecure -lucommon -lrt -ldl -lpthread"
433 ,(string-append "LIBOSIP2_CFLAGS=-I"
434 (assoc-ref %build-inputs "osip") "/include")
435 "LIBOSIP2_LIBS=-losipparser2 -losip2"
436 ,(string-append "--sysconfdir=" (assoc-ref %outputs "out")
437 "/etc")
438 "EXOSIP2_LIBS=-leXosip2"
439 ,(string-append "EXOSIP2_CFLAGS=-I"
440 (assoc-ref %build-inputs "exosip")
441 "/include"))))
442 (inputs (list ucommon exosip osip))
443 (synopsis "Secure peer-to-peer VoIP server for the SIP protocol")
444 (description "GNU SIP Witch is a peer-to-peer Voice-over-IP server that
445uses the SIP protocol. Calls can be made from behind NAT firewalls and
446without the need for a service provider. Its peer-to-peer design ensures that
447there is no central point for media intercept or capture and thus it can be
448used to construct a secure telephone system that operates over the public
449internet.")
450 (license license:gpl3+)
451 (home-page "https://www.gnu.org/software/sipwitch/")))
452
453(define-public libsrtp
454 (package
455 (name "libsrtp")
456 (version "2.6.0")
457 (source (origin
458 (method git-fetch)
459 (uri (git-reference
460 (url "https://github.com/cisco/libsrtp")
461 (commit (string-append "v" version))))
462 (file-name (git-file-name name version))
463 (sha256
464 (base32
465 "1vjdkss076ihbshc83v11c6qxq8mfqi4c26rl1a96kqa9dpgjqmx"))))
466 (native-inputs
467 (list psmisc ;some tests require 'killall'
468 procps))
469 (build-system gnu-build-system)
470 (arguments
471 (list
472 #:test-target "runtest"
473 #:phases
474 #~(modify-phases %standard-phases
475 (add-after 'build 'build-shared
476 (lambda* (#:key make-flags #:allow-other-keys)
477 ;; Build the shared library separately because
478 ;; the test runner requires a static build.
479 (apply invoke "make" "shared_library" make-flags)))
480 (add-after 'install 'remove-static-library
481 (lambda _
482 (delete-file (string-append #$output
483 "/lib/libsrtp2.a")))))))
484 (synopsis "Secure RTP (SRTP) Reference Implementation")
485 (description
486 "This package provides an implementation of the Secure Real-time Transport
487Protocol (@dfn{SRTP}), the Universal Security Transform (@dfn{UST}), and a
488supporting cryptographic kernel.")
489 (home-page "https://github.com/cisco/libsrtp")
490 (license license:bsd-3)))
491
492(define-public libiax2
493 (let ((commit "0e5980f1d78ce462e2d1ed6bc39ff35c8341f201"))
494 ;; This is the commit used by the Ring Project.
495 (package
496 (name "libiax2")
497 (version (string-append "0.0.0-1." (string-take commit 7)))
498 (source
499 (origin
500 (method git-fetch)
501 (uri (git-reference
502 (url "https://gitlab.savoirfairelinux.com/sflphone/libiax2.git")
503 (commit commit)))
504 (file-name (git-file-name name version))
505 (sha256
506 (base32
507 "0d269474kk1933c55hx4azw3sak5ycfrxkw6ida0sb2cm00kfich"))))
508 (build-system gnu-build-system)
509 (native-inputs
510 (list autoconf automake libtool))
511 (home-page "https://gitlab.savoirfairelinux.com/sflphone/libiax2")
512 (synopsis "Inter-Asterisk-Protocol library")
513 (description "LibIAX2 implements the Inter-Asterisk-Protocol for relaying
514Voice-over-IP (VoIP) communications.")
515 ;; The file 'src/md5.c' is released into the public domain by RSA Data
516 ;; Security. The files 'src/answer.h', 'src/miniphone.c',
517 ;; 'src/options.c', 'src/options.h', 'src/ring10.h', 'src/winiphone.c' are
518 ;; covered under the 'GPL'.
519 ;; The package as a whole is distributed under the LGPL 2.0.
520 (license (list license:lgpl2.0
521 license:public-domain
522 license:gpl2+)))))
523
524(define-public seren
525 (package
526 (name "seren")
527 (version "0.0.21")
528 (source (origin
529 (method url-fetch)
530 (uri (string-append "http://holdenc.altervista.org/"
531 "seren/downloads/seren-" version
532 ".tar.gz"))
533 (sha256
534 (base32
535 "06mams6bng7ib7p2zpfq88kdr4ffril9svzc9lprkb0wjgmkglk9"))))
536 (build-system gnu-build-system)
537 (arguments '(#:tests? #f)) ; no "check" target
538 (inputs
539 (list alsa-lib gmp libogg ncurses opus))
540 (synopsis "Simple VoIP program to create conferences from the terminal")
541 (description
542 "Seren is a simple VoIP program based on the Opus codec that allows you
543to create a voice conference from the terminal, with up to 10 participants,
544without having to register accounts, exchange emails, or add people to contact
545lists. All you need to join an existing conference is the host name or IP
546address of one of the participants.")
547 (home-page "http://holdenc.altervista.org/seren/")
548 (license license:gpl3+)))
549
550(define find-python-interpreter-cmake-modules
551 (let ((commit "bb4d3ea8434eebef40df35434a9b6ef410fce0b2")
552 (revision "0"))
553 (origin
554 (method git-fetch)
555 (uri (git-reference
556 (url "https://github.com/Krzmbrzl/FindPythonInterpreter")
557 (commit commit)))
558 (file-name (git-file-name "find-python-interpreter"
559 (git-version "0" revision commit)))
560 (sha256
561 (base32
562 "1ryhda2yqgrhnwndfg52mscdsclg1ivv746hvalcay5m1wy2h5bm")))))
563
564(define-public mumble
565 (package
566 (name "mumble")
567 (version "1.5.857")
568 (source (origin
569 (method url-fetch)
570 (uri
571 (string-append
572 "https://github.com/mumble-voip/mumble/releases/download/v"
573 version "/" name "-" version ".tar.gz"))
574 (sha256
575 (base32
576 "0irvkhz8189kqn0n670l55grk4kvb126n9p944yji69gn86fwqp0"))
577 (modules '((guix build utils)
578 (ice-9 ftw)
579 (srfi srfi-1)))
580 (snippet
581 `(begin
582 (let ((keep
583 '("arc4random"
584 "cmake-compiler-flags"
585 "flag-icons"
586 "minhook" ; unused, reqd for licenses
587 "qqbonjour"
588 "renamenoise"
589 "smallft"
590 "speexdsp" ; unbundled, reqd for licenses
591 "tracy" ; disabled below, reqd by cmake
592 "xinputcheck-src" ; reqd for licenses
593 )))
594 (with-directory-excursion "3rdparty"
595 (for-each delete-file-recursively
596 (lset-difference string=?
597 (scandir ".")
598 (cons* "." ".." keep))))
599 #t)))))
600 (build-system qt-build-system)
601 (arguments
602 (list
603 #:configure-flags
604 #~(list "-Dbundled-gsl=off"
605 "-Dbundled-json=off"
606 "-Dbundled-speex=off"
607 "-Dbundled-opus=off"
608 "-Dalsa=off" ; use pulse
609 "-Dcoreaudio=off" ; use pulse
610 "-Dice=off" ; not packaged
611 "-Djackaudio=off" ; use pulse
612 "-Doss=off" ; use pulse
613 "-Dpulseaudio=on"
614 "-Dportaudio=off" ; use pulse
615 "-Dpipewire=off" ; use pulse
616 "-Doverlay-xcompile=off"
617 "-Dupdate=off" ; don't phone home
618 "-Dtests=on"
619 "-Dtracy=off" ; no profiling
620 "-Dbundle-qt-translations=off")
621 #:phases
622 #~(modify-phases %standard-phases
623 (add-after 'unpack 'unpack-submodules
624 (lambda _
625 (copy-recursively #$find-python-interpreter-cmake-modules
626 "3rdparty/FindPythonInterpreter")))
627 (add-after 'unpack 'disable-murmur-ice
628 (lambda _
629 (substitute* "auxiliary_files/mumble-server.ini"
630 (("^ice=") ";ice="))))
631 ;; disable statistic gathering by default. see <https://bugs.gnu.org/25201>
632 (add-after 'unpack 'fix-statistic-gathering-default
633 (lambda _
634 (substitute* "src/mumble/Settings.h"
635 (("bUsage *= true;") "bUsage = false;"))))
636 (add-after 'unpack 'fix-mumble-overlay
637 (lambda* (#:key inputs outputs #:allow-other-keys)
638 (with-output-to-file "scripts/mumble-overlay"
639 (lambda ()
640 (format #t "#!~a~%" (search-input-file inputs "/bin/bash"))
641 (format #t "export LD_PRELOAD=\"~a $LD_PRELOAD\"~%"
642 (string-append (assoc-ref outputs "out")
643 "/lib/mumble/libmumbleoverlay.so"))
644 (format #t "exec \"${@}\"")))))
645 (add-after 'unpack 'hardcode-pulseaudio
646 (lambda* (#:key inputs #:allow-other-keys)
647 (substitute* "src/mumble/PulseAudio.cpp"
648 (("libpulse.so") (search-input-file inputs "/lib/libpulse.so"))))))))
649 (inputs
650 (list avahi
651 boost
652 c++-gsl ; avoid bundled
653 glib ; for speech-dispatcher
654 libsndfile
655 libxi
656 mesa ; avoid bundled
657 nlohmann-json ; avoid bundled
658 openssl
659 opus ; avoid bundled
660 poco
661 protobuf
662 pulseaudio
663 qtbase-5
664 qtsvg-5
665 qtwayland-5
666 speech-dispatcher
667 speex ; avoid bundled
668 speexdsp ; avoid bundled
669 ))
670 (native-inputs
671 (list pkg-config python qttools-5))
672 (synopsis "Low-latency, high quality voice chat software")
673 (description
674 "Mumble is an low-latency, high quality voice chat
675software primarily intended for use while gaming.
676Mumble consists of two applications for separate usage:
677@code{mumble} for the client, and @code{murmur} for the server.")
678 (home-page "https://wiki.mumble.info/wiki/Main_Page")
679 (license (list license:bsd-3 ; mumble cmake-compiler-flags qqbonjour smallft
680 license:expat ; flag-icons
681 license:isc)))) ; arc4random
682
683(define-public twinkle
684 (package
685 (name "twinkle")
686 (version "1.10.2")
687 (source
688 (origin
689 (method git-fetch)
690 (uri
691 (git-reference
692 (url "https://github.com/LubosD/twinkle")
693 (commit
694 (string-append "v" version))))
695 (file-name
696 (git-file-name name version))
697 (patches
698 (search-patches "twinkle-bcg729.patch")) ; To support new BCG729 API.
699 (sha256
700 (base32
701 "0s0gi03xwvzp02ah4q6j33r9jx9nbayr6dxlg2ck9pwbay1nq1hx"))))
702 (build-system qt-build-system)
703 (arguments
704 `(#:tests? #f ; no test target
705 #:configure-flags
706 (list
707 ;; FIX-ME: Make Twinkle compatible with libre version of iLBC.
708 ;; "-DWITH_ILBC=On" ; For iLBC Codec Support
709 "-DWITH_ZRTP=On" ; For ZRTP Support
710 "-DWITH_G729=On" ; For G729 Codec Support
711 "-DWITH_SPEEX=On"))) ; For Speex Codec Support
712 (native-inputs
713 (list bison flex qttools-5))
714 (inputs
715 (list alsa-lib
716 bcg729
717 zrtpcpp
718 ccrtp
719 file
720 libilbc
721 libsndfile
722 libxml2
723 qtbase-5
724 qtdeclarative-5
725 qtquickcontrols-5
726 qtwayland-5
727 readline
728 speex
729 speexdsp
730 ucommon))
731 (synopsis "Softphone for voice over IP and instant messaging")
732 (description "Twinkle is a softphone for your voice over IP and instant
733messaging communications using the SIP protocol. You can use it for direct
734IP phone to IP phone communication or in a network using a SIP proxy to route
735your calls and messages.")
736 (home-page "http://twinkle.dolezel.info/")
737 (license license:gpl2+)))
738
739(define-public pjproject
740 (package
741 (name "pjproject")
742 (version "2.15.1")
743 (source
744 (origin
745 (method git-fetch)
746 (uri (git-reference
747 (url "https://github.com/pjsip/pjproject")
748 (commit version)))
749 (file-name (git-file-name name version))
750 (sha256
751 (base32
752 "0ddn92imbxa17b4v1nm8g226zypk9yfkm3rn6d7bvjw6llhcwv7m"))
753 (modules '((guix build utils)))
754 (snippet
755 '(begin
756 ;; Remove bundled libraries.
757 (delete-file-recursively "third_party")
758 (substitute* "aconfigure.ac"
759 (("third_party/build/os-auto.mak") ""))
760 (substitute* "Makefile"
761 (("third_party/build") ""))))))
762 (build-system gnu-build-system)
763 (outputs '("out" "debug" "static"))
764 (arguments
765 (list
766 #:test-target "selftest"
767 #:configure-flags
768 #~(list "--enable-shared"
769 "--with-external-speex"
770 "--with-external-gsm"
771 "--with-external-srtp"
772 "--with-external-pa"
773 ;; The following flag is Linux specific.
774 #$@(if (string-contains (or (%current-system)
775 (%current-target-system)) "linux")
776 #~("--enable-epoll")
777 #~())
778 "--with-gnutls" ;disable OpenSSL checks
779 "--disable-libyuv" ;TODO: add missing package
780 "--disable-silk" ;TODO: add missing package
781 "--disable-libwebrtc" ;TODO: add missing package
782 "--disable-ilbc-codec" ;cannot be unbundled
783 "--disable-g7221-codec" ;TODO: add missing package
784 "--enable-libsamplerate"
785 ;; -DNDEBUG is set to prevent pjproject from raising
786 ;; assertions that aren't critical, crashing
787 ;; applications as the result.
788 "CFLAGS=-DNDEBUG"
789 ;; Specify a runpath reference to itself, which is missing and
790 ;; causes the validate-runpath phase to fail.
791 (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
792 #:phases
793 #~(modify-phases %standard-phases
794 (add-before 'build 'build-dep
795 (lambda _ (invoke "make" "dep")))
796 ;; The check phases is moved after the install phase so to
797 ;; use the installed shared libraries for the tests.
798 (delete 'check)
799 (add-after 'install 'move-static-libraries
800 (lambda* (#:key outputs #:allow-other-keys)
801 (let ((s (string-append #$output:static "/lib")))
802 (mkdir-p s)
803 (with-directory-excursion #$output
804 (for-each (lambda (f)
805 (rename-file f (string-append s "/" (basename f))))
806 (find-files "." "\\.a$"))))))
807 (add-after 'install 'check
808 (assoc-ref %standard-phases 'check))
809 (add-before 'patch-source-shebangs 'autoconf
810 (lambda _
811 (invoke "autoconf" "-v" "-f" "-i" "-o"
812 "aconfigure" "aconfigure.ac")))
813 (add-before 'autoconf 'disable-some-tests
814 (lambda _
815 (substitute* "pjlib/src/pjlib-test/test.h"
816 ;; Disable network tests which are slow and/or require an
817 ;; actual network.
818 (("#define GROUP_NETWORK.*")
819 "#define GROUP_NETWORK 0\n"))
820 (substitute* "self-test.mak"
821 ;; Fails with: pjlib-util-test-x86_64-unknown-linux-gnu:
822 ;; ../src/pjlib-util-test/resolver_test.c:1501: action2_1:
823 ;; Assertion `pj_strcmp2(&pkt->q[0].name, "_sip._udp."
824 ;; "domain2.com")==0' failed.
825 ((" pjlib_util_test ") ""))
826 (substitute* "pjsip/src/test/test.h"
827 ;; Fails with: Error: unable to acquire TCP transport:
828 ;; [pj_status_t=120101] Network is unreachable.
829 (("#define INCLUDE_TCP_TEST.*")
830 "#define INCLUDE_TCP_TEST 0\n")
831 ;; The TSX tests takes a very long time to run; skip them.
832 (("#define INCLUDE_TSX_GROUP.*")
833 "#define INCLUDE_TSX_GROUP 0\n")
834 ;; The resolve test requires a working domain name resolver.
835 (("#define INCLUDE_RESOLVE_TEST.*")
836 "#define INCLUDE_RESOLVE_TEST 0\n"))
837 (substitute* "pjsip/src/test/dns_test.c"
838 ;; The round_robin_test fails non-deterministically (depending
839 ;; on load); skip it (see:
840 ;; https://github.com/pjsip/pjproject/issues/2500).
841 (("round_robin_test(pool)") 0))
842 (substitute* "pjmedia/src/test/test.h"
843 ;; The following tests require a sound card.
844 (("#define HAS_MIPS_TEST.*")
845 "#define HAS_MIPS_TEST 0\n")
846 (("#define HAS_JBUF_TEST.*")
847 "#define HAS_JBUF_TEST 0\n"))
848 (substitute* "Makefile"
849 ;; Disable the pjnath and pjsua tests, which require an actual
850 ;; network and an actual sound card, respectively.
851 (("pjnath-test pjmedia-test pjsip-test pjsua-test")
852 "pjmedia-test pjsip-test")))))))
853 (native-inputs
854 (list autoconf
855 automake
856 libtool
857 pkg-config))
858 (inputs
859 (list bcg729
860 gnutls
861 gsm
862 libsamplerate
863 libsrtp
864 opus
865 portaudio
866 speex
867 speexdsp))
868 (home-page "https://www.pjsip.org")
869 (synopsis "Session Initiation Protocol (SIP) stack")
870 (description "PJProject provides an implementation of the Session
871Initiation Protocol (SIP) and a multimedia framework.")
872 (license license:gpl2+)))
873
874(define-public pjproject-jami
875 (let ((commit "3a92a7ee340dbc1f4730fcaf32acac9a54cacf1b")
876 (revision "0"))
877 (package
878 (inherit pjproject)
879 (name "pjproject-jami")
880 ;; The version is taken from
881 ;; <https://github.com/savoirfairelinux/pjproject/blob/sfl-2.15/version.mak>.
882 (version (git-version "2.15.1" revision commit))
883 (source (origin
884 (inherit (package-source pjproject))
885 ;; The Jami development team regularly issues patches to
886 ;; pjproject to extend the its functionality and fix bugs;
887 ;; they are submitted for inclusion upstream but larger
888 ;; patches take time to be reviewed and merged, hence this
889 ;; forked repository.
890 (method git-fetch)
891 (uri (git-reference
892 (url "https://github.com/savoirfairelinux/pjproject")
893 (commit commit)))
894 (file-name (git-file-name name version))
895 (sha256
896 (base32
897 "1ps4cqrlwbd5ia0bj123sgrchadikrh8r5i6az0ybb4hkyavbrcn"))))
898 (arguments
899 (substitute-keyword-arguments arguments
900 ((#:configure-flags _ ''())
901 ;; This package is tailored for DhtNet; see how it is built for its
902 ;; CI in
903 ;; <https://git.jami.net/savoirfairelinux/dhtnet/-/raw/master/Dockerfile>.
904 #~(list
905 ;; Some flags preserved flags from parent package.
906 "--with-external-srtp"
907 #$@(if (string-contains (or (%current-system)
908 (%current-target-system)) "linux")
909 #~("--enable-epoll")
910 #~())
911 "--with-gnutls" ;disable OpenSSL checks
912 ;; -DNDEBUG is set to prevent pjproject from raising
913 ;; assertions that aren't critical, crashing
914 ;; applications as the result.
915 "CFLAGS=-DNDEBUG"
916 ;; Specify a runpath reference to itself, which is missing and
917 ;; causes the validate-runpath phase to fail.
918 (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
919 "--enable-shared"
920 "--disable-libyuv" ;TODO: add missing package
921
922 ;; These flags are specific to DhtNet.
923 "--disable-sound"
924 "--enable-video"
925 "--enable-ext-sound"
926 "--disable-speex-aec"
927 "--disable-g711-codec"
928 "--disable-l16-codec"
929 "--disable-gsm-codec"
930 "--disable-g722-codec"
931 "--disable-g7221-codec"
932 "--disable-speex-codec"
933 "--disable-ilbc-codec"
934 "--disable-opencore-amr"
935 "--disable-silk"
936 "--disable-sdl"
937 "--disable-ffmpeg"
938 "--disable-v4l2"
939 "--disable-openh264"
940 "--disable-resample"
941 "--disable-libwebrtc")))))))
942
943(define-public libtgvoip
944 (package
945 (name "libtgvoip")
946 (version "2.4.4")
947 (source
948 (origin
949 (method git-fetch)
950 (uri (git-reference
951 (url "https://github.com/grishka/libtgvoip")
952 (commit version)))
953 (file-name (git-file-name name version))
954 ;; Fix compilation on i686-linux architecture.
955 ;; NOTE: Applying these patches is order-dependent!
956 ;; The patch for WebRTC /must/ precede the patch for SSE2.
957 (patches
958 (search-patches "libtgvoip-disable-webrtc.patch"
959 "libtgvoip-disable-sse2.patch"))
960 (sha256
961 (base32
962 "122kn3jx6v0kkldlzlpzvlwqxgp6pmzxsjhrhcxw12bx9c08sar5"))))
963 (build-system gnu-build-system)
964 (inputs
965 (list alsa-lib openssl opus pulseaudio))
966 (arguments
967 `(#:phases
968 (modify-phases %standard-phases
969 ;; libtgvoip wants to dlopen libpulse and libasound, so tell it where
970 ;; they are.
971 (add-after 'unpack 'patch-dlopen
972 (lambda* (#:key inputs #:allow-other-keys)
973 (substitute* "os/linux/AudioPulse.cpp"
974 (("libpulse\\.so")
975 (search-input-file inputs "/lib/libpulse.so")))
976 (substitute* '("os/linux/AudioInputALSA.cpp"
977 "os/linux/AudioOutputALSA.cpp")
978 (("libasound\\.so")
979 (search-input-file inputs "/lib/libasound.so"))))))))
980 (synopsis "VoIP library for Telegram clients")
981 (description "A collection of libraries and header files for implementing
982telephony functionality into custom Telegram clients.")
983 (home-page "https://github.com/zevlg/libtgvoip")
984 (license license:unlicense)))
985
986(define-public coturn
987 (package
988 (name "coturn")
989 (version "4.7.0")
990 (source
991 (origin
992 (method git-fetch)
993 (uri (git-reference
994 (url "https://github.com/coturn/coturn")
995 (commit version)))
996 (file-name (git-file-name name version))
997 (sha256
998 (base32 "13pldggbfhz5pdid1fxsf5amv69amizwalx2pzlv2w9ga1x2dwly"))))
999 (inputs
1000 (list openssl
1001 sqlite
1002 libevent-with-openssl
1003 hiredis))
1004 (native-inputs
1005 (list pkg-config))
1006 (build-system gnu-build-system)
1007 (synopsis "Implementation of a TURN and STUN server for VoIP")
1008 (description
1009 "This package provides a VoIP media traffic NAT traversal server and
1010gateway. It implements the STUN (Session Traversal Utilities for NAT) and
1011TURN (Traversal Using Relays around NAT) server protocols.")
1012 (home-page "https://github.com/coturn/coturn")
1013 (license license:bsd-3)))
1014
1015(define-public libosmocore
1016 (package
1017 (name "libosmocore")
1018 (version "1.7.0")
1019 (source (origin
1020 (method git-fetch)
1021 (uri (git-reference
1022 (url "https://gitea.osmocom.org/osmocom/libosmocore.git")
1023 (commit version)))
1024 (file-name (git-file-name name version))
1025 (sha256
1026 (base32
1027 "147ld3xwb9k6vb56hk8q8jkcb5ahxl66v87vdhazb6rxj3frsjqf"))))
1028 (arguments
1029 (list #:phases #~(modify-phases %standard-phases
1030 (add-after 'unpack 'patch-bin-sh
1031 (lambda _
1032 (substitute* '("git-version-gen" "src/exec.c")
1033 (("/bin/sh")
1034 (which "sh"))))))))
1035 (inputs (list gnutls
1036 libmnl
1037 libusb
1038 lksctp-tools
1039 pcsc-lite
1040 talloc))
1041 (native-inputs (list autoconf
1042 automake
1043 coreutils
1044 doxygen
1045 libtool
1046 pkg-config
1047 python))
1048 (build-system gnu-build-system)
1049 (synopsis "Libraries for sharing common code between osmocom projects")
1050 (description
1051 "Libosmocore includes several libraries:
1052@itemize
1053@item libosmocore: general-purpose functions
1054@item libosmovty: interactive VTY command-line interface
1055@item libosmogsm: definitions and helper code related to GSM protocols
1056@item libosmoctrl: shared implementation of the Osmocom control interface
1057@item libosmogb: implementation of the Gb interface with its NS/BSSGP protocols
1058@item libosmocodec: implementation of GSM voice codecs
1059@item libosmocoding: implementation of GSM 05.03 burst transcoding functions
1060@item libosmosim: infrastructure to interface with SIM/UICC/USIM cards
1061@end itemize")
1062 (home-page "https://osmocom.org/projects/libosmocore/wiki/Libosmocore")
1063 (license license:gpl2+)))
1064
1065(define-public xgoldmon
1066 ;; There are no releases nor tags.
1067 (let ((revision "1")
1068 (commit "f2d5372acee4e492f31f6ba8b850cfb48fbbe478"))
1069 (package
1070 (name "xgoldmon")
1071 (version (git-version "1.0" revision commit))
1072 (source (origin
1073 (method git-fetch)
1074 (uri (git-reference
1075 (url "https://github.com/2b-as/xgoldmon")
1076 (commit commit)))
1077 (file-name (git-file-name name version))
1078 (sha256
1079 (base32
1080 "0dvgagqsbwq1sd5qjzk0hd9rxnv2vnmhazvv5mz4pj7v467amgdz"))))
1081 (arguments
1082 (list #:tests? #f ;no tests
1083 #:make-flags #~(list (string-append "CC="
1084 #$(cc-for-target)))
1085 #:phases #~(modify-phases %standard-phases
1086 (delete 'configure)
1087 (replace 'install
1088 (lambda _
1089 (let ((bin (string-append #$output "/bin"))
1090 (doc (string-append #$output "/share/doc")))
1091 (install-file "xgoldmon" bin)
1092 (install-file "README" doc)
1093 (install-file
1094 "screenshot-mtsms-while-in-a-call.png" doc)))))))
1095 (inputs (list libosmocore lksctp-tools talloc))
1096 (native-inputs (list pkg-config))
1097 (build-system gnu-build-system)
1098 (synopsis "Displays cellular network protocol traces in Wireshark")
1099 (description
1100 "xgoldmon is an utility that converts the USB logging mode
1101messages that various Intel/Infineon XGold modems send to the USB port to
1102gsmtap. It then then sends them to a given IP address to enable users
1103to view cellular network protocol traces in Wireshark.
1104
1105It supports the following smartphones:
1106@itemize
1107@item Samsung Galaxy S4, GT-I9500 variant
1108@item Samsung Galaxy SIII, GT-I9300 variant
1109@item Samsung Galaxy Nexus, GT-I9250 variant
1110@item Samsung Galaxy SII, GT-I9100 variant
1111@item Samsung Galaxy Note II, GT-N7100 variant
1112@end itemize")
1113 (home-page "https://github.com/2b-as/xgoldmon")
1114 (license license:gpl2+))))
1115
1116(define-public sipp
1117 (package
1118 (name "sipp")
1119 (version "3.7.0")
1120 (source
1121 (origin
1122 (method git-fetch)
1123 (uri (git-reference
1124 (url "https://github.com/SIPp/sipp")
1125 (commit (string-append "v" version))))
1126 (file-name (git-file-name name version))
1127 (sha256 (base32 "0vplccia9zdva1wwny2xgs0b6rzmq4abxvw8lyz61wfw7jjmvin0"))))
1128 (build-system cmake-build-system)
1129 (arguments
1130 (list
1131 #:configure-flags
1132 #~(list "-DUSE_GSL=1" "-DUSE_PCAP=1" "-DUSE_SSL=1" "-DUSE_SCTP=1")
1133 #:phases
1134 #~(modify-phases %standard-phases
1135 ;; Modify build instructions to use external GTEST and GMOCK.
1136 (add-before 'configure 'unbundle-gtest
1137 (lambda _
1138 (rmdir "gtest")
1139 (symlink (assoc-ref %build-inputs "googletest") "gtest")
1140 (substitute* "CMakeLists.txt"
1141 ((".*gtest-all.*") "")
1142 ((".*gmock-all.*") "")
1143 (("target_compile_features\\(sipp_unittest" all)
1144 (string-append "target_link_libraries(sipp_unittest gtest gmock)\n"
1145 all)))))
1146 ;; Generate version.h without GIT.
1147 (add-before 'configure 'fix-version
1148 (lambda _
1149 (copy-file "include/version.h.in" "include/version.h")
1150 (substitute* "include/version.h" (("@VERSION@") #$version))
1151 (substitute* "CMakeLists.txt" (("find_package\\(Git\\)") ""))))
1152 (add-after 'build 'build-tests
1153 (lambda* (#:key parallel-build? #:allow-other-keys)
1154 (invoke "make"
1155 (string-append
1156 "-j" (if parallel-build?
1157 (number->string (parallel-job-count))
1158 "1"))
1159 "sipp_unittest")))
1160 (replace 'check
1161 (lambda* (#:key tests? #:allow-other-keys)
1162 (when tests?
1163 (invoke "./sipp_unittest")))))))
1164 (inputs
1165 (list gsl libpcap lksctp-tools ncurses/tinfo openssl))
1166 (native-inputs
1167 (list googletest-1.8 pkg-config))
1168 (synopsis "Performance testing tool for the SIP protocol")
1169 (description "SIPp can be used to test many real SIP equipements like SIP
1170proxies, B2BUAs, SIP media servers, SIP/x gateways, and SIP PBXes. It is also
1171very useful to emulate thousands of user agents calling your SIP system.")
1172 (home-page "https://sipp.readthedocs.io/")
1173 (license (list license:gpl2+ ; sipp's main license
1174 license:bsd-3 ; send_packets.c, send_packets.h
1175 license:zlib)))) ; md5.c, md5.h
1176
1177(define-public sofia-sip
1178 (package
1179 (name "sofia-sip")
1180 (version "1.13.17")
1181 (source (origin
1182 (method git-fetch)
1183 (uri (git-reference
1184 (url "https://github.com/freeswitch/sofia-sip")
1185 (commit (string-append "v" version))))
1186 (file-name (git-file-name "sofia-sip" version))
1187 (sha256
1188 (base32
1189 "19m1ncvn641s5r9vfnivsz8g5960vcfmhhx0s119jfs49kcql2gd"))))
1190 (build-system gnu-build-system)
1191 (arguments
1192 (list
1193 #:configure-flags
1194 #~(list
1195 "CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types")
1196 ;; run_addrinfo requires /etc/services for the 'echo' service.
1197 #:make-flags #~'("XFAIL_TESTS = run_addrinfo"
1198 ;; libsofia-sip-ua/nta/Makefile.am sets
1199 ;; TESTS_ENVIRONMENT = $(SHELL), which is odd, because
1200 ;; according to the Automake manual, it should be
1201 ;; AM_TESTS_ENVIRONMENT, and it should end with a
1202 ;; semicolon.
1203 "TESTS_ENVIRONMENT = \
1204export CHECK_NTA_VERBOSE=10; \
1205export CHECK_NUA_VERBOSE=10; ")
1206 #:phases
1207 #~(modify-phases %standard-phases
1208 (add-after 'unpack 'patch-shebangs
1209 (lambda _
1210 (patch-shebang "autogen.sh")))
1211 (add-after 'unpack 'disable-failing-test
1212 (lambda _
1213 ;; run_test_nta is disabled because it fails randomly (not for a
1214 ;; timeout-related reason). The test suite is otherwise very
1215 ;; long, most tests backed by libcheck timeout even with a ×100
1216 ;; multiplier. The tests are disabled here rather than put to
1217 ;; XFAIL_TESTS because it saves compilation time. (see:
1218 ;; https://github.com/freeswitch/sofia-sip/issues/234)
1219 (substitute* "libsofia-sip-ua/nta/Makefile.am"
1220 (("TESTS =")
1221 "TESTS = run_test_nta_api\n# Disabled: "))
1222 (substitute* "libsofia-sip-ua/nua/Makefile.am"
1223 (("TESTS \\+=")
1224 "TESTS +=\n# Disabled: "))
1225 ;; The glib tests both wait forever without a timeout.
1226 (substitute* "libsofia-sip-ua-glib/su-glib/Makefile.am"
1227 (("TESTS =")
1228 "TESTS =\n# Disabled: "))
1229 ;; Another timeout failing test:
1230 (substitute* "tests/Makefile.am"
1231 (("TESTS = test_nua")
1232 "TESTS ="))
1233 ;; This test fails for unknown reason:
1234 (substitute* "tests/Makefile.am"
1235 (("TESTS \\+= check_dlopen_sofia check_sofia")
1236 "TESTS += check_dlopen_sofia")))))))
1237 (inputs
1238 (list glib
1239 openssl
1240 zlib))
1241 (native-inputs
1242 (list autoconf
1243 autoconf-archive
1244 automake
1245 check
1246 libtool
1247 pkg-config))
1248 (home-page "https://sofia-sip.sourceforge.net/")
1249 (synopsis "SIP user-agent library")
1250 (description "Sofia-SIP is a @acronym{SIP, Session Initiation Protocol}
1251User-Agent library, compliant with the
1252@url{https://datatracker.ietf.org/doc/html/rfc3261, IETF RFC3261}
1253specification. It can be used as a building block for @acronym{SIP} client
1254software foruses such as @acronym{VoIP, Voice over @acronym{IP, Internet
1255Protocol}}, @acronym{IM, Instant Messaging}, and many other real-time and
1256person-to-person communication services.")
1257 (license license:lgpl2.1)))
1258
1259(define-public libcallaudio
1260 (package
1261 (name "libcallaudio")
1262 (version "0.1.9")
1263 (source (origin
1264 (method git-fetch)
1265 (uri (git-reference
1266 (url "https://gitlab.com/mobian1/callaudiod/")
1267 (commit version)))
1268 (file-name (git-file-name name version))
1269 (sha256
1270 (base32
1271 "0qnllb28101c2ss1k3iwr04gljfyjqmbla5csj6vkq1y63aagr9s"))))
1272 (build-system meson-build-system)
1273 (inputs (list alsa-lib glib pulseaudio))
1274 (native-inputs
1275 (list `(,glib "bin") ;for gdbus-codegen
1276 pkg-config))
1277 (home-page "https://gitlab.com/mobian1/callaudiod")
1278 (synopsis "Library for audio routing during voice calls")
1279 (description "This package provides @command{callaudiod}, a daemon to
1280route audio during phone calls, and a library.")
1281 (license license:gpl3+)))
1282
1283(define-public baresip-libre
1284 (package
1285 (name "baresip-libre")
1286 (version "3.24.0")
1287 (source
1288 (origin
1289 (method git-fetch)
1290 (uri (git-reference
1291 (url "https://github.com/baresip/re")
1292 (commit (string-append "v" version))))
1293 (file-name (git-file-name name version))
1294 (sha256
1295 (base32 "1k874v9bzipk5x9nr21f3259f5sk7nxnnz618kji0mx9aa0fvjf1"))))
1296 (build-system cmake-build-system)
1297 (arguments (list #:tests? #f)) ; disabled by default and still failing
1298 (native-inputs (list pkg-config))
1299 (inputs (list openssl zlib))
1300 (synopsis "Library for real-time communications with async IO support")
1301 (description "Libre is a portable and generic library for real-time
1302communications with async @acronym{IO, Input Output} support and a complete
1303@acronym{SIP, Session Initiation Protocol} stack with support for protocols such
1304as @acronym{SDP, Session Description Protocol}, @acronym{RTP, Real-time
1305Transport Protocol}/@acronym{RTCP, RTP Control Protocol}, @acronym{STUN, Session
1306Traversal Utilities for NAT}/@acronym{TURN, Traversal Using Relays around
1307NAT}/@acronym{ICE, Interactive Connectivity Establishment}, @acronym{BFCP,
1308Binary Floor Control Protocol}, @acronym{HTTP, Hypertext Transfer Protocol} and
1309@acronym{DNS, Domain Name System}.")
1310 (home-page "https://github.com/baresip/re")
1311 (license license:bsd-3)))
1312
1313(define-public baresip
1314 (package
1315 (name "baresip")
1316 (version "3.24.0")
1317 (source
1318 (origin
1319 (method git-fetch)
1320 (uri (git-reference
1321 (url "https://github.com/baresip/baresip")
1322 (commit (string-append "v" version))))
1323 (file-name (git-file-name name version))
1324 (sha256
1325 (base32 "1xwvhpvrs6anw8mq709ff9d6vm0mizf6sj1sz69y85s7p4qz4rfz"))))
1326 (build-system cmake-build-system)
1327 (arguments
1328 `(#:tests? #f
1329 #:make-flags (list (string-append "PREFIX=" %output))
1330 #:phases (modify-phases %standard-phases
1331 (add-after 'unpack 'neuter-module_path
1332 (lambda* (#:key outputs #:allow-other-keys)
1333 ;; Never generate a config file with a set module_path.
1334 (substitute* "src/config.c"
1335 (("modpath_valid \\? \"\"")
1336 "modpath_valid ? \"#\""))
1337 ;; If no module_path config is defined, search modules in
1338 ;; this package.
1339 (substitute* "src/module.c"
1340 (("\t\tpl_set_str\\(&path, \"\\.\");")
1341 (string-append "pl_set_str(&path,\""
1342 (assoc-ref outputs "out")
1343 "/lib/baresip/modules\");")))))
1344 (add-after 'unpack 'patch-paths
1345 (lambda* (#:key inputs outputs #:allow-other-keys)
1346 (substitute* "cmake/FindWEBRTC_AEC.cmake"
1347 (("/usr/include")
1348 (string-append (assoc-ref inputs
1349 "webrtc-audio-processing")
1350 "/include"))
1351 (("/usr/lib/x86_64-linux-gnu")
1352 (string-append (assoc-ref inputs
1353 "webrtc-audio-processing")
1354 "/lib")))
1355 (substitute* "share/com.github.baresip.desktop"
1356 (("env")
1357 (string-append (assoc-ref inputs "coreutils-minimal")
1358 "/bin/env"))
1359 (("baresip")
1360 (string-append (assoc-ref outputs "out")
1361 "/bin/baresip"))))))))
1362 (native-inputs (list gnuplot pkg-config python ))
1363 (inputs (list alsa-lib
1364 baresip-libre
1365 coreutils-minimal ;for env in .desktop file
1366 ffmpeg
1367 gsm
1368 gstreamer
1369 gtk+
1370 libsndfile
1371 libtiff
1372 libvpx
1373 openssl
1374 opus
1375 pipewire
1376 portaudio
1377 pulseaudio
1378 sdl2
1379 spandsp
1380 webrtc-audio-processing-0.3))
1381 (home-page "https://github.com/baresip/baresip")
1382 (synopsis "SIP user agent with audio and video support")
1383 (description
1384 "Baresip is a portable and modular @acronym{SIP, Session Initiation Protocol}
1385user agent with support for audio and video, and many
1386@acronym{IETF, Internet Engineering Task Force} standards such as
1387@acronym{SIP, Session Initiation Protocol}, @acronym{SDP, Session Description Protocol},
1388@acronym{RTP, Real-time Transport Protocol}/@acronym{RTCP, RTP Control Protocol},
1389@acronym{STUN, Session Traversal Utilities for NAT},
1390@acronym{TURN, Traversal Using Relays around NAT},
1391@acronym{ICE, Interactive Connectivity Establishment},
1392and @acronym{WebRTC, Web Real-Time Communication}.")
1393 (license license:bsd-3)))