mirror of
https://git.busybox.net/buildroot.git
synced 2024-11-23 21:43:30 +08:00
9d948e1b34
Startig with glibc 2.34, the gconv modules description has been split in two: - a common definition in the old location, /usr/lib/gconv/gconv-modules - specific definitions in a subdirectory, /usr/lib/gconv/gconv-modules.d/ This is done so as to simplify the handling of glibc gconv modules, and eventually to segregate those outside of glibc, and so that third-parties may also provide their own gconv converters and their definitions. And starting with that same glibc version, most of the gconv modules definitions are moved to an extra configuration file in that sub-directory. It is thus no longer possible to use special code pages, like cp850, which are very useful to access FAT-formatted devices. Add support for this new gconv layout, while keeping support for older glibc versions. Note that the modules themselves are not moved or renamed, just the definition files have changed. Instead of passing the one old gonv modules definitions file on stdin, we pass the base directory to that file, and move into the script the responsibility to find all the gconv definition files. Signed-off-by: Yann E. MORIN <yann.morin@orange.com> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Cc: Romain Naour <romain.naour@gmail.com> Cc: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> Cc: Giulio Benetti <giulio.benetti@benettiengineering.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
56 lines
2.1 KiB
Makefile
56 lines
2.1 KiB
Makefile
################################################################################
|
|
#
|
|
# 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)
|
|
TOOLCHAIN_GLIBC_GCONV_LIBS = $(call qstrip,$(BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST))
|
|
define TOOLCHAIN_GLIBC_COPY_GCONV_LIBS
|
|
$(Q)found_gconv=no; \
|
|
for d in $(TOOLCHAIN_EXTERNAL_PREFIX) ''; do \
|
|
[ -d "$(STAGING_DIR)/usr/lib/$${d}/gconv" ] || continue; \
|
|
found_gconv=yes; \
|
|
break; \
|
|
done; \
|
|
if [ "$${found_gconv}" = "no" ]; then \
|
|
printf "Unable to find gconv modules\n" >&2; \
|
|
exit 1; \
|
|
fi; \
|
|
if [ -z "$(TOOLCHAIN_GLIBC_GCONV_LIBS)" ]; then \
|
|
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules \
|
|
$(TARGET_DIR)/usr/lib/gconv/gconv-modules && \
|
|
$(INSTALL) -m 0644 $(STAGING_DIR)/usr/lib/$${d}/gconv/*.so \
|
|
$(TARGET_DIR)/usr/lib/gconv \
|
|
|| exit 1; \
|
|
if [ -d $(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules.d ]; then \
|
|
cp -a $(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules.d \
|
|
$(TARGET_DIR)/usr/lib/gconv/ || exit 1; \
|
|
fi; \
|
|
else \
|
|
for l in $(TOOLCHAIN_GLIBC_GCONV_LIBS); do \
|
|
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/$${l}.so \
|
|
$(TARGET_DIR)/usr/lib/gconv/$${l}.so \
|
|
|| exit 1; \
|
|
$(TARGET_READELF) -d $(STAGING_DIR)/usr/lib/$${d}/gconv/$${l}.so |\
|
|
sort -u |\
|
|
sed -e '/.*(NEEDED).*\[\(.*\.so\)\]$$/!d; s//\1/;' |\
|
|
while read lib; do \
|
|
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/$${lib} \
|
|
$(TARGET_DIR)/usr/lib/gconv/$${lib} \
|
|
|| exit 1; \
|
|
done; \
|
|
done; \
|
|
./support/scripts/expunge-gconv-modules \
|
|
$(STAGING_DIR)/usr/lib/$${d}/gconv \
|
|
"$(TOOLCHAIN_GLIBC_GCONV_LIBS)" \
|
|
>$(TARGET_DIR)/usr/lib/gconv/gconv-modules; \
|
|
fi
|
|
endef
|
|
TOOLCHAIN_TARGET_FINALIZE_HOOKS += TOOLCHAIN_GLIBC_COPY_GCONV_LIBS
|
|
endif
|