diff --git a/support/scripts/expunge-gconv-modules b/support/scripts/expunge-gconv-modules index bc60fc0ce4..e9ac48ca3f 100755 --- a/support/scripts/expunge-gconv-modules +++ b/support/scripts/expunge-gconv-modules @@ -1,11 +1,17 @@ #!/usr/bin/env bash # This script is used to generate a gconv-modules file that takes into -# account only the gconv modules installed by Buildroot. It receives -# on its standard input the original complete gconv-modules file from -# the toolchain, and as arguments the list of gconv modules that were -# actually installed, and writes on its standard output the new -# gconv-modules file. +# account only the gconv modules installed by Buildroot, and generates +# a stripped-down gconv-moduels file on its stdout. +# It takes two arguments: +# $1: the directory where to look for gconv modules definitions +# $2: a space-separated list of gconv modules that were actually +# installed + +# Starting with glibc-2.34, modules definitions are located in multiple +# files: +# ${1}/gconv-modules +# ${1}/gconv-modules.d/*.conf # The format of gconv-modules is precisely documented in the # file itself. It consists of two different directives: @@ -19,7 +25,11 @@ # we handle each with slightly different code, since the second never has # associated aliases. -awk -v files="${2}" ' +for f in ${1}/gconv-modules ${1}/gconv-modules.d/*.conf; do + [ -e "${f}" ] || continue + cat "${f}" +done \ +|awk -v files="${2}" ' $1 == "alias" { aliases[$3] = aliases[$3] " " $2; } diff --git a/toolchain/toolchain.mk b/toolchain/toolchain.mk index 08d1649603..fe87a72ed4 100644 --- a/toolchain/toolchain.mk +++ b/toolchain/toolchain.mk @@ -27,6 +27,10 @@ define TOOLCHAIN_GLIBC_COPY_GCONV_LIBS $(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 \ @@ -41,8 +45,9 @@ define TOOLCHAIN_GLIBC_COPY_GCONV_LIBS || exit 1; \ done; \ done; \ - ./support/scripts/expunge-gconv-modules "$(TOOLCHAIN_GLIBC_GCONV_LIBS)" \ - <$(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules \ + ./support/scripts/expunge-gconv-modules \ + $(STAGING_DIR)/usr/lib/$${d}/gconv \ + "$(TOOLCHAIN_GLIBC_GCONV_LIBS)" \ >$(TARGET_DIR)/usr/lib/gconv/gconv-modules; \ fi endef