Revert "PRELIMINARY: gnu: Add network-manager."
[jackhill/guix/guix.git] / gnu / packages / gnuzilla.scm
index 068e1f1..bfd1f5d 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;;
@@ -20,6 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages gnuzilla)
+  #:use-module ((srfi srfi-1) #:hide (zip))
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages cups)
+  #:use-module (gnu packages mit-krb5)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages libevent)
+  #:use-module (gnu packages libreoffice)  ;for hunspell
   #:use-module (gnu packages image)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages pulseaudio)
@@ -102,15 +108,16 @@ in C/C++.")
     (native-inputs
       `(("perl", perl)))
     (arguments
-      `(#:tests? #f ; no check target
-        #:configure-flags
-        `("--enable-64bit")
-        #:phases
-          (alist-cons-before
-           'configure 'chdir
-           (lambda _
-             (chdir "nspr"))
-            %standard-phases)))
+     `(#:tests? #f ; no check target
+       #:configure-flags (list "--enable-64bit"
+                               (string-append "LDFLAGS=-Wl,-rpath="
+                                              (assoc-ref %outputs "out")
+                                              "/lib"))
+       #:phases (alist-cons-before
+                 'configure 'chdir
+                 (lambda _
+                   (chdir "nspr"))
+                 %standard-phases)))
     (home-page
      "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR")
     (synopsis "Netscape API for system level and libc-like functions")
@@ -122,7 +129,7 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.18")
+    (version "3.19.2")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -133,7 +140,7 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "0h0xy9kvd2s8r438q4dfn25cgvv5dc1hkm9lb4bgrxpr5bxv13b1"))
+                "1bn9wbf52z4423134hpkyvcxq1568fvzmkybv2d49n31iwz6c1hk"))
               ;; Create nss.pc and nss-config.
               (patches (list (search-patch "nss-pkgconfig.patch")))))
     (build-system gnu-build-system)
@@ -156,8 +163,6 @@ in the Mozilla clients.")
                   (ice-9 ftw)
                   (ice-9 match)
                   (srfi srfi-26))
-       #:imported-modules ((guix build gnu-build-system)
-                           (guix build utils))
        #:phases
        (alist-replace
         'configure
@@ -205,6 +210,12 @@ in the Mozilla clients.")
        ("zlib" ,zlib)))
     (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
     (native-inputs `(("perl" ,perl)))
+
+    ;; The NSS test suite takes over 28 hours on Loongson 3A (MIPS), and
+    ;; possibly longer when another build is happening concurrently on the
+    ;; same machine.
+    (properties '((timeout . 144000)))  ; 40 hours
+
     (home-page
      "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
     (synopsis "Network Security Services")
@@ -219,41 +230,85 @@ standards.")
 (define-public icecat
   (package
     (name "icecat")
-    (version "31.5.0")
+    (version "31.8.0-gnu1")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/gnuzilla/"
-                          version "/" name "-" version ".tar.bz2"))
+                          (first (string-split version #\-)) "/"
+                          name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "1rr4axghaypdkrf60i1qp6dz4cd29ya02fs3vyffvp4x9kgcq2dd"))
-      (patches (map search-patch '("icecat-CVE-2015-0815-pt1.patch"
-                                   "icecat-CVE-2015-0815-pt2.patch"
-                                   "icecat-bug-1127780.patch"
-                                   "icecat-CVE-2015-0807.patch"
-                                   "icecat-CVE-2015-0815-pt3.patch"
-                                   "icecat-CVE-2015-0817.patch"
-                                   "icecat-CVE-2015-0816.patch"
-                                   "icecat-CVE-2015-0818-pt1.patch"
-                                   "icecat-bug-1145870.patch"
-                                   "icecat-CVE-2015-0818-pt2.patch"
-                                   "icecat-CVE-2015-0801.patch")))))
+        "11wx29mb5pcg4mgk07a6vjwh52ca90k0x4m9wv0v3y5dmp88f01p"))
+      (patches (map search-patch '("icecat-CVE-2015-4473-partial.patch"
+                                   "icecat-CVE-2015-4482.patch"
+                                   "icecat-CVE-2015-4488.patch"
+                                   "icecat-CVE-2015-4489.patch"
+                                   "icecat-CVE-2015-4491.patch"
+                                   "icecat-CVE-2015-4492.patch"
+                                   "icecat-CVE-2015-4495.patch"
+                                   "icecat-enable-acceleration-and-webgl.patch"
+                                   "icecat-freetype-2.6.patch"
+                                   "icecat-libvpx-1.4.patch")))
+      (modules '((guix build utils)))
+      (snippet
+       '(begin
+          ;; Remove bundled libraries that we don't use, since they may
+          ;; contain unpatched security flaws, they waste disk space and
+          ;; network bandwidth, and may cause confusion.
+          (for-each delete-file-recursively
+                    '(;; FIXME: Removing the bundled icu breaks configure.
+                      ;;   * The bundled icu headers are used in some places.
+                      ;;   * The version number is taken from the bundled copy.
+                      ;;"intl/icu"
+                      ;;
+                      ;; FIXME: A script from the bundled nspr is used.
+                      ;;"nsprpub"
+                      ;;
+                      ;; TODO: Use system media libraries.  Waiting for:
+                      ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
+                      ;;   * libogg
+                      ;;   * libtheora
+                      ;;   * libvorbis
+                      ;;   * libtremor (not yet in guix)
+                      ;;   * libopus
+                      ;;   * speex
+                      ;;   * soundtouch (not yet in guix)
+                      ;;
+                      ;; TODO: Use system harfbuzz.  Waiting for:
+                      ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=847568>
+                      ;;
+                      "modules/freetype2"
+                      "modules/zlib"
+                      "modules/libbz2"
+                      "ipc/chromium/src/third_party/libevent"
+                      "media/libvpx"
+                      "security/nss"
+                      "gfx/cairo"
+                      "js/src/ctypes/libffi"
+                      "db/sqlite3"))
+          #t))))
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("bzip2" ,bzip2)
        ("cairo" ,cairo)
-       ("dbus" ,dbus)
+       ("cups" ,cups)
        ("dbus-glib" ,dbus-glib)
+       ("gdk-pixbuf" ,gdk-pixbuf)
        ("glib" ,glib)
        ("gstreamer" ,gstreamer)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+-2)
        ("pango" ,pango)
        ("freetype" ,freetype)
+       ("hunspell" ,hunspell)
+       ("libcanberra" ,libcanberra)
+       ("libgnome" ,libgnome)
        ("libxft" ,libxft)
        ("libevent" ,libevent)
+       ("libxinerama" ,libxinerama)
+       ("libxscrnsaver" ,libxscrnsaver)
        ("libxt" ,libxt)
        ("libffi" ,libffi)
        ("libvpx" ,libvpx)
@@ -261,8 +316,11 @@ standards.")
        ("pixman" ,pixman)
        ("pulseaudio" ,pulseaudio)
        ("mesa" ,mesa)
+       ("mit-krb5" ,mit-krb5)
        ("nspr" ,nspr)
        ("nss" ,nss)
+       ("sqlite" ,sqlite)
+       ("startup-notification" ,startup-notification)
        ("unzip" ,unzip)
        ("yasm" ,yasm)
        ("zip" ,zip)
@@ -276,16 +334,35 @@ standards.")
      `(#:tests? #f          ; no check target
        #:out-of-source? #t  ; must be built outside of the source directory
 
-       #:configure-flags '(;; Building with debugging symbols takes ~5GiB, so
-                           ;; disable it.
-                           "--disable-debug"
-                           "--disable-debug-symbols"
 
+       ;; XXX: There are RUNPATH issues such as
+       ;; $prefix/lib/icecat-31.6.0/plugin-container NEEDing libmozalloc.so,
+       ;; which is not in its RUNPATH, but they appear to be harmless in
+       ;; practice somehow.  See <http://hydra.gnu.org/build/378133>.
+       #:validate-runpath? #f
+
+       #:configure-flags '("--enable-default-toolkit=cairo-gtk2"
+                           "--enable-pango"
+                           "--enable-gio"
+                           "--enable-svg"
+                           "--enable-canvas"
+                           "--enable-mathml"
+                           "--enable-startup-notification"
                            "--enable-pulseaudio"
                            "--enable-gstreamer=1.0"
 
+                           "--disable-gnomevfs"
+                           "--disable-gconf"
+                           "--disable-gnomeui"
+
+                           ;; Building with debugging symbols takes ~5GiB, so
+                           ;; disable it.
+                           "--disable-debug"
+                           "--disable-debug-symbols"
+
+                           ;; Avoid bundled libraries.
                            "--with-system-zlib"
-                           "--with-system-bz2"    ; FIXME: not used
+                           "--with-system-bz2"
                            "--with-system-libevent"
                            "--with-system-libvpx"
                            "--with-system-icu"
@@ -294,11 +371,8 @@ standards.")
                            "--enable-system-pixman"
                            "--enable-system-cairo"
                            "--enable-system-ffi"
-
-                           ;; Fails with "configure: error: System
-                           ;; SQLite library is not compiled with
-                           ;; SQLITE_ENABLE_UNLOCK_NOTIFY."
-                           ;; "--enable-system-sqlite"
+                           "--enable-system-hunspell"
+                           "--enable-system-sqlite"
 
                            ;; Fails with "--with-system-png won't work because
                            ;; the system's libpng doesn't have APNG support".
@@ -322,29 +396,55 @@ standards.")
                            )
 
        #:phases
-       (alist-replace
-        'configure
-        ;; configure does not work followed by both "SHELL=..." and
-        ;; "CONFIG_SHELL=..."; set environment variables instead
-        (lambda* (#:key outputs configure-flags #:allow-other-keys)
-          (let* ((out (assoc-ref outputs "out"))
-                 (bash (which "bash"))
-                 (abs-srcdir (getcwd))
-                 (srcdir (string-append "../" (basename abs-srcdir)))
-                 (flags `(,(string-append "--prefix=" out)
-                          ,(string-append "--with-l10n-base="
-                                          abs-srcdir "/l10n")
-                          ,@configure-flags)))
-            (setenv "SHELL" bash)
-            (setenv "CONFIG_SHELL" bash)
-            (mkdir "../build")
-            (chdir "../build")
-            (format #t "build directory: ~s~%" (getcwd))
-            (format #t "configure flags: ~s~%" flags)
-            (zero? (apply system* bash
-                          (string-append srcdir "/configure")
-                          flags))))
-        %standard-phases)))
+       (modify-phases %standard-phases
+         (add-after
+          'unpack 'remove-h264parse-from-blacklist
+          (lambda _
+            ;; Remove h264parse from gstreamer format helper blacklist.  It
+            ;; was put there to work around a bug in a pre-1.0 version of
+            ;; gstreamer.  See:
+            ;; https://www.mozilla.org/en-US/security/advisories/mfsa2015-47/
+            (substitute* "content/media/gstreamer/GStreamerFormatHelper.cpp"
+              (("^  \"h264parse\",\n") ""))
+            #t))
+         (add-after
+          'unpack 'arrange-to-link-libxul-with-libraries-it-might-dlopen
+          (lambda _
+            ;; libxul.so dynamically opens libraries, so here we explicitly
+            ;; link them into libxul.so instead.
+            ;;
+            ;; TODO: It might be preferable to patch in absolute file names in
+            ;; calls to dlopen or PR_LoadLibrary, but that didn't seem to
+            ;; work.  More investigation is needed.
+            (let ((p (open-file "toolkit/library/libxul.mk" "a")))
+              (display "\nOS_LIBS += -lGL -lgnome-2 -lcanberra -lXss \\
+                                     -lcups -lgssapi_krb5 -lgstreamer-1.0 \\
+                                     -lgstapp-1.0 -lgstvideo-1.0\n"
+                       p)
+              (close-port p)
+              #t)))
+         (replace
+          'configure
+          ;; configure does not work followed by both "SHELL=..." and
+          ;; "CONFIG_SHELL=..."; set environment variables instead
+          (lambda* (#:key outputs configure-flags #:allow-other-keys)
+            (let* ((out (assoc-ref outputs "out"))
+                   (bash (which "bash"))
+                   (abs-srcdir (getcwd))
+                   (srcdir (string-append "../" (basename abs-srcdir)))
+                   (flags `(,(string-append "--prefix=" out)
+                            ,(string-append "--with-l10n-base="
+                                            abs-srcdir "/l10n")
+                            ,@configure-flags)))
+              (setenv "SHELL" bash)
+              (setenv "CONFIG_SHELL" bash)
+              (mkdir "../build")
+              (chdir "../build")
+              (format #t "build directory: ~s~%" (getcwd))
+              (format #t "configure flags: ~s~%" flags)
+              (zero? (apply system* bash
+                            (string-append srcdir "/configure")
+                            flags))))))))
     (home-page "http://www.gnu.org/software/gnuzilla/")
     (synopsis "Entirely free browser derived from Mozilla Firefox")
     (description