Blame view

buildroot/buildroot-2016.08.1/support/scripts/expunge-gconv-modules 2.23 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  #!/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.
  
  # 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
  ", 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
  ", mod_aliases[j], mods[i]);
              }
              printf("module\t%s\t%s\t%s\t%d
  ", mods[i], "INTERNAL", file, mod2cost[mods[i]]);
              printf("module\t%s\t%s\t%s\t%d
  ", "INTERNAL", mods[i], file, mod2cost[mods[i]]);
              printf("
  " );
          }
          printf("%s", nb_mods != 0 ? "
  " : "");
          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
  ", cs[1], cs[2], file, mod2cost[cs[1]]);
          }
          printf("%s", nb_csets != 0 ? "
  
  " : "");
      }
  }
  '