The origin used as the "sfl-patches" input contained bundled library tarballs, and weighed 217 MiB. After this change, it weighs 3.3 MiB. * gnu/packages/jami.scm (jami-source): Rename #:without-daemon to \#:keep-contrib-patches. Delete the daemon/contrib/tarballs sub-directory even when keeping the patches. Delete extraneous code. (%sfl-patches, %jami-sources): New variables. (pjproject-jami, ffmpeg-jami, libring): Adjust to use the above variables.
		
			
				
	
	
		
			555 lines
		
	
	
	
		
			19 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			555 lines
		
	
	
	
		
			19 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
;;; GNU Guix --- Functional package management for GNU
 | 
						|
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 | 
						|
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 | 
						|
;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 | 
						|
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 | 
						|
;;;
 | 
						|
;;; 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 <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
(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 backup)
 | 
						|
  #: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)
 | 
						|
  #:use-module (srfi srfi-1))
 | 
						|
 | 
						|
(define %jami-version "20200710.1.6bd18d2")
 | 
						|
 | 
						|
(define* (jami-source #:key keep-contrib-patches?)
 | 
						|
  "Return an origin object of the tarball release sources archive of Jami.
 | 
						|
When KEEP-CONTRIB-PATCHES? is #t, do not completely remove the contrib
 | 
						|
subdirectory, which contains patches to be applied to some of the dependencies
 | 
						|
of Jami."
 | 
						|
  (origin
 | 
						|
    (method url-fetch)
 | 
						|
    (uri (string-append "https://dl.jami.net/release/tarballs/jami_"
 | 
						|
                        %jami-version
 | 
						|
                        ".tar.gz"))
 | 
						|
    (modules '((guix build utils)))
 | 
						|
    (snippet
 | 
						|
     `(begin
 | 
						|
        ;; Delete over 200 MiB of bundled tarballs.  The contrib directory
 | 
						|
        ;; contains the custom patches for pjproject and other libraries used
 | 
						|
        ;; by Savoir-faire Linux.
 | 
						|
        (if ,keep-contrib-patches?
 | 
						|
            (delete-file-recursively "daemon/contrib/tarballs")
 | 
						|
            (delete-file-recursively "daemon/contrib"))
 | 
						|
        ;; Remove code from unused Jami clients.
 | 
						|
        (for-each delete-file-recursively '("client-android"
 | 
						|
                                            "client-macosx"
 | 
						|
                                            "client-uwp"
 | 
						|
                                            "client-windows"))
 | 
						|
        #t))
 | 
						|
    (sha256
 | 
						|
     (base32
 | 
						|
      "0lg61jv39x7kc9lq30by246xb6gcgp1rzj49ak7ff8nqpfzyfvva"))))
 | 
						|
 | 
						|
(define %sfl-patches (jami-source #:keep-contrib-patches? #t))
 | 
						|
 | 
						|
(define %jami-sources (jami-source))
 | 
						|
 | 
						|
;; Savoir-faire Linux modifies many libraries to add features
 | 
						|
;; to Jami. This procedure makes applying patches to a given
 | 
						|
;; package easy.
 | 
						|
(define jami-apply-dependency-patches
 | 
						|
  '(lambda* (#:key inputs dep-name patches)
 | 
						|
     (let ((patches-directory "sfl-patches"))
 | 
						|
       (mkdir-p patches-directory)
 | 
						|
       (invoke "tar" "-xvf" (assoc-ref inputs "sfl-patches")
 | 
						|
               "-C" patches-directory
 | 
						|
               "--strip-components=5"
 | 
						|
               (string-append "ring-project/daemon/contrib/src/"
 | 
						|
                              dep-name))
 | 
						|
       (for-each
 | 
						|
        (lambda (file)
 | 
						|
          (invoke "patch" "--force" "-p1" "-i"
 | 
						|
                  (string-append patches-directory "/"
 | 
						|
                                 file ".patch")))
 | 
						|
        patches))))
 | 
						|
 | 
						|
(define-public pjproject-jami
 | 
						|
  (package
 | 
						|
    (inherit pjproject)
 | 
						|
    (name "pjproject-jami")
 | 
						|
    (native-inputs
 | 
						|
     `(("sfl-patches" ,%sfl-patches)
 | 
						|
       ,@(package-native-inputs pjproject)))
 | 
						|
    (arguments
 | 
						|
     (substitute-keyword-arguments (package-arguments pjproject)
 | 
						|
       ((#:phases phases '%standard-phases)
 | 
						|
        `(modify-phases ,phases
 | 
						|
           (add-after 'make-source-files-writable 'apply-patches
 | 
						|
             (lambda* (#:key inputs #:allow-other-keys)
 | 
						|
               (,jami-apply-dependency-patches
 | 
						|
                #:inputs inputs
 | 
						|
                #:dep-name "pjproject"
 | 
						|
                #:patches
 | 
						|
                '("0001-rfc6544"
 | 
						|
                  "0002-rfc2466"
 | 
						|
                  "0003-add-tcp-keep-alive"
 | 
						|
                  "0004-multiple_listeners"
 | 
						|
                  "0005-fix_ebusy_turn"
 | 
						|
                  "0006-ignore_ipv6_on_transport_check"
 | 
						|
                  "0007-pj_ice_sess"
 | 
						|
                  "0008-fix_ioqueue_ipv6_sendto"
 | 
						|
                  "0009-add-config-site"
 | 
						|
                  ;; Note: The base pjproject is already patched with
 | 
						|
                  ;; "0010-fix-pkgconfig".
 | 
						|
                  "0011-fix-tcp-death-detection"
 | 
						|
                  "0012-fix-turn-shutdown-crash"))
 | 
						|
               #t))))))))
 | 
						|
 | 
						|
;; The following variables are configure flags used by ffmpeg-jami.  They're
 | 
						|
;; from the ring-project/daemon/contrib/src/ffmpeg/rules.mak file. We try to
 | 
						|
;; keep it as close to the official Jami package as possible, to provide all
 | 
						|
;; the codecs and extra features that are expected.
 | 
						|
;;
 | 
						|
;; See:
 | 
						|
;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak
 | 
						|
 | 
						|
(define %ffmpeg-default-configure-flags
 | 
						|
  '("--disable-everything"
 | 
						|
    "--enable-zlib"
 | 
						|
    "--enable-gpl"
 | 
						|
    "--enable-swscale"
 | 
						|
    "--enable-bsfs"
 | 
						|
    "--disable-filters"
 | 
						|
    "--disable-programs"
 | 
						|
    "--disable-postproc"
 | 
						|
    "--disable-protocols"
 | 
						|
    "--enable-protocol=crypto"
 | 
						|
    "--enable-protocol=file"
 | 
						|
    "--enable-protocol=rtp"
 | 
						|
    "--enable-protocol=srtp"
 | 
						|
    "--enable-protocol=tcp"
 | 
						|
    "--enable-protocol=udp"
 | 
						|
    "--enable-protocol=unix"
 | 
						|
    "--enable-protocol=pipe"
 | 
						|
 | 
						|
    ;; enable muxers/demuxers
 | 
						|
    "--disable-demuxers"
 | 
						|
    "--disable-muxers"
 | 
						|
    "--enable-muxer=rtp"
 | 
						|
    "--enable-muxer=g722"
 | 
						|
    "--enable-muxer=h263"
 | 
						|
    "--enable-muxer=h264"
 | 
						|
    "--enable-muxer=hevc"
 | 
						|
    "--enable-muxer=webm"
 | 
						|
    "--enable-muxer=ogg"
 | 
						|
    "--enable-muxer=pcm_s16be"
 | 
						|
    "--enable-muxer=pcm_s16le"
 | 
						|
    "--enable-demuxer=rtp"
 | 
						|
    "--enable-demuxer=mjpeg"
 | 
						|
    "--enable-demuxer=mjpeg_2000"
 | 
						|
    "--enable-demuxer=mpegvideo"
 | 
						|
    "--enable-demuxer=gif"
 | 
						|
    "--enable-demuxer=image_jpeg_pipe"
 | 
						|
    "--enable-demuxer=image_png_pipe"
 | 
						|
    "--enable-demuxer=image_webp_pipe"
 | 
						|
    "--enable-demuxer=matroska"
 | 
						|
    "--enable-demuxer=m4v"
 | 
						|
    "--enable-demuxer=mp3"
 | 
						|
    "--enable-demuxer=ogg"
 | 
						|
    "--enable-demuxer=flac"
 | 
						|
    "--enable-demuxer=wav"
 | 
						|
    "--enable-demuxer=ac3"
 | 
						|
    "--enable-demuxer=g722"
 | 
						|
    "--enable-demuxer=pcm_mulaw"
 | 
						|
    "--enable-demuxer=pcm_alaw"
 | 
						|
    "--enable-demuxer=pcm_s16be"
 | 
						|
    "--enable-demuxer=pcm_s16le"
 | 
						|
    "--enable-demuxer=h263"
 | 
						|
    "--enable-demuxer=h264"
 | 
						|
    "--enable-demuxer=hevc"
 | 
						|
 | 
						|
    ;; enable parsers
 | 
						|
    "--enable-parser=h263"
 | 
						|
    "--enable-parser=h264"
 | 
						|
    "--enable-parser=hevc"
 | 
						|
    "--enable-parser=mpeg4video"
 | 
						|
    "--enable-parser=vp8"
 | 
						|
    "--enable-parser=vp9"
 | 
						|
    "--enable-parser=opus"
 | 
						|
 | 
						|
    ;; encoders/decoders
 | 
						|
    "--enable-encoder=adpcm_g722"
 | 
						|
    "--enable-decoder=adpcm_g722"
 | 
						|
    "--enable-encoder=rawvideo"
 | 
						|
    "--enable-decoder=rawvideo"
 | 
						|
    "--enable-encoder=libx264"
 | 
						|
    "--enable-decoder=h264"
 | 
						|
    "--enable-encoder=pcm_alaw"
 | 
						|
    "--enable-decoder=pcm_alaw"
 | 
						|
    "--enable-encoder=pcm_mulaw"
 | 
						|
    "--enable-decoder=pcm_mulaw"
 | 
						|
    "--enable-encoder=mpeg4"
 | 
						|
    "--enable-decoder=mpeg4"
 | 
						|
    "--enable-encoder=libvpx_vp8"
 | 
						|
    "--enable-decoder=vp8"
 | 
						|
    "--enable-decoder=vp9"
 | 
						|
    "--enable-encoder=h263"
 | 
						|
    "--enable-encoder=h263p"
 | 
						|
    "--enable-decoder=h263"
 | 
						|
    "--enable-encoder=mjpeg"
 | 
						|
    "--enable-decoder=mjpeg"
 | 
						|
    "--enable-decoder=mjpegb"
 | 
						|
    "--enable-libspeex"
 | 
						|
    "--enable-libopus"
 | 
						|
    "--enable-libvpx"
 | 
						|
    "--enable-libx264"
 | 
						|
    "--enable-encoder=libspeex"
 | 
						|
    "--enable-decoder=libspeex"
 | 
						|
    "--enable-encoder=libopus"
 | 
						|
    "--enable-decoder=libopus"
 | 
						|
 | 
						|
    ;; decoders for ringtones and audio streaming
 | 
						|
    "--enable-decoder=flac"
 | 
						|
    "--enable-decoder=vorbis"
 | 
						|
    "--enable-decoder=aac"
 | 
						|
    "--enable-decoder=ac3"
 | 
						|
    "--enable-decoder=eac3"
 | 
						|
    "--enable-decoder=mp3"
 | 
						|
    "--enable-decoder=pcm_u24be"
 | 
						|
    "--enable-decoder=pcm_u24le"
 | 
						|
    "--enable-decoder=pcm_u32be"
 | 
						|
    "--enable-decoder=pcm_u32le"
 | 
						|
    "--enable-decoder=pcm_u8"
 | 
						|
    "--enable-decoder=pcm_f16le"
 | 
						|
    "--enable-decoder=pcm_f24le"
 | 
						|
    "--enable-decoder=pcm_f32be"
 | 
						|
    "--enable-decoder=pcm_f32le"
 | 
						|
    "--enable-decoder=pcm_f64be"
 | 
						|
    "--enable-decoder=pcm_f64le"
 | 
						|
    "--enable-decoder=pcm_s16be"
 | 
						|
    "--enable-decoder=pcm_s16be_planar"
 | 
						|
    "--enable-decoder=pcm_s16le"
 | 
						|
    "--enable-decoder=pcm_s16le_planar"
 | 
						|
    "--enable-decoder=pcm_s24be"
 | 
						|
    "--enable-decoder=pcm_s24le"
 | 
						|
    "--enable-decoder=pcm_s24le_planar"
 | 
						|
    "--enable-decoder=pcm_s32be"
 | 
						|
    "--enable-decoder=pcm_s32le"
 | 
						|
    "--enable-decoder=pcm_s32le_planar"
 | 
						|
    "--enable-decoder=pcm_s64be"
 | 
						|
    "--enable-decoder=pcm_s64le"
 | 
						|
    "--enable-decoder=pcm_s8"
 | 
						|
    "--enable-decoder=pcm_s8_planar"
 | 
						|
    "--enable-decoder=pcm_u16be"
 | 
						|
    "--enable-decoder=pcm_u16le"
 | 
						|
 | 
						|
    ;; encoders/decoders for images
 | 
						|
    "--enable-encoder=gif"
 | 
						|
    "--enable-decoder=gif"
 | 
						|
    "--enable-encoder=jpegls"
 | 
						|
    "--enable-decoder=jpegls"
 | 
						|
    "--enable-encoder=ljpeg"
 | 
						|
    "--enable-decoder=jpeg2000"
 | 
						|
    "--enable-encoder=png"
 | 
						|
    "--enable-decoder=png"
 | 
						|
    "--enable-encoder=bmp"
 | 
						|
    "--enable-decoder=bmp"
 | 
						|
    "--enable-encoder=tiff"
 | 
						|
    "--enable-decoder=tiff"
 | 
						|
 | 
						|
    ;; filters
 | 
						|
    "--enable-filter=scale"
 | 
						|
    "--enable-filter=overlay"
 | 
						|
    "--enable-filter=amix"
 | 
						|
    "--enable-filter=amerge"
 | 
						|
    "--enable-filter=aresample"
 | 
						|
    "--enable-filter=format"
 | 
						|
    "--enable-filter=aformat"
 | 
						|
    "--enable-filter=fps"
 | 
						|
    "--enable-filter=transpose"
 | 
						|
    "--enable-filter=pad"))
 | 
						|
 | 
						|
(define %ffmpeg-linux-configure-flags
 | 
						|
  '("--enable-pic"
 | 
						|
    "--extra-cxxflags=-fPIC"
 | 
						|
    "--extra-cflags=-fPIC"
 | 
						|
    "--target-os=linux"
 | 
						|
    "--enable-indev=v4l2"
 | 
						|
    "--enable-indev=xcbgrab"
 | 
						|
    "--enable-vdpau"
 | 
						|
    "--enable-hwaccel=h264_vdpau"
 | 
						|
    "--enable-hwaccel=mpeg4_vdpau"
 | 
						|
    "--enable-vaapi"
 | 
						|
    "--enable-hwaccel=h264_vaapi"
 | 
						|
    "--enable-hwaccel=mpeg4_vaapi"
 | 
						|
    "--enable-hwaccel=h263_vaapi"
 | 
						|
    "--enable-hwaccel=vp8_vaapi"
 | 
						|
    "--enable-hwaccel=mjpeg_vaapi"
 | 
						|
    "--enable-hwaccel=hevc_vaapi"
 | 
						|
    "--enable-encoder=h264_vaapi"
 | 
						|
    "--enable-encoder=vp8_vaapi"
 | 
						|
    "--enable-encoder=mjpeg_vaapi"
 | 
						|
    "--enable-encoder=hevc_vaapi"))
 | 
						|
 | 
						|
;; ffnvcodec is not supported on ARM then we enable it here for i386 and
 | 
						|
;; x86_64 architectures.
 | 
						|
(define %ffmpeg-linux-x86-configure-flags
 | 
						|
  '("--arch=x86"
 | 
						|
    "--enable-cuvid"
 | 
						|
    "--enable-ffnvcodec"
 | 
						|
    "--enable-nvdec"
 | 
						|
    "--enable-nvenc"
 | 
						|
    "--enable-hwaccel=h264_nvdec"
 | 
						|
    "--enable-hwaccel=hevc_nvdec"
 | 
						|
    "--enable-hwaccel=vp8_nvdec"
 | 
						|
    "--enable-hwaccel=mjpeg_nvdec"
 | 
						|
    "--enable-encoder=h264_nvenc"
 | 
						|
    "--enable-encoder=hevc_nvenc"))
 | 
						|
 | 
						|
;; This procedure composes the configure flags list for ffmpeg-jami.
 | 
						|
(define (ffmpeg-compose-configure-flags)
 | 
						|
  (define (system=? s)
 | 
						|
    (string-prefix? s (%current-system)))
 | 
						|
 | 
						|
  `(,@%ffmpeg-default-configure-flags
 | 
						|
    ,@(if (string-contains (%current-system) "linux")
 | 
						|
          (if (or (system=? "i686")
 | 
						|
                  (system=? "x86_64"))
 | 
						|
              (append %ffmpeg-linux-configure-flags
 | 
						|
                      %ffmpeg-linux-x86-configure-flags)
 | 
						|
              %ffmpeg-linux-configure-flags)
 | 
						|
          '())))
 | 
						|
 | 
						|
(define-public ffmpeg-jami
 | 
						|
  (package
 | 
						|
    (inherit ffmpeg)
 | 
						|
    (name "ffmpeg-jami")
 | 
						|
    (native-inputs
 | 
						|
     `(("sfl-patches" ,%sfl-patches)
 | 
						|
       ("libiconv" ,libiconv)
 | 
						|
       ,@(package-native-inputs ffmpeg)))
 | 
						|
    (supported-systems '("x86_64-linux" "i686-linux"
 | 
						|
                         "aarch64-linux" "armhf-linux"))
 | 
						|
    (arguments
 | 
						|
     (append
 | 
						|
      '(#:tests? #f)
 | 
						|
      (substitute-keyword-arguments (package-arguments ffmpeg)
 | 
						|
        ((#:configure-flags '())
 | 
						|
         (ffmpeg-compose-configure-flags))
 | 
						|
        ((#:phases phases)
 | 
						|
         `(modify-phases ,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 ((jami-apply-dependency-patches
 | 
						|
                       ,jami-apply-dependency-patches))
 | 
						|
                  ;; These patches come from:
 | 
						|
                  ;; "ring-project/daemon/contrib/src/ffmpeg/rules.mak".
 | 
						|
                  (jami-apply-dependency-patches #:inputs inputs
 | 
						|
                                                 #:dep-name "ffmpeg"
 | 
						|
                                                 #:patches
 | 
						|
                                                 '("remove-mjpeg-log"
 | 
						|
                                                   "change-RTCP-ratio"
 | 
						|
                                                   "rtp_ext_abs_send_time"))
 | 
						|
                  #t))))))))))
 | 
						|
 | 
						|
(define-public libring
 | 
						|
  (package
 | 
						|
    (name "libring")
 | 
						|
    (version %jami-version)
 | 
						|
    (source %jami-sources)
 | 
						|
    (build-system gnu-build-system)
 | 
						|
    (inputs
 | 
						|
     `(("alsa-lib" ,alsa-lib)
 | 
						|
       ("boost" ,boost)
 | 
						|
       ("dbus-c++" ,dbus-c++)
 | 
						|
       ("eudev" ,eudev)
 | 
						|
       ("ffmpeg" ,ffmpeg-jami)
 | 
						|
       ("flac" ,flac)
 | 
						|
       ("gmp" ,gmp)
 | 
						|
       ("gsm" ,gsm)
 | 
						|
       ("jack" ,jack-1)
 | 
						|
       ("jsoncpp" ,jsoncpp)
 | 
						|
       ("libarchive" ,libarchive)
 | 
						|
       ("libnatpmp" ,libnatpmp)
 | 
						|
       ("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)
 | 
						|
       ("sqlite" ,sqlite)))
 | 
						|
    (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+)))
 |