gnu: julius: Update to 1.7.0.
[jackhill/guix/guix.git] / gnu / packages / telephony.scm
index 17974e1..5a7c382 100644 (file)
@@ -5,9 +5,9 @@
 ;;; Copyright © 2015, 2016, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 Francesco Frassinelli <fraph24@gmail.com>
-;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
+;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Adonay Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
 ;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net>
 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;; Copyright © 2019 Ivan Vilata i Balaguer <ivan@selidor.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
-;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2021 Demis Balbach <db@minikn.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,7 +50,9 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages crypto)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages file)
@@ -60,6 +65,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages linphone)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
@@ -73,7 +79,6 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages speech)
-  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages video)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages flex)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix utils)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system qt))
 
+(define-public phonesim
+  (package
+    (name "phonesim")
+    (version "1.21")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.kernel.org/pub/scm/network/ofono/phonesim")
+             (commit "a7c844d45b047b2dae5b0877816c346fce4c47b9")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0rc1c2vr03dmi1dr3skj57v77ga9c22g29xs1qiphqms4isby9cq"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--enable-maintainer-mode"
+             "CC=" ,(cc-for-target))))
+    (native-inputs
+     (list automake autoconf pkg-config))
+    (inputs
+     (list qtbase-5 qtdeclarative-5))
+    (synopsis "Phone Simulator for modem testing")
+    (description
+     "Phonesim is a modem emulator that oFono uses for development and
+testing.  This allows oFono to be used by any host without requiring special
+GSM (or other) hardware.")
+    (home-page "https://git.kernel.org/pub/scm/network/ofono/phonesim")
+    (license license:gpl2+)))
+
+(define-public libilbc
+  (package
+    (name "libilbc")
+    (version "2.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/TimothyGu/libilbc")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32
+         "1j1pn1w1198qvdiq2hgv9hkyq2nqcvmfnwlgppac633idkjnjrqx"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ; No target
+    (native-inputs
+     (list pkg-config))
+    (synopsis "Libre iLBC codec")
+    (description "LibiLBC is a packaging friendly copy of the iLBC codec from
+the WebRTC project.  It provides a base for distribution packages and can be
+used as drop-in replacement for the non-free code from RFC 3591.")
+    (home-page "https://github.com/TimothyGu/libilbc")
+    (license license:bsd-3)))
+
 (define-public spandsp
   (package
     (name "spandsp")
        ("fftw" ,fftw)
        ("libpcap" ,libpcap)
        ("libsndfile" ,libsndfile)
+       ("libjpeg" ,libjpeg-turbo)      ;XXX: should be propagated from libtiff
        ("libtiff" ,libtiff)
        ("netpbm" ,netpbm)
        ("sox" ,sox)
@@ -224,7 +291,7 @@ reimplementation.")
             (sha256 (base32
                      "1mv080rvrhyxyhgqiqr8r9jdqhg3xhfawjvfj5zgj47h59nggjba"))))
    (build-system gnu-build-system)
-   (inputs `(("gnutls" ,gnutls)))
+   (inputs (list gnutls))
    (synopsis "Common C++ framework for threaded applications")
    (description "GNU uCommon C++ is meant as a very light-weight C++ library
 to facilitate using C++ design patterns even for very deeply embedded
@@ -245,9 +312,8 @@ support.")
             (sha256 (base32
                      "17ili8l7zqbbkzr1rcy4hlnazkf50mds41wg6n7bfdsx3c7cldgh"))))
    (build-system gnu-build-system)
-   (inputs `(("ucommon" ,ucommon)
-             ("libgcrypt" ,libgcrypt)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ucommon libgcrypt))
+   (native-inputs (list pkg-config))
    (synopsis "Implementation of RTP (real-time transport protocol)")
    (description  "GNU ccRTP is an implementation of RTP, the real-time transport
 protocol from the IETF.  It is suitable both for high capacity servers and
@@ -257,18 +323,48 @@ packet-manipulation library.")
    (license license:gpl2+) ; plus runtime exception
    (home-page "https://www.gnu.org/software/ccrtp/")))
 
+(define-public zrtpcpp
+  (package
+    (name "zrtpcpp")
+    (version "4.6.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/wernerd/ZRTPCPP")
+         (commit
+          (string-append "V" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32
+         "06vphvh4dgi7ah5qkq53wqvswv8l273x0xwbc447qmgvamm0x1vs"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ; No target
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list ccrtp ucommon))
+    (synopsis "C++ Implementation of ZRTP protocol")
+    (description  "GNU ZRTP C++ provides a library that adds ZRTP support to the
+GNU ccRTP stack and serves as library for other RTP stacks
+(PJSIP, GStreamer).")
+    (home-page "https://www.gnu.org/software/ccrtp/zrtp")
+    (license license:lgpl3+)))
 
 (define-public osip
   (package
    (name "osip")
-   (version "5.1.1")
+   (version "5.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/osip/libosip2-" version ".tar.gz"))
             (patches (search-patches "osip-CVE-2017-7853.patch"))
             (sha256
              (base32
-              "0kgnxgzf968kbl6rx3hjsfb3jsg4ydgrsf35gzj319i1f8qjifv1"))))
+              "1wibs2zs035ay7qvl5ai8drv6f0xw7iscb0frmpgax3pisy88dzf"))))
    (build-system gnu-build-system)
 
    (synopsis "Library implementing SIP (RFC-3261)")
@@ -292,7 +388,7 @@ to initiate and control SIP sessions.")
             (sha256 (base32
                      "17cna8kpc8nk1si419vgr6r42k2lda0rdk50vlxrw8rzg0xp2xrw"))))
    (build-system gnu-build-system)
-   (inputs `(("osip" ,osip)))
+   (inputs (list osip))
    (synopsis "Sip abstraction library")
    (description "EXosip is a library that hides the complexity of using the
 SIP protocol for multimedia session establishment.  This protocol is mainly to
@@ -334,9 +430,7 @@ multiplayer games.")
                   ,(string-append "EXOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "exosip")
                                   "/include"))))
-   (inputs `(("ucommon" ,ucommon)
-             ("exosip" ,exosip)
-             ("osip" ,osip)))
+   (inputs (list ucommon exosip osip))
    (synopsis "Secure peer-to-peer VoIP server for the SIP protocol")
    (description "GNU SIP Witch is a peer-to-peer Voice-over-IP server that
 uses the SIP protocol.  Calls can be made from behind NAT firewalls and
@@ -350,7 +444,7 @@ internet.")
 (define-public libsrtp
   (package
     (name "libsrtp")
-    (version "2.3.0")
+    (version "2.4.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -359,10 +453,10 @@ internet.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1f7i3jdh1wzdv7zjlz7gs3xw5jqig9zw8z9awsqqcp54f94xdpvd"))))
+                "1gswpjm4jacfxmgglbf8hxi3yzsag4drk4q943p0wkmv21zj8l78"))))
     (native-inputs
-     `(("psmisc" ,psmisc)               ;some tests require 'killall'
-       ("procps" ,procps)))
+     (list psmisc ;some tests require 'killall'
+           procps))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "runtest"
@@ -404,9 +498,7 @@ supporting cryptographic kernel.")
            "0d269474kk1933c55hx4azw3sak5ycfrxkw6ida0sb2cm00kfich"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (home-page "https://gitlab.savoirfairelinux.com/sflphone/libiax2")
       (synopsis "Inter-Asterisk-Protocol library")
       (description "LibIAX2 implements the Inter-Asterisk-Protocol for relaying
@@ -435,11 +527,7 @@ Voice-over-IP (VoIP) communications.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))  ; no "check" target
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gmp" ,gmp)
-       ("libogg" ,libogg)
-       ("ncurses" ,ncurses)
-       ("opus" ,opus)))
+     (list alsa-lib gmp libogg ncurses opus))
     (synopsis "Simple VoIP program to create conferences from the terminal")
     (description
      "Seren is a simple VoIP program based on the Opus codec that allows you
@@ -450,134 +538,122 @@ address of one of the participants.")
     (home-page "http://holdenc.altervista.org/seren/")
     (license license:gpl3+)))
 
+(define find-python-interpreter-cmake-modules
+  (let ((commit "bb4d3ea8434eebef40df35434a9b6ef410fce0b2")
+        (revision "0"))
+   (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/Krzmbrzl/FindPythonInterpreter")
+          (commit commit)))
+    (file-name (git-file-name "find-python-interpreter"
+                              (git-version "0" revision commit)))
+    (sha256
+     (base32
+      "1ryhda2yqgrhnwndfg52mscdsclg1ivv746hvalcay5m1wy2h5bm")))))
+
 (define-public mumble
   (package
     (name "mumble")
-    (version "1.3.0")
+    (version "1.4.274")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://mumble.info/snapshot/"
-                                  name "-" version ".tar.gz"))
+              (uri
+               (string-append
+                "https://github.com/mumble-voip/mumble/releases/download/v"
+                version "/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "03dqg5yf6d7ilc1wydpshnv1ndssppcbadqcq20jm5j4fdaf53cs"))
-              (modules '((guix build utils)))
+                "12rv61mmpgvcc1svq2y66r29sl47y9lfi9if0r09x4nqrkf7vj3y"))
+              (modules '((guix build utils)
+                         (ice-9 ftw)
+                         (srfi srfi-1)))
               (snippet
                `(begin
-                  ;; Remove bundled software.  Keep arc4random, celt-0.7.0,
-                  ;; celt-0.11.0, qqbonjour, rnnoise, smallft.
-                  (for-each
-                    delete-file-recursively
-                    '("3rdparty/GL" ; in mesa
-                      "3rdparty/mach-override-build" ; for macx
-                      "3rdparty/mach-override-src"
-                      "3rdparty/minhook-build" ; for win32
-                      "3rdparty/minhook-src"
-                      "3rdparty/opus-build" ; in opus
-                      "3rdparty/opus-src"
-                      "3rdparty/sbcelt-helper-build" ; not enabled
-                      "3rdparty/sbcelt-lib-build"
-                      "3rdparty/sbcelt-src"
-                      "3rdparty/speex-build" ; in speex
-                      "3rdparty/speex-src"
-                      "3rdparty/speexdsp-src" ; in speexdsp
-                      "3rdparty/xinputcheck-build" ; for win32
-                      "3rdparty/xinputcheck-src"))
-                  #t))))
+                  (let ((keep
+                         '("arc4random"
+                           "celt-0.7.0-build"
+                           "celt-0.7.0-src"
+                           "celt-0.11.0-build"
+                           "celt-0.11.0-src"
+                           "qqbonjour"
+                           "rnnoise-build"
+                           "rnnoise-src"
+                           "smallft")))
+                   (with-directory-excursion "3rdparty"
+                     (for-each delete-file-recursively
+                               (lset-difference string=?
+                                                 (scandir ".")
+                                                 (cons* "." ".." keep))))
+                    #t)))))
     (build-system qt-build-system)
     (arguments
-     `(#:tests? #f  ; no "check" target
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (invoke "qmake" "main.pro" "QMAKE_LRELEASE=lrelease"
-                     (string-append "MUMBLE_PYTHON="
-                                    (string-append (assoc-ref inputs "python")
-                                                   "/bin/python3"))
-                     (string-append "CONFIG+="
-                                    (string-join
-                                     ;; Options used are listed in the same order
-                                     ;; as in the "INSTALL" file
-                                     ;; (plus the final "packaged" and "release").
-                                     (list "no-bundled-speex" ; in speex
-                                           "no-bundled-opus" ; in opus
-                                           "no-g15" ; not packaged
-                                           "no-jackaudio" ; use pulse
-                                           "no-oss" ; use pulse
-                                           "no-alsa" ; use pulse
-                                           "no-update"
-                                           "no-embed-qt-translations"
-                                           "no-ice" ; not packaged
-                                           "packaged"
-                                           "release")))
-                     (string-append "DEFINES+="
-                                    "PLUGIN_PATH="
-                                    (assoc-ref outputs "out")
-                                    "/lib/mumble"))))
-         (add-before 'configure 'fix-libspeechd-include
-           (lambda _
-             (substitute* "src/mumble/TextToSpeech_unix.cpp"
-               (("libspeechd.h") "speech-dispatcher/libspeechd.h"))
-             #t))
-         ;; disable statistic gathering by default. see <https://bugs.gnu.org/25201>
-         (add-before 'configure 'fix-statistic-gathering-default
-           (lambda _
-             (substitute* "src/mumble/Settings.cpp"
-               (("bUsage = true;") "bUsage = false;"))
-             #t))
-         (add-before 'install 'disable-murmur-ice
-           (lambda _
-             (substitute* "scripts/murmur.ini.system"
-               (("^ice=") ";ice="))
-             #t))
-         (replace 'install ; install phase does not exist
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (etc (string-append out "/etc/murmur"))
-                    (dbus (string-append out "/etc/dbus-1/system.d/"))
-                    (bin (string-append out "/bin"))
-                    (services (string-append out "/share/services"))
-                    (applications (string-append out "/share/applications"))
-                    (icons (string-append out "/share/icons/hicolor/scalable/apps"))
-                    (man (string-append out "/share/man/man1"))
-                    (lib (string-append out "/lib/mumble")))
-               (install-file "release/mumble" bin)
-               (install-file "scripts/mumble-overlay" bin)
-               (install-file "scripts/mumble.protocol" services)
-               (install-file "scripts/mumble.desktop" applications)
-               (install-file "icons/mumble.svg" icons)
-               (install-file "man/mumble-overlay.1" man)
-               (install-file "man/mumble.1" man)
-               (install-file "release/murmurd" bin)
-               (install-file "scripts/murmur.ini.system" etc)
-               (rename-file (string-append etc "/murmur.ini.system")
-                            (string-append etc "/murmur.ini"))
-               (install-file "scripts/murmur.conf" dbus)
-               (install-file "man/murmurd.1" man)
-               (for-each (lambda (file) (install-file file lib))
-                         (find-files "." "\\.so\\."))
-               (for-each (lambda (file) (install-file file lib))
-                         (find-files "release/plugins" "\\.so$"))))))))
+     (list
+      #:configure-flags
+      #~(list "-Dbundled-speex=off"
+              "-Dbundled-opus=off"
+              ;; "-Dbundled-rnnoise=off" ; XXX: not yet in release
+              "-Dalsa=off" ; use pulse
+              "-Dcoreaudio=off" ; use pulse
+              "-Dice=off" ; not packaged
+              "-Djackaudio=off" ; use pulse
+              "-Doss=off" ; use pulse
+              "-Dpulseaudio=on"
+              "-Dportaudio=off" ; use pulse
+              "-Dpipewire=off" ; use pulse
+              "-Doverlay-xcompile=off"
+              "-Dupdate=off" ; don't phone home
+              "-Dtests=on"
+              "-Dbundle-qt-translations=off")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'unpack-submodules
+            (lambda _
+              (copy-recursively #$find-python-interpreter-cmake-modules
+                                "3rdparty/FindPythonInterpreter")))
+          (add-after 'unpack 'disable-murmur-ice
+            (lambda _
+              (substitute* "scripts/murmur.ini"
+                (("^ice=") ";ice="))))
+          ;; disable statistic gathering by default. see <https://bugs.gnu.org/25201>
+          (add-after 'unpack 'fix-statistic-gathering-default
+            (lambda _
+              (substitute* "src/mumble/Settings.h"
+                (("bUsage *= true;") "bUsage = false;"))))
+          (add-after 'unpack 'fix-mumble-overlay
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (with-output-to-file "scripts/mumble-overlay"
+                (lambda ()
+                  (format #t "#!~a~%" (search-input-file inputs "/bin/bash"))
+                  (format #t "export LD_PRELOAD=\"~a $LD_PRELOAD\"~%"
+                          (string-append (assoc-ref outputs "out")
+                                         "/lib/mumble/libmumbleoverlay.so"))
+                  (format #t "exec \"${@}\"")))))
+          (add-after 'unpack 'hardcode-pulseaudio
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "src/mumble/PulseAudio.cpp"
+                (("libpulse.so") (search-input-file inputs "/lib/libpulse.so"))))))))
     (inputs
-     `(("avahi" ,avahi)
-       ("boost" ,boost)
-       ("libsndfile" ,libsndfile)
-       ("libxi" ,libxi)
-       ("mesa" ,mesa) ; avoid bundled
-       ("openssl" ,openssl)
-       ("opus" ,opus) ; avoid bundled
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase)
-       ("qtsvg" ,qtsvg)
-       ("speech-dispatcher" ,speech-dispatcher)
-       ("speex" ,speex) ; avoid bundled
-       ("speexdsp" ,speexdsp))) ; avoid bundled
+     (list avahi
+           boost
+           glib ; for speech-dispatcher
+           libsndfile
+           libxi
+           mesa ; avoid bundled
+           openssl
+           opus ; avoid bundled
+           poco
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtsvg-5
+           speech-dispatcher
+           speex ; avoid bundled
+           speexdsp ; avoid bundled
+           ;; rnnoise ; TODO: unbundle rnnoise
+           ))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("qttools" ,qttools)))
+     (list pkg-config python qttools-5))
     (synopsis "Low-latency, high quality voice chat software")
     (description
      "Mumble is an low-latency, high quality voice chat
@@ -593,141 +669,183 @@ Mumble consists of two applications for separate usage:
   (package
     (name "twinkle")
     (version "1.10.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/LubosD/twinkle")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0s0gi03xwvzp02ah4q6j33r9jx9nbayr6dxlg2ck9pwbay1nq1hx"))))
-    (build-system cmake-build-system)
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/LubosD/twinkle")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (patches
+        (search-patches "twinkle-bcg729.patch")) ; To support new BCG729 API.
+       (sha256
+        (base32
+         "0s0gi03xwvzp02ah4q6j33r9jx9nbayr6dxlg2ck9pwbay1nq1hx"))))
+    (build-system qt-build-system)
     (arguments
-     `(#:tests? #f                                ; no test target
-       #:configure-flags '("-DWITH_SPEEX=On")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/twinkle")
-                 `("QT_PLUGIN_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/plugins"))
-                         '("qtbase" "qtdeclarative")))
-                 `("QML2_IMPORT_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/qml"))
-                         '("qtdeclarative" "qtquickcontrols"))))
-               #t))))))
+     `(#:tests? #f                      ; no test target
+       #:configure-flags
+       (list
+        ;; FIX-ME: Make Twinkle compatible with libre version of iLBC.
+        ;; "-DWITH_ILBC=On"                ; For iLBC Codec Support
+        "-DWITH_ZRTP=On"                ; For ZRTP Support
+        "-DWITH_G729=On"                ; For G729 Codec Support
+        "-DWITH_SPEEX=On")))            ; For Speex Codec Support
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("readline" ,readline)
-       ("file" ,file)
-       ("ucommon" ,ucommon)
-       ("ccrtp" ,ccrtp)
-       ("libxml2" ,libxml2)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)
-       ("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("qttools" ,qttools)))
+     (list bison flex qttools-5))
     (inputs
-     `(("qtbase" ,qtbase)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols" ,qtquickcontrols)))
-    (home-page "http://twinkle.dolezel.info/")
+     (list alsa-lib
+           bcg729
+           zrtpcpp
+           ccrtp
+           file
+           libilbc
+           libsndfile
+           libxml2
+           qtbase-5
+           qtdeclarative-5
+           qtquickcontrols-5
+           readline
+           speex
+           speexdsp
+           ucommon))
     (synopsis "Softphone for voice over IP and instant messaging")
     (description "Twinkle is a softphone for your voice over IP and instant
-messaging communcations using the SIP protocol.  You can use it for direct IP
-phone to IP phone communication or in a network using a SIP proxy to route your
-calls and messages")
+messaging communcations using the SIP protocol.  You can use it for direct
+IP phone to IP phone communication or in a network using a SIP proxy to route
+your calls and messages.")
+    (home-page "http://twinkle.dolezel.info/")
     (license license:gpl2+)))
 
 (define-public pjproject
   (package
     (name "pjproject")
-    (version "2.10")
+    (version "2.12.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/pjsip/pjproject.git")
+             (url "https://github.com/pjsip/pjproject")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1aklicpgwc88578k03i5d5cm5h8mfm7hmx8vfprchbmaa2p8f4z0"))
+         "0xrj4sznbaip22y9hclff6y81l285bzkkj1smzifskpk3kiwp00w"))
        (modules '((guix build utils)))
        (snippet
         '(begin
-           (let ((third-party-directories
-                  ;; Things we don't need:
-                  ;; BaseClasses - contains libraries from Windows SDK
-                  ;; we don't need it, at least not now.
-                  (list "BaseClasses" "g7221" "ilbc" "milenage"
-                        "speex" "threademulation" "yuv" "bdsound"
-                        "gsm" "mp3" "resample" "srtp" "webrtc"
-                        ;; Keep only resample, build and README.txt.
-                        "build/baseclasses" "build/g7221" "build/gsm"
-                        "build/ilbc" "build/milenage" "build/resample"
-                        "build/samplerate" "build/speex" "build/srtp"
-                        "build/webrtc" "build/yuv")))
-             ;; Keep only Makefiles related to resample.
-             (for-each (lambda (directory)
-                         (delete-file-recursively
-                          (string-append "third_party/" directory)))
-                       third-party-directories)
-             #t)
-           (let ((third-party-dirs
-                  (list "gsm" "ilbc" "speex" "g7221" "srtp"
-                        "portaudio" "resample")))
-             (for-each
-              (lambda (dirs)
-                (substitute* "third_party/build/os-linux.mak"
-                  (((string-append "DIRS += " dirs)) "")))
-              third-party-dirs))))))
+           ;; Remove bundled libraries.
+           (delete-file-recursively "third_party")
+           (substitute* "aconfigure.ac"
+             (("third_party/build/os-auto.mak") ""))
+           (substitute* "Makefile"
+             (("third_party/build") ""))))))
     (build-system gnu-build-system)
-    (inputs
-     `(("portaudio" ,portaudio)))
-    (propagated-inputs
-     ;; These packages are referenced in the Libs field of the pkg-config
-     ;; file that will be installed by pjproject.
-     `(("speex" ,speex)
-       ("libsrtp" ,libsrtp)
-       ("gnutls" ,gnutls)
-       ("resample", resample)
-       ("util-linux" ,util-linux)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+    (outputs '("out" "debug" "static"))
     (arguments
-     `(;; FIXME make: No rule to make target
-       ;; 'pjlib-test-unknown-[something]-gnu'.
-       #:tests? #f
-       ;; #:test-target "selftest"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'build-dep
-           (lambda _ (invoke "make" "dep")))
-         (add-before 'patch-source-shebangs 'autoconf
-           (lambda _
-             (invoke "autoconf" "-v" "-f" "-i" "-o"
-                     "aconfigure" "aconfigure.ac")))
-         (add-before 'autoconf 'disable-some-tests
-           ;; Three of the six test programs fail due to missing network
-           ;; access.
-           (lambda _
-             (substitute* "Makefile"
-               (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
-                "selftest: pjlib-test pjlib-util-test pjmedia-test"))
-             #t)))))
+     (list
+      #:test-target "selftest"
+      #:configure-flags
+      #~(list "--enable-shared"
+              "--with-external-speex"
+              "--with-external-gsm"
+              "--with-external-srtp"
+              "--with-external-pa"
+              ;; The following flag is Linux specific.
+              #$@(if (string-contains (or (%current-system)
+                                          (%current-target-system)) "linux")
+                     #~("--enable-epoll")
+                     #~())
+              "--with-gnutls"           ;disable OpenSSL checks
+              "--disable-libyuv"        ;TODO: add missing package
+              "--disable-silk"          ;TODO: add missing package
+              "--disable-libwebrtc"     ;TODO: add missing package
+              "--disable-ilbc-codec"    ;cannot be unbundled
+              "--disable-g7221-codec"   ;TODO: add missing package
+              "--enable-libsamplerate"
+              ;; -DNDEBUG is set to prevent pjproject from raising
+              ;; assertions that aren't critical, crashing
+              ;; applications as the result.
+              "CFLAGS=-DNDEBUG"
+              ;; Specify a runpath reference to itself, which is missing and
+              ;; causes the validate-runpath phase to fail.
+              (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'build-dep
+            (lambda _ (invoke "make" "dep")))
+          ;; The check phases is moved after the install phase so to
+          ;; use the installed shared libraries for the tests.
+          (delete 'check)
+          (add-after 'install 'move-static-libraries
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((s (string-append #$output:static "/lib")))
+                (mkdir-p s)
+                (with-directory-excursion #$output
+                  (for-each (lambda (f)
+                              (rename-file f (string-append s "/" (basename f))))
+                            (find-files "." "\\.a$"))))))
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'patch-source-shebangs 'autoconf
+            (lambda _
+              (invoke "autoconf" "-v" "-f" "-i" "-o"
+                      "aconfigure" "aconfigure.ac")))
+          (add-before 'autoconf 'disable-some-tests
+            (lambda _
+              (substitute* "pjlib/src/pjlib-test/test.h"
+                ;; Disable network tests which are slow and/or require an
+                ;; actual network.
+                (("#define GROUP_NETWORK.*")
+                 "#define GROUP_NETWORK 0\n"))
+              (substitute* "self-test.mak"
+                ;; Fails with: pjlib-util-test-x86_64-unknown-linux-gnu:
+                ;; ../src/pjlib-util-test/resolver_test.c:1501: action2_1:
+                ;; Assertio n `pj_strcmp2(&pkt->q[0].name, "_sip._udp."
+                ;; "domain2.com")==0' failed.
+                ((" pjlib_util_test ") ""))
+              (substitute* "pjsip/src/test/test.h"
+                ;; Fails with: Error: unable to acquire TCP transport:
+                ;; [pj_status_t=120101] Network is unreachable.
+                (("#define INCLUDE_TCP_TEST.*")
+                 "#define INCLUDE_TCP_TEST 0\n")
+                ;; The TSX tests takes a very long time to run; skip them.
+                (("#define INCLUDE_TSX_GROUP.*")
+                 "#define INCLUDE_TSX_GROUP 0\n"))
+              (substitute* "pjsip/src/test/dns_test.c"
+                ;; The round_robin_test fails non-deterministically (depending
+                ;; on load); skip it (see:
+                ;; https://github.com/pjsip/pjproject/issues/2500).
+                (("round_robin_test(pool)") 0))
+              (substitute* "pjmedia/src/test/test.h"
+                ;; The following tests require a sound card.
+                (("#define HAS_MIPS_TEST.*")
+                 "#define HAS_MIPS_TEST 0\n")
+                (("#define HAS_JBUF_TEST.*")
+                 "#define HAS_JBUF_TEST 0\n"))
+              (substitute* "Makefile"
+                ;; Disable the pjnath and pjsua tests, which require an actual
+                ;; network and an actual sound card, respectively.
+                (("pjnath-test pjmedia-test pjsip-test pjsua-test")
+                 "pjmedia-test pjsip-test")))))))
+    (native-inputs
+     (list autoconf
+           automake
+           libtool
+           pkg-config))
+    (inputs
+     (list bcg729
+           gnutls
+           gsm
+           libsamplerate
+           libsrtp
+           opus
+           portaudio
+           speex
+           speexdsp))
     (home-page "https://www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
@@ -742,7 +860,7 @@ Initiation Protocol (SIP) and a multimedia framework.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/grishka/libtgvoip.git")
+             (url "https://github.com/grishka/libtgvoip")
              (commit version)))
        (file-name (git-file-name name version))
        ;; Fix compilation on i686-linux architecture.
@@ -756,10 +874,21 @@ Initiation Protocol (SIP) and a multimedia framework.")
          "122kn3jx6v0kkldlzlpzvlwqxgp6pmzxsjhrhcxw12bx9c08sar5"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("libopusenc" ,libopusenc)
-       ("openssl" ,openssl)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib openssl opus pulseaudio))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; libtgvoip wants to dlopen libpulse and libasound, so tell it where
+         ;; they are.
+         (add-after 'unpack 'patch-dlopen
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "os/linux/AudioPulse.cpp"
+               (("libpulse\\.so")
+                (search-input-file inputs "/lib/libpulse.so")))
+             (substitute* '("os/linux/AudioInputALSA.cpp"
+                            "os/linux/AudioOutputALSA.cpp")
+               (("libasound\\.so")
+                (search-input-file inputs "/lib/libasound.so"))))))))
     (synopsis "VoIP library for Telegram clients")
     (description "A collection of libraries and header files for implementing
 telephony functionality into custom Telegram clients.")