aboutsummaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorGravatar Yann E. MORIN <yann.morin.1998@free.fr>2014-07-27 21:28:32 +0200
committerGravatar Thomas Petazzoni <thomas.petazzoni@free-electrons.com>2014-07-27 23:15:48 +0200
commit11c1076db9a5a1ac3feac06ec701662bc3c655a1 (patch)
tree3fd21baba4458e8e512b11cfb8dd1aba73a9e4f3 /support
parent24a9da81dfa9563be87abd5667389f42c3c950e4 (diff)
downloadbuildroot-11c1076db9a5a1ac3feac06ec701662bc3c655a1.tar.gz
buildroot-11c1076db9a5a1ac3feac06ec701662bc3c655a1.tar.bz2
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>
Diffstat (limited to 'support')
-rwxr-xr-xsupport/scripts/expunge-gconv-modules59
1 files changed, 59 insertions, 0 deletions
diff --git a/support/scripts/expunge-gconv-modules b/support/scripts/expunge-gconv-modules
new file mode 100755
index 0000000000..a77b063cac
--- /dev/null
+++ b/support/scripts/expunge-gconv-modules
@@ -0,0 +1,59 @@
+#!/bin/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.
+
+# The format of gconv-modules is precisely documented in the
+# file itself. It consists of two different directives:
+# module FROMSET TOSET FILENAME COST
+# alias ALIAS REALNAME
+# and that's what this script parses and generates.
+#
+# There are two kinds of 'module' directives:
+# - the first defines conversion of a charset to/from INTERNAL representation
+# - the second defines conversion of a charset to/from another charset
+# we handle each with slightly different code, since the second never has
+# associated aliases.
+
+gawk -v files="${1}" '
+$1 == "alias" {
+ aliases[$3] = aliases[$3] " " $2;
+}
+$1 == "module" && $2 != "INTERNAL" && $3 == "INTERNAL" {
+ file2internals[$4] = file2internals[$4] " " $2;
+ mod2cost[$2] = $5;
+}
+$1 == "module" && $2 != "INTERNAL" && $3 != "INTERNAL" {
+ file2cset[$4] = file2cset[$4] " " $2 ":" $3;
+ mod2cost[$2] = $5;
+}
+
+END {
+ nb_files = split(files, all_files);
+ for(f = 1; f <= nb_files; f++) {
+ file = all_files[f];
+ printf("# Modules and aliases for: %s\n", file);
+ nb_mods = split(file2internals[file], mods);
+ for(i = 1; i <= nb_mods; i++) {
+ nb_aliases = split(aliases[mods[i]], mod_aliases);
+ for(j = 1; j <= nb_aliases; j++) {
+ printf("alias\t%s\t%s\n", mod_aliases[j], mods[i]);
+ }
+ printf("module\t%s\t%s\t%s\t%d\n", mods[i], "INTERNAL", file, mod2cost[mods[i]]);
+ printf("module\t%s\t%s\t%s\t%d\n", "INTERNAL", mods[i], file, mod2cost[mods[i]]);
+ printf("\n" );
+ }
+ printf("%s", nb_mods != 0 ? "\n" : "");
+ nb_csets = split(file2cset[file], csets);
+ for(i = 1; i <= nb_csets; i++) {
+ split(csets[i], cs, ":");
+ printf("module\t%s\t%s\t%s\t%d\n", cs[1], cs[2], file, mod2cost[cs[1]]);
+ }
+ printf("%s", nb_csets != 0 ? "\n\n" : "");
+ }
+}
+'