X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/7373eb8304e0ebbfabe66deb59e78187013403dd..bdb1a3385df8b16ecdbded9142ed12c40b2a5954:/gnu/packages/telephony.scm?ds=sidebyside diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 81e710a536..af7148bf84 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -2,16 +2,24 @@ ;;; Copyright © 2014 John Darrington ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2015 David Hashe -;;; Copyright © 2015, 2016 Efraim Flashner +;;; Copyright © 2015, 2016, 2020 Efraim Flashner ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016 Francesco Frassinelli -;;; Copyright © 2016, 2017 ng0 +;;; Copyright © 2016, 2017 Nikita ;;; Copyright © 2017, 2018 Ricardo Wurmus ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2017 Adonay Felipe Nogueira ;;; Copyright © 2018 Jovany Leandro G.C ;;; Copyright © 2018 Tim Gesthuizen ;;; Copyright © 2019 Pierre Neidhardt +;;; Copyright © 2019 Jan Wielkiewicz +;;; Copyright © 2019 Ivan Vilata i Balaguer +;;; Copyright © 2020 Brett Gilio +;;; Copyright © 2020 Michael Rohleder +;;; Copyright © 2020 Raghav Gururajan +;;; Copyright © 2020, 2021 Maxim Cournoyer +;;; Copyright © 2020 Vincent Legoll +;;; Copyright © 2021 LibreMiami ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,7 +38,9 @@ (define-module (gnu packages telephony) #:use-module (gnu packages) + #:use-module (gnu packages admin) #:use-module (gnu packages aidc) + #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages avahi) #:use-module (gnu packages audio) @@ -39,18 +49,24 @@ #:use-module (gnu packages check) #:use-module (gnu packages compression) #: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) #:use-module (gnu packages protobuf) #:use-module (gnu packages gettext) + #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) #: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) + #:use-module (gnu packages netpbm) #:use-module (gnu packages networking) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) @@ -60,7 +76,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) @@ -76,7 +91,129 @@ #: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 gnu) + #:use-module (guix build-system qt)) + +(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 + `(("pkg-config" ,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") + (version "0.0.6") + (source + (origin + (method url-fetch) + (uri + ;; The original upstream has been down since the end of March 2020. + (string-append "https://web.archive.org/web/20180626203108/" + "https://www.soft-switch.org/downloads/" name "/" + name "-" version ".tar.gz")) + (sha256 + (base32 "0rclrkyspzk575v8fslzjpgp4y2s4x7xk3r55ycvpi4agv33l1fc")))) + (build-system gnu-build-system) + (outputs '("out" "doc" "static")) ;doc contains HTML documentation + (arguments + `(#:configure-flags '("--enable-doc=yes" "--enable-tests=yes") + #:parallel-build? #f ;non-deterministic build failures may occur otherwise + #:parallel-tests? #f ;fails removing the same the files twice otherwise + #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-configure.ac + (lambda _ + ;; spandsp looks at hard coded locations of the FHS to + ;; find libxml2. + (substitute* "configure.ac" + (("AC_MSG_CHECKING\\(for libxml/xmlmemory\\.h.*" all) + (string-append all + "PKG_CHECK_MODULES(XML2, libxml-2.0)\n" + "CPPFLAGS+=\" $XML2_CFLAGS\"\n"))) + ;; Force a regeneration of the autotools build system. + (delete-file "autogen.sh") + (delete-file "configure") + #t)) + (add-after 'unpack 'do-not-install-data-files + ;; The .tiff images produced for tests are not + ;; reproducible and it is not desirable to have those + ;; distributed. + (lambda _ + (substitute* '("test-data/itu/fax/Makefile.am" + "test-data/etsi/fax/Makefile.am") + (("nobase_data_DATA") + "noinst_DATA")) + #t)) + (add-after 'install 'install-doc + (lambda* (#:key outputs #:allow-other-keys) + (let ((doc (string-append (assoc-ref outputs "doc") + "/share/doc/" ,name "-" ,version))) + (copy-recursively "doc/t38_manual" doc) + #t))) + (add-after 'install 'move-static-libraries + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (static (assoc-ref outputs "static"))) + (mkdir-p (string-append static "/lib")) + (with-directory-excursion out + (for-each (lambda (file) + (rename-file file + (string-append static "/" + file))) + (find-files "lib" "\\.a$"))) + #t)))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config) + ;; For the tests + ("fftw" ,fftw) + ("libpcap" ,libpcap) + ("libsndfile" ,libsndfile) + ("libjpeg" ,libjpeg-turbo) ;XXX: should be propagated from libtiff + ("libtiff" ,libtiff) + ("netpbm" ,netpbm) + ("sox" ,sox) + ;; For the documentation + ("docbook-xml" ,docbook-xml-4.3) + ("docbook-xsl" ,docbook-xsl) + ("doxygen" ,doxygen) + ("libxml2" ,libxml2) + ("libxslt" ,libxslt))) + (synopsis "DSP library for telephony") + (description "SpanDSP is a library of DSP functions for telephony, in the +8000 sample per second world of E1s, T1s, and higher order PCM channels. It +contains low level functions, such as basic filters. It also contains higher +level functions, such as cadenced supervisory tone detection, and a complete +software FAX machine.") + (home-page "https://web.archive.org/web/20180626203108/\ +https://www.soft-switch.org/index.html") + (license (list license:lgpl2.1+ ;for the library + license:gpl2+)))) ;for the test suites and support programs (define-public commoncpp (package @@ -104,6 +241,8 @@ communications via sockets, and various methods for data handling, such as serialization and XML parsing. It includes the uCommon C++ library, a smaller reimplementation.") (license license:gpl2+) ; plus runtime exception + (properties '((ftp-directory . "/gnu/commoncpp") + (upstream-name . "commoncpp2"))) (home-page "https://www.gnu.org/software/commoncpp/"))) (define-public ucommon @@ -150,18 +289,49 @@ 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 + `(("pkg-config" ,pkg-config))) + (inputs + `(("ccrtp" ,ccrtp) + ("ucommon" ,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.0.0") + (version "5.2.0") (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 - "00yznbrm9q04wgd4b831km8iwlvwvsnwv87igf79g5vj9yakr88q")))) + "0xdk3cszkzb8nb757gl47slrr13mf6xz43ab4k343fv8llp8pd2g")))) (build-system gnu-build-system) (synopsis "Library implementing SIP (RFC-3261)") @@ -169,6 +339,8 @@ packet-manipulation library.") used to provide multimedia and telecom software developers with an interface to initiate and control SIP sessions.") (license license:lgpl2.1+) + (properties '((ftp-directory . "/gnu/osip") + (upstream-name . "libosip2"))) (home-page "https://www.gnu.org/software/osip/"))) @@ -241,21 +413,34 @@ internet.") (define-public libsrtp (package (name "libsrtp") - (version "2.2.0") + (version "2.3.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/cisco/libsrtp/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/cisco/libsrtp") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "02x5l5h2nq6f9gq1bmgz5v9jmnqaab51p8aldglng1z7pjbp9za4")))) + "1f7i3jdh1wzdv7zjlz7gs3xw5jqig9zw8z9awsqqcp54f94xdpvd")))) (native-inputs `(("psmisc" ,psmisc) ;some tests require 'killall' ("procps" ,procps))) (build-system gnu-build-system) (arguments - '(#:test-target "runtest")) + '(#:test-target "runtest" + #:phases (modify-phases %standard-phases + (add-after 'build 'build-shared + (lambda* (#:key (make-flags '()) #:allow-other-keys) + ;; Build the shared library separately because + ;; the test runner requires a static build. + (apply invoke "make" "shared_library" make-flags) + #t)) + (add-after 'install 'remove-static-library + (lambda* (#:key outputs #:allow-other-keys) + (delete-file (string-append (assoc-ref outputs "out") + "/lib/libsrtp2.a")) + #t))))) (synopsis "Secure RTP (SRTP) Reference Implementation") (description "This package provides an implementation of the Secure Real-time Transport @@ -264,52 +449,6 @@ supporting cryptographic kernel.") (home-page "https://github.com/cisco/libsrtp") (license license:bsd-3))) -(define-public bctoolbox - (package - (name "bctoolbox") - (version "0.2.0") - (source (origin - (method url-fetch) - (uri (string-append "mirror://savannah/linphone/bctoolbox/bctoolbox-" - version ".tar.gz")) - (sha256 - (base32 - "14ivv6bh6qywys6yyb34scy9w78d636xl1f7cyxm3gwx2qv71lx5")))) - (build-system gnu-build-system) - (arguments '(#:make-flags '("CFLAGS=-fPIC"))) - (native-inputs - `(("cunit" ,cunit))) - (inputs - `(("mbedtls" ,mbedtls-apache))) - (home-page "https://www.linphone.org") - (synopsis "Utilities library for linphone software") - (description "BCtoolbox is a utilities library used by Belledonne -Communications software like linphone.") - (license license:gpl2+))) - -(define-public ortp - (package - (name "ortp") - (version "0.27.0") - (source (origin - (method url-fetch) - (uri (string-append "https://download.savannah.nongnu.org/" - "releases/linphone/ortp/sources/ortp-" - version ".tar.gz")) - (sha256 - (base32 - "1by0dqdqrj5avzcvjws30g8v5sa61wj12x00sxw0kn1smcrshqgb")))) - (build-system gnu-build-system) - (inputs - `(("bctoolbox" ,bctoolbox))) - (native-inputs - `(("pkg-config" ,pkg-config))) - (home-page "https://linphone.org/") - (synopsis "Implementation of the Real-time transport protocol") - (description "oRTP is a library implementing the Real-time transport -protocol (RFC 3550).") - (license license:lgpl2.1+))) - (define-public libiax2 (let ((commit "0e5980f1d78ce462e2d1ed6bc39ff35c8341f201")) ;; This is the commit used by the Ring Project. @@ -377,54 +516,63 @@ address of one of the participants.") (define-public mumble (package (name "mumble") - (version "1.2.19") + (version "1.3.4") (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/" + version "/" name "-" version ".tar.gz")) (sha256 (base32 - "1s60vaici3v034jzzi20x23hsj6mkjlc0glipjq4hffrg9qgnizh")) - (patches (search-patches "mumble-1.2.19-abs.patch")) - (modules '((guix build utils))) + "14v0rgy1a5alxmz7ly95y38bdj0hx79yysgkcd8r8p9qqfzlwpv1")) + (modules '((guix build utils) + (ice-9 ftw) + (srfi srfi-1))) (snippet `(begin - ;; Remove bundled software. - (for-each delete-file-recursively '("3rdparty" - "speex" - "speexbuild" - "opus-build" - "opus-src" - "sbcelt-helper-build" - "sbcelt-lib-build" - "sbcelt-src")) - ;; TODO: Celt is still bundled. It has been merged into Opus - ;; and will be removed after 1.3.0. - ;; https://github.com/mumble-voip/mumble/issues/1999 - #t)))) - (build-system gnu-build-system) + (let ((keep + '("arc4random-src" + "celt-0.7.0-build" + "celt-0.7.0-src" + "celt-0.11.0-build" + "celt-0.11.0-src" + "qqbonjour-src" + "rnnoise-build" + "rnnoise-src" + "smallft-src"))) + (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 outputs #:allow-other-keys) - (invoke "qmake" "main.pro" "-recursive" + (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 - (list "no-update" - "no-ice" + ;; 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-bundled-speex" - "pch" - "no-bundled-opus" - "no-celt" - "no-alsa" - "no-oss" - "no-portaudio" - "speechd" - "no-g15" - "no-bonjour" + "no-ice" ; not packaged + "packaged" "release"))) (string-append "DEFINES+=" "PLUGIN_PATH=" @@ -433,7 +581,29 @@ address of one of the participants.") (add-before 'configure 'fix-libspeechd-include (lambda _ (substitute* "src/mumble/TextToSpeech_unix.cpp" - (("libspeechd.h") "speech-dispatcher/libspeechd.h")))) + (("libspeechd.h") "speech-dispatcher/libspeechd.h")) + #t)) + ;; disable statistic gathering by default. see + (add-before 'configure 'fix-statistic-gathering-default + (lambda _ + (substitute* "src/mumble/Settings.cpp" + (("bUsage = true;") "bUsage = false;")) + #t)) + (add-before 'configure 'fix-mumble-overlay + (lambda* (#:key outputs #:allow-other-keys) + (with-output-to-file "scripts/mumble-overlay" + (lambda () + (format #t "#!~a~%" (which "bash")) + (format #t "export LD_PRELOAD=\"~a $LD_PRELOAD\"~%" + (string-append (assoc-ref outputs "out") + "/lib/mumble/libmumble.so.1")) + (format #t "exec \"${@}\""))) + #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")) @@ -461,24 +631,27 @@ address of one of the participants.") (for-each (lambda (file) (install-file file lib)) (find-files "." "\\.so\\.")) (for-each (lambda (file) (install-file file lib)) - (find-files "release/plugins" "\\.so$")))))))) + (find-files "release/plugins" "\\.so$")) + #t)))))) (inputs `(("avahi" ,avahi) - ("protobuf" ,protobuf-3.5) - ("openssl" ,openssl) - ("libsndfile" ,libsndfile) ("boost" ,boost) - ("opus" ,opus) - ("speex" ,speex) - ("speexdsp" ,speexdsp) - ("speech-dispatcher" ,speech-dispatcher) - ("libx11" ,libx11) + ("libsndfile" ,libsndfile) ("libxi" ,libxi) - ("qt-4" ,qt-4) - ("alsa-lib" ,alsa-lib) - ("pulseaudio" ,pulseaudio))) + ("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 (native-inputs - `(("pkg-config" ,pkg-config))) + `(("pkg-config" ,pkg-config) + ("python" ,python) + ("qttools" ,qttools))) (synopsis "Low-latency, high quality voice chat software") (description "Mumble is an low-latency, high quality voice chat @@ -486,422 +659,251 @@ software primarily intended for use while gaming. Mumble consists of two applications for separate usage: @code{mumble} for the client, and @code{murmur} for the server.") (home-page "https://wiki.mumble.info/wiki/Main_Page") - (license (list license:bsd-3 - ;; The bundled celt is bsd-2. Remove after 1.3.0. - license:bsd-2)))) + (license (list license:bsd-3 ; mumble celt-0.7.0 qqbonjour rnnoise smallft + license:bsd-2 ; celt-0.11.0 + license:isc)))) ; arc4random (define-public twinkle (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) + ("qttools" ,qttools))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("bcg729" ,bcg729) + ("zrtpcpp" ,zrtpcpp) ("ccrtp" ,ccrtp) + ("file" ,file) + ("libilbc" ,libilbc) + ("libsndfile" ,libsndfile) ("libxml2" ,libxml2) + ("qtbase" ,qtbase) + ("qtdeclarative" ,qtdeclarative) + ("qtquickcontrols" ,qtquickcontrols) + ("readline" ,readline) ("speex" ,speex) ("speexdsp" ,speexdsp) - ("libsndfile" ,libsndfile) - ("alsa-lib" ,alsa-lib) - ("qttools" ,qttools))) - (inputs - `(("qtbase" ,qtbase) - ("qtdeclarative" ,qtdeclarative) - ("qtquickcontrols" ,qtquickcontrols))) - (home-page "http://twinkle.dolezel.info/") + ("ucommon" ,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.7.2") + (version "2.11") (source (origin - (method url-fetch) - (uri (string-append - "http://www.pjsip.org/release/" ; - version "/" name "-" version ".tar.bz2")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/pjsip/pjproject") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kn9g1x1vmh4130ghph8mldz5m89gsjs4vpdzlzm98m3808gk5an")) (modules '((guix build utils))) (snippet '(begin - (let ((third-party-directories - (list "BaseClasses" "bdsound" "bin" "g7221" "gsm" - "ilbc" "lib" "milenage" "mp3" "speex" "srtp" - "resample" - ;; Keep only resample, build and README.txt. - "build/baseclasses" "build/g7221" "build/gsm" - "build/ilbc" "build/milenage" "build/samplerate" - "build/speex" "build/srtp" - "build/resample" "build/yuv"))) - ;; Keep only Makefiles related to resample. - (for-each (lambda (file) - (delete-file-recursively - (string-append "third_party/" file))) - 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)))) - (sha256 - (base32 - "0wiph6g51wanzwjjrpwsz63amgvly8g08jz033gnwqmppa584b4w")))) + ;; 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) - ("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" + `(#:tests? #t + #: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=" (assoc-ref %outputs "out") + "/lib")) #:phases (modify-phases %standard-phases + (add-after 'unpack 'make-source-files-writable + ;; Make all the files writable to prevent the following error: + ;; "autom4te: cannot open aconfigure: Permission denied". + (lambda _ + (for-each make-file-writable (find-files ".")))) (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 ((out (assoc-ref outputs "out")) + (s (string-append (assoc-ref outputs "static") "/lib"))) + (mkdir-p s) + (with-directory-excursion out + (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" "-vfi" "-o" + (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* "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" - (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test") - "selftest: pjlib-test pjlib-util-test pjmedia-test")) - #t))))) + ;; 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 + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config))) + (inputs + `(("bcg729" ,bcg729) + ("gnutls" ,gnutls) + ("gsm" ,gsm) + ("libsamplerate" ,libsamplerate) + ("libsrtp" ,libsrtp) + ("opus" ,opus) + ("portaudio" ,portaudio) + ("speex" ,speex) + ("speexdsp" ,speexdsp))) (home-page "https://www.pjsip.org") (synopsis "Session Initiation Protocol (SIP) stack") (description "PJProject provides an implementation of the Session Initiation Protocol (SIP) and a multimedia framework.") (license license:gpl2+))) -(define %jami-version "20190319.4.a16a99f") - -(define* (jami-source #:key without-daemon) - (origin - (method url-fetch) - (uri (string-append "http://dl.jami.net/ring-release/tarballs/ring_" - %jami-version - ".tar.gz")) - (modules '((guix build utils))) - (snippet - (if without-daemon - '(begin - (delete-file-recursively "daemon/contrib")) - #f)) - (sha256 - (base32 - "1c6n6sm7skw83v25g33g4jzbragz9j4przbzaz7asxw54jy33dwl")))) - -(define-public pjproject-jami - (package - (inherit pjproject) - (name "pjproject-jami") - (native-inputs - `(("savoir-faire-linux-patches" ,(jami-source)) - ,@(package-native-inputs pjproject))) - (arguments - `(#:tests? #f - ;; See ring-project/daemon/contrib/src/pjproject/rules.mak. - #:configure-flags - (list "--disable-oss" - "--disable-sound" - "--disable-video" - "--enable-ext-sound" - "--disable-speex-aec" - "--disable-g711-codec" - "--disable-l16-codec" - "--disable-gsm-codec" - "--disable-g722-codec" - "--disable-g7221-codec" - "--disable-speex-codec" - "--disable-ilbc-codec" - "--disable-opencore-amr" - "--disable-silk" - "--disable-sdl" - "--disable-ffmpeg" - "--disable-v4l2" - "--disable-openh264" - "--disable-resample" - "--disable-libwebrtc" - ;; "-fPIC" is required for libring. Bug? - "CFLAGS=-fPIC -DPJ_ENABLE_EXTRA_CHECK=1 -DPJ_ICE_MAX_CAND=256 -DPJ_ICE_MAX_CHECKS=1024 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000 -DPJ_ICE_ST_MAX_CAND=32" - "CXXFLAGS=-fPIC -DPJ_ENABLE_EXTRA_CHECK=1 -DPJ_ICE_MAX_CAND=256 -DPJ_ICE_MAX_CHECKS=1024 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000 -DPJ_ICE_ST_MAX_CAND=32" - ;; Now deviating from the rules.mak file. - "--enable-ssl=gnutls" - "--with-external-srtp") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'apply-patches - (lambda* (#:key inputs #:allow-other-keys) - (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches") - ;; Comes from - ;; "ring-project/daemon/contrib/src/pjproject/rules.mak". - ;; WARNING: These amount for huge changes in pjproject. - ;; Particularly, they add support for GnuTLS. - (savoir-faire-linux-patches - '("gnutls" - "rfc2466" - "ipv6" - "ice_config" - "multiple_listeners" - "pj_ice_sess" - "fix_turn_fallback" - "fix_ioqueue_ipv6_sendto" - "add_dtls_transport" - "rfc6062"))) - (mkdir-p savoir-faire-linux-patches-directory) - (invoke "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches") - "-C" savoir-faire-linux-patches-directory "--strip-components=5" "ring-project/daemon/contrib/src/pjproject") - (for-each - (lambda (file) - (invoke "patch" "--force" "-p1" "-i" - (string-append savoir-faire-linux-patches-directory "/" - file ".patch"))) - savoir-faire-linux-patches)) - #t)) - ;; TODO: We could use substitute-keyword-arguments instead of - ;; repeating the phases from pjproject, but somehow it does - ;; not work. - (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))))))) - -(define-public libring +(define-public libtgvoip (package - (name "libring") - (version %jami-version) - (source (jami-source #:without-daemon #t)) + (name "libtgvoip") + (version "2.4.4") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/grishka/libtgvoip") + (commit version))) + (file-name (git-file-name name version)) + ;; Fix compilation on i686-linux architecture. + ;; NOTE: Applying these patches is order-dependent! + ;; The patch for WebRTC /must/ precede the patch for SSE2. + (patches + (search-patches "libtgvoip-disable-webrtc.patch" + "libtgvoip-disable-sse2.patch")) + (sha256 + (base32 + "122kn3jx6v0kkldlzlpzvlwqxgp6pmzxsjhrhcxw12bx9c08sar5")))) (build-system gnu-build-system) (inputs - ;; Missing (optional?) dep: libnatpmp. `(("alsa-lib" ,alsa-lib) - ("boost" ,boost) - ("dbus-c++" ,dbus-c++) - ("eudev" ,eudev) - ("ffmpeg" ,ffmpeg) - ("flac" ,flac) - ("gmp" ,gmp) - ("gsm" ,gsm) - ("jack" ,jack-1) - ("jsoncpp" ,jsoncpp) - ("libogg" ,libogg) - ("libva" ,libva) - ("opendht" ,opendht) - ("opus" ,opus) - ("pcre" ,pcre) - ("pulseaudio" ,pulseaudio) - ("libsamplerate" ,libsamplerate) - ("libsndfile" ,libsndfile) - ("speex" ,speex) - ("speexdsp" ,speexdsp) - ("libupnp" ,libupnp) - ("libvorbis" ,libvorbis) - ("libx264" ,libx264) - ("libvdpau" ,libvdpau) - ("yaml-cpp" ,yaml-cpp) - ("zlib" ,zlib) ("openssl" ,openssl) - ("libsecp256k1" ,libsecp256k1) - ("python" ,python) - ("python-wrapper" ,python-wrapper) - ("restbed" ,restbed) - ("libx11" ,libx11) - ;; TODO: Upstream seems to rely on a custom pjproject (a.k.a. pjsip) version. - ;; See https://git.jami.net/savoirfairelinux/ring-daemon/issues/24. - ("pjproject" ,pjproject-jami))) - (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config) - ("which" ,which) - ("cppunit" ,cppunit) - ("perl" ,perl))) ; Needed for documentation. - (arguments - `(#:tests? #f ; The tests fail to compile due to missing headers. - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'change-directory - (lambda _ - (chdir "daemon") - #t)) - (add-before 'build 'add-lib-dir - (lambda _ - (mkdir-p "src/lib") - #t))))) - (synopsis "Distributed multimedia communications platform") - (description "Jami (formerly GNU Ring) is a secure and distributed voice, -video and chat communication platform that requires no centralized server and -leaves the power of privacy in the hands of the user. It supports the SIP and -IAX protocols, as well as decentralized calling using P2P-DHT. - -This package provides a library and daemon implementing the Jami core -functionality.") - (home-page "https://jami.net/") - (license license:gpl3+))) - -(define-public libringclient - (package - (inherit libring) - (name "libringclient") - (build-system cmake-build-system) - (propagated-inputs - `(("libring" ,libring) ; For 'dring'. - ("qtbase" ,qtbase) ; Qt is included in several installed headers. - ("qttools" ,qttools))) + ("opus" ,opus) + ("pulseaudio" ,pulseaudio))) (arguments - `(#:tests? #f ; There is no testsuite. - #:configure-flags - (list (string-append "-DRING_BUILD_DIR=" - (assoc-ref %build-inputs "libring") "/include")) - #:phases + `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'change-directory - (lambda _ - (chdir "lrc") - #t)) - (add-before 'configure 'fix-dbus-interfaces-path + ;; 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* "CMakeLists.txt" - (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix) - (string-append (assoc-ref inputs "libring") - dbus-interfaces-path-suffix)))))))) - (synopsis "Distributed multimedia communications platform") - (description "Jami (formerly GNU Ring) is a secure and distributed voice, -video and chat communication platform that requires no centralized server and -leaves the power of privacy in the hands of the user. It supports the SIP and -IAX protocols, as well as decentralized calling using P2P-DHT. - -This package provides a library common to all Jami clients.") - (home-page "https://jami.net") - (license license:gpl3+))) - -(define-public jami - (package - (inherit libring) - (name "jami") - (build-system cmake-build-system) - (inputs - `(("libringclient" ,libringclient) - ("gtk+" ,gtk+) - ("qrencode" ,qrencode) - ("libnotify" ,libnotify) - ("clutter" ,clutter) - ("clutter-gtk" ,clutter-gtk) - ("gettext" ,gnu-gettext) - ("libcanberra" ,libcanberra) - ("webkitgtk" ,webkitgtk) - ;; TODO: We must wrap ring-client-gnome to force using the - ;; `sqlite-with-column-metadata' package instead of `sqlite' or else it - ;; fails with: - ;; - ;; /gnu/store/...-qtbase-5.11.2/lib/qt5/plugins/sqldrivers/libqsqlite.so: - ;; undefined symbol: sqlite3_column_table_name16 - ;; - ;; qtbase is built against sqlite-with-column-metadata but somehow - ;; jami-client-gnome ends up with both `sqlite' and - ;; `sqlite-with-column-metadata' as inputs and it seems that - ;; libqsqlite.so gets confused. - ("sqlite" ,sqlite-with-column-metadata))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("glib:bin" ,glib "bin") - ("doxygen" ,doxygen))) - (propagated-inputs - `(("libring" ,libring) ; Contains `dring', the daemon, which is automatically by d-bus. - ("adwaita-icon-theme" ,adwaita-icon-theme) - ("evolution-data-server" ,evolution-data-server))) - (arguments - `(#:tests? #f ; There is no testsuite. - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'change-directory - (lambda _ - (chdir "client-gnome") - #t)) - (add-after 'install 'wrap - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (path (string-append (assoc-ref inputs "sqlite") "/lib"))) - (wrap-program (string-append out "/bin/gnome-ring") - `("LD_LIBRARY_PATH" ":" prefix (,path)))) + (substitute* "os/linux/AudioPulse.cpp" + (("libpulse\\.so") + (string-append (assoc-ref inputs "pulseaudio") + "/lib/libpulse.so"))) + (substitute* '("os/linux/AudioInputALSA.cpp" + "os/linux/AudioOutputALSA.cpp") + (("libasound\\.so") + (string-append (assoc-ref inputs "alsa-lib") + "/lib/libasound.so"))) #t))))) - (synopsis "Distributed multimedia communications platform") - (description "Jami (formerly GNU Ring) is a secure and distributed voice, -video and chat communication platform that requires no centralized server and -leaves the power of privacy in the hands of the user. It supports the SIP and -IAX protocols, as well as decentralized calling using P2P-DHT. - -This package provides the Jami client for the GNOME desktop.") - (home-page "https://jami.net") - (license license:gpl3+))) - -(define-public jami-client-gnome - (deprecated-package "jami-client-gnome" jami)) + (synopsis "VoIP library for Telegram clients") + (description "A collection of libraries and header files for implementing +telephony functionality into custom Telegram clients.") + (home-page "https://github.com/zevlg/libtgvoip") + (license license:unlicense)))