;; -*- fill-column: 120 -*- (define-module (battering packages palemoon) #:use-module (guix packages) #:use-module (guix utils) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix build-system mozilla) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages) #:use-module (gnu packages assembly) #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages crypto) #:use-module (gnu packages compression) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) #:use-module (gnu packages linux) #:use-module (gnu packages m4) #:use-module (gnu packages nss) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages sqlite) #:use-module (gnu packages tls) #:use-module (gnu packages video) #:use-module (gnu packages xorg)) (define* (make-palemoon #:key (with-gtk3? #f) (branding "official")) (package (name "palemoon") (version "33.4.0.1") (source (origin (method git-fetch) (uri (git-reference (url "https://repo.palemoon.org/MoonchildProductions/Pale-Moon.git") (commit (string-append version "_Release")) (recursive? #t))) (file-name (git-file-name name version)) (sha256 (base32 "16h25qfvirsan8rr7rk6b4hyvn7w1gb0y9wlsxjpzqac6kl2s98c")) (patches (parameterize ((%patch-path (map (lambda (directory) (string-append directory "/battering/packages/patches")) %load-path))) (search-patches "palemoon-vendor-basename.patch"))))) (build-system mozilla-build-system) (native-inputs (list autoconf libxcrypt m4 perl pkg-config python-2.7 tar unzip which yasm zip)) (inputs (list bash-minimal (if with-gtk3? gtk+ gtk+-2) glib dbus-glib libdbusmenu desktop-file-utils libaom libxt openssl sqlite alsa-lib pulseaudio ffmpeg mesa gconf)) (arguments (let* ((gtk-version (if with-gtk3? "gtk3" "gtk2")) (branding-dir (format #f "~a/branding/~a" name branding)) (distdir (format #f "obj-~a/dist" (string-replace-substring (or (%current-target-system) %host-type) "unknown" "pc"))) (tarball-dist (format #f "~a/~a-~a.~a-~a.tar.xz" distdir name version (string-join (reverse (string-split (or (%current-target-system) (%current-system)) #\-)) "-") gtk-version))) (list #:tests? #f #:configure-flags #~'(#$(string-append "--enable-application=" name) "--enable-appcompat-guid" "--enable-av1" #$(string-append "--enable-default-toolkit=cairo-" gtk-version) "--enable-devtools" "--enable-jemalloc" "--enable-jxl" "--enable-more-deterministic" "--enable-necko-wifi" "--enable-official-branding" ;; Official branding. #$(string-append "--with-branding=" branding-dir) "--enable-optimize=\"-O2 -w\"" "--enable-strip" "--enable-system-ffi" "--enable-system-pixman" "--disable-debug" "--disable-debug-symbols" "--disable-debug-js-modules" "--disable-elf-hack" "--disable-gamepad" "--disable-gold" "--disable-tests" "--disable-updater" "--disable-webrtc" ;; "--with-gl-provider=EGL" "--with-pthreads" "--with-x" ;; Avoid bundled libraries. ;; UNBUNDLE-ME! "--enable-system-sqlite" ;; UNBUNDLE-ME! "--with-system-bz2" ;; UNBUNDLE-ME! "--with-system-graphite2" ;; UNBUNDLE-ME! "--with-system-harfbuzz" ;; UNBUNDLE-ME! "--with-system-libevent" ;; UNBUNDLE-ME! "--with-system-libvpx" ;; UNBUNDLE-ME! "--with-system-nss" ; pending upgrade of 'nss' to 3.90 ;; UNBUNDLE-ME! "--with-system-ogg" ;; UNBUNDLE-ME! "--with-system-theora" ; wants theora-1.2, not yet released ;; UNBUNDLE-ME! "--with-system-vorbis" ;; UNBUNDLE-ME! "--with-system-jpeg" ;must be libjpeg-turbo ;; UNBUNDLE-ME! "--with-system-zlib" ;; UNBUNDLE-ME! "--with-system-icu" ;; UNBUNDLE-ME! "--with-system-png" ;must be libpng-apng #$(if with-gtk3? ;; NPAPI requires gtk2. It's for Adobe Flash and Silverlight. "--disable-npapi" "--enable-npapi") #$(if with-gtk3? ;; TODO: find a way to link atk_bridge_adaptor_init "--disable-accessibility" "--enable-accessibility")) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'fix-prefs (lambda* (#:key inputs #:allow-other-keys) (let ((port (open-file #$(format #f "~a/app/profile/~a.js" name name) "a"))) (for-each (lambda (pref) (let ((key (car pref)) (value (if (boolean? (cadr pref)) (if (cadr pref) 'true 'false) (cadr pref)))) (format port "~%pref(~s, ~s);~%" key value) (format #t "fix-prefs: setting value of ~s to ~s~%" key value))) '(("browser.backspace_action" 0) ("extensions.blocklist.enabled" #f) ;; Feudal blocking ("browser.shell.checkDefaultBrowser" #f) ("security.sandbox.content.read_path_whitelist" (%store-directory)))) (close-port port)))) (add-after 'fix-prefs 'remove-spyware-home-page (lambda _ (substitute* "palemoon/branding/shared/locales/browserconfig.properties" ;; Switch the page from the properties to something local (("(https?://)start.palemoon.org(/?)" all https slash) "about:home")) (substitute* "palemoon/branding/official/palemoon.desktop" ;; New tab should open the user's specified "New Tab" page, not the palemoon start page. (("^Exec=palemoon -new-tab .*") "Exec=palemoon -new-tab")) (substitute* '("palemoon/branding/shared/pref/preferences.inc" "palemoon/branding/unofficial/pref/palemoon-branding.js") ;; Remove the startup.homepage_welcome_url preference (("^pref\\(\"startup\\.homepage_welcome_url\",\".*\"\\);\n$") "")))) (add-after 'remove-spyware-home-page 'patch-configure-in (lambda* (#:key inputs #:allow-other-keys) (substitute* "./configure.in" ;; Doesn't get patched automatically. Why ? This eludes me. (("^#!/bin/sh") (format #f "#!~a" (search-input-file inputs "bin/sh")))))) (add-before 'configure 'setenv (lambda* (#:key inputs #:allow-other-keys) (setenv "LDFLAGS" (string-append "-Wl,-rpath=" #$output "/lib/" #$name)) (setenv "SHELL" (search-input-file inputs "/bin/bash")) (setenv "CONFIG_SHELL" (search-input-file inputs "/bin/bash")) (setenv "MOZILLA_OFFICIAL" "1") ;; Official branding (setenv "MOZ_PKG_SPECIAL" #$gtk-version) (setenv "MOZ_NOSPAM" "1"))) (add-before 'configure 'mozconfig (lambda* (#:key configure-flags #:allow-other-keys) (call-with-output-file ".mozconfig" (lambda (p) (for-each (lambda (flag) (format p "ac_add_options ~a~%" flag)) configure-flags))))) (replace 'configure (lambda _ (invoke "./mach" "configure"))) (replace 'build (lambda* (#:key (make-flags '()) (parallel-build? #t) #:allow-other-keys) (apply invoke "./mach" "build" `(,(string-append "-j" (number->string (if parallel-build? (parallel-job-count) 1))) ,@make-flags)))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "./mach" "test")))) (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) (invoke "./mach" "package") (let ((tar (search-input-file inputs "/bin/tar")) (lib (string-append #$output "/lib")) (bin (string-append #$output "/bin"))) (mkdir-p lib) (mkdir-p bin) (invoke tar "xJpf" #$tarball-dist "-C" lib) (symlink (format #f "~a/~a/~a" lib #$name #$name) (format #f "~a/~a" bin #$name))))) (add-after 'install 'wrap-program (lambda* (#:key inputs #:allow-other-keys) (wrap-program (format #f "~a/lib/~a/~a" #$output #$name #$name) `("GDK_BACKEND" = ("x11")) `("MOZ_ENABLE_WAYLAND" = ("0"))))) (add-after 'install 'install-branding (lambda* (#:key outputs #:allow-other-keys) (install-file #$(format #f "~a/branding/official/~a.desktop" name name) (string-append #$output "/share/applications/")) (for-each (lambda (size) (let ((dir (format #f "~a/share/icons/hicolor/~ax~a/apps" #$output size size))) (mkdir-p dir) (copy-file (format #f "~a/default~a.png" #$branding-dir size) (in-vicinity dir (format #f "~a.png" #$name))))) '(16 32 48)) (let* ((dir (format #f "~a/share/icons/hicolor/128x128/apps" #$output))) (mkdir-p dir) (copy-file (format #f "~a/mozicon128.png" #$branding-dir) (in-vicinity dir (format #f "~a.png" #$name)))))))))) (home-page "https://palemoon.org") (synopsis "Independent browser derived from Firefox/Mozilla community code") (description "Pale Moon is an Open Source, Goanna-based web browser.") (license license:mpl2.0))) (define-public palemoon (make-palemoon #:with-gtk3? #f))