build: remove dependency on icu io library
The library is only used in a single build-time tool where it can be easily substituted by regular libc I/O functions. PR-URL: https://github.com/nodejs/node/pull/13656 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
87d682b69a
commit
2ea60e926e
1
configure
vendored
1
configure
vendored
@ -1284,7 +1284,6 @@ def configure_intl(o):
|
|||||||
'stubdata': 'stubdata',
|
'stubdata': 'stubdata',
|
||||||
'common': 'common',
|
'common': 'common',
|
||||||
'i18n': 'i18n',
|
'i18n': 'i18n',
|
||||||
'io': 'io',
|
|
||||||
'tools': 'tools/toolutil',
|
'tools': 'tools/toolutil',
|
||||||
'genccode': 'tools/genccode',
|
'genccode': 'tools/genccode',
|
||||||
'genrb': 'tools/genrb',
|
'genrb': 'tools/genrb',
|
||||||
|
@ -480,7 +480,6 @@
|
|||||||
'<@(icu_src_tools)',
|
'<@(icu_src_tools)',
|
||||||
'<@(icu_src_common)',
|
'<@(icu_src_common)',
|
||||||
'<@(icu_src_i18n)',
|
'<@(icu_src_i18n)',
|
||||||
'<@(icu_src_io)',
|
|
||||||
'<@(icu_src_stubdata)',
|
'<@(icu_src_stubdata)',
|
||||||
],
|
],
|
||||||
'sources!': [
|
'sources!': [
|
||||||
@ -492,7 +491,6 @@
|
|||||||
'include_dirs': [
|
'include_dirs': [
|
||||||
'<(icu_path)/source/common',
|
'<(icu_path)/source/common',
|
||||||
'<(icu_path)/source/i18n',
|
'<(icu_path)/source/i18n',
|
||||||
'<(icu_path)/source/io',
|
|
||||||
'<(icu_path)/source/tools/toolutil',
|
'<(icu_path)/source/tools/toolutil',
|
||||||
],
|
],
|
||||||
'defines': [
|
'defines': [
|
||||||
@ -512,7 +510,6 @@
|
|||||||
'include_dirs': [
|
'include_dirs': [
|
||||||
'<(icu_path)/source/common',
|
'<(icu_path)/source/common',
|
||||||
'<(icu_path)/source/i18n',
|
'<(icu_path)/source/i18n',
|
||||||
'<(icu_path)/source/io',
|
|
||||||
'<(icu_path)/source/tools/toolutil',
|
'<(icu_path)/source/tools/toolutil',
|
||||||
],
|
],
|
||||||
'conditions': [
|
'conditions': [
|
||||||
|
@ -52,7 +52,6 @@ Japanese, it doesn't *claim* to have Japanese.
|
|||||||
|
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "charstr.h" // ICU internal header
|
#include "charstr.h" // ICU internal header
|
||||||
#include <unicode/ustdio.h>
|
|
||||||
#include <unicode/ures.h>
|
#include <unicode/ures.h>
|
||||||
#include <unicode/udata.h>
|
#include <unicode/udata.h>
|
||||||
#include <unicode/putil.h>
|
#include <unicode/putil.h>
|
||||||
@ -69,36 +68,36 @@ CharString packageName;
|
|||||||
const char* locale = RES_INDEX; // locale referring to our index
|
const char* locale = RES_INDEX; // locale referring to our index
|
||||||
|
|
||||||
void usage() {
|
void usage() {
|
||||||
u_printf("Usage: %s [options]\n", PROG);
|
printf("Usage: %s [options]\n", PROG);
|
||||||
u_printf(
|
printf(
|
||||||
"This program lists and optionally regenerates the locale "
|
"This program lists and optionally regenerates the locale "
|
||||||
"manifests\n"
|
"manifests\n"
|
||||||
" in ICU 'res_index.res' files.\n");
|
" in ICU 'res_index.res' files.\n");
|
||||||
u_printf(
|
printf(
|
||||||
" -i ICUDATA Set ICUDATA dir to ICUDATA.\n"
|
" -i ICUDATA Set ICUDATA dir to ICUDATA.\n"
|
||||||
" NOTE: this must be the first option given.\n");
|
" NOTE: this must be the first option given.\n");
|
||||||
u_printf(" -h This Help\n");
|
printf(" -h This Help\n");
|
||||||
u_printf(" -v Verbose Mode on\n");
|
printf(" -v Verbose Mode on\n");
|
||||||
u_printf(" -l List locales to stdout\n");
|
printf(" -l List locales to stdout\n");
|
||||||
u_printf(
|
printf(
|
||||||
" if Verbose mode, then missing (unopenable)"
|
" if Verbose mode, then missing (unopenable)"
|
||||||
"locales\n"
|
"locales\n"
|
||||||
" will be listed preceded by a '#'.\n");
|
" will be listed preceded by a '#'.\n");
|
||||||
u_printf(
|
printf(
|
||||||
" -b res_index.txt Write 'corrected' bundle "
|
" -b res_index.txt Write 'corrected' bundle "
|
||||||
"to res_index.txt\n"
|
"to res_index.txt\n"
|
||||||
" missing bundles will be "
|
" missing bundles will be "
|
||||||
"OMITTED\n");
|
"OMITTED\n");
|
||||||
u_printf(
|
printf(
|
||||||
" -T TREE Choose tree TREE\n"
|
" -T TREE Choose tree TREE\n"
|
||||||
" (TREE should be one of: \n"
|
" (TREE should be one of: \n"
|
||||||
" ROOT, brkitr, coll, curr, lang, rbnf, region, zone)\n");
|
" ROOT, brkitr, coll, curr, lang, rbnf, region, zone)\n");
|
||||||
// see ureslocs.h and elsewhere
|
// see ureslocs.h and elsewhere
|
||||||
u_printf(
|
printf(
|
||||||
" -N NAME Choose name NAME\n"
|
" -N NAME Choose name NAME\n"
|
||||||
" (default: '%s')\n",
|
" (default: '%s')\n",
|
||||||
U_ICUDATA_NAME);
|
U_ICUDATA_NAME);
|
||||||
u_printf(
|
printf(
|
||||||
"\nNOTE: for best results, this tool ought to be "
|
"\nNOTE: for best results, this tool ought to be "
|
||||||
"linked against\n"
|
"linked against\n"
|
||||||
"stubdata. i.e. '%s -l' SHOULD return an error with "
|
"stubdata. i.e. '%s -l' SHOULD return an error with "
|
||||||
@ -108,7 +107,7 @@ void usage() {
|
|||||||
|
|
||||||
#define ASSERT_SUCCESS(status, what) \
|
#define ASSERT_SUCCESS(status, what) \
|
||||||
if (U_FAILURE(*status)) { \
|
if (U_FAILURE(*status)) { \
|
||||||
u_printf("%s:%d: %s: ERROR: %s %s\n", \
|
printf("%s:%d: %s: ERROR: %s %s\n", \
|
||||||
__FILE__, \
|
__FILE__, \
|
||||||
__LINE__, \
|
__LINE__, \
|
||||||
PROG, \
|
PROG, \
|
||||||
@ -130,7 +129,7 @@ void calculatePackageName(UErrorCode* status) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("packageName: %s\n", packageName.data());
|
printf("packageName: %s\n", packageName.data());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +145,7 @@ void calculatePackageName(UErrorCode* status) {
|
|||||||
int localeExists(const char* loc, UBool* exists) {
|
int localeExists(const char* loc, UBool* exists) {
|
||||||
UErrorCode status = U_ZERO_ERROR;
|
UErrorCode status = U_ZERO_ERROR;
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("Trying to open %s:%s\n", packageName.data(), loc);
|
printf("Trying to open %s:%s\n", packageName.data(), loc);
|
||||||
}
|
}
|
||||||
LocalUResourceBundlePointer aResource(
|
LocalUResourceBundlePointer aResource(
|
||||||
ures_openDirect(packageName.data(), loc, &status));
|
ures_openDirect(packageName.data(), loc, &status));
|
||||||
@ -154,13 +153,13 @@ int localeExists(const char* loc, UBool* exists) {
|
|||||||
if (U_SUCCESS(status)) {
|
if (U_SUCCESS(status)) {
|
||||||
*exists = true;
|
*exists = true;
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("%s:%s existed!\n", packageName.data(), loc);
|
printf("%s:%s existed!\n", packageName.data(), loc);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
} else if (status == U_MISSING_RESOURCE_ERROR) {
|
} else if (status == U_MISSING_RESOURCE_ERROR) {
|
||||||
*exists = false;
|
*exists = false;
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("%s:%s did NOT exist (%s)!\n",
|
printf("%s:%s did NOT exist (%s)!\n",
|
||||||
packageName.data(),
|
packageName.data(),
|
||||||
loc,
|
loc,
|
||||||
u_errorName(status));
|
u_errorName(status));
|
||||||
@ -168,7 +167,7 @@ int localeExists(const char* loc, UBool* exists) {
|
|||||||
return 0; // "good" failure
|
return 0; // "good" failure
|
||||||
} else {
|
} else {
|
||||||
// some other failure..
|
// some other failure..
|
||||||
u_printf("%s:%d: %s: ERROR %s opening %s:%s for test.\n",
|
printf("%s:%d: %s: ERROR %s opening %s for test.\n",
|
||||||
__FILE__,
|
__FILE__,
|
||||||
__LINE__,
|
__LINE__,
|
||||||
u_errorName(status),
|
u_errorName(status),
|
||||||
@ -178,9 +177,9 @@ int localeExists(const char* loc, UBool* exists) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void printIndent(const LocalUFILEPointer* bf, int indent) {
|
void printIndent(FILE* bf, int indent) {
|
||||||
for (int i = 0; i < indent + 1; i++) {
|
for (int i = 0; i < indent + 1; i++) {
|
||||||
u_fprintf(bf->getAlias(), " ");
|
fprintf(bf, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +190,7 @@ void printIndent(const LocalUFILEPointer* bf, int indent) {
|
|||||||
*/
|
*/
|
||||||
int dumpAllButInstalledLocales(int lev,
|
int dumpAllButInstalledLocales(int lev,
|
||||||
LocalUResourceBundlePointer* bund,
|
LocalUResourceBundlePointer* bund,
|
||||||
LocalUFILEPointer* bf,
|
FILE* bf,
|
||||||
UErrorCode* status) {
|
UErrorCode* status) {
|
||||||
ures_resetIterator(bund->getAlias());
|
ures_resetIterator(bund->getAlias());
|
||||||
LocalUResourceBundlePointer t;
|
LocalUResourceBundlePointer t;
|
||||||
@ -200,30 +199,30 @@ int dumpAllButInstalledLocales(int lev,
|
|||||||
ASSERT_SUCCESS(status, "while processing table");
|
ASSERT_SUCCESS(status, "while processing table");
|
||||||
const char* key = ures_getKey(t.getAlias());
|
const char* key = ures_getKey(t.getAlias());
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("dump@%d: got key %s\n", lev, key);
|
printf("dump@%d: got key %s\n", lev, key);
|
||||||
}
|
}
|
||||||
if (lev == 0 && !strcmp(key, INSTALLEDLOCALES)) {
|
if (lev == 0 && !strcmp(key, INSTALLEDLOCALES)) {
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("dump: skipping '%s' as it must be evaluated.\n", key);
|
printf("dump: skipping '%s' as it must be evaluated.\n", key);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printIndent(bf, lev);
|
printIndent(bf, lev);
|
||||||
u_fprintf(bf->getAlias(), "%s", key);
|
fprintf(bf, "%s", key);
|
||||||
switch (ures_getType(t.getAlias())) {
|
switch (ures_getType(t.getAlias())) {
|
||||||
case URES_STRING: {
|
case URES_STRING: {
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
const UChar* s = ures_getString(t.getAlias(), &len, status);
|
const UChar* s = ures_getString(t.getAlias(), &len, status);
|
||||||
ASSERT_SUCCESS(status, "getting string");
|
ASSERT_SUCCESS(status, "getting string");
|
||||||
u_fprintf(bf->getAlias(), ":string {\"");
|
fprintf(bf, ":string {\"");
|
||||||
u_file_write(s, len, bf->getAlias());
|
fwrite(s, len, 1, bf);
|
||||||
u_fprintf(bf->getAlias(), "\"}");
|
fprintf(bf, "\"}");
|
||||||
} break;
|
} break;
|
||||||
default: {
|
default: {
|
||||||
u_printf("ERROR: unhandled type in dumpAllButInstalledLocales().\n");
|
printf("ERROR: unhandled type in dumpAllButInstalledLocales().\n");
|
||||||
return 1;
|
return 1;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
u_fprintf(bf->getAlias(), "\n");
|
fprintf(bf, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -232,20 +231,19 @@ int dumpAllButInstalledLocales(int lev,
|
|||||||
int list(const char* toBundle) {
|
int list(const char* toBundle) {
|
||||||
UErrorCode status = U_ZERO_ERROR;
|
UErrorCode status = U_ZERO_ERROR;
|
||||||
|
|
||||||
LocalUFILEPointer bf;
|
FILE* bf = NULL;
|
||||||
|
|
||||||
if (toBundle != NULL) {
|
if (toBundle != NULL) {
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("writing to bundle %s\n", toBundle);
|
printf("writing to bundle %s\n", toBundle);
|
||||||
}
|
}
|
||||||
// we write UTF-8 with BOM only. No exceptions.
|
bf = fopen(toBundle, "wb");
|
||||||
bf.adoptInstead(u_fopen(toBundle, "w", "en_US_POSIX", "UTF-8"));
|
if (bf == NULL) {
|
||||||
if (bf.isNull()) {
|
printf("ERROR: Could not open '%s' for writing.\n", toBundle);
|
||||||
u_printf("ERROR: Could not open '%s' for writing.\n", toBundle);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
u_fputc(0xFEFF, bf.getAlias()); // write BOM
|
fprintf(bf, "\xEF\xBB\xBF"); // write UTF-8 BOM
|
||||||
u_fprintf(bf.getAlias(), "// -*- Coding: utf-8; -*-\n//\n");
|
fprintf(bf, "// -*- Coding: utf-8; -*-\n//\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// first, calculate the bundle name.
|
// first, calculate the bundle name.
|
||||||
@ -253,7 +251,7 @@ int list(const char* toBundle) {
|
|||||||
ASSERT_SUCCESS(&status, "calculating package name");
|
ASSERT_SUCCESS(&status, "calculating package name");
|
||||||
|
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("\"locale\": %s\n", locale);
|
printf("\"locale\": %s\n", locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalUResourceBundlePointer bund(
|
LocalUResourceBundlePointer bund(
|
||||||
@ -265,29 +263,30 @@ int list(const char* toBundle) {
|
|||||||
|
|
||||||
int32_t count = ures_getSize(installedLocales.getAlias());
|
int32_t count = ures_getSize(installedLocales.getAlias());
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("Locales: %d\n", count);
|
printf("Locales: %d\n", count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bf.isValid()) {
|
if (bf != NULL) {
|
||||||
// write the HEADER
|
// write the HEADER
|
||||||
u_fprintf(bf.getAlias(),
|
fprintf(bf,
|
||||||
"// Warning this file is automatically generated\n"
|
"// Warning this file is automatically generated\n"
|
||||||
"// Updated by %s based on %s:%s.txt\n",
|
"// Updated by %s based on %s:%s.txt\n",
|
||||||
PROG,
|
PROG,
|
||||||
packageName.data(),
|
packageName.data(),
|
||||||
locale);
|
locale);
|
||||||
u_fprintf(bf.getAlias(),
|
fprintf(bf,
|
||||||
"%s:table(nofallback) {\n"
|
"%s:table(nofallback) {\n"
|
||||||
" // First, everything besides InstalledLocales:\n",
|
" // First, everything besides InstalledLocales:\n",
|
||||||
locale);
|
locale);
|
||||||
if (dumpAllButInstalledLocales(0, &bund, &bf, &status)) {
|
if (dumpAllButInstalledLocales(0, &bund, bf, &status)) {
|
||||||
u_printf("Error dumping prolog for %s\n", toBundle);
|
printf("Error dumping prolog for %s\n", toBundle);
|
||||||
|
fclose(bf);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
// in case an error was missed
|
// in case an error was missed
|
||||||
ASSERT_SUCCESS(&status, "while writing prolog");
|
ASSERT_SUCCESS(&status, "while writing prolog");
|
||||||
|
|
||||||
u_fprintf(bf.getAlias(),
|
fprintf(bf,
|
||||||
" %s:table { // %d locales in input %s.res\n",
|
" %s:table { // %d locales in input %s.res\n",
|
||||||
INSTALLEDLOCALES,
|
INSTALLEDLOCALES,
|
||||||
count,
|
count,
|
||||||
@ -305,35 +304,38 @@ int list(const char* toBundle) {
|
|||||||
|
|
||||||
const char* key = ures_getKey(subkey.getAlias());
|
const char* key = ures_getKey(subkey.getAlias());
|
||||||
if (VERBOSE > 1) {
|
if (VERBOSE > 1) {
|
||||||
u_printf("@%d: %s\n", i, key);
|
printf("@%d: %s\n", i, key);
|
||||||
}
|
}
|
||||||
// now, see if the locale is installed..
|
// now, see if the locale is installed..
|
||||||
|
|
||||||
UBool exists;
|
UBool exists;
|
||||||
if (localeExists(key, &exists)) {
|
if (localeExists(key, &exists)) {
|
||||||
|
if (bf != NULL) fclose(bf);
|
||||||
return 1; // get out.
|
return 1; // get out.
|
||||||
}
|
}
|
||||||
if (exists) {
|
if (exists) {
|
||||||
validCount++;
|
validCount++;
|
||||||
u_printf("%s\n", key);
|
printf("%s\n", key);
|
||||||
if (bf.isValid()) {
|
if (bf != NULL) {
|
||||||
u_fprintf(bf.getAlias(), " %s {\"\"}\n", key);
|
fprintf(bf, " %s {\"\"}\n", key);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (bf.isValid()) {
|
if (bf != NULL) {
|
||||||
u_fprintf(bf.getAlias(), "// %s {\"\"}\n", key);
|
fprintf(bf, "// %s {\"\"}\n", key);
|
||||||
}
|
}
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("#%s\n", key); // verbosity one - '' vs '#'
|
printf("#%s\n", key); // verbosity one - '' vs '#'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bf.isValid()) {
|
if (bf != NULL) {
|
||||||
u_fprintf(bf.getAlias(), " } // %d/%d valid\n", validCount, count);
|
fprintf(bf, " } // %d/%d valid\n", validCount, count);
|
||||||
// write the HEADER
|
// write the HEADER
|
||||||
u_fprintf(bf.getAlias(), "}\n");
|
fprintf(bf, "}\n");
|
||||||
|
fclose(bf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,24 +348,24 @@ int main(int argc, const char* argv[]) {
|
|||||||
VERBOSE++;
|
VERBOSE++;
|
||||||
} else if (!strcmp(arg, "-i") && (argsLeft >= 1)) {
|
} else if (!strcmp(arg, "-i") && (argsLeft >= 1)) {
|
||||||
if (i != 1) {
|
if (i != 1) {
|
||||||
u_printf("ERROR: -i must be the first argument given.\n");
|
printf("ERROR: -i must be the first argument given.\n");
|
||||||
usage();
|
usage();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
const char* dir = argv[++i];
|
const char* dir = argv[++i];
|
||||||
u_setDataDirectory(dir);
|
u_setDataDirectory(dir);
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("ICUDATA is now %s\n", dir);
|
printf("ICUDATA is now %s\n", dir);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(arg, "-T") && (argsLeft >= 1)) {
|
} else if (!strcmp(arg, "-T") && (argsLeft >= 1)) {
|
||||||
TREE = argv[++i];
|
TREE = argv[++i];
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("TREE is now %s\n", TREE);
|
printf("TREE is now %s\n", TREE);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(arg, "-N") && (argsLeft >= 1)) {
|
} else if (!strcmp(arg, "-N") && (argsLeft >= 1)) {
|
||||||
NAME = argv[++i];
|
NAME = argv[++i];
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
u_printf("NAME is now %s\n", NAME);
|
printf("NAME is now %s\n", NAME);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(arg, "-?") || !strcmp(arg, "-h")) {
|
} else if (!strcmp(arg, "-?") || !strcmp(arg, "-h")) {
|
||||||
usage();
|
usage();
|
||||||
@ -377,7 +379,7 @@ int main(int argc, const char* argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
u_printf("Unknown or malformed option: %s\n", arg);
|
printf("Unknown or malformed option: %s\n", arg);
|
||||||
usage();
|
usage();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ def icu_ignore(dir, files):
|
|||||||
elif subdir == 'source':
|
elif subdir == 'source':
|
||||||
ign = ign + ['layout','samples','test','extra','config','layoutex','allinone','data']
|
ign = ign + ['layout','samples','test','extra','config','layoutex','allinone','data']
|
||||||
ign = ign + ['runConfigureICU','install-sh','mkinstalldirs','configure']
|
ign = ign + ['runConfigureICU','install-sh','mkinstalldirs','configure']
|
||||||
|
ign = ign + ['io']
|
||||||
elif subdir == 'source/tools':
|
elif subdir == 'source/tools':
|
||||||
ign = ign + ['tzcode','ctestfw','gensprep','gennorm2','gendict','icuswap',
|
ign = ign + ['tzcode','ctestfw','gensprep','gennorm2','gendict','icuswap',
|
||||||
'genbrk','gencfu','gencolusb','genren','memcheck','makeconv','gencnval','icuinfo','gentest']
|
'genbrk','gencfu','gencolusb','genren','memcheck','makeconv','gencnval','icuinfo','gentest']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user