Bug 1362617 - Generalize MOZ_CHROME_MULTILOCALE to work for browser as well. r?mshal,pike
MozReview-Commit-ID: 80ldQPhNyi7
--- a/browser/base/content/test/static/browser_all_files_referenced.js
+++ b/browser/base/content/test/static/browser_all_files_referenced.js
@@ -92,16 +92,19 @@ var whitelist = [
// toolkit/components/places/ColorAnalyzer_worker.js
{file: "resource://gre/modules/ClusterLib.js"},
{file: "resource://gre/modules/ColorConversion.js"},
// Needed by HiddenFrame.jsm, but can't be packaged test-only
{file: "chrome://global/content/win.xul"},
+ // List of built-in locales. See bug 1362617 for details.
+ {file: "resource://gre/res/multilocale.json"},
+
// The l10n build system can't package string files only for some platforms.
{file: "resource://gre/chrome/en-US/locale/en-US/global-platform/mac/accessible.properties",
platforms: ["linux", "win"]},
{file: "resource://gre/chrome/en-US/locale/en-US/global-platform/mac/intl.properties",
platforms: ["linux", "win"]},
{file: "resource://gre/chrome/en-US/locale/en-US/global-platform/mac/platformKeys.properties",
platforms: ["linux", "win"]},
{file: "resource://gre/chrome/en-US/locale/en-US/global-platform/unix/accessible.properties",
--- a/browser/installer/Makefile.in
+++ b/browser/installer/Makefile.in
@@ -7,16 +7,19 @@ DIST_SUBDIR := browser
include $(topsrcdir)/config/rules.mk
MOZ_PKG_REMOVALS = $(srcdir)/removed-files.in
MOZ_PKG_MANIFEST = $(srcdir)/package-manifest.in
MOZ_PKG_DUPEFLAGS = -f $(srcdir)/allowed-dupes.mn
+DEFINES += -DPKG_LOCALE_MANIFEST=$(topobjdir)/browser/installer/locale-manifest.in
+MOZ_CHROME_LOCALE_ENTRIES=@RESPATH@/browser/chrome/ @RESPATH@/chrome/
+
# Some files have been already bundled with xulrunner
ifndef MOZ_MULET
MOZ_PKG_FATAL_WARNINGS = 1
else
DEFINES += -DMOZ_MULET
endif
# When packaging an artifact build not all xpt files expected by the
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -40,20 +40,16 @@
#endif
@APPNAME@/Contents/PkgInfo
@RESPATH@/firefox.icns
@RESPATH@/document.icns
@RESPATH@/@LPROJ_ROOT@.lproj/*
#endif
[@AB_CD@]
-@RESPATH@/browser/chrome/@AB_CD@@JAREXT@
-@RESPATH@/browser/chrome/@AB_CD@.manifest
-@RESPATH@/chrome/@AB_CD@@JAREXT@
-@RESPATH@/chrome/@AB_CD@.manifest
@RESPATH@/dictionaries/*
#if defined(XP_WIN) || defined(XP_LINUX)
@RESPATH@/fonts/*
#endif
@RESPATH@/hyphenation/*
@RESPATH@/browser/@PREF_DIR@/firefox-l10n.js
#ifdef HAVE_MAKENSISU
@BINPATH@/uninstall/helper.exe
@@ -845,8 +841,12 @@ bin/libfreebl_32int64_3.so
@RESPATH@/components/backgroundhangmonitor.xpt
; NOTE: This must match the config checks in
; /toolkit/components/backgroundhangmonitor/moz.build.
#if defined(NIGHTLY_BUILD) && !defined(MOZ_DEBUG) && !defined(MOZ_TSAN)
@RESPATH@/components/BHRTelemetryService.js
@RESPATH@/components/BHRTelemetryService.manifest
#endif
+
+#ifdef PKG_LOCALE_MANIFEST
+#include @PKG_LOCALE_MANIFEST@
+#endif
--- a/mobile/android/installer/Makefile.in
+++ b/mobile/android/installer/Makefile.in
@@ -14,21 +14,18 @@ endif
include $(topsrcdir)/config/rules.mk
MOZ_PKG_REMOVALS = $(srcdir)/removed-files.in
MOZ_PKG_MANIFEST = $(srcdir)/package-manifest.in
MOZ_PKG_DUPEFLAGS = -f $(srcdir)/allowed-dupes.mn
-ifdef MOZ_CHROME_MULTILOCALE
-MOZ_PKG_MANIFEST_DEPS = locale-manifest.in
-
-DEFINES += -DPKG_LOCALE_MANIFEST=$(CURDIR)/locale-manifest.in
-endif
+DEFINES += -DPKG_LOCALE_MANIFEST=$(topobjdir)/mobile/android/installer/locale-manifest.in
+MOZ_CHROME_LOCALE_ENTRIES=@BINPATH@/chrome/
DEFINES += \
-DMOZ_APP_NAME=$(MOZ_APP_NAME) \
-DPREF_DIR=$(PREF_DIR) \
-DJAREXT= \
-DMOZ_CHILD_PROCESS_NAME=$(MOZ_CHILD_PROCESS_NAME) \
-DMOZ_CHILD_PROCESS_NAME_PIE=$(MOZ_CHILD_PROCESS_NAME_PIE) \
-DANDROID_CPU_ARCH=$(ANDROID_CPU_ARCH) \
@@ -79,27 +76,8 @@ else
# Every other platform just winds up in dist/bin
BINPATH = bin
endif
DEFINES += -DBINPATH=$(BINPATH)
ifdef ENABLE_MARIONETTE
DEFINES += -DENABLE_MARIONETTE=1
endif
-
-
-ifdef MOZ_CHROME_MULTILOCALE
-# When MOZ_CHROME_MULTILOCALE is defined, we write multilocale.json like:
-# {"locales": ["en-US", "de", "ar", ...]}
-locale-manifest.in: $(GLOBAL_DEPS) FORCE
- printf '\n[multilocale]\n' > $@
- printf '@BINPATH@/res/multilocale.json\n' >> $@
- for LOCALE in en-US $(MOZ_CHROME_MULTILOCALE) ;\
- do \
- printf '$(BINPATH)/chrome/'"$$LOCALE"'$(JAREXT)\n' >> $@; \
- printf '$(BINPATH)/chrome/'"$$LOCALE"'.manifest\n' >> $@; \
- done
- COMMA=,
- echo '{"locales": [$(foreach l,$(MOZ_CHROME_MULTILOCALE),"$(l)"$(COMMA)) "en-US"]}' \
- > $(FINAL_TARGET)/res/multilocale.json
-
-GARBAGE += locale-manifest.in
-endif
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -10,18 +10,16 @@
; - in front of a file specifies it to be removed from the destination
; * wildcard support to recursively copy the entire directory
; ; file comment
;
#filter substitution
[@AB_CD@]
-@BINPATH@/chrome/@AB_CD@@JAREXT@
-@BINPATH@/chrome/@AB_CD@.manifest
@BINPATH@/@PREF_DIR@/mobile-l10n.js
@BINPATH@/update.locale
#ifdef MOZ_UPDATER
@BINPATH@/updater.ini
#endif
@BINPATH@/dictionaries/*
@BINPATH@/hyphenation/*
--- a/toolkit/locales/l10n.mk
+++ b/toolkit/locales/l10n.mk
@@ -208,17 +208,17 @@ endif
$(RM) -rf $(REAL_LOCALE_MERGEDIR)
-$(MOZILLA_DIR)/mach compare-locales --merge $(BASE_MERGE) $(srcdir)/l10n.toml $(L10NBASEDIR) $*
langpack-%: LANGPACK_FILE=$(ABS_DIST)/$(PKG_LANGPACK_PATH)$(PKG_LANGPACK_BASENAME).xpi
langpack-%: AB_CD=$*
langpack-%: XPI_NAME=locale-$*
langpack-%: IS_LANGUAGE_REPACK=1
langpack-%: IS_LANGPACK=1
-langpack-%: libs-%
+langpack-%: multilocale.json-% libs-%
@echo 'Making langpack $(LANGPACK_FILE)'
$(NSINSTALL) -D $(DIST)/$(PKG_LANGPACK_PATH)
$(call py_action,langpack_manifest,--locales $(AB_CD) --min-app-ver $(MOZ_APP_VERSION) --max-app-ver $(MOZ_APP_MAXVERSION) --app-name "$(MOZ_APP_DISPLAYNAME)" --l10n-basedir "$(L10NBASEDIR)" --defines $(LANGPACK_DEFINES) --input $(DIST)/xpi-stage/locale-$(AB_CD))
$(call py_action,zip,-C $(DIST)/xpi-stage/locale-$(AB_CD) -x **/*.manifest -x **/*.js -x **/*.ini $(LANGPACK_FILE) $(PKG_ZIP_DIRS) manifest.json)
# This variable is to allow the wget-en-US target to know which ftp server to download from
ifndef EN_US_BINARY_URL
EN_US_BINARY_URL = $(error You must set EN_US_BINARY_URL)
--- a/toolkit/mozapps/installer/l10n-repack.py
+++ b/toolkit/mozapps/installer/l10n-repack.py
@@ -19,16 +19,17 @@ NON_CHROME = set([
'dictionaries',
'defaults/profile',
'defaults/pref*/*-l10n.js',
'update.locale',
'updater.ini',
'extensions/langpack-*@*',
'distribution/extensions/langpack-*@*',
'chrome/**/searchplugins/*.xml',
+ '**/multilocale.json'
])
def valid_extra_l10n(arg):
if '=' not in arg:
raise ValueError('Invalid value')
return tuple(arg.split('=', 1))
--- a/toolkit/mozapps/installer/packager.mk
+++ b/toolkit/mozapps/installer/packager.mk
@@ -27,17 +27,17 @@ ifdef MOZ_SIGN_PREPARED_PACKAGE_CMD
$(MOZ_SIGN_PREPARED_PACKAGE_CMD) $(DEPTH)/installer-stage && true
endif
export USE_ELF_HACK ELF_HACK_FLAGS
# Override the value of OMNIJAR_NAME from config.status with the value
# set earlier in this file.
-stage-package: $(MOZ_PKG_MANIFEST) $(MOZ_PKG_MANIFEST_DEPS)
+stage-package: multilocale.json locale-manifest.in $(MOZ_PKG_MANIFEST) $(MOZ_PKG_MANIFEST_DEPS)
OMNIJAR_NAME=$(OMNIJAR_NAME) \
NO_PKG_FILES="$(NO_PKG_FILES)" \
$(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/packager.py $(DEFINES) $(ACDEFINES) \
--format $(MOZ_PACKAGER_FORMAT) \
$(addprefix --removals ,$(MOZ_PKG_REMOVALS)) \
$(if $(filter-out 0,$(MOZ_PKG_FATAL_WARNINGS)),,--ignore-errors) \
$(if $(MOZ_PACKAGER_MINIFY),--minify) \
$(if $(MOZ_PACKAGER_MINIFY_JS),--minify-js \
@@ -177,8 +177,52 @@ source-package:
(cd $(MOZ_PKG_SRCDIR) && $(CREATE_SOURCE_TAR) - ./ ) | xz -9e > $(SOURCE_TAR)
hg-bundle:
$(MKDIR) -p $(DIST)/$(PKG_SRCPACK_PATH)
$(CREATE_HG_BUNDLE_CMD)
source-upload:
$(MAKE) upload UPLOAD_FILES='$(SOURCE_UPLOAD_FILES)' CHECKSUM_FILE='$(SOURCE_CHECKSUM_FILE)'
+
+
+ALL_LOCALES = $(if $(filter en-US,$(LOCALES)),$(LOCALES),$(LOCALES) en-US)
+LOCALE_LIST = $(foreach l,$(ALL_LOCALES),"$(l)")
+
+# Firefox uses @RESPATH@.
+# Fennec uses @BINPATH@ and doesn't have the @RESPATH@ variable defined.
+ifeq ($(MOZ_BUILD_APP),mobile/android)
+BASE_PATH:=@BINPATH@
+MULTILOCALE_DIR = $(DIST)/$(BINPATH)/res
+else
+BASE_PATH:=@RESPATH@
+MULTILOCALE_DIR = $(DIST)/$(RESPATH)/res
+endif
+
+# This version of the target uses MOZ_CHROME_MULTILOCALE to build multilocale.json
+# and places it in dist/bin/res - it should be used when packaging a build.
+multilocale.json: LOCALES?=$(MOZ_CHROME_MULTILOCALE)
+multilocale.json:
+ @$(MKDIR) -p "$(MULTILOCALE_DIR)"
+ echo '{"locales": [$(subst $(SPACE),$(COMMA)$(SPACE),$(LOCALE_LIST))]}' \
+ > $(MULTILOCALE_DIR)/multilocale.json
+
+# This version of the target uses AB_CD to build multilocale.json and places it
+# in the $(XPI_NAME)/res dir - it should be used when repackaging a build.
+multilocale.json-%: LOCALES?=$(AB_CD)
+multilocale.json-%: MULTILOCALE_DIR=$(DIST)/xpi-stage/$(XPI_NAME)/res
+multilocale.json-%:
+ @$(MKDIR) -p "$(MULTILOCALE_DIR)"
+ echo '{"locales": [$(subst $(SPACE),$(COMMA)$(SPACE),$(LOCALE_LIST))]}' \
+ > $(MULTILOCALE_DIR)/multilocale.json
+
+locale-manifest.in: LOCALES?=$(MOZ_CHROME_MULTILOCALE)
+locale-manifest.in: $(GLOBAL_DEPS) FORCE
+ printf '\n[multilocale]\n' > $@
+ printf '$(BASE_PATH)/res/multilocale.json\n' >> $@
+ for LOCALE in $(ALL_LOCALES) ;\
+ do \
+ for ENTRY in $(MOZ_CHROME_LOCALE_ENTRIES) ;\
+ do \
+ printf "$$ENTRY""$$LOCALE"'@JAREXT@\n' >> $@; \
+ printf "$$ENTRY""$$LOCALE"'.manifest\n' >> $@; \
+ done \
+ done