diff options
author | Ian Stakenvicius <axs@gentoo.org> | 2016-07-06 10:30:40 -0400 |
---|---|---|
committer | Ian Stakenvicius <axs@gentoo.org> | 2016-07-06 17:24:54 -0400 |
commit | b5417f70dc4ad66b907c42a914a3b42211624f79 (patch) | |
tree | f9c16af9ed33ae71089f6ee46738ae61c4b0aa92 /eclass/mozlinguas-v2.eclass | |
parent | eclass/moz*: refactor some configuration options from mozcoreconf-v4 to mozco... (diff) | |
download | gentoo-b5417f70dc4ad66b907c42a914a3b42211624f79.tar.gz gentoo-b5417f70dc4ad66b907c42a914a3b42211624f79.tar.bz2 gentoo-b5417f70dc4ad66b907c42a914a3b42211624f79.zip |
www-client/firefox: migrate LINGUAS to L10N
Bug: http://bugs.gentoo.org/587334
Package-Manager: portage-2.2.28
Diffstat (limited to 'eclass/mozlinguas-v2.eclass')
-rw-r--r-- | eclass/mozlinguas-v2.eclass | 370 |
1 files changed, 370 insertions, 0 deletions
diff --git a/eclass/mozlinguas-v2.eclass b/eclass/mozlinguas-v2.eclass new file mode 100644 index 000000000000..4facb58e5438 --- /dev/null +++ b/eclass/mozlinguas-v2.eclass @@ -0,0 +1,370 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +# @ECLASS: mozlinguas-v2.eclass +# @MAINTAINER: +# mozilla@gentoo.org +# @AUTHOR: +# Nirbheek Chauhan <nirbheek@gentoo.org> +# Ian Stakenvicius <axs@gentoo.org> +# @BLURB: Handle language packs for mozilla products +# @DESCRIPTION: +# Sets IUSE according to MOZ_LANGS (language packs available). Also exports +# src_unpack, src_compile and src_install for use in ebuilds, and provides +# supporting functions for langpack generation and installation. + +inherit mozextension + +case "${EAPI:-0}" in + 0|1) + die "EAPI ${EAPI:-0} does not support the '->' SRC_URI operator";; + 2|3|4|5|6) + EXPORT_FUNCTIONS src_unpack src_compile src_install;; + *) + die "EAPI ${EAPI} is not supported, contact eclass maintainers";; +esac + +# @ECLASS-VARIABLE: MOZ_LANGS +# @DESCRIPTION: +# Array containing the list of language pack xpis available for +# this release. The list can be updated with scripts/get_langs.sh from the +# mozilla overlay. +: ${MOZ_LANGS:=()} + +# @ECLASS-VARIABLE: MOZ_PV +# @DESCRIPTION: +# Ebuild package version converted to equivalent upstream version. +# Defaults to ${PV}, and should be overridden for alphas, betas, and RCs +: ${MOZ_PV:="${PV}"} + +# @ECLASS-VARIABLE: MOZ_PN +# @DESCRIPTION: +# Ebuild package name converted to equivalent upstream name. +# Defaults to ${PN}, and should be overridden for binary ebuilds. +: ${MOZ_PN:="${PN}"} + +# @ECLASS-VARIABLE: MOZ_P +# @DESCRIPTION: +# Ebuild package name + version converted to upstream equivalent. +# Defaults to ${MOZ_PN}-${MOZ_PV} +: ${MOZ_P:="${MOZ_PN}-${MOZ_PV}"} + +# @ECLASS-VARIABLE: MOZ_FTP_URI +# @DESCRIPTION: +# 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. +# Defaults to ${MOZ_PV}/linux-i686/xpi/ +: ${MOZ_LANGPACK_PREFIX:="${MOZ_PV}/linux-i686/xpi/"} + +# @ECLASS-VARIABLE: MOZ_LANGPACK_SUFFIX +# @DESCRIPTION: +# The suffix after the lang code in the langpack file URI. +# 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"} + +# @ECLASS-VARIABLE: MOZ_FORCE_UPSTREAM_L10N +# @DESCRIPTION: +# Set this to use upstream langpaks even if the package normally +# shouldn't (ie it is an alpha or beta package) +: ${MOZ_FORCE_UPSTREAM_L10N:=""} + + +# @ECLASS-VARIABLE: MOZ_TOO_REGIONALIZED_FOR_L10N +# @INTERNAL +# @DESCRIPTION: +# Upstream identifiers that should not contain region subtags in L10N +MOZ_TOO_REGIONALIZED_FOR_L10N=( fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO nn-NO pa-IN sv-SE ) + +# Add l10n_* to IUSE according to available language packs +# No language packs for alphas and betas +if ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]] ; then + if ! [[ ${PV} =~ alpha|beta ]] || { [[ ${PN} == seamonkey ]] && ! [[ ${PV} =~ alpha ]] ; } || [[ -n ${MOZ_FORCE_UPSTREAM_L10N} ]] ; 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 + # strip region subtag if $x is in the list + if has ${x} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then + xflag=${x%%-*} + else + xflag=${x} + fi + SRC_URI+=" l10n_${xflag/[_@]/-}? (" + [[ -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+=" l10n_${xflag/[_@]/-}" + # 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 + # strip region subtag if $x is in the list + if has ${x} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then + xflag=${x%%-*} + else + xflag=${x} + 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+=" l10n_${xflag/[_@]/-}? ( 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+=" l10n_${xflag/[_@]/-}? ( 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+=" l10n_${xflag/[_@]/-}? ( ${MOZ_L10N_URI_PREFIX}${x}${MOZ_L10N_URI_SUFFIX} )" + fi + IUSE+=" l10n_${x/[_@]/-}" + done +fi +unset x xflag + +# @FUNCTION: mozlinguas_export +# @INTERNAL +# @DESCRIPTION: +# Generate the list of language packs called "mozlinguas" +# This list is used to unpack and install the xpi language packs +mozlinguas_export() { + if [[ ${PN} == seamonkey ]] ; then + [[ ${PV} =~ alpha ]] && ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]] && return + else + [[ ${PV} =~ alpha|beta ]] && ! [[ -n ${MOZ_GENERATE_LANGPACKS} ]] && return + fi + local lingua lflag + mozlinguas=() + # Set mozlinguas based on the enabled l10n_* USE flags. + for lingua in "${MOZ_LANGS[@]}"; do + # strip region subtag if $x is in the list + if has ${lingua} en en-US; then + # For mozilla products, en and en_US are handled internally + continue + elif has ${lingua} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then + lflag=${lingua%%-*} + else + lflag=${lingua} + fi + use l10n_${lflag/[_@]/-} && mozlinguas+=( ${lingua} ) + done + # Compatibility code - Check LINGUAS and warn if anything set there isn't enabled via l10n + for lingua in ${LINGUAS}; do + if has ${lingua//[_@]/-} en en-US; then + # For mozilla products, en and en_US are handled internally + continue + # If this language is supported by ${P}, + elif has ${lingua} "${MOZ_LANGS[@]//-/_}"; then + # Warn the language is missing, if it isn't already there + has ${lingua//[_@]/-} "${mozlinguas[@]//[_@]/-}" || \ + ewarn "LINGUAS value ${lingua} is not enabled using L10N use flags" + continue + # For each short lingua that isn't in MOZ_LANGS, + # We used to add *all* long MOZ_LANGS to the mozlinguas list, + # but we stopped doing that due to bug 325195. + else + : + fi + ewarn "Sorry, but ${P} does not support the ${lingua} locale" + done +} + +# @FUNCTION: mozlinguas_src_unpack +# @DESCRIPTION: +# Unpack xpi language packs according to the user's LINGUAS settings +mozlinguas_src_unpack() { + local x + 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 +} +# For the phase function export +mozlinguas-v2_src_unpack() { + mozlinguas_src_unpack +} + + +# @FUNCTION: mozlinguas_mozconfig +# @DESCRIPTION: +# if applicable, add the necessary flag to .mozconfig to support +# the generation of locales. Note that this function requires +# mozconfig_annontate to already be declared via an inherit of +# mozconfig or mozcoreconf. +mozlinguas_mozconfig() { + if [[ -n ${MOZ_GENERATE_LANGPACKS} ]]; then + if declare -f mozconfig_annotate >/dev/null ; then + mozconfig_annotate 'for building locales' --with-l10n-base=${MOZ_L10N_SOURCEDIR} + else + die "Could not configure l10n-base, mozconfig_annotate not declared -- missing inherit?" + fi + 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 +} + +# For the phase function export +mozlinguas-v2_src_compile() { + mozlinguas_src_compile +} + +# @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 + mkdir -p "${modpath}/chrome" || die + 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-v2_src_install +# @DESCRIPTION: +# Install xpi language packs according to the user's L10N 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}${MOZ_LANGPACK_UNOFFICIAL:+.unofficial}" + done +} + +# For the phase function export +mozlinguas-v2_src_install() { + mozlinguas_src_install +} |