From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id mOfrFqPNrF7wEAAA0tVLHw (envelope-from ) for ; Sat, 02 May 2020 01:32:19 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id 4ONgJqzNrF5BOgAA1q6Kng (envelope-from ) for ; Sat, 02 May 2020 01:32:28 +0000 Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:470:142::17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 86F0D9422B2 for ; Sat, 2 May 2020 01:32:27 +0000 (UTC) Received: from localhost ([::1]:42384 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUh11-0001ij-QM for larch@yhetil.org; Fri, 01 May 2020 21:32:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jUh0V-00012h-6F for guix-patches@gnu.org; Fri, 01 May 2020 21:31:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUgyh-0004Y2-T9 for guix-patches@gnu.org; Fri, 01 May 2020 21:31:54 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:39456) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUgyh-0004Xx-FZ for guix-patches@gnu.org; Fri, 01 May 2020 21:30:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jUgyh-0005Ks-Cd for guix-patches@gnu.org; Fri, 01 May 2020 21:30:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#40677] [PATCH V3 01/15] gnu: telephony.scm: Move Jami and its dependencies to jami.scm. Resent-From: Jan Wielkiewicz Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 02 May 2020 01:30:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 40677 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 40677@debbugs.gnu.org Cc: Jan Wielkiewicz Received: via spool by 40677-submit@debbugs.gnu.org id=B40677.158838298720405 (code B ref 40677); Sat, 02 May 2020 01:30:03 +0000 Received: (at 40677) by debbugs.gnu.org; 2 May 2020 01:29:47 +0000 Received: from localhost ([127.0.0.1]:50986 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jUgyG-0005IW-3G for submit@debbugs.gnu.org; Fri, 01 May 2020 21:29:46 -0400 Received: from smtpo.poczta.interia.pl ([217.74.65.208]:34136) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jUgy0-0005H8-87 for 40677@debbugs.gnu.org; Fri, 01 May 2020 21:29:28 -0400 X-Interia-R: Interia X-Interia-R-IP: 89.64.43.193 X-Interia-R-Helo: Received: from localhost.localdomain (89-64-43-193.dynamic.chello.pl [89.64.43.193]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by poczta.interia.pl (INTERIA.PL) with ESMTPSA; Sat, 2 May 2020 03:15:07 +0200 (CEST) From: Jan Wielkiewicz Date: Sat, 2 May 2020 03:14:36 +0200 Message-Id: <20200502011450.2676-2-tona_kosmicznego_smiecia@interia.pl> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200502011450.2676-1-tona_kosmicznego_smiecia@interia.pl> References: <20200502011450.2676-1-tona_kosmicznego_smiecia@interia.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Interia-Antivirus: OK DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=interia.pl; s=biztos; t=1588382107; bh=zIyLRMa9q7BB0W/0P9zZDakH2cKDWfnRcUKlvdxhH4k=; h=X-Interia-R:X-Interia-R-IP:X-Interia-R-Helo:From:To:Cc:Subject: Date:Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Type:Content-Transfer-Encoding:X-Interia-Antivirus; b=FkHsKGJFLt0sCXF/2T7XFFHocYG6mRGZ8RVmkaTNl/r7ir9M2hDER2lN4YB6ksTcj BvZd0B5/xAl877EpeL2NRRD4t3IfRjsOg+kaGKbPZzo7PAwVX73orBY2lJkyvxs8cK h/axZKQzMANrL1LGyzu9ESSE9DqU5gBk36zz1Vss= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 X-Spam-Score: 0.99 Authentication-Results: aspmx1.migadu.com; dkim=fail (rsa verify failed) header.d=interia.pl header.s=biztos header.b=FkHsKGJF; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 2001:470:142::17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Scan-Result: default: False [0.99 / 13.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; GENERIC_REPUTATION(0.00)[-0.49472059057663]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2001:470:142::/48:c]; R_DKIM_REJECT(1.00)[interia.pl:s=biztos]; DWL_DNSWL_FAIL(0.00)[2001:470:142::17:server fail]; FREEMAIL_FROM(0.00)[interia.pl]; IP_REPUTATION_HAM(0.00)[asn: 22989(0.16), country: US(-0.00), ip: 2001:470:142::17(-0.49)]; DKIM_TRACE(0.00)[interia.pl:-]; RCPT_COUNT_TWO(0.00)[2]; MX_GOOD(-0.50)[cached: eggs.gnu.org]; MAILLIST(-0.20)[mailman]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:22989, ipnet:2001:470:142::/48, country:US]; TAGGED_FROM(0.00)[larch=yhetil.org]; ARC_NA(0.00)[]; FROM_NEQ_ENVFROM(0.00)[tona_kosmicznego_smiecia@interia.pl,guix-patches-bounces@gnu.org]; FROM_HAS_DN(0.00)[]; URIBL_BLOCKED(0.00)[protonmail.com:email,jami.net:url,interia.pl:email,gnu.org:url,rohleder.de:email,libqsqlite.so:url,posteo.net:email,ambrevar.xyz:email]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[interia.pl]; HAS_LIST_UNSUB(-0.01)[]; DNSWL_BLOCKED(0.00)[2001:470:142::17:from]; MID_CONTAINS_FROM(1.00)[]; FREEMAIL_CC(0.00)[interia.pl]; RCVD_COUNT_SEVEN(0.00)[9]; FORGED_SENDER_MAILLIST(0.00)[] X-TUID: uSCNJQc6qGdO Jami is a massive package and its developers modify many libraries. Keeping them in a single file makes maintaining easier. * gnu/local.mk (GNU_SYSTEM_MODULES): Add jami.scm. * gnu/packages/jami.scm: Add file. (%jami-version, jami-source, pjproject-jami, libring, libringclient, jami, jami-client-gnome): New variables. * gnu/packages/telephony.scm: (%jami-version, jami-source, pjproject-jami, libring, libringclient, jami, jami-client-gnome): Remove variables. --- gnu/local.mk | 2 + gnu/packages/jami.scm | 351 +++++++++++++++++++++++++++++++++++++ gnu/packages/telephony.scm | 291 ------------------------------ 3 files changed, 353 insertions(+), 291 deletions(-) create mode 100644 gnu/packages/jami.scm diff --git a/gnu/local.mk b/gnu/local.mk index 26d26ee215..812253b192 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -33,6 +33,7 @@ # Copyright © 2020 Michael Rohleder # Copyright © 2020 Felix Gruber # Copyright © 2020 Ryan Prior +# Copyright © 2020 Jan Wielkiewicz # # This file is part of GNU Guix. # @@ -278,6 +279,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/ipfs.scm \ %D%/packages/irc.scm \ %D%/packages/iso-codes.scm \ + %D%/packages/jami.scm \ %D%/packages/java.scm \ %D%/packages/java-compression.scm \ %D%/packages/java-graphics.scm \ diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm new file mode 100644 index 0000000000..5c167808f0 --- /dev/null +++ b/gnu/packages/jami.scm @@ -0,0 +1,351 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Pierre Neidhardt +;;; Copyright © 2019, 2020 Jan Wielkiewicz +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages jami) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages aidc) + #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) + #:use-module (gnu packages base) + #:use-module (gnu packages boost) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages crypto) + #:use-module (gnu packages documentation) + #:use-module (gnu packages gettext) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gtk) + #:use-module (gnu packages libcanberra) + #:use-module (gnu packages linux) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages networking) + #:use-module (gnu packages pcre) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages python) + #:use-module (gnu packages qt) + #:use-module (gnu packages serialization) + #:use-module (gnu packages sqlite) + #:use-module (gnu packages telephony) + #:use-module (gnu packages tls) + #:use-module (gnu packages upnp) + #:use-module (gnu packages video) + #:use-module (gnu packages webkit) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xorg) + #:use-module (gnu packages) + #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (guix utils)) + +(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))) + (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" + "--with-gnutls" + "--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") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'make-git-checkout-writable + (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. + (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 + (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))) + (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) + (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/jami-gnome") + `("LD_LIBRARY_PATH" ":" prefix (,path)))) + #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)) diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 7b20954120..747b0d75a1 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -734,297 +734,6 @@ calls and messages") 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))) - (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" - "--with-gnutls" - "--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") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'make-git-checkout-writable - (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. - (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 - (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))) - (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) - (inputs - `(("libringclient" ,libringclient) - ("gtk+" ,gtk+) - ("qrencode" ,qrencode) - ("libnotify" ,libnotify) - ("clutter" ,clutter) - ("clutter-gtk" ,clutter-gtk) - ("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) - ("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)) - (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/jami-gnome") - `("LD_LIBRARY_PATH" ":" prefix (,path)))) - #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)) - (define-public libtgvoip (package (name "libtgvoip") -- 2.26.2