git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f85f88b)
Add support for ICU 4.2
Tue, 1 Aug 2017 14:49:55 +0000 (10:49 -0400)
Sat, 5 Aug 2017 13:32:42 +0000 (09:32 -0400)
Supporting ICU 4.2 seems useful because it ships with CentOS 6.

Versions before ICU 4.6 don't support pkg-config, so document an
installation method without using pkg-config.

In ICU 4.2, ucol_getKeywordsForLocale() sometimes returns values that
will not be accepted by uloc_toLanguageTag(). Skip loading keyword
variants in that version.

Reported-by: Victor Wagner <vitus@wagner.pp.ru>

diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index fa0d05efe661750080e92d140d681c866aacb936..12866b4bf7b6f278b8113c53f8921ee9d1d2cb19 100644 (file)
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -774,10 +774,26 @@ su - postgres
Build with support for
the <productname>ICU</productname><indexterm><primary>ICU</></>
library. This requires the <productname>ICU4C</productname> package
- as well
- as <productname>pkg-config</productname><indexterm><primary>pkg-config</></>
to be installed. The minimum required version
- of <productname>ICU4C</productname> is currently 4.6.
+ of <productname>ICU4C</productname> is currently 4.2.
+ </para>
+
+ <para>
+ By default,
+ <productname>pkg-config</productname><indexterm><primary>pkg-config</></>
+ will be used to find the required compilation options. This is
+ supported for <productname>ICU4C</productname> version 4.6 and later.
+ For older versions, or if <productname>pkg-config</productname> is
+ not available, the variables <envar>ICU_CFLAGS</envar>
+ and <envar>ICU_LIBS</envar> can be specified
+ to <filename>configure</filename>, like in this example:
+<programlisting>
+./configure ... --with-icu ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata'
+</programlisting>
+ (If <productname>ICU4C</productname> is in the default search path
+ for the compiler, then you still need to specify a nonempty string in
+ order to avoid use of <productname>pkg-config</productname>, for
+ example, <literal>ICU_CFLAGS=' '</literal>.)
</para>
</listitem>
</varlistentry>
diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c
index d19a384f9c12894d2700c81fa6bf58c9ca721ca7..ea257a378643a1dfc52ed091ef8bc5f9c9e50b15 100644 (file)
--- a/src/backend/commands/collationcmds.c
+++ b/src/backend/commands/collationcmds.c
@@ -722,7 +722,17 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
/*
* Add keyword variants
+ *
+ * In ICU 4.2, ucol_getKeywordsForLocale() sometimes returns
+ * values that will not be accepted by uloc_toLanguageTag(). Skip
+ * loading keyword variants in that version. (Both
+ * ucol_getKeywordValuesForLocale() and uloc_toLanguageTag() are
+ * new in ICU 4.2, so older versions are not supported at all.)
+ *
+ * XXX We have no information about ICU 4.3 through 4.7, but we
+ * know the below works with 4.8.
*/
+#if U_ICU_VERSION_MAJOR_NUM > 4 || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM > 2)
status = U_ZERO_ERROR;
en = ucol_getKeywordValuesForLocale("collation", name, TRUE, &status);
if (U_FAILURE(status))
@@ -769,6 +779,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
(errmsg("could not get keyword values for locale \"%s\": %s",
name, u_errorName(status))));
uenum_close(en);
+#endif /* ICU >4.2 */
}
}
#endif /* USE_ICU */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /