--- /dev/null
+#!/bin/sh
+
+#
+# Run Mozilla Firefox (bin) on Wayland
+#
+export MOZ_ENABLE_WAYLAND=1
+exec @PREFIX@/bin/firefox-bin "$@"
--- /dev/null
+#!/bin/sh
+
+#
+# Run Mozilla Firefox (bin) on X11
+#
+export MOZ_DISABLE_WAYLAND=1
+exec @PREFIX@/bin/firefox-bin "$@"
--- /dev/null
+#!/bin/bash
+
+##
+## Usage:
+##
+## $ firefox-bin
+##
+## This script is meant to run Mozilla Firefox in Gentoo.
+
+cmdname=$(basename "$0")
+
+##
+## Variables
+##
+MOZ_ARCH=$(uname -m)
+case ${MOZ_ARCH} in
+ x86_64|s390x|sparc64)
+ MOZ_LIB_DIR="@PREFIX@/lib64"
+ SECONDARY_LIB_DIR="@PREFIX@/lib"
+ ;;
+ *)
+ MOZ_LIB_DIR="@PREFIX@/lib"
+ SECONDARY_LIB_DIR="@PREFIX@/lib64"
+ ;;
+esac
+
+MOZ_FIREFOX_FILE="firefox-bin"
+MOZILLA_FIVE_HOME="@MOZ_FIVE_HOME@"
+MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}"
+APULSELIB_DIR="@APULSELIB_DIR@"
+DESKTOP_FILE="firefox-bin"
+
+##
+## Enable Wayland backend?
+##
+if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then
+ if [[ -n "$WAYLAND_DISPLAY" ]]; then
+ DESKTOP_FILE="firefox-bin-wayland"
+ export MOZ_ENABLE_WAYLAND=1
+ fi
+elif [[ -n ${MOZ_DISABLE_WAYLAND} ]]; then
+ DESKTOP_FILE="firefox-bin-x11"
+fi
+
+##
+## Use D-Bus remote exclusively when there's Wayland display.
+##
+if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+ export MOZ_DBUS_REMOTE=1
+fi
+
+##
+## Make sure that we set the plugin path
+##
+MOZ_PLUGIN_DIR="plugins"
+
+if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then
+ MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+else
+ MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then
+ MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+export MOZ_PLUGIN_PATH
+
+##
+## Set MOZ_APP_LAUNCHER for gnome-session
+##
+export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}"
+
+##
+## Disable the GNOME crash dialog, Moz has it's own
+##
+if [[ "$XDG_CURRENT_DESKTOP" == "GNOME" ]]; then
+ GNOME_DISABLE_CRASH_DIALOG=1
+ export GNOME_DISABLE_CRASH_DIALOG
+fi
+
+# Don't throw "old profile" dialog box.
+export MOZ_ALLOW_DOWNGRADE=1
+
+##
+## Set special variables for -bin
+export LD_LIBRARY_PATH="${APULSELIB_DIR:${APULSELIB_DIR}:}${MOZILLA_FIVE_HOME}"
+export GTK_PATH="${MOZ_LIB_DIR}/gtk-3.0"
+
+##
+## Route to the correct .desktop file to get proper
+## names and contect menus
+##
+if [[ $@ != *"--name "* ]]; then
+ set -- "--name ${DESKTOP_FILE}" "$@"
+fi
+
+# Run the browser
+exec ${MOZ_PROGRAM} $@
KEYWORDS="-* amd64 x86"
SLOT="0"
LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
-IUSE="+alsa +ffmpeg +pulseaudio selinux startup-notification"
+IUSE="+alsa +ffmpeg +pulseaudio selinux startup-notification wayland"
DEPEND="app-arch/unzip
alsa? (
}
src_install() {
- declare MOZILLA_FIVE_HOME=/opt/${MOZ_PN}
+ local MOZILLA_FIVE_HOME=/opt/${MOZ_PN}
+
+ # Install firefox in /opt
+ dodir ${MOZILLA_FIVE_HOME%/*}
+ mv "${S}" "${ED%/}"${MOZILLA_FIVE_HOME} || die
+ cd "${WORKDIR}" || die
+
+ # Install language packs
+ MOZEXTENSION_TARGET="distribution/extensions" \
+ MOZ_INSTALL_L10N_XPIFILE="1" \
+ mozlinguas_src_install
+
+ # Disable built-in auto-update because we update firefox-bin through package manager
+ insinto ${MOZILLA_FIVE_HOME}/distribution/
+ newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
+
+ # Fix prefs that make no sense for a system-wide install
+ insinto ${MOZILLA_FIVE_HOME}/defaults/pref/
+ doins "${FILESDIR}"/local-settings.js
+ insinto ${MOZILLA_FIVE_HOME}
+ newins "${FILESDIR}"/all-gentoo-3.js all-gentoo.js
local size sizes icon_path icon name
sizes="16 32 48 128"
- icon_path="${S}/browser/chrome/icons/default"
+ icon_path="${MOZILLA_FIVE_HOME}/browser/chrome/icons/default"
icon="${PN}"
- name="Mozilla Firefox"
+ name="Mozilla Firefox (bin)"
+
+ local apulselib=
+ if use alsa && ! use pulseaudio; then
+ apulselib="${EPREFIX%/}/usr/$(get_libdir)/apulse"
+ patchelf --set-rpath "${apulselib}" "${ED%/}"${MOZILLA_FIVE_HOME}/libxul.so || die
+ fi
# Install icons and .desktop for menu entry
- for size in ${sizes}; do
+ for size in ${sizes} ; do
insinto "/usr/share/icons/hicolor/${size}x${size}/apps"
newins "${icon_path}/default${size}.png" "${icon}.png"
done
# Install a 48x48 icon into /usr/share/pixmaps for legacy DEs
- newicon "${S}"/browser/chrome/icons/default/default48.png ${PN}.png
- newmenu "${FILESDIR}/${PN}-r1.desktop" "${PN}.desktop"
+ newicon ${MOZILLA_FIVE_HOME}/browser/chrome/icons/default/default48.png ${PN}.png
# Add StartupNotify=true bug 237317
local startup_notify="false"
startup_notify="true"
fi
- sed -i \
- -e "s:@NAME@:${name} (bin):" \
- -e "s:@EXEC@:firefox-bin:" \
- -e "s:@ICON@:${icon}:" \
- -e "s:@STARTUP_NOTIFY@:${startup_notify}:" \
- "${ED%/}/usr/share/applications/${PN}.desktop" || die
-
- # Install firefox in /opt
- dodir ${MOZILLA_FIVE_HOME%/*}
- mv "${S}" "${ED}"${MOZILLA_FIVE_HOME} || die
-
- # Disable built-in auto-update because we update firefox-bin through package manager
- insinto ${MOZILLA_FIVE_HOME}/distribution/
- newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
-
- # Fix prefs that make no sense for a system-wide install
- insinto ${MOZILLA_FIVE_HOME}/defaults/pref/
- doins "${FILESDIR}"/local-settings.js
- insinto ${MOZILLA_FIVE_HOME}
- newins "${FILESDIR}"/all-gentoo-2.js all-gentoo.js
-
- # Install language packs
- MOZEXTENSION_TARGET="distribution/extensions" \
- MOZ_INSTALL_L10N_XPIFILE="1" \
- mozlinguas_src_install
-
- if use alsa && ! use pulseaudio; then
- local apulselib="/usr/$(get_libdir)/apulse"
- patchelf --set-rpath "${apulselib}" "${ED}"${MOZILLA_FIVE_HOME}/libxul.so || die
+ local display_protocols="auto X11" use_wayland="false"
+ if use wayland ; then
+ display_protocols+=" Wayland"
+ use_wayland="true"
fi
- # Create /usr/bin/firefox-bin
- dodir /usr/bin/
- local apulselib=$(usex pulseaudio "/usr/$(get_libdir)/apulse:" "")
- cat <<-EOF >"${ED}"usr/bin/${PN}
- #!/bin/sh
- unset LD_PRELOAD
- LD_LIBRARY_PATH="${apulselib}/opt/firefox/" \\
- GTK_PATH=/usr/$(get_libdir)/gtk-3.0/ \\
- exec /opt/${MOZ_PN}/${MOZ_PN} "\$@"
- EOF
- fperms 0755 /usr/bin/${PN}
+ local app_name desktop_filename display_protocol exec_command
+ for display_protocol in ${display_protocols} ; do
+ app_name="${name} on ${display_protocol}"
+ desktop_filename="${PN}-${display_protocol,,}.desktop"
+
+ case ${display_protocol} in
+ Wayland)
+ exec_command="${PN}-wayland --name ${PN}-wayland"
+ newbin "${FILESDIR}"/firefox-bin-wayland.sh ${PN}-wayland
+ ;;
+ X11)
+ exec_command="${PN}-x11 --name ${PN}-x11"
+ if use wayland ; then
+ # Only needed when there's actually a choice
+ newbin "${FILESDIR}"/firefox-bin-x11.sh ${PN}-x11
+ fi
+ ;;
+ *)
+ app_name="${name}"
+ desktop_filename="${PN}.desktop"
+ exec_command='firefox-bin'
+ ;;
+ esac
+
+ newmenu "${FILESDIR}/${PN}-r1.desktop" "${desktop_filename}"
+ sed -i \
+ -e "s:@NAME@:${app_name}:" \
+ -e "s:@EXEC@:${exec_command}:" \
+ -e "s:@ICON@:${icon}:" \
+ -e "s:@STARTUP_NOTIFY@:${startup_notify}:" \
+ "${ED%/}/usr/share/applications/${desktop_filename}" || die
+ done
+
+ rm -f "${ED%/}"/usr/bin/firefox-bin || die
+ newbin "${FILESDIR}"/firefox-bin.sh firefox-bin
+
+ local wrapper
+ for wrapper in \
+ "${ED%/}"/usr/bin/firefox-bin \
+ "${ED%/}"/usr/bin/firefox-bin-x11 \
+ "${ED%/}"/usr/bin/firefox-bin-wayland \
+ ; do
+ [[ ! -f "${wrapper}" ]] && continue
+
+ sed -i \
+ -e "s:@PREFIX@:${EPREFIX%/}/usr:" \
+ -e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \
+ -e "s:@APULSELIB_DIR@:${apulselib}:" \
+ -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+ "${wrapper}" || die
+ done
# revdep-rebuild entry
insinto /etc/revdep-rebuild
share_plugins_dir
# Required in order to use plugins and even run firefox on hardened.
- pax-mark mr "${ED}"${MOZILLA_FIVE_HOME}/{firefox,firefox-bin,plugin-container}
+ pax-mark mr "${ED%/}"${MOZILLA_FIVE_HOME}/{firefox,firefox-bin,plugin-container}
}
pkg_postinst() {
KEYWORDS="-* amd64 x86"
SLOT="0"
LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
-IUSE="+alsa +ffmpeg +pulseaudio selinux startup-notification"
+IUSE="+alsa +ffmpeg +pulseaudio selinux startup-notification wayland"
DEPEND="app-arch/unzip
alsa? (
}
src_install() {
- declare MOZILLA_FIVE_HOME=/opt/${MOZ_PN}
+ local MOZILLA_FIVE_HOME=/opt/${MOZ_PN}
+
+ # Install firefox in /opt
+ dodir ${MOZILLA_FIVE_HOME%/*}
+ mv "${S}" "${ED%/}"${MOZILLA_FIVE_HOME} || die
+ cd "${WORKDIR}" || die
+
+ # Install language packs
+ MOZEXTENSION_TARGET="distribution/extensions" \
+ MOZ_INSTALL_L10N_XPIFILE="1" \
+ mozlinguas_src_install
+
+ # Disable built-in auto-update because we update firefox-bin through package manager
+ insinto ${MOZILLA_FIVE_HOME}/distribution/
+ newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
+
+ # Fix prefs that make no sense for a system-wide install
+ insinto ${MOZILLA_FIVE_HOME}/defaults/pref/
+ doins "${FILESDIR}"/local-settings.js
+ insinto ${MOZILLA_FIVE_HOME}
+ newins "${FILESDIR}"/all-gentoo-3.js all-gentoo.js
local size sizes icon_path icon name
sizes="16 32 48 128"
- icon_path="${S}/browser/chrome/icons/default"
+ icon_path="${MOZILLA_FIVE_HOME}/browser/chrome/icons/default"
icon="${PN}"
- name="Mozilla Firefox"
+ name="Mozilla Firefox (bin)"
+
+ local apulselib=
+ if use alsa && ! use pulseaudio; then
+ apulselib="${EPREFIX%/}/usr/$(get_libdir)/apulse"
+ patchelf --set-rpath "${apulselib}" "${ED%/}"${MOZILLA_FIVE_HOME}/libxul.so || die
+ fi
# Install icons and .desktop for menu entry
- for size in ${sizes}; do
+ for size in ${sizes} ; do
insinto "/usr/share/icons/hicolor/${size}x${size}/apps"
newins "${icon_path}/default${size}.png" "${icon}.png"
done
# Install a 48x48 icon into /usr/share/pixmaps for legacy DEs
- newicon "${S}"/browser/chrome/icons/default/default48.png ${PN}.png
- newmenu "${FILESDIR}/${PN}-r1.desktop" "${PN}.desktop"
+ newicon ${MOZILLA_FIVE_HOME}/browser/chrome/icons/default/default48.png ${PN}.png
# Add StartupNotify=true bug 237317
local startup_notify="false"
startup_notify="true"
fi
- sed -i \
- -e "s:@NAME@:${name} (bin):" \
- -e "s:@EXEC@:firefox-bin:" \
- -e "s:@ICON@:${icon}:" \
- -e "s:@STARTUP_NOTIFY@:${startup_notify}:" \
- "${ED%/}/usr/share/applications/${PN}.desktop" || die
-
- # Install firefox in /opt
- dodir ${MOZILLA_FIVE_HOME%/*}
- mv "${S}" "${ED}"${MOZILLA_FIVE_HOME} || die
-
- # Disable built-in auto-update because we update firefox-bin through package manager
- insinto ${MOZILLA_FIVE_HOME}/distribution/
- newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
-
- # Fix prefs that make no sense for a system-wide install
- insinto ${MOZILLA_FIVE_HOME}/defaults/pref/
- doins "${FILESDIR}"/local-settings.js
- insinto ${MOZILLA_FIVE_HOME}
- newins "${FILESDIR}"/all-gentoo-3.js all-gentoo.js
-
- # Install language packs
- MOZEXTENSION_TARGET="distribution/extensions" \
- MOZ_INSTALL_L10N_XPIFILE="1" \
- mozlinguas_src_install
-
- if use alsa && ! use pulseaudio; then
- local apulselib="/usr/$(get_libdir)/apulse"
- patchelf --set-rpath "${apulselib}" "${ED}"${MOZILLA_FIVE_HOME}/libxul.so || die
+ local display_protocols="auto X11" use_wayland="false"
+ if use wayland ; then
+ display_protocols+=" Wayland"
+ use_wayland="true"
fi
- # Create /usr/bin/firefox-bin
- dodir /usr/bin/
- local apulselib=$(usex pulseaudio "" $(usex alsa "/usr/$(get_libdir)/apulse:" ""))
- cat <<-EOF >"${ED}"usr/bin/${PN}
- #!/bin/sh
- unset LD_PRELOAD
- LD_LIBRARY_PATH="${apulselib}/opt/firefox/" \\
- GTK_PATH=/usr/$(get_libdir)/gtk-3.0/ \\
- exec /opt/${MOZ_PN}/${MOZ_PN} "\$@"
- EOF
- fperms 0755 /usr/bin/${PN}
+ local app_name desktop_filename display_protocol exec_command
+ for display_protocol in ${display_protocols} ; do
+ app_name="${name} on ${display_protocol}"
+ desktop_filename="${PN}-${display_protocol,,}.desktop"
+
+ case ${display_protocol} in
+ Wayland)
+ exec_command="${PN}-wayland --name ${PN}-wayland"
+ newbin "${FILESDIR}"/firefox-bin-wayland.sh ${PN}-wayland
+ ;;
+ X11)
+ exec_command="${PN}-x11 --name ${PN}-x11"
+ if use wayland ; then
+ # Only needed when there's actually a choice
+ newbin "${FILESDIR}"/firefox-bin-x11.sh ${PN}-x11
+ fi
+ ;;
+ *)
+ app_name="${name}"
+ desktop_filename="${PN}.desktop"
+ exec_command='firefox-bin'
+ ;;
+ esac
+
+ newmenu "${FILESDIR}/${PN}-r1.desktop" "${desktop_filename}"
+ sed -i \
+ -e "s:@NAME@:${app_name}:" \
+ -e "s:@EXEC@:${exec_command}:" \
+ -e "s:@ICON@:${icon}:" \
+ -e "s:@STARTUP_NOTIFY@:${startup_notify}:" \
+ "${ED%/}/usr/share/applications/${desktop_filename}" || die
+ done
+
+ rm -f "${ED%/}"/usr/bin/firefox-bin || die
+ newbin "${FILESDIR}"/firefox-bin.sh firefox-bin
+
+ local wrapper
+ for wrapper in \
+ "${ED%/}"/usr/bin/firefox-bin \
+ "${ED%/}"/usr/bin/firefox-bin-x11 \
+ "${ED%/}"/usr/bin/firefox-bin-wayland \
+ ; do
+ [[ ! -f "${wrapper}" ]] && continue
+
+ sed -i \
+ -e "s:@PREFIX@:${EPREFIX%/}/usr:" \
+ -e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \
+ -e "s:@APULSELIB_DIR@:${apulselib}:" \
+ -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+ "${wrapper}" || die
+ done
# revdep-rebuild entry
insinto /etc/revdep-rebuild
share_plugins_dir
# Required in order to use plugins and even run firefox on hardened.
- pax-mark mr "${ED}"${MOZILLA_FIVE_HOME}/{firefox,firefox-bin,plugin-container}
+ pax-mark mr "${ED%/}"${MOZILLA_FIVE_HOME}/{firefox,firefox-bin,plugin-container}
}
pkg_postinst() {