From 89c0629198b10264c07de88f2f678af5292d4fbf Mon Sep 17 00:00:00 2001
From: swedebugia
Date: Sat, 23 Feb 2019 05:34:45 +0100
Subject: [PATCH 1/2] WIP gnu: Add New Moon.
---
gnu/packages/web-browsers.scm | 400 +++++++++++++++++++++++++++++++++-
1 file changed, 395 insertions(+), 5 deletions(-)
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index a19a0dc7c..105fe2839 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -4,10 +4,12 @@
;;; Copyright © 2015, 2016 Efraim Flashner
;;; Copyright © 2016 Kei Kebreau
;;; Copyright © 2017 Eric Bavier
+;;; Copyright © 2017, 2018 Nils Gillmann
;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice
;;; Copyright © 2018 Rutger Helling
;;; Copyright © 2018 Timo Eisenmann
;;; Copyright © 2018 Pierre Neidhardt
+;;; Copyright © 2019 Pierre Neidhardt
;;;
;;; This file is part of GNU Guix.
;;;
@@ -28,30 +30,52 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (gnu packages)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages assembly)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cups)
+ #:use-module (gnu packages databases)
#:use-module (gnu packages documentation)
#:use-module (gnu packages fltk)
#:use-module (gnu packages fontutils)
- #:use-module (gnu packages gtk)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages gnome)
#:use-module (gnu packages gnupg)
+ #:use-module (gnu packages gnuzilla)
+ #:use-module (gnu packages gstreamer)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages icu4c)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages kerberos)
+ #:use-module (gnu packages libcanberra)
#:use-module (gnu packages libevent)
+ #:use-module (gnu packages libffi)
#:use-module (gnu packages libidn)
+ #:use-module (gnu packages libreoffice)
+ #:use-module (gnu packages linux)
#:use-module (gnu packages lisp)
#:use-module (gnu packages lua)
- #:use-module (gnu packages gnome)
+ #:use-module (gnu packages m4)
#:use-module (gnu packages ncurses)
#: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 python-web)
+; #:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
- #:use-module (gnu packages image)
+ #:use-module (gnu packages shells)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages video)
#:use-module (gnu packages webkit)
+ #:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
- #:use-module (gnu packages gcc)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
@@ -473,3 +497,369 @@ features for productive professionals.")
("unix-opts" ,sbcl-unix-opts)
("trivial-clipboard" ,sbcl-trivial-clipboard)))
(synopsis "Infinitely extensible web-browser (with Lisp development files)")))
+
+(define-public newmoon
+ (package
+ (name "newmoon")
+ (version "28.4.0")
+ (source
+ (origin
+ ;; Only generated github tarball available.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MoonchildProductions/UXP")
+ (commit (string-append "PM" version "_Release"))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0wnn15y7qpmz1b31rrmdlf3w4qz6f6qqrl8f1lgafx8czqgg9lwx"))))
+ (build-system gnu-build-system)
+ (inputs
+ `(
+ ;; ("gst-plugins-base" ,gst-plugins-base)
+ ;; ("gstreamer" ,gstreamer)
+ ;; ("mozjs" ,mozjs)
+ ;; ("nss" ,nss)
+ ;; ("openssl" ,openssl)
+ ("alsa-lib" ,alsa-lib)
+ ("bzip2" ,bzip2)
+ ("cairo" ,cairo)
+ ("cups" ,cups)
+ ("dbus" ,dbus)
+ ("dbus-glib" ,dbus-glib)
+ ("ffmpeg" ,ffmpeg)
+ ("freetype" ,freetype)
+ ("glib" ,glib)
+ ("gobject-introspection" ,gobject-introspection)
+ ("gtk+-2" ,gtk+-2)
+ ("hunspell" ,hunspell)
+ ("inetutils" ,inetutils) ; Native-input?
+ ("libcanberra" ,libcanberra)
+ ("libevent" ,libevent)
+ ("libffi" ,libffi)
+ ("libgnome" ,libgnome)
+ ("libidl" ,libidl)
+ ("libjpeg-turbo" ,libjpeg-turbo)
+ ("libnotify" ,libnotify)
+ ("libpng-apng" ,libpng-apng)
+ ("libvpx" ,libvpx)
+ ("libwebp" ,libwebp)
+ ("libx11" ,libx11)
+ ("libxcomposite" ,libxcomposite)
+ ("libxext" ,libxext)
+ ("libxft" ,libxft)
+ ("libxi" ,libxi)
+ ("libxrender" ,libxrender)
+ ("libxscrnsaver" ,libxscrnsaver)
+ ("libxt" ,libxt)
+ ("libxt" ,libxt)
+ ("mesa" ,mesa)
+ ("mit-krb5" ,mit-krb5)
+ ("nspr" ,nspr)
+ ("pixman" ,pixman)
+ ("pulseaudio" ,pulseaudio)
+ ("python-2" ,python-2)
+ ("python-ply" ,python-ply)
+ ("sqlite" ,sqlite-3.26.0)
+ ("startup-notification" ,startup-notification)
+ ("tcsh" ,tcsh)
+ ("unzip" ,unzip)
+ ("xextproto" ,xextproto)
+ ("yasm" ,yasm)
+ ("zip" ,zip)))
+ (native-inputs
+ `(("autoconf-2.13" ,autoconf-2.13)
+ ("fontconfig" ,fontconfig)
+ ("perl" ,perl)
+ ("pkg-config" ,pkg-config)
+ ("m4" ,m4)
+ ("which" ,which)
+ ("bash" ,bash)))
+ (arguments
+ `(#:modules ((ice-9 ftw)
+ (ice-9 rdelim)
+ (ice-9 match)
+ ,@%gnu-build-system-modules)
+ ;; #:validate-runpath? #f
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ ;; According to
+ ;; the only way to set configure options is in the .mozconfig file
+ ;; (or the file set by variable MOZCONFIG). If you try to use
+ ;; our configure-flags, the configuration will break in unexpected
+ ;; ways. This includes breaking the mach build system detection
+ ;; of --host, --build, and --arch, and carrying flags recursively
+ ;; on to parts used later in the build system.
+ ;; The palemoon.org link describes an MS Windows build, but at
+ ;; least for Gentoo it is done comparable:
+ ;; .
+ (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)
+ ,@configure-flags))
+ (mozconfig (string-append (getcwd) "/.mozconfig")))
+ (setenv "SHELL" bash)
+ (setenv "AUTOCONF"
+ (string-append (assoc-ref %build-inputs
+ "autoconf-2.13")
+ "/bin/autoconf"))
+ (setenv "BUILD_OBJ_DIR" (string-append (getcwd) "/o"))
+ (setenv "CONFIG_SHELL" bash)
+ (setenv "QA_CONFIGURE_OPTIONS" ".*")
+ (setenv "MOZBUILD_STATE_PATH"
+ (string-append (getcwd) "/mach_state"))
+ (setenv "MOZCONFIG"
+ (string-append (getcwd) "/.mozconfig"))
+ (setenv "MOZ_NOSPAM" "1")
+ (mkdir-p (string-append (getcwd) "/builddir"))
+ (with-output-to-file mozconfig
+ (lambda ()
+ ;; These procedures help us create the .mozbuild-file
+ (define (enable option)
+ (string-append "ac_add_options --enable-" option "\n"))
+ (define (disable option)
+ (string-append "ac_add_options --disable-" option "\n"))
+ (define (var env)
+ (string-append "mk_add_options " env "\n"))
+ (define (with option)
+ (string-append "ac_add_options --with-" option "\n"))
+ ;; The full list of options can be obtained by running:
+ ;; $ ./configure --help
+ (display
+ (string-append
+ ;; Todo: dbus, safe-browsing,
+ (enable "application=palemoon")
+ (enable "chrome-format=omni")
+ (enable "content-sandbox")
+ (enable "default-toolkit=\"cairo-gtk2\"")
+ (enable "devtools")
+ (enable "export-js")
+ (enable "ffmpeg")
+ (enable "jemalloc")
+ (enable "pulseaudio")
+ (enable "sandbox")
+ (enable "skia")
+ (enable "startup-notification")
+ (enable "strip")
+ (enable "system-cairo")
+ (enable "system-ffi")
+ (enable "system-hunspell")
+ (enable "system-pixman")
+ (enable "system-sqlite") ;Needs >= sqlite-3.26.0
+
+ (disable "accessibility") ;There is no such option?
+ (disable "alsa")
+ ;;(disable "codesighs")
+ (disable "debug-symbols")
+ (disable "debug")
+ (disable "gamepad")
+ (disable "install-strip")
+ (disable "necko-wifi")
+ (disable "official-branding") ; Trademarks apply for official branding
+ (disable "optimize")
+ (disable "parental-controls") ;Yes? No?
+ (disable "tests") ; TODO fix tests
+ (disable "updater")
+ (disable "valgrind")
+
+ (with "pthreads")
+ (with "system-bz2")
+ (with "system-icu")
+ (with "system-jpeg")
+ (with "system-libevent")
+ (with "system-libvpx")
+ (with "system-nspr")
+ (with "system-png")
+ (with "system-zlib")
+
+ (var "AUTOCONF=\"autoconf\"")
+ (var (string-append "MOZ_OBJDIR=" (getenv "BUILD_OBJ_DIR"))) ;new
+ (var "PYTHON=\"python2\"")
+ "ac_add_options --prefix=" out "\n"
+
+ ;;"ac_add_options --disable-installer\n" ; no such option.
+ ;;"ac_add_options --disable-logging\n"
+ ;;"ac_add_options --disable-websms-backend\n"
+ ;;"ac_add_options --with-intl-api\n"
+ ;;"ac_add_options --with-system-ply\n"
+ ;;"ac_add_options --with-system-webp\n"
+ ))))
+ (display "mach configure, this is expected to \"crash\"\n")
+ (zero? (system* "./mach" "configure"))
+ (display "mach, and another round.\n")
+ (zero? (system* "./mach")))
+ #t))
+ (add-after 'patch-source-shebangs 'setenvs
+ (lambda _
+ (substitute* (list "build/autoconf/config.guess"
+ "client.mk"
+ "js/src/configure.in"
+ "intl/icu/source/configure")
+ (("/bin/sh") (which "sh")))
+ #t))
+ (add-before 'build 'patch-clientmk
+ (lambda _
+ (substitute* "client.mk"
+ (("/bin/sh") (which "sh")))
+ #t))
+ (replace 'build
+ (lambda _
+ (chdir "build")
+ (display "mach build, the real build now\n")
+ (system* "../mach" "build")
+ #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.
+ (substitute* "toolkit/library/moz.build"
+ (("^# This needs to be last")
+ "OS_LIBS += [
+ 'GL', 'gnome-2', 'canberra', 'Xss', 'cups', 'gssapi_krb5',
+ 'gstreamer-1.0', 'gstapp-1.0', 'gstvideo-1.0', 'png' ]\n\n"))
+ #t))
+ (add-after 'unpack 'privacy-patch-branding
+ (lambda _
+ (substitute* "application/palemoon/branding/unofficial/pref/palemoon-branding.js"
+ (("http://www.palemoon.org/unofficial.shtml")
+ "https://gnu.org/s/guix"))
+ (substitute* "application/palemoon/branding/shared/pref/preferences.inc"
+ (("http://www.palemoon.org/firstrun.shtml")
+ "https://gnu.org"))
+ (substitute* "application/palemoon/branding/shared/locales/browserconfig.properties"
+ (("http://start.palemoon.org/")
+ "https://gnu.org/s/guix"))
+ #t))
+ (replace 'install
+ (lambda* (#:key name outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (lib (string-append out "/lib"))
+ (palemoon (string-append
+ out "/lib/palemoon/palemoon"))
+ ;; Use one objectdirectory for all architectures.
+ (objdir "o")
+ ;; (prefsfile (string-append objdir "/dist/bin/browser"
+ ;; "/defaults/profile"
+ ;; "/prefs.js"))
+ (tarfile (string-append objdir "/dist/palemoon-"
+ ,version ".linux-x86_64"
+ ".tar.bz2")))
+ ;; We skip this for now.
+ ;; (substitute* prefsfile
+ ;; (("# Mozilla User Preferences")
+ ;; "# Mozilla User Preferences\n
+ ;; pref(\"app.update.enabled\", false);\n
+ ;; pref(\"browser.backspace_action\", 0);\n
+ ;; pref(\"browser.ctrlTab.previews\", false);\n
+ ;; pref(\"intl.locale.matchOS\", true);\n
+ ;; pref(\"general.useragent.locale\", \"chrome://global/locale/intl.properties\");\n
+ ;; pref(\"browser.display.use_system_colors\", true);"))
+ ;; Create the package, unpack it, manually install
+ ;; the files from there to not miss anything.
+ (zero? (system* "../mach" "package"))
+ (display (getcwd))
+ (chdir (string-append "../" objdir "/dist"))
+ (zero? (system* "tar" "xjpf"
+ "palemoon-" ,version ".linux-x86_64.tar.bz2"))
+ (mkdir-p (string-append out "/lib/palemoon"))
+ (copy-recursively "palemoon"
+ (string-append out "/lib/palemoon"))
+ (mkdir-p bin)
+ (symlink (string-append out "/lib/palemoon/palemoon")
+ (string-append bin "/newmoon"))
+ ;; Avoid duplicate binaries.
+ ;; https://bugzilla.mozilla.org/show_bug.cgi?id=658850 for
+ (delete-file (string-append out "/lib/palemoon/palemoon-bin")))))
+ ;; swap check and install phases and set paths to installed binaries
+ (add-before 'check 'set-path-for-check
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")))
+ #t))
+ (add-after 'install 'check
+ ;;(assoc-ref %standard-phases 'check))
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin/newmoon")))
+ (invoke bin "--version"))))
+ (delete 'check)
+ (delete 'bootstrap)
+ ;; (replace 'check
+ ;; (lambda* (#:key outputs #:allow-other-keys)
+ ;; (let* ((out (assoc-ref outputs "out"))
+ ;; (bin (string-append out "/bin/newmoon")))
+ ;; (invoke bin "--version"))))
+ (add-after 'install 'install-icons
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (display (getcwd))
+ (with-directory-excursion "../../browser/branding/unofficial"
+ (for-each
+ (lambda (file)
+ (let* ((size (string-filter char-numeric? file))
+ (icons (string-append out "/share/icons/hicolor/"
+ size "x" size "/apps")))
+ (mkdir-p icons)
+ (copy-file file (string-append icons "/newmoon.png"))))
+ '("default16.png" "default32.png" "default48.png"
+ "mozicon128.png"))))))
+ (add-after 'install 'install-desktop-file
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (apps (string-append out "/share/applications")))
+ (display (getcwd))
+ (with-directory-excursion "../../browser/branding/official"
+ (substitute* "palemoon.desktop"
+ (("Pale Moon")
+ "New Moon")
+ (("Exec=palemoon -new-tab https://start.palemoon.org")
+ "Exec=newmoon -new-tab https://gnu.org/s/guix")
+ (("Exec=palemoon -new-window")
+ "Exec=newmoon -new-window")
+ (("Exec=palemoon -private-window")
+ "Exec=newmoon -private-window")
+ (("palemoon")
+ "newmoon"))
+ (install-file "palemoon.desktop"
+ (string-append apps
+ "/newmoon.desktop")))))))))
+
+ (home-page "https://www.palemoon.org/")
+ (synopsis "Web Browser compiled from Pale Moon sources")
+ (description
+ "New Moon is a web browser compiled from Pale Moon sourcecode. New Moon
+is an independent browser derived from Firefox.
+
+Among its features are:
address@hidden
address@hidden It's fast (much codebloat has been removed since the fork from Firefox).
address@hidden The developers adhere to defence-in-depth, increasing the security
+step-by-step.
address@hidden Builds upon the Unified XUL Platform
address@hidden Comes with the Goanna layout engine (forked from Gecko).
address@hidden Uses the pre-Australis Firefox user interface Continues add-on support
+for XUL, XPCOM, and NPAPI plugins.
address@hidden Supports extensions and themes exclusive to Pale Moon, such as Adblock
+Latitude.
address@hidden Defaults to DuckDuckGo as the search engine.
address@hidden Uses the IP-API service instead of Google's for geolocation.
address@hidden Fully customizable user interface.
address@hidden Newmoon is not a full featured (bloated) media player or recorder but
+does support the HTML5 video standard.
address@hidden itemize\n")
+ (properties '((upstream-name . "Pale-Moon")))
+ ;; The exception clause of the Palemoon license states that
+ ;; New Moon builds can be redistributed freely.
+ (license (list license:mpl2.0 ;and others, see toolkit/content/license.html
+ license:gpl2+
+ license:lgpl2.1))))
--
2.19.2