commit:     8b6ad0e25f1661415823cf856bfb3510d52ddc38
Author:     Ian Stakenvicius <axs <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 13 15:34:13 2015 +0000
Commit:     Ian Stakenvicius <axs <AT> gentoo <DOT> org>
CommitDate: Tue Jul 14 21:52:53 2015 +0000
URL:        https://gitweb.gentoo.org/proj/mozilla.git/commit/?id=8b6ad0e2

Extended functionality of mozlinguas.eclass

Added eclass variables and supporting code to allow localizations to be built 
from
l10n sources.  Also added a function to make it easier to add localizations to
bundled or app-global extensions, such as lightning in thunderbird.

 eclass/mozlinguas.eclass | 203 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 184 insertions(+), 19 deletions(-)

diff --git a/eclass/mozlinguas.eclass b/eclass/mozlinguas.eclass
index 8ad0bbc..9ca35b1 100644
--- a/eclass/mozlinguas.eclass
+++ b/eclass/mozlinguas.eclass
@@ -1,6 +1,6 @@
-# Copyright 1999-2013 Gentoo Foundation
+# Copyright 1999-2015 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/mozlinguas.eclass,v 1.6 2013/04/05 
15:27:40 floppym Exp $
+# $Header: $
 
 # @ECLASS: mozlinguas.eclass
 # @MAINTAINER:
@@ -10,15 +10,16 @@
 # @BLURB: Handle language packs for mozilla products
 # @DESCRIPTION:
 # Sets IUSE according to MOZ_LANGS (language packs available). Also exports
-# src_unpack and src_install for use in ebuilds.
+# src_unpack, src_compile and src_install for use in ebuilds, and provides
+# supporting functions for langpack generation and installation.
 
-inherit mozextension
+inherit mozextension mozcoreconf-v3
 
 case "${EAPI:-0}" in
        0|1)
                die "EAPI ${EAPI:-0} does not support the '->' SRC_URI 
operator";;
        2|3|4|5)
-               EXPORT_FUNCTIONS src_unpack src_install;;
+               EXPORT_FUNCTIONS src_unpack src_compile src_install;;
        *)
                die "EAPI ${EAPI} is not supported, contact eclass 
maintainers";;
 esac
@@ -53,6 +54,11 @@ esac
 # The ftp URI prefix for the release tarballs and language packs.
 : ${MOZ_FTP_URI:=""}
 
+# @ECLASS-VARIABLE: MOZ_HTTP_URI
+# @DESCRIPTION:
+# The http URI prefix for the release tarballs and language packs.
+: ${MOZ_HTTP_URI:=""}
+
 # @ECLASS-VARIABLE: MOZ_LANGPACK_PREFIX
 # @DESCRIPTION:
 # The relative path till the lang code in the langpack file URI.
@@ -65,21 +71,86 @@ esac
 # Defaults to '.xpi'
 : ${MOZ_LANGPACK_SUFFIX:=".xpi"}
 
+# @ECLASS-VARIABLE: MOZ_LANGPACK_UNOFFICIAL
+# @DESCRIPTION:
+# The status of the langpack, used to differentiate within
+# Manifests and on Gentoo mirrors as to when the langpacks are
+# generated officially by Mozilla or if they were generated
+# unofficially by others (ie the Gentoo mozilla team).  When
+# this var is set, the distfile will have a .unofficial.xpi
+# suffix.
+: ${MOZ_LANGPACK_UNOFFICIAL:=""}
+
+# @ECLASS-VARIABLE: MOZ_GENERATE_LANGPACKS
+# @DESCRIPTION:
+# This flag specifies whether or not the langpacks should be
+# generated directly during the build process, rather than
+# being downloaded and installed from upstream pre-built
+# extensions.  Primarily it supports pre-release builds.
+# Defaults to empty.
+: ${MOZ_GENERATE_LANGPACKS:=""}
+
+# @ECLASS-VARIABLE: MOZ_L10N_SOURCEDIR
+# @DESCRIPTION:
+# The path that l10n sources can be found at, once unpacked.
+# Defaults to ${WORKDIR}/l10n-sources
+: ${MOZ_L10N_SOURCEDIR:="${WORKDIR}/l10n-sources"}
+
+# @ECLASS-VARIABLE: MOZ_L10N_URI_PREFIX
+# @DESCRIPTION:
+# The full URI prefix of the distfile for each l10n locale.  The
+# AB_CD and MOZ_L10N_URI_SUFFIX will be appended to this to complete the
+# SRC_URI when MOZ_GENERATE_LANGPACKS is set.  If empty, nothing will
+# be added to SRC_URI.
+# Defaults to empty.
+: ${MOZ_L10N_URI_PREFIX:=""}
+
+# @ECLASS-VARIABLE: MOZ_L10N_URI_SUFFIX
+# @DESCRIPTION:
+# The suffix of l10n source distfiles.
+# Defaults to '.tar.xz'
+: ${MOZ_L10N_URI_SUFFIX:=".tar.xz"}
+
 # Add linguas_* to IUSE according to available language packs
 # No language packs for alphas and betas
-if ! [[ ${PV} =~ alpha|beta ]] || { [[ ${PN} == seamonkey ]] && ! [[ ${PV} =~ 
alpha ]] ; } ; then
+if ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]] ; then
+       if ! [[ ${PV} =~ alpha|beta ]] || { [[ ${PN} == seamonkey ]] && ! [[ 
${PV} =~ alpha ]] ; } ; then
+       [[ -z ${MOZ_FTP_URI} ]] && [[ -z ${MOZ_HTTP_URI} ]] && die "No URI set 
to download langpacks, please set one of MOZ_{FTP,HTTP}_URI"
        for x in "${MOZ_LANGS[@]}" ; do
                # en and en_US are handled internally
                if [[ ${x} == en ]] || [[ ${x} == en-US ]]; then
                        continue
                fi
-               SRC_URI+="
-                       linguas_${x/-/_}?
-                               ( 
${MOZ_FTP_URI}/${MOZ_LANGPACK_PREFIX}${x}${MOZ_LANGPACK_SUFFIX} -> 
${MOZ_P}-${x}.xpi )"
+               SRC_URI+=" linguas_${x/-/_}? ("
+               [[ -n ${MOZ_FTP_URI} ]] && SRC_URI+="
+                       
${MOZ_FTP_URI}/${MOZ_LANGPACK_PREFIX}${x}${MOZ_LANGPACK_SUFFIX} -> 
${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}.xpi"
+               [[ -n ${MOZ_HTTP_URI} ]] && SRC_URI+="
+                       
${MOZ_HTTP_URI}/${MOZ_LANGPACK_PREFIX}${x}${MOZ_LANGPACK_SUFFIX} -> 
${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}.xpi"
+               SRC_URI+=" )"
                IUSE+=" linguas_${x/-/_}"
                # We used to do some magic if specific/generic locales were 
missing, but
                # we stopped doing that due to bug 325195.
        done
+       fi
+else
+       for x in "${MOZ_LANGS[@]}" ; do
+               # en and en_US are handled internally
+               if [[ ${x} == en ]] || [[ ${x} == en-US ]]; then
+                       continue
+               fi
+# Do NOT grab l10n sources from hg tip at this time, since it is a moving 
target
+#              if [[ ${PV} =~ alpha ]]; then
+#                      # Please note that this URI is not deterministic - 
digest breakage could occur
+#                      SRC_URI+=" linguas_${x/-/_}? ( 
http://hg.mozilla.org/releases/l10n/mozilla-aurora/ach/archive/tip.tar.bz2 -> 
${MOZ_P}-l10n-${x}.tar.bz2 )"
+#              elif [[ ${PV} =~ beta ]] && ! [[ ${PN} == seamonkey ]]; then
+#                      # Please note that this URI is not deterministic - 
digest breakage could occur
+#                      SRC_URI+=" linguas_${x/-/_}? ( 
http://hg.mozilla.org/releases/l10n/mozilla-beta/ach/archive/tip.tar.bz2 -> 
${MOZ_P}-l10n-${x}.tar.bz2 )"
+#              elif [[ -n ${MOZ_L10N_URI_PREFIX} ]]; then
+               if [[ -n ${MOZ_L10N_URI_PREFIX} ]]; then
+                       SRC_URI+=" linguas_${x/-/_}? ( 
${MOZ_L10N_URI_PREFIX}${x}${MOZ_L10N_URI_SUFFIX} )"
+               fi
+               IUSE+=" linguas_${x/-/_}"
+       done
 fi
 unset x
 
@@ -90,9 +161,9 @@ unset x
 # This list is used to unpack and install the xpi language packs
 mozlinguas_export() {
        if [[ ${PN} == seamonkey ]] ; then
-               [[ ${PV} =~ alpha ]] && return
+               [[ ${PV} =~ alpha ]] && ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]] && 
return
        else
-               [[ ${PV} =~ alpha|beta ]] && return
+               [[ ${PV} =~ alpha|beta ]] && ! [[ -n ${MOZ_GENERATE_LANGPACKS} 
]] && return
        fi
        local lingua
        mozlinguas=()
@@ -120,23 +191,117 @@ mozlinguas_export() {
 # Unpack xpi language packs according to the user's LINGUAS settings
 mozlinguas_src_unpack() {
        local x
-       mozlinguas_export
-       for x in "${mozlinguas[@]}"; do
-               # FIXME: Add support for unpacking xpis to portage
-               xpi_unpack "${MOZ_P}-${x}.xpi"
-       done
-       if [[ "${mozlinguas[*]}" != "" && "${mozlinguas[*]}" != "en" ]]; then
-               einfo "Selected language packs (first will be default): 
${mozlinguas[*]}"
+       if ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]]; then
+               mozlinguas_export
+               for x in "${mozlinguas[@]}"; do
+                       # FIXME: Add support for unpacking xpis to portage
+                       xpi_unpack 
"${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}.xpi"
+               done
+               if [[ "${mozlinguas[*]}" != "" && "${mozlinguas[*]}" != "en" 
]]; then
+                       einfo "Selected language packs (first will be default): 
${mozlinguas[*]}"
+               fi
        fi
 }
 
+# @FUNCTION: mozlinguas_mozconfig
+# @DESCRIPTION:
+# if applicable, add the necessary flag to .mozconfig to support
+# the generation of locales
+mozlinguas_mozconfig() {
+       if [[ -n ${MOZ_GENERATE_LANGPACKS} ]]; then
+               mozconfig_annotate 'for building locales' 
--with-l10n-base=${MOZ_L10N_SOURCEDIR}
+       fi
+}
+
+# @FUNCTION: mozlinguas_src_compile
+# @DESCRIPTION:
+# if applicable, build the selected locales.
+mozlinguas_src_compile() {
+       if [[ -n ${MOZ_GENERATE_LANGPACKS} ]]; then
+               # leverage BUILD_OBJ_DIR if set otherwise assume PWD.
+               local x y targets=( "langpack" ) localedir="${BUILD_OBJ_DIR:-.}"
+               case ${PN} in
+                       *firefox)
+                               localedir+="/browser/locales"
+                               ;;
+                       seamonkey)
+                               localedir+="/suite/locales"
+                               ;;
+                       *thunderbird)
+                               localedir+="/mail/locales"
+                               targets+=( "calendar-langpack" )
+                               ;;
+                       *) die "Building locales for ${PN} is not supported."
+               esac
+               pushd "${localedir}" > /dev/null || die
+               mozlinguas_export
+               for x in "${mozlinguas[@]}"; do for y in "${targets[@]}"; do
+                       emake ${y}-${x} LOCALE_MERGEDIR="./${y}-${x}"
+               done; done
+               popd > /dev/null || die
+       fi
+}
+
+# @FUNCTION: mozlinguas_xpistage_langpacks
+# @DESCRIPTION:
+# Add extra langpacks to the xpi-stage dir for prebuilt plugins
+#
+# First argument is the path to the extension
+# Second argument is the prefix of the source (same as first if unspecified)
+# Remaining arguments are the modules in the extension that are localized
+#  (basename of first if unspecified)
+#
+# Example - installing extra langpacks for lightning:
+# src_install() {
+#      ... # general installation steps
+#      mozlinguas_xpistage_langpacks \
+#              "${BUILD_OBJ_DIR}"/dist/xpi-stage/lightning \
+#              "${WORKDIR}"/lightning \
+#              lightning calendar
+#      ... # proceed with installation from the xpi-stage dir
+# }
+
+mozlinguas_xpistage_langpacks() {
+       local l c modpath="${1}" srcprefix="${1}" modules=( "${1##*/}" )
+       shift
+       if [[ -n ${1} ]] ; then srcprefix="${1}" ; shift ; fi
+       if [[ -n ${1} ]] ; then modules=( $@ ) ; fi
+
+       mozlinguas_export
+       for l in "${mozlinguas[@]}"; do for c in "${modules[@]}" ; do
+               if [[ -e "${srcprefix}-${l}/chrome/${c}-${l}" ]]; then
+                       cp -RLp -t "${modpath}/chrome" 
"${srcprefix}-${l}/chrome/${c}-${l}" || die
+                       grep "locale ${c} ${l} chrome/" 
"${srcprefix}-${l}/chrome.manifest" \
+                               >>"${modpath}/chrome.manifest" || die
+               elif [[ -e "${srcprefix}/chrome/${c}-${l}" ]]; then
+                       cp -RLp -t "${modpath}/chrome" 
"${srcprefix}/chrome/${c}-${l}" || die
+                       grep "locale ${c} ${l} chrome/" 
"${srcprefix}/chrome.manifest" \
+                               >>"${modpath}/chrome.manifest" || die
+               else
+                       ewarn "Locale ${l} was not found for ${c}, skipping."
+               fi
+       done; done
+}
+
 # @FUNCTION: mozlinguas_src_install
 # @DESCRIPTION:
 # Install xpi language packs according to the user's LINGUAS settings
+# NOTE - uses ${BUILD_OBJ_DIR} or PWD if unset, for source-generated langpacks
 mozlinguas_src_install() {
        local x
        mozlinguas_export
+       if [[ -n ${MOZ_GENERATE_LANGPACKS} ]]; then
+               local repopath="${WORKDIR}/${PN}-generated-langpacks"
+               mkdir -p "${repopath}"
+               pushd "${BUILD_OBJ_DIR:-.}"/dist/*/xpi > /dev/null || die
+               for x in "${mozlinguas[@]}"; do
+                       cp "${MOZ_P}.${x}.langpack.xpi" \
+                       
"${repopath}/${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}.xpi" || die
+                       xpi_unpack 
"${repopath}/${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}.xpi"
+               done
+               popd > /dev/null || die
+       fi
        for x in "${mozlinguas[@]}"; do
-               xpi_install "${WORKDIR}/${MOZ_P}-${x}"
+               xpi_install 
"${WORKDIR}/${MOZ_P}-${x}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}"
        done
 }

Reply via email to