# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ # @ECLASS: mozilla-addon.eclass # @MAINTAINER: # Stefan Kuhn # @BLURB: Eclass for installing firefox addons. # @DESCRIPTION: # Install addons for firefox inherit mozextension multilib # @ECLASS-VARIABLE: MZA_TARGETS # @REQUIRED # @DEFAULT_UNSET # @DESCRIPTION: # Space separated list of target packages. Allowed items: # firefox, thunderbird, seamonkey, firefox-bin, thunderbird-bin, seamonkey-bin # # MZA_TARGETS=firefox firefox-bin # @ECLASS-VARIABLE: MZA_XPI_PATH # @DESCRIPTION: # PAth to unpacked xpi content for installation. Default is ${WORKDIR/${P}. : ${MZA_XPI_PATH:=${WORKDIR}/${P}} # This eclass supports all EAPIs EXPORT_FUNCTIONS src_unpack src_install # @FUNCTION: mozilla-addon_dosym # @DESCRIPTION: # creates a symlink to the global installation target mozilla-addon_dosym() { # 2 required arguments [[ ${#} -ne 2 ]] && die "$FUNCNAME takes exactly two arguments. Please specify the global-installation-path plus the full symlink to it." local installpath="${1}" local symlinkpath="${2}" # conversion from previous installations without symlink # portage does prevent replacing dir with a symlink if [[ -e "${symlinkpath}" ]] \ && ! [[ -h "${symlinkpath}" ]]; then addwrite "${symlinkpath}" || die 'addwrite failed' rm -rf "${symlinkpath}" || die 'rm failed' fi dosym "${installpath}" \ "${symlinkpath}" } # @FUNCTION: mozilla-addon_getemid # @DESCRIPTION: # Parses em:id from install.rdf file # Avoid using awk with this dummy parser function mozilla-addon_getemid() { # no arguments allowed [[ ${#} -ne 0 ]] && die "$FUNCNAME takes no arguments." [[ ! -r "${MZA_XPI_PATH}/install.rdf" ]] && die "$FUNCNAME cannot read file ${MZA_XPI_PATH}/install.rdf" local line local targetapp=0 local emid while read line; do # comment lines echo -n "${line}" | grep -q '^[[:space:]]*#' \ && continue echo -n "${line}" | grep -q '' \ && targetapp=1 if [[ "${targetapp}" -eq 0 ]] \ && echo -n "${line}" | grep -Eq '[^<]+'; then emid="$(echo -n "${line}" | sed -r 's#^.*([^<]+).*$#\1#')" break # other format, see install.rdf of www-client/exif_viewer elif [[ "${targetapp}" -eq 0 ]] \ && echo -n "${line}" | grep -Eq 'em:id="[^"]+"'; then emid="$(echo -n "${line}" | sed -r 's#^.*em:id="([^"]+)".*$#\1#')" break fi echo -n "${line}" | grep -q '' \ && targetapp=0 done < "${MZA_XPI_PATH}/install.rdf" [[ -n "${emid}" ]] || die "$FUNCNAME could not find em:id!" echo -n "${emid}" } # @FUNCTION: mozilla-addon_verifytarget # @DESCRIPTION: # Search for target package id in install.rdf. Warn if it's not found. mozilla-addon_verifytarget() { [[ ${#} -ne 1 ]] && die "$FUNCNAME takes exactly one argument. Please specify the target package" [[ ! -r "${MZA_XPI_PATH}/install.rdf" ]] && die "$FUNCNAME cannot read file ${MZA_XPI_PATH}/install.rdf" # check target in install.rdf case ${1} in firefox|firefox-bin) grep -q '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}' \ "${MZA_XPI_PATH}/install.rdf" \ || ewarn 'Firefox not found as target in install.rdf' ;; thunderbird|thunderbird-bin) grep -q '{3550f703-e582-4d05-9a08-453d09bdfdc6}' \ "${MZA_XPI_PATH}/install.rdf" \ || ewarn 'Thunderbird not found as target in install.rdf' ;; seamonkey|seamonkey-bin) grep -q '{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}' \ "${MZA_XPI_PATH}/install.rdf" \ || ewarn 'Seamonkey not found as target in install.rdf' ;; *) die "$FUNCNAME received unexptected target package ${1}" ;; esac return 0 } # @FUNCTION: mozilla-addon_src_unpack # @DESCRIPTION: # Default src_unpack function for firefox addons mozilla-addon_src_unpack() { xpi_unpack ${A} } # @FUNCTION: mozilla-addon_src_install # @DESCRIPTION: # Default install function for firefox addons mozilla-addon_src_install() { local emid local installpath local count=0 # sanity check, at least one of these targets must be set if ! has 'firefox' $MZA_TARGETS \ && ! has 'thunderbird' $MZA_TARGETS \ && ! has 'seamonkey' $MZA_TARGETS \ && ! has 'firefox-bin' $MZA_TARGETS \ && ! has 'thunderbird-bin' $MZA_TARGETS \ && ! has 'seamonkey-bin' $MZA_TARGETS; then die "At least one of these targets (firefox thunderbird seamonkey firefox-bin thunderbird-bin seamonkey-bin) must be set to use this eclass." fi emid="$(mozilla-addon_getemid)" \ || die "failed to determine extension id" installpath="/usr/$(get_libdir)/mozilla/extensions/${emid}" # install to global installation folder insinto "${installpath}" || die "insinto failed" doins -r "${MZA_XPI_PATH}"/* || die "failed to copy extension" # symlink each target # target: firefox if has 'firefox' $MZA_TARGETS; then mozilla-addon_verifytarget firefox mozilla-addon_dosym "${installpath}" \ "/usr/$(get_libdir)/firefox/browser/extensions/${emid}" count=$((count+1)) mozilla-addon_dosym "${installpath}" \ "/usr/$(get_libdir)/firefox/extensions/${emid}" count=$((count+1)) fi # target: firefox-bin if has 'firefox-bin' $MZA_TARGETS; then mozilla-addon_dosym "${installpath}" \ "/opt/firefox/browser/extensions/${emid}" count=$((count+1)) mozilla-addon_dosym "${installpath}" \ "/opt/firefox/extensions/${emid}" count=$((count+1)) fi # target: thunderbird if has 'thunderbird' $MZA_TARGETS; then mozilla-addon_verifytarget thunderbird mozilla-addon_dosym "${installpath}" \ "/usr/$(get_libdir)/thunderbird/extensions/${emid}" count=$((count+1)) fi # target: thunderbird-bin if has 'thunderbird-bin' $MZA_TARGETS; then mozilla-addon_verifytarget thunderbird mozilla-addon_dosym "${installpath}" \ "/opt/thunderbird/extensions/${emid}" count=$((count+1)) fi # target: seamonkey if has 'seamonkey' $MZA_TARGETS; then mozilla-addon_verifytarget seamonkey mozilla-addon_dosym "${installpath}" \ "/usr/$(get_libdir)/seamonkey/extensions/${emid}" count=$((count+1)) fi # target: seamonkey-bin if has 'seamonkey-bin' $MZA_TARGETS; then mozilla-addon_verifytarget seamonkey mozilla-addon_dosym "${installpath}" \ "/opt/seamonkey/extensions/${emid}" count=$((count+1)) fi # sanity check [[ "${count}" -gt 0 ]] || die "Error in $FUNCNAME: No target was installed, this seems wrong!" }