;;; 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