toolchain: add option to copy the gconv libraries

The gconv libraries are used to translate between different character sets
('charsets', even 'csets' sometimes). Some packages need them to present
text to the user (eg. XBMC Gotham).

In (e)glibc they are implemented by the internal implemenation of iconv,
called gconv, and are provided as dlopen-able libraries.

Note that some gconv modules need extra libraries (shared by more than
one gconv module), so we must, when adding a subset of modules, scan the
installed modules in search of the missing libraries.

[Thomas: add general explanation in expunge-gconv-modules and fix
coding style.]

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
Cc: Bernd Kuhls <bernd.kuhls@t-online.de>
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
Cc: Eric Limpens <limpens@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Yann E. MORIN
2014-07-27 21:28:32 +02:00
committed by Thomas Petazzoni
parent 24a9da81df
commit 11c1076db9
4 changed files with 118 additions and 1 deletions

36
toolchain/toolchain.mk Normal file
View File

@@ -0,0 +1,36 @@
# This file contains toolchain-related customisation of the content
# of the target/ directory. Those customisations are added to the
# TARGET_FINALIZE_HOOKS, to be applied just after all packages
# have been built.
# Install the gconv modules
ifeq ($(BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY),y)
GCONV_LIBS = $(call qstrip,$(BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST))
define COPY_GCONV_LIBS
$(Q)if [ -z "$(GCONV_LIBS)" ]; then \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/gconv/gconv-modules \
$(TARGET_DIR)/usr/lib/gconv/gconv-modules; \
$(INSTALL) -m 0644 $(STAGING_DIR)/usr/lib/gconv/*.so \
$(TARGET_DIR)/usr/lib/gconv \
|| exit 1; \
else \
for l in $(GCONV_LIBS); do \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/gconv/$${l}.so \
$(TARGET_DIR)/usr/lib/gconv/$${l}.so \
|| exit 1; \
$(TARGET_READELF) -d $(STAGING_DIR)/usr/lib/gconv/$${l}.so |\
sort -u |\
sed -e '/.*(NEEDED).*\[\(.*\.so\)\]$$/!d; s//\1/;' |\
while read lib; do \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/gconv/$${lib} \
$(TARGET_DIR)/usr/lib/gconv/$${lib} \
|| exit 1; \
done; \
done; \
./support/scripts/expunge-gconv-modules "$(GCONV_LIBS)" \
<$(STAGING_DIR)/usr/lib/gconv/gconv-modules \
>$(TARGET_DIR)/usr/lib/gconv/gconv-modules; \
fi
endef
TARGET_FINALIZE_HOOKS += COPY_GCONV_LIBS
endif