summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/gnuzilla.scm238
1 files changed, 122 insertions, 116 deletions
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index c9b14cfd16..e36927fc6a 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -596,68 +596,7 @@ from forcing GEXP-PROMISE."
   (package
     (name "icecat")
     (version %icecat-version)
-    (source
-     (origin
-      (inherit icecat-source)
-      (patches (search-patches "icecat-avoid-bundled-libraries.patch"
-                               "icecat-use-system-graphite2+harfbuzz.patch"
-                               "icecat-use-system-media-libs.patch"))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          (use-modules (ice-9 ftw))
-          ;; 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"
-                      ;;
-                      ;; FIXME: With the update to IceCat 60, using system NSS
-                      ;;        broke certificate validation.  See
-                      ;;        <https://bugs.gnu.org/32833>.  For now, we use
-                      ;;        the bundled NSPR and NSS.  TODO: Investigate,
-                      ;;        and try to unbundle these libraries again.
-                      ;; UNBUNDLE-ME! "security/nss"
-                      ;;
-                      ;; TODO: Use more system media libraries.  See:
-                      ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
-                      ;;   * libtheora: esr60 wants v1.2, not yet released.
-                      ;;   * soundtouch: avoiding the bundled library would
-                      ;;     result in some loss of functionality.  There's
-                      ;;     also an issue with exception handling
-                      ;;     configuration.  It seems that this is needed in
-                      ;;     some moz.build:
-                      ;;       DEFINES['ST_NO_EXCEPTION_HANDLING'] = 1
-                      ;;   * libopus
-                      ;;   * speex
-                      ;;
-                      "modules/freetype2"
-                      "modules/zlib"
-                      "modules/libbz2"
-                      "ipc/chromium/src/third_party/libevent"
-                      "media/libjpeg"
-                      "media/libvpx"
-                      "media/libogg"
-                      "media/libvorbis"
-                      ;; "media/libtheora" ; wants theora-1.2, not yet released
-                      "media/libtremor"
-                      "gfx/harfbuzz"
-                      "gfx/graphite2"
-                      "js/src/ctypes/libffi"
-                      "db/sqlite3"))
-          ;; Delete .pyc files, typically present in icecat source tarballs
-          (for-each delete-file (find-files "." "\\.pyc$"))
-          ;; Delete obj-* directories, sometimes present in icecat tarballs
-          (for-each delete-file-recursively
-                    (scandir "." (lambda (name)
-                                   (string-prefix? "obj-" name))))
-          #t))))
+    (source icecat-source)
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -703,8 +642,21 @@ from forcing GEXP-PROMISE."
        ("zip" ,zip)
        ("zlib" ,zlib)))
     (native-inputs
-      ;; Icecat 60 checkes for rust>=1.24
-     `(("rust" ,rust-1.24)
+     ;; The following patches are specific to the Guix packaging of IceCat,
+     ;; and therefore we prefer to leave them out of 'source', which should be
+     ;; a tarball suitable for compilation on any system that IceCat supports.
+     ;; (Bug fixes and security fixes, however, should go in 'source').
+     `(("icecat-avoid-bundled-libraries.patch"
+        ,(search-patch "icecat-avoid-bundled-libraries.patch"))
+       ("icecat-use-system-graphite2+harfbuzz.patch"
+        ,(search-patch "icecat-use-system-graphite2+harfbuzz.patch"))
+       ("icecat-use-system-media-libs.patch"
+        ,(search-patch "icecat-use-system-media-libs.patch"))
+
+       ("patch" ,(canonical-package patch))
+
+       ;; Icecat 60 checks for rust>=1.24
+       ("rust" ,rust-1.24)
        ("cargo" ,rust-1.24 "cargo")
        ("llvm" ,llvm-3.9.1)
        ("clang" ,clang-3.9.1)
@@ -804,37 +756,91 @@ from forcing GEXP-PROMISE."
                   ,@%gnu-build-system-modules)
        #:phases
        (modify-phases %standard-phases
-         (add-after
-          'unpack 'ensure-no-mtimes-pre-1980
-          (lambda _
-            ;; Without this, the 'source/test/addons/packed.xpi' and
-            ;; 'source/test/addons/simple-prefs.xpi' targets fail while trying
-            ;; to create zip archives.
-            (let ((early-1980 315619200)) ; 1980-01-02 UTC
-              (ftw "." (lambda (file stat flag)
-                         (unless (<= early-1980 (stat:mtime stat))
-                           (utime file early-1980 early-1980))
-                         #t))
-              #t)))
-         (add-after
-          'unpack 'link-libxul-with-libraries
-          (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.
-            (substitute* "toolkit/library/moz.build"
-              (("^# This library needs to be last" all)
-               (string-append "OS_LIBS += [
+         (add-after 'unpack 'apply-guix-specific-patches
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             (let ((patch (string-append (assoc-ref (or native-inputs inputs)
+                                                    "patch")
+                                         "/bin/patch")))
+               (for-each (match-lambda
+                           ((label . file)
+                            (when (and (string-prefix? "icecat-" label)
+                                       (string-suffix? ".patch" label))
+                              (format #t "applying '~a'...~%" file)
+                              (invoke patch "--force" "--no-backup-if-mismatch"
+                                      "-p1" "--input" file))))
+                         (or native-inputs inputs)))
+             #t))
+         (add-after 'apply-guix-specific-patches 'remove-bundled-libraries
+           (lambda _
+             ;; Remove bundled libraries that we don't use, since they may
+             ;; contain unpatched security flaws, they waste disk space and
+             ;; memory, and may cause confusion.
+             (for-each (lambda (file)
+                         (format #t "deleting '~a'...~%" file)
+                         (delete-file-recursively file))
+                       '(;; 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"
+                         ;;
+                         ;; FIXME: With the update to IceCat 60, using system NSS
+                         ;;        broke certificate validation.  See
+                         ;;        <https://bugs.gnu.org/32833>.  For now, we use
+                         ;;        the bundled NSPR and NSS.  TODO: Investigate,
+                         ;;        and try to unbundle these libraries again.
+                         ;; UNBUNDLE-ME! "security/nss"
+                         ;;
+                         ;; TODO: Use more system media libraries.  See:
+                         ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
+                         ;;   * libtheora: esr60 wants v1.2, not yet released.
+                         ;;   * soundtouch: avoiding the bundled library would
+                         ;;     result in some loss of functionality.  There's
+                         ;;     also an issue with exception handling
+                         ;;     configuration.  It seems that this is needed in
+                         ;;     some moz.build:
+                         ;;       DEFINES['ST_NO_EXCEPTION_HANDLING'] = 1
+                         ;;   * libopus
+                         ;;   * speex
+                         ;;
+                         "modules/freetype2"
+                         "modules/zlib"
+                         "modules/libbz2"
+                         "ipc/chromium/src/third_party/libevent"
+                         "media/libjpeg"
+                         "media/libvpx"
+                         "media/libogg"
+                         "media/libvorbis"
+                         ;; "media/libtheora" ; wants theora-1.2, not yet released
+                         "media/libtremor"
+                         "gfx/harfbuzz"
+                         "gfx/graphite2"
+                         "js/src/ctypes/libffi"
+                         "db/sqlite3"))
+             #t))
+         (add-after 'remove-bundled-libraries 'link-libxul-with-libraries
+           (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.
+             (substitute* "toolkit/library/moz.build"
+               (("^# This library needs to be last" all)
+                (string-append "OS_LIBS += [
     'GL', 'gnome-2', 'canberra', 'Xss', 'cups', 'gssapi_krb5',
     'avcodec', 'avutil', 'pulse' ]\n\n"
-                              all)))
-            #t))
+                               all)))
+             #t))
          (replace 'bootstrap
            (lambda _
-             (invoke "sh" "-c" "autoconf old-configure.in > old-configure")))
+             (invoke "sh" "-c" "autoconf old-configure.in > old-configure")
+             ;; 'configure' must be newer than 'old-configure.in', or else the
+             ;; build system will raise an alarm and abort.
+             (invoke "touch" "configure")))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda _
              (use-modules (guix build cargo-utils))
@@ -866,31 +872,31 @@ from forcing GEXP-PROMISE."
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-append gcc "/include/c++" ":"
                                       gcc "/include/c++/" build ":"
-                                      (getenv "CPLUS_INCLUDE_PATH"))))))
-         (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)
-              (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
-              (setenv "CC" "gcc")  ; apparently needed when Stylo is enabled
-              (mkdir "../build")
-              (chdir "../build")
-              (format #t "build directory: ~s~%" (getcwd))
-              (format #t "configure flags: ~s~%" flags)
-              (apply invoke bash
-                     (string-append srcdir "/configure")
-                     flags))))
+                                      (getenv "CPLUS_INCLUDE_PATH"))))
+             #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)
+               (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
+               (setenv "CC" "gcc")  ; apparently needed when Stylo is enabled
+               (mkdir "../build")
+               (chdir "../build")
+               (format #t "build directory: ~s~%" (getcwd))
+               (format #t "configure flags: ~s~%" flags)
+               (apply invoke bash
+                      (string-append srcdir "/configure")
+                      flags))))
          (add-before 'configure 'install-desktop-entry
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the '.desktop' file.