(svn r27377) -Codechange: use the pkg-config files of ICU as well. Since they are split into separate libraries it becomes possible to split RTL support for natural sorting, although the effect will be minimal

This commit is contained in:
rubidium
2015-08-09 13:54:17 +00:00
parent d45969779d
commit 562c269770
2 changed files with 45 additions and 77 deletions

View File

@@ -85,7 +85,8 @@ set_default() {
with_libtimidity="1" with_libtimidity="1"
with_freetype="1" with_freetype="1"
with_fontconfig="1" with_fontconfig="1"
with_icu="1" with_icu_layout="1"
with_icu_sort="1"
static_icu="0" static_icu="0"
with_psp_config="1" with_psp_config="1"
with_threads="1" with_threads="1"
@@ -161,7 +162,8 @@ set_default() {
with_libtimidity with_libtimidity
with_freetype with_freetype
with_fontconfig with_fontconfig
with_icu with_icu_layout
with_icu_sort
static_icu static_icu
with_psp_config with_psp_config
with_threads with_threads
@@ -387,12 +389,18 @@ detect_params() {
--without-libfontconfig) with_fontconfig="0";; --without-libfontconfig) with_fontconfig="0";;
--with-libfontconfig=*) with_fontconfig="$optarg";; --with-libfontconfig=*) with_fontconfig="$optarg";;
--with-icu) with_icu="2";; --with-icu) with_icu_layout="2";with_icu_sort="2";;
--without-icu) with_icu="0";; --without-icu) with_icu_layout="0";with_icu_sort="0";;
--with-icu=*) with_icu="$optarg";; --with-icu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";;
--with-libicu) with_icu="2";; --with-libicu) with_icu_layout="2";with_icu_sort="2";;
--without-libicu) with_icu="0";; --without-libicu) with_icu_layout="0";with_icu_sort="0";;
--with-libicu=*) with_icu="$optarg";; --with-libicu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";;
--with-icu-layout) with_icu_layout="2";;
--without-icu-layout) with_icu_layout="0";;
--with-icu-layout=*) with_icu_layout="$optarg";;
--with-icu-sort) with_icu_sort="2";;
--without-icu-sort) with_icu_sort="0";;
--with-icu-sort=*) with_icu_sort="$optarg";;
--static-icu) static_icu="1";; --static-icu) static_icu="1";;
--static-icu=*) static_icu="$optarg";; --static-icu=*) static_icu="$optarg";;
--static-libicu) static_icu="1";; --static-libicu) static_icu="1";;
@@ -842,7 +850,8 @@ check_params() {
detect_png detect_png
detect_freetype detect_freetype
detect_fontconfig detect_fontconfig
detect_icu detect_icu_layout
detect_icu_sort
detect_pspconfig detect_pspconfig
detect_libtimidity detect_libtimidity
@@ -1737,15 +1746,25 @@ make_cflags_and_ldflags() {
fi fi
fi fi
if [ -n "$icu_config" ]; then if [ -n "$icu_layout_config" ]; then
CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT -DWITH_ICU_SORT" CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT"
CFLAGS="$CFLAGS `$icu_config --cppflags | tr '\n\r' ' '`" CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`"
# Some icu-configs have the 'feature' of not adding a space where others do add the space
if [ "$static_icu" != "0" ]; then if [ "$static_icu" != "0" ]; then
LIBS="$LIBS `$icu_config --ldflags-searchpath` `($icu_config --ldflags-libsonly; $icu_config --ldflags-layout) | tr '\n\r' ' ' | sed s/licu/lsicu/g`" LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`"
else else
LIBS="$LIBS `$icu_config --ldflags-searchpath` `($icu_config --ldflags-libsonly; $icu_config --ldflags-layout) | tr '\n\r' ' '`" LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' ' '`"
fi
fi
if [ -n "$icu_sort_config" ]; then
CFLAGS="$CFLAGS -DWITH_ICU_SORT"
CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`"
if [ "$static_icu" != "0" ]; then
LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`"
else
LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' ' '`"
fi fi
fi fi
@@ -2773,54 +2792,12 @@ detect_fontconfig() {
detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1" detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1"
} }
detect_icu() { detect_icu_layout() {
# 0 means no, 1 is auto-detect, 2 is force detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1"
if [ "$with_icu" = "0" ]; then }
log 1 "checking libicu... disabled"
icu_config="" detect_icu_sort() {
return 0 detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1"
fi
if [ "$with_icu" = "1" ] && [ "$enable_dedicated" != "0" ]; then
log 1 "checking libicu... dedicated server, skipping"
icu_config=""
return 0
fi
if [ "$with_icu" = "1" ] || [ "$with_icu" = "" ] || [ "$with_icu" = "2" ]; then
icu_config="icu-config"
else
icu_config="$with_icu"
fi
version=`$icu_config --version 2>/dev/null`
ret=$?
check_version '3.6' "$version"
version_ok=$?
log 2 "executing $icu_config --version"
log 2 " returned $version"
log 2 " exit code $ret"
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
log 1 "checking libicu... needs at least version 3.6.0, icu NOT enabled"
else
log 1 "checking libicu... not found"
fi
# It was forced, so it should be found.
if [ "$with_icu" != "1" ]; then
log 1 "configure: error: icu-config couldn't be found"
log 1 "configure: error: you supplied '$with_icu', but it seems invalid"
exit 1
fi
icu_config=""
return 0
fi
log 1 "checking libicu... found"
} }
detect_pspconfig() { detect_pspconfig() {
@@ -3554,7 +3531,11 @@ showhelp() {
echo " enables fontconfig support" echo " enables fontconfig support"
echo " --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]" echo " --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]"
echo " enables XDG base directory support" echo " enables XDG base directory support"
echo " --with-icu[=icu-config] enables icu (used for right-to-left support)" echo " --with-icu enables icu components for layout and sorting"
echo " --with-icu-layout[=\"pkg-config icu-lx\"]"
echo " enables icu components for layouting (right-to-left support)"
echo " --with-icu-sort[=\"pkg-config icu-i18n\"]"
echo " enables icu components for locale specific string sorting"
echo " --static-icu try to link statically (libsicu instead of" echo " --static-icu try to link statically (libsicu instead of"
echo " libicu; can fail as the new name is guessed)" echo " libicu; can fail as the new name is guessed)"
echo " --with-iconv[=iconv-path] enables iconv support" echo " --with-iconv[=iconv-path] enables iconv support"

View File

@@ -575,20 +575,7 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front)
#ifdef WITH_ICU_SORT #ifdef WITH_ICU_SORT
if (_current_collator != NULL) { if (_current_collator != NULL) {
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
int result; int result = _current_collator->compareUTF8(s1, s2, status);
/* We want to use the new faster method for ICU 4.2 and higher. */
#if U_ICU_VERSION_MAJOR_NUM > 4 || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 2)
/* The StringPiece parameter gets implicitly constructed from the char *. */
result = _current_collator->compareUTF8(s1, s2, status);
#else /* The following for 4.0 and lower. */
UChar buffer1[DRAW_STRING_BUFFER];
u_strFromUTF8Lenient(buffer1, lengthof(buffer1), NULL, s1, -1, &status);
UChar buffer2[DRAW_STRING_BUFFER];
u_strFromUTF8Lenient(buffer2, lengthof(buffer2), NULL, s2, -1, &status);
result = _current_collator->compare(buffer1, buffer2, status);
#endif /* ICU version check. */
if (U_SUCCESS(status)) return result; if (U_SUCCESS(status)) return result;
} }