gnu: Use PACKAGE/INHERIT in more places.
[jackhill/guix/guix.git] / gnu / packages / jami.scm
index 6dbde40..3773c1a 100644 (file)
@@ -2,6 +2,7 @@
 ;;; 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.
 ;;;
@@ -34,7 +35,6 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages hurd)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
 
 (define %jami-version "20200710.1.6bd18d2")
 
-(define* (jami-source #:key without-daemon)
+(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_"
                         ".tar.gz"))
     (modules '((guix build utils)))
     (snippet
-     (if without-daemon
-         '(begin
+     `(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"))
-         #f))
+        ;; Remove code from unused Jami clients.
+        (for-each delete-file-recursively '("client-android"
+                                            "client-macosx"
+                                            "client-uwp"
+                                            "client-windows"))
+        #t))
     (sha256
      (base32
       "0lg61jv39x7kc9lq30by246xb6gcgp1rzj49ak7ff8nqpfzyfvva"))))
 
-;; Savoir-Faire Linux modifies many libraries to add features
+(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
     (inherit pjproject)
     (name "pjproject-jami")
     (native-inputs
-     `(("sfl-patches" ,(jami-source))
+     `(("sfl-patches" ,%sfl-patches)
        ,@(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"
-             ;; The following flag is Linux specific.
-             ,@(if (hurd-triplet? (or (%current-system)
-                                      (%current-target-system)))
-                   '()
-                   '("--enable-epoll"))
-             "--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;
-             ;; -DNDEBUG is needed to prevent assertion from happening and
-             ;; stopping the daemon.
-             "CFLAGS=-fPIC -DNDEBUG"
-             "CXXFLAGS=-fPIC -DNDEBUG")
-       #: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 ((jami-apply-dependency-patches ,jami-apply-dependency-patches))
-               ;; Comes from
-               ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
-               ;; WARNING: These amount for huge changes in pjproject.
-               (jami-apply-dependency-patches
+     (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
                   ;; "0010-fix-pkgconfig".
                   "0011-fix-tcp-death-detection"
                   "0012-fix-turn-shutdown-crash"))
-               #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)))))))
+               #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
           '())))
 
 (define-public ffmpeg-jami
-  (package
-    (inherit ffmpeg)
+  (package/inherit ffmpeg
     (name "ffmpeg-jami")
     (native-inputs
-     `(("sfl-patches" ,(jami-source))
+     `(("sfl-patches" ,%sfl-patches)
        ("libiconv" ,libiconv)
        ,@(package-native-inputs ffmpeg)))
     (supported-systems '("x86_64-linux" "i686-linux"
   (package
     (name "libring")
     (version %jami-version)
-    (source (jami-source #:without-daemon #t))
+    (source %jami-sources)
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)