summaryrefslogtreecommitdiffstats
path: root/generic/tkIcu.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-10 08:20:30 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-10 08:20:30 (GMT)
commiteadfe67048609727ed062bde3bcbfe0e97af874c (patch)
treedc2dbc827aac9c43fe7ed353156d69cc9b0a749f /generic/tkIcu.c
parentf1e21a546244b58b9b6b96d0b4b33e040cf37d1d (diff)
downloadtk-eadfe67048609727ed062bde3bcbfe0e97af874c.zip
tk-eadfe67048609727ed062bde3bcbfe0e97af874c.tar.gz
tk-eadfe67048609727ed062bde3bcbfe0e97af874c.tar.bz2
Support standard windows libraries icu.dll and icuuc.dll
Diffstat (limited to 'generic/tkIcu.c')
-rw-r--r--generic/tkIcu.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/generic/tkIcu.c b/generic/tkIcu.c
index 81ac460..3069c19 100644
--- a/generic/tkIcu.c
+++ b/generic/tkIcu.c
@@ -194,14 +194,16 @@ Icu_Init(
{
Tcl_MutexLock(&icu_mutex);
char symbol[24];
- char icuversion[3] = "70"; /* Highest ICU version + 1 */
+ char icuversion[4] = "_75"; /* Highest ICU version + 1 */
if (icu_fns.nopen == 0) {
int i = 0;
Tcl_Obj *nameobj;
static const char *iculibs[] = {
#if defined(_WIN32)
- "icuuc??.dll", /* When running under Windows */
+ "icuuc??.dll", /* When running under Windows, user-provided */
+ "icu.dll", /* Windows 10 1903 (May 2019 Update) or later */
+ "icuuc.dll", /* Windows 10 1703 (Creators Update) or later */
NULL,
"cygicuuc??.dll", /* When running under Cygwin */
#elif defined(__CYGWIN__)
@@ -215,14 +217,14 @@ Icu_Init(
};
/* Going back down to ICU version 50 */
- while ((icu_fns.lib == NULL) && (icuversion[0] >= '5')) {
- if (icuversion[1]-- < '0') {
- icuversion[0]--; icuversion[1] = '9';
+ while ((icu_fns.lib == NULL) && (icuversion[1] >= '5')) {
+ if (icuversion[2]-- < '0') {
+ icuversion[1]--; icuversion[2] = '9';
}
#if defined(_WIN32) && !defined(STATIC_BUILD)
if (tclStubsPtr->tcl_CreateFileHandler) {
/* Running on Cygwin, so try to load the cygwin icu dll */
- i = 2;
+ i = 4;
} else
#endif
i = 0;
@@ -232,11 +234,14 @@ Icu_Init(
char *nameStr = Tcl_GetString(nameobj);
char *p = strchr(nameStr, '?');
if (p != NULL) {
- memcpy(p, icuversion, 2);
+ memcpy(p, icuversion+1, 2);
}
Tcl_IncrRefCount(nameobj);
if (Tcl_LoadFile(interp, nameobj, NULL, 0, NULL, &icu_fns.lib)
== TCL_OK) {
+ if (p == NULL) {
+ icuversion[0] = '\0';
+ }
Tcl_DecrRefCount(nameobj);
break;
}
@@ -246,10 +251,10 @@ Icu_Init(
}
if (icu_fns.lib != NULL) {
#define ICU_SYM(name) \
- strcpy(symbol, "ubrk_" #name "_" ); \
+ strcpy(symbol, "ubrk_" #name ); \
strcat(symbol, icuversion); \
icu_fns.name = (fn_icu_ ## name) \
- Tcl_FindSymbol(NULL, icu_fns.lib, symbol);
+ Tcl_FindSymbol(NULL, icu_fns.lib, symbol); \
ICU_SYM(open);
ICU_SYM(close);
ICU_SYM(preceding);