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