Revert "PRELIMINARY: gnu: Add network-manager."
[jackhill/guix/guix.git] / gnu / packages / gnuzilla.scm
index 8a0e23e..bfd1f5d 100644 (file)
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
+;;; 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>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 ;;; 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)
-                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages databases)
   #: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 libjpeg)
-  #:use-module (gnu packages libpng)
+  #:use-module (gnu packages libreoffice)  ;for hunspell
+  #:use-module (gnu packages image)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages yasm)
+  #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages zip))
 
+(define-public mozjs
+  (package
+    (name "mozjs")
+    (version "17.0.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://ftp.mozilla.org/pub/mozilla.org/js/"
+                   name version ".tar.gz"))
+             (sha256
+              (base32
+               "1fig2wf4f10v43mqx67y68z6h77sy900d1w0pz9qarrqx57rc7ij"))))
+    (build-system gnu-build-system)
+    (native-inputs
+      `(("perl", perl)
+        ("python" ,python-2)))
+    (arguments
+      `(#:phases
+          (alist-cons-before
+           'configure 'chdir
+           (lambda _
+             (chdir "js/src"))
+           (alist-replace
+            'configure
+            ;; configure fails if it is followed by SHELL and CONFIG_SHELL
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (setenv "SHELL" (which "sh"))
+                (setenv "CONFIG_SHELL" (which "sh"))
+                (zero? (system*
+                        "./configure" (string-append "--prefix=" out)))))
+            %standard-phases))))
+    (home-page
+     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey")
+    (synopsis "Mozilla javascript engine")
+    (description "SpiderMonkey is Mozilla's JavaScript engine written
+in C/C++.")
+    (license license:mpl2.0))) ; and others for some files
+
+(define-public nspr
+  (package
+    (name "nspr")
+    (version "4.10.8")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v"
+                   version "/src/nspr-" version ".tar.gz"))
+             (sha256
+              (base32
+               "05aaakz24ba2hdzlqx8qamwrsp7gni1acms8mr6m432wa9yaazjh"))))
+    (build-system gnu-build-system)
+    (native-inputs
+      `(("perl", perl)))
+    (arguments
+     `(#: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")
+    (description "Netscape Portable Runtime (NSPR) provides a
+platform-neutral API for system level and libc-like functions.  It is used
+in the Mozilla clients.")
+    (license license:mpl2.0)))
+
+(define-public nss
+  (package
+    (name "nss")
+    (version "3.19.2")
+    (source (origin
+              (method url-fetch)
+              (uri (let ((version-with-underscores
+                          (string-join (string-split version #\.) "_")))
+                     (string-append
+                      "ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/"
+                      "releases/NSS_" version-with-underscores "_RTM/src/"
+                      "nss-" version ".tar.gz")))
+              (sha256
+               (base32
+                "1bn9wbf52z4423134hpkyvcxq1568fvzmkybv2d49n31iwz6c1hk"))
+              ;; Create nss.pc and nss-config.
+              (patches (list (search-patch "nss-pkgconfig.patch")))))
+    (build-system gnu-build-system)
+    (outputs '("out" "bin"))
+    (arguments
+     '(#:parallel-build? #f ; failed
+       #:make-flags
+       (let* ((out (assoc-ref %outputs "out"))
+              (nspr (string-append (assoc-ref %build-inputs "nspr")))
+              (rpath (string-append "-Wl,-rpath=" out "/lib/nss")))
+         (list "-C" "nss" (string-append "PREFIX=" out)
+               "NSDISTMODE=copy"
+               "NSS_USE_SYSTEM_SQLITE=1"
+               (string-append "NSPR_INCLUDE_DIR=" nspr "/include/nspr")
+               ;; Add $out/lib/nss to RPATH.
+               (string-append "RPATH=" rpath)
+               (string-append "LDFLAGS=" rpath)))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw)
+                  (ice-9 match)
+                  (srfi srfi-26))
+       #:phases
+       (alist-replace
+        'configure
+        (lambda* (#:key system inputs #:allow-other-keys)
+          ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
+          (when (string-prefix? "x86_64" system)
+            (setenv "USE_64" "1"))
+          #t)
+        (alist-replace
+         'check
+         (lambda _
+           ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
+           ;; The later requires a working DNS or /etc/hosts.
+           (setenv "DOMSUF" "(none)")
+           (setenv "USE_IP" "TRUE")
+           (setenv "IP_ADDRESS" "127.0.0.1")
+           (zero? (system* "./nss/tests/all.sh")))
+         (alist-replace
+          'install
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let* ((out (assoc-ref outputs "out"))
+                   (bin (string-append (assoc-ref outputs "bin") "/bin"))
+                   (inc (string-append out "/include/nss"))
+                   (lib (string-append out "/lib/nss"))
+                   (obj (match (scandir "dist" (cut string-suffix? "OBJ" <>))
+                          ((obj) (string-append "dist/" obj)))))
+              ;; Install nss-config to $out/bin.
+              (mkdir-p (string-append out "/bin"))
+              (copy-file (string-append obj "/bin/nss-config")
+                         (string-append out "/bin/nss-config"))
+              (delete-file (string-append obj "/bin/nss-config"))
+              ;; Install nss.pc to $out/lib/pkgconfig.
+              (mkdir-p (string-append out "/lib/pkgconfig"))
+              (copy-file (string-append obj "/lib/pkgconfig/nss.pc")
+                         (string-append out "/lib/pkgconfig/nss.pc"))
+              (delete-file (string-append obj "/lib/pkgconfig/nss.pc"))
+              (rmdir (string-append obj "/lib/pkgconfig"))
+              ;; Install other files.
+              (copy-recursively "dist/public/nss" inc)
+              (copy-recursively (string-append obj "/bin") bin)
+              (copy-recursively (string-append obj "/lib") lib)))
+          %standard-phases)))))
+    (inputs
+     `(("sqlite" ,sqlite)
+       ("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")
+    (description
+     "Network Security Services (NSS) is a set of libraries designed to support
+cross-platform development of security-enabled client and server applications.
+Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7,
+PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security
+standards.")
+    (license license:mpl2.0)))
+
 (define-public icecat
   (package
     (name "icecat")
-    (version "24.0")
+    (version "31.8.0-gnu1")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/gnuzilla/"
-                          (substring version 0 (string-index version #\.))
-                          "/icecat-" version ".tar.gz"))
+                          (first (string-split version #\-)) "/"
+                          name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "1vxzjwmhad6yxx4sk9zvapjgv5salcv10id061q0991ii3dycy9a"))))
+        "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)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("bzip2" ,bzip2)
-       ("dbus" ,dbus)
+       ("cairo" ,cairo)
+       ("cups" ,cups)
        ("dbus-glib" ,dbus-glib)
+       ("gdk-pixbuf" ,gdk-pixbuf)
        ("glib" ,glib)
-       ("gstreamer" ,gstreamer-0.10)
-       ("gst-plugins-base" ,gst-plugins-base-0.10)
+       ("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)
-       ;; ("libpng" ,libpng)
-       ;; ("libjpeg" ,libjpeg)
+       ("libxinerama" ,libxinerama)
+       ("libxscrnsaver" ,libxscrnsaver)
        ("libxt" ,libxt)
        ("libffi" ,libffi)
+       ("libvpx" ,libvpx)
+       ("icu4c" ,icu4c)
+       ("pixman" ,pixman)
+       ("pulseaudio" ,pulseaudio)
        ("mesa" ,mesa)
-       ("perl" ,perl)
-       ("python" ,python-2) ; Python 3 not supported
-       ("python2-pysqlite" ,python2-pysqlite)
+       ("mit-krb5" ,mit-krb5)
+       ("nspr" ,nspr)
+       ("nss" ,nss)
+       ("sqlite" ,sqlite)
+       ("startup-notification" ,startup-notification)
        ("unzip" ,unzip)
        ("yasm" ,yasm)
        ("zip" ,zip)
        ("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)
+       ("python" ,python-2) ; Python 3 not supported
+       ("python2-pysqlite" ,python2-pysqlite)
+       ("pkg-config" ,pkg-config)))
     (arguments
-     `(#:tests? #f ; no check target
+     `(#:tests? #f          ; no check target
+       #:out-of-source? #t  ; must be built outside of the source directory
+
+
+       ;; 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"
 
-       #:configure-flags '(;; Building with debugging symbols takes ~5GiB, so
+                           ;; Building with debugging symbols takes ~5GiB, so
                            ;; disable it.
                            "--disable-debug"
                            "--disable-debug-symbols"
 
-                           "--disable-webrtc"     ; webrtc fails to build
-
+                           ;; Avoid bundled libraries.
                            "--with-system-zlib"
-                           "--with-system-bz2"    ; FIXME: not used
+                           "--with-system-bz2"
                            "--with-system-libevent"
+                           "--with-system-libvpx"
+                           "--with-system-icu"
+                           "--with-system-nspr"
+                           "--with-system-nss"
+                           "--enable-system-pixman"
+                           "--enable-system-cairo"
+                           "--enable-system-ffi"
+                           "--enable-system-hunspell"
+                           "--enable-system-sqlite"
 
-                           ;; TODO: Currently fails with "--with-system-png
-                           ;; won't work because the system's libpng doesn't
-                           ;; have APNG support".
+                           ;; Fails with "--with-system-png won't work because
+                           ;; the system's libpng doesn't have APNG support".
+                           ;; According to
+                           ;; http://sourceforge.net/projects/libpng-apng/ ,
+                           ;; "the Animated Portable Network Graphics (APNG)
+                           ;; is an unofficial extension of the Portable
+                           ;; Network Graphics (PNG) format";
+                           ;; we probably do not wish to support it.
                            ;; "--with-system-png"
 
-                           ;; TODO: Currently fails with "Insufficient JPEG
-                           ;; library version for --with-system-jpeg".
+                           ;; Fails with "libjpeg-turbo JCS_EXTENSIONS
+                           ;; required".
+                           ;; According to
+                           ;; http://sourceforge.net/projects/libjpeg-turbo/ ,
+                           ;; "libjpeg-turbo is a derivative of libjpeg that
+                           ;; uses MMX, SSE, SSE2, and NEON SIMD instructions
+                           ;; to accelerate baseline JPEG compression/
+                           ;; decompression", so we had better not use it
                            ;; "--with-system-jpeg"
-
-                           "--enable-system-ffi")
+                           )
 
        #:phases
-         (alist-cons-before
-          'patch-source-shebangs 'sanitise
+       (modify-phases %standard-phases
+         (add-after
+          'unpack 'remove-h264parse-from-blacklist
           (lambda _
-            ;; delete dangling symlinks
-            (delete-file "browser/base/content/.#aboutDialog.xul")
-            (delete-file "browser/base/content/abouthome/.#aboutHome.xhtml")
-            (delete-file "browser/branding/unofficial/content/.#aboutHome.xhtml")
-            (delete-file "toolkit/crashreporter/google-breakpad/autotools/compile"))
-         (alist-replace
+            ;; 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")))
-              (setenv "SHELL" (which "bash"))
-              (setenv "CONFIG_SHELL" (which "bash"))
-              (zero? (apply system* "./configure"
-                            (string-append "--prefix=" out)
-                            configure-flags))))
-          %standard-phases))))
+            (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
      "IceCat is the GNU version of the Firefox browser.  It is entirely free
-software, which does not recommend non-free plugins and addons. It also
+software, which does not recommend non-free plugins and addons.  It also
 features built-in privacy-protecting features.")
     (license license:mpl2.0))) ; and others, see toolkit/content/license.html