X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/1ae6df81dbf98956e489a7668d2280ad9c4d72e4..7f1b865819190935b3ee932b86bde80c30494073:/gnu/packages/gnuzilla.scm diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 8a0e23e451..bfd1f5dc7b 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -1,6 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Andreas Enge -;;; Copyright © 2013 Ludovic Courtès +;;; Copyright © 2013, 2015 Andreas Enge +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015 Mark H Weaver +;;; Copyright © 2015 Sou Bunnbu ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,116 +20,435 @@ ;;; along with GNU Guix. If not, see . (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: + ;; + ;; * libogg + ;; * libtheora + ;; * libvorbis + ;; * libtremor (not yet in guix) + ;; * libopus + ;; * speex + ;; * soundtouch (not yet in guix) + ;; + ;; TODO: Use system harfbuzz. Waiting for: + ;; + ;; + "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 . + #: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