TARGET_FINALIZE_HOOKS += TOOLCHAIN_ECLIPSE_REGISTER
endif
-# Generate locale data. Basically, we call the localedef program
-# (built by the host-localedef package) for each locale. The input
-# data comes preferably from the toolchain, or if the toolchain does
-# not have them (Linaro toolchains), we use the ones available on the
-# host machine.
+# Generate locale data.
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
GLIBC_GENERATE_LOCALES = $(call qstrip,$(BR2_GENERATE_LOCALE))
ifneq ($(GLIBC_GENERATE_LOCALES),)
PACKAGES += host-localedef
define GENERATE_GLIBC_LOCALES
- $(Q)mkdir -p $(TARGET_DIR)/usr/lib/locale/
- $(Q)for locale in $(GLIBC_GENERATE_LOCALES) ; do \
- inputfile=`echo $${locale} | cut -f1 -d'.'` ; \
- charmap=`echo $${locale} | cut -f2 -d'.' -s` ; \
- if test -z "$${charmap}" ; then \
- charmap="UTF-8" ; \
- fi ; \
- echo "Generating locale $${inputfile}.$${charmap}" ; \
- I18NPATH=$(STAGING_DIR)/usr/share/i18n:/usr/share/i18n \
- $(HOST_DIR)/bin/localedef \
- --prefix=$(TARGET_DIR) \
- --$(call LOWERCASE,$(BR2_ENDIAN))-endian \
- -i $${inputfile} -f $${charmap} \
- $${locale} ; \
- done
+ $(MAKE) -f support/misc/gen-glibc-locales.mk \
+ ENDIAN=$(call LOWERCASE,$(BR2_ENDIAN)) \
+ LOCALES="$(GLIBC_GENERATE_LOCALES)" \
+ Q=$(Q)
endef
TARGET_FINALIZE_HOOKS += GENERATE_GLIBC_LOCALES
endif
--- /dev/null
+# Generates glibc locale data for target.
+
+inputfile = $(firstword $(subst ., ,$(1)))
+charmap = $(or $(word 2,$(subst ., ,$(1))),UTF-8)
+
+# Packages all the generated locale data into the final archive.
+#
+# We sort the file names to produce consistent output regardless of
+# the `find` outputs order.
+$(TARGET_DIR)/usr/lib/locale/locale-archive: $(LOCALES)
+ $(Q)rm -f $(@)
+ $(Q)find $(TARGET_DIR)/usr/lib/locale/ -maxdepth 1 -mindepth 1 -type d -print0 \
+ | sort -z \
+ | xargs -0 \
+ $(HOST_DIR)/bin/localedef \
+ --prefix=$(TARGET_DIR) \
+ --$(ENDIAN)-endian \
+ --add-to-archive
+
+# Generates locale data for each locale.
+#
+# The input data comes preferably from the toolchain, or if the toolchain
+# does not have them (Linaro toolchains), we use the ones available on the
+# host machine.
+#
+# Uses `localedef`, which is built by the `host-localedef` package.
+$(LOCALES): | $(TARGET_DIR)/usr/lib/locale/
+ $(Q)echo "Generating locale $(@)"
+ $(Q)I18NPATH=$(STAGING_DIR)/usr/share/i18n:/usr/share/i18n \
+ $(HOST_DIR)/bin/localedef \
+ --prefix=$(TARGET_DIR) \
+ --$(ENDIAN)-endian \
+ --no-archive \
+ -i $(call inputfile,$(@)) \
+ -f $(call charmap,$(@)) \
+ $(@)
+
+.PHONY: $(LOCALES)
+
+$(TARGET_DIR)/usr/lib/locale/:
+ $(Q)mkdir -p $(TARGET_DIR)/usr/lib/locale/