Commit eccead9e authored by Peter Eisentraut's avatar Peter Eisentraut

Add support for ICU 4.2

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: default avatarVictor Wagner <vitus@wagner.pp.ru>
parent f85f88bc
...@@ -774,10 +774,26 @@ su - postgres ...@@ -774,10 +774,26 @@ su - postgres
Build with support for Build with support for
the <productname>ICU</productname><indexterm><primary>ICU</></> the <productname>ICU</productname><indexterm><primary>ICU</></>
library. This requires the <productname>ICU4C</productname> package 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 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> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -722,7 +722,17 @@ pg_import_system_collations(PG_FUNCTION_ARGS) ...@@ -722,7 +722,17 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
/* /*
* Add keyword variants * 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; status = U_ZERO_ERROR;
en = ucol_getKeywordValuesForLocale("collation", name, TRUE, &status); en = ucol_getKeywordValuesForLocale("collation", name, TRUE, &status);
if (U_FAILURE(status)) if (U_FAILURE(status))
...@@ -769,6 +779,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS) ...@@ -769,6 +779,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
(errmsg("could not get keyword values for locale \"%s\": %s", (errmsg("could not get keyword values for locale \"%s\": %s",
name, u_errorName(status)))); name, u_errorName(status))));
uenum_close(en); uenum_close(en);
#endif /* ICU >4.2 */
} }
} }
#endif /* USE_ICU */ #endif /* USE_ICU */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment