X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/c6d02bcf1bcc06c70e440221e317274926c0fce3..bdb1a3385df8b16ecdbded9142ed12c40b2a5954:/gnu/packages/telephony.scm diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 76e08528f4..af7148bf84 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -2,10 +2,10 @@ ;;; 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 @@ -17,8 +17,9 @@ ;;; Copyright © 2020 Brett Gilio ;;; Copyright © 2020 Michael Rohleder ;;; Copyright © 2020 Raghav Gururajan -;;; Copyright © 2020 Maxim Cournoyer +;;; Copyright © 2020, 2021 Maxim Cournoyer ;;; Copyright © 2020 Vincent Legoll +;;; Copyright © 2021 LibreMiami ;;; ;;; This file is part of GNU Guix. ;;; @@ -48,6 +49,7 @@ #: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) @@ -60,6 +62,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) @@ -91,6 +94,35 @@ #: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") @@ -209,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 @@ -255,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)") @@ -274,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/"))) @@ -449,37 +516,37 @@ address of one of the participants.") (define-public mumble (package (name "mumble") - (version "1.3.0") + (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 - "03dqg5yf6d7ilc1wydpshnv1ndssppcbadqcq20jm5j4fdaf53cs")) - (modules '((guix build utils))) + "14v0rgy1a5alxmz7ly95y38bdj0hx79yysgkcd8r8p9qqfzlwpv1")) + (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-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 @@ -522,6 +589,16 @@ address of one of the participants.") (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" @@ -554,7 +631,8 @@ 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) ("boost" ,boost) @@ -589,418 +667,197 @@ 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) + ("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.9") + (version "2.11") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/pjsip/pjproject.git") - (commit "5dfa75be7d69047387f9b0436dd9492bbbf03fe4"))) - (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)))) + (url "https://github.com/pjsip/pjproject") + (commit version))) (file-name (git-file-name name version)) (sha256 (base32 - "1ayj6n7zd5wvd1nzj2k9s57fb4ckc2fv92k5sjvhd87yg69k3393")))) + "1kn9g1x1vmh4130ghph8mldz5m89gsjs4vpdzlzm98m3808gk5an")) + (modules '((guix build utils))) + (snippet + '(begin + ;; 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 "lib"))) - (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("pkg-config" ,pkg-config) - ("libtool" ,libtool))) - (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))))) - (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 "20191101.3.67671e7") - -(define* (jami-source #:key without-daemon) - (origin - (method url-fetch) - (uri (string-append "https://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 - "0kw172w2ccyz438kf5xqw14nhfm4xk6a2libnzib9j2wvhlpf4q0")))) - -(define-public pjproject-jami - (package - (inherit pjproject) - (name "pjproject-jami") - (native-inputs - `(("savoir-faire-linux-patches" ,(jami-source)) - ,@(package-native-inputs pjproject))) + (outputs '("out" "debug" "static")) (arguments - `(#:tests? #f - ;; See ring-project/daemon/contrib/src/pjproject/rules.mak. + `(#:tests? #t + #:test-target "selftest" #: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" - "--with-gnutls" + (list "--enable-shared" + "--with-external-speex" + "--with-external-gsm" "--with-external-srtp" - ;; We need -fPIC or else we get the following error when linking - ;; against pjproject-jami: - ;; relocation R_X86_64_32S against `.rodata' can not be used when - ;; making a shared object; - "CFLAGS=-fPIC" - "CXXFLAGS=-fPIC") + "--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-git-checkout-writable + (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 ".")) - #t)) - (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. - (savoir-faire-linux-patches - '("fix_turn_alloc_failure" - "rfc2466" - "ipv6" - "multiple_listeners" - "pj_ice_sess" - "fix_turn_fallback" - "fix_ioqueue_ipv6_sendto" - "add_dtls_transport" - "rfc6544" - "ice_config" - "sip_config" - "fix_first_packet_turn_tcp" - "fix_ebusy_turn" - "ignore_ipv6_on_transport_check" - "fix_turn_connection_failure" - ;; "uwp_vs" ; for windows - "disable_local_resolution"))) - (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. + (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" "-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))))))) - -(define-public libring - (package - (name "libring") - (version %jami-version) - (source (jami-source #:without-daemon #t)) - (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) - ("restinio" ,restinio) - ("libx11" ,libx11) - ("asio" ,asio) - ;; 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))) + ;; 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) - ("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))) - (arguments - `(#:tests? #f ; There is no testsuite. - #:configure-flags - (list (string-append "-DRING_BUILD_DIR=" - (assoc-ref %build-inputs "libring") "/include")) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'change-directory - (lambda _ - (chdir "lrc") - #t)) - (add-before 'configure 'fix-dbus-interfaces-path - (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) + ("pkg-config" ,pkg-config))) (inputs - `(("libringclient" ,libringclient) - ("gtk+" ,gtk+) - ("qrencode" ,qrencode) - ("libnotify" ,libnotify) - ("clutter" ,clutter) - ("clutter-gtk" ,clutter-gtk) - ("libcanberra" ,libcanberra) - ("webkitgtk" ,webkitgtk))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("gettext" ,gettext-minimal) - ("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))))) - (synopsis "Distributed, privacy-respecting communication program") - (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)) + `(("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-public libtgvoip (package @@ -1010,7 +867,7 @@ This package provides the Jami client for the GNOME desktop.") (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. @@ -1025,9 +882,26 @@ This package provides the Jami client for the GNOME desktop.") (build-system gnu-build-system) (inputs `(("alsa-lib" ,alsa-lib) - ("libopusenc" ,libopusenc) ("openssl" ,openssl) + ("opus" ,opus) ("pulseaudio" ,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") + (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 "VoIP library for Telegram clients") (description "A collection of libraries and header files for implementing telephony functionality into custom Telegram clients.")