summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.fetch1
-rw-r--r--config_host.mk.in1
-rw-r--r--configure.ac12
-rw-r--r--download.lst6
-rw-r--r--external/firebird/ExternalProject_firebird.mk1
-rw-r--r--external/harfbuzz/ExternalProject_harfbuzz.mk4
-rw-r--r--external/icu/UnpackedTarball_icu.mk37
-rw-r--r--external/icu/icu4c-59-werror-shadow.patch.174
-rw-r--r--external/icu/icu4c-59-werror-undef.patch.112
-rw-r--r--external/icu/icu4c-aix.patch.1 (renamed from external/icu/icu4c-aix.patch)18
-rw-r--r--external/icu/icu4c-android.patch.1 (renamed from external/icu/icu4c-android.patch)43
-rw-r--r--external/icu/icu4c-build.patch.1 (renamed from external/icu/icu4c-build.patch)97
-rw-r--r--external/icu/icu4c-clang-cl.patch.1 (renamed from external/icu/clang-cl.patch.0)16
-rw-r--r--external/icu/icu4c-icu11100.patch.19
-rw-r--r--external/icu/icu4c-icudata-stdlibs.patch.1 (renamed from external/icu/icu4c-icudata-stdlibs.diff)9
-rw-r--r--external/icu/icu4c-khmerbreakengine.patch.1 (renamed from external/icu/khmerbreakengine.patch)268
-rw-r--r--external/icu/icu4c-macosx.patch.1 (renamed from external/icu/icu4c-macosx.patch)8
-rw-r--r--external/icu/icu4c-mkdir.patch.1 (renamed from external/icu/icu4c-mkdir.patch)7
-rw-r--r--external/icu/icu4c-rpath.patch.1 (renamed from external/icu/icu4c-rpath.patch)37
-rw-r--r--external/icu/icu4c-rtti.patch.112
-rw-r--r--external/icu/icu4c-scriptrun.patch.1 (renamed from external/icu/icu4c-scriptrun.patch)20
-rw-r--r--external/icu/icu4c-solarisgcc.patch12
-rw-r--r--external/icu/icu4c-solarisgcc.patch.112
-rw-r--r--external/icu/icu4c-ubsan.patch.1 (renamed from external/icu/icu-ubsan.patch.0)68
-rw-r--r--external/icu/icu4c-warnings.patch10
-rw-r--r--external/icu/icu4c-warnings.patch.111
-rw-r--r--external/icu/rtti.patch.011
-rw-r--r--external/libcdr/ExternalProject_libcdr.mk2
-rw-r--r--external/libebook/ExternalProject_libebook.mk2
-rw-r--r--external/libfreehand/ExternalProject_libfreehand.mk1
-rw-r--r--external/libmspub/ExternalProject_libmspub.mk2
-rw-r--r--external/libvisio/ExternalProject_libvisio.mk2
32 files changed, 482 insertions, 343 deletions
diff --git a/Makefile.fetch b/Makefile.fetch
index 1191a82a83dc..5958db10db09 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -135,6 +135,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,HUNSPELL,HUNSPELL_TARBALL) \
$(call fetch_Optional,HYPHEN,HYPHEN_TARBALL) \
$(call fetch_Optional,ICU,ICU_TARBALL) \
+ $(call fetch_Optional,ICU,ICU_DATA_TARBALL) \
$(call fetch_Optional,JFREEREPORT,JFREEREPORT_FLOW_ENGINE_TARBALL) \
$(call fetch_Optional,JFREEREPORT,JFREEREPORT_FLUTE_TARBALL) \
$(call fetch_Optional,JFREEREPORT,JFREEREPORT_LIBBASE_TARBALL) \
diff --git a/config_host.mk.in b/config_host.mk.in
index 480e42fde112..6f2280d83d72 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -263,6 +263,7 @@ export ICU_MINOR=@ICU_MINOR@
export ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=@ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER@
export ICU_RECLASSIFIED_HEBREW_LETTER=@ICU_RECLASSIFIED_HEBREW_LETTER@
export ICU_RECLASSIFIED_PREPEND_SET_EMPTY=@ICU_RECLASSIFIED_PREPEND_SET_EMPTY@
+export ICU_UCHAR_TYPE=@ICU_UCHAR_TYPE@
export INTROSPECTION_SCANNER=@INTROSPECTION_SCANNER@
export ILIB=@ILIB@
export INSTALLDIR=@INSTALLDIR@
diff --git a/configure.ac b/configure.ac
index ca5d0cd6b0b7..beb41ddc7d1b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9014,7 +9014,7 @@ SYSTEM_GENBRK=
SYSTEM_GENCCODE=
SYSTEM_GENCMN=
-ICU_MAJOR=58
+ICU_MAJOR=59
ICU_MINOR=1
ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
@@ -9102,6 +9102,15 @@ else
ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
fi
+if test "$ICU_MAJOR" -ge "59"; then
+ # As of ICU 59 it defaults to typedef char16_t UChar; which is available
+ # with -std=c++11 but not all external libraries can be built with that,
+ # for those use a bit-compatible typedef uint16_t UChar; see
+ # icu/source/common/unicode/umachine.h
+ ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
+else
+ ICU_UCHAR_TYPE=""
+fi
AC_SUBST(SYSTEM_ICU)
AC_SUBST(SYSTEM_GENBRK)
AC_SUBST(SYSTEM_GENCCODE)
@@ -9113,6 +9122,7 @@ AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
AC_SUBST(ICU_CFLAGS)
AC_SUBST(ICU_LIBS)
+AC_SUBST(ICU_UCHAR_TYPE)
dnl ==================================================================
dnl Breakpad
diff --git a/download.lst b/download.lst
index 7f9658d85512..1361055c90b9 100644
--- a/download.lst
+++ b/download.lst
@@ -89,8 +89,10 @@ export HUNSPELL_SHA256SUM := 512e7d2ee69dad0b35ca011076405e56e0f10963a02d4859dbc
export HUNSPELL_TARBALL := 047c3feb121261b76dc16cdb62f54483-hunspell-1.6.0.tar.gz
export HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705
export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz
-export ICU_SHA256SUM := 0eb46ba3746a9c2092c8ad347a29b1a1b4941144772d13a88667a7b11ea30309
-export ICU_TARBALL := 1901302aaff1c1633ef81862663d2917-icu4c-58_1-src.tgz
+export ICU_SHA256SUM := 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe
+export ICU_TARBALL := icu4c-59_1-src.tgz
+export ICU_DATA_SHA256SUM := 38a84c1289c32a96924ff286a2f33edc97671b4cc90e8c99708553a6b5a9e70a
+export ICU_DATA_TARBALL := icu4c-59_1-data.zip
export JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd
export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
export JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133
diff --git a/external/firebird/ExternalProject_firebird.mk b/external/firebird/ExternalProject_firebird.mk
index 361fffc86c64..988a24b5ed74 100644
--- a/external/firebird/ExternalProject_firebird.mk
+++ b/external/firebird/ExternalProject_firebird.mk
@@ -66,6 +66,7 @@ $(call gb_ExternalProject_get_state_target,firebird,build):
-I$(call gb_UnpackedTarball_get_dir,icu)/source/i18n \
-I$(call gb_UnpackedTarball_get_dir,icu)/source/common \
) \
+ $(ICU_UCHAR_TYPE) \
$(if $(SYSTEM_LIBTOMMATH),$(LIBTOMMATH_CFLAGS), \
-L$(call gb_UnpackedTarball_get_dir,libtommath) \
) \
diff --git a/external/harfbuzz/ExternalProject_harfbuzz.mk b/external/harfbuzz/ExternalProject_harfbuzz.mk
index 53490abc2eaa..070c58ea80a7 100644
--- a/external/harfbuzz/ExternalProject_harfbuzz.mk
+++ b/external/harfbuzz/ExternalProject_harfbuzz.mk
@@ -47,7 +47,9 @@ $(call gb_ExternalProject_get_state_target,harfbuzz,build) :
$(gb_COMPILERNOOPTFLAGS) $(gb_DEBUG_CFLAGS) \
$(gb_DEBUG_CXXFLAGS), \
$(gb_COMPILEROPTFLAGS)) \
- $(CXXFLAGS) $(if $(filter LINUX,$(OS)),-fvisibility=hidden)' \
+ $(CXXFLAGS) \
+ $(ICU_UCHAR_TYPE) \
+ $(if $(filter LINUX,$(OS)),-fvisibility=hidden)' \
&& (cd $(EXTERNAL_WORKDIR)/src && $(MAKE) lib) \
)
diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk
index fae37f5dd922..992001186d5f 100644
--- a/external/icu/UnpackedTarball_icu.mk
+++ b/external/icu/UnpackedTarball_icu.mk
@@ -11,22 +11,31 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,icu))
$(eval $(call gb_UnpackedTarball_set_tarball,icu,$(ICU_TARBALL)))
+# Data zip contains data/... and needs to end up in icu/source/data/...
+# Some files are overwritten with identical content.
+# -a to convert line endings from CrLf to LF (hopefully no binary identified as
+# text ...) so existing patches still apply and can be generated.
+$(eval $(call gb_UnpackedTarball_set_pre_action,icu,\
+ unzip -q -a -d source -o $(gb_UnpackedTarget_TARFILE_LOCATION)/$(ICU_DATA_TARBALL) \
+))
+
$(eval $(call gb_UnpackedTarball_add_patches,icu,\
- external/icu/icu4c-build.patch \
- external/icu/icu4c-aix.patch \
- external/icu/icu4c-warnings.patch \
- external/icu/icu4c-macosx.patch \
- external/icu/icu4c-solarisgcc.patch \
- external/icu/icu4c-mkdir.patch \
- external/icu/icu4c-$(if $(filter ANDROID,$(OS)),android,rpath).patch \
- external/icu/icu-ubsan.patch.0 \
+ external/icu/icu4c-build.patch.1 \
+ external/icu/icu4c-aix.patch.1 \
+ external/icu/icu4c-warnings.patch.1 \
+ external/icu/icu4c-macosx.patch.1 \
+ external/icu/icu4c-solarisgcc.patch.1 \
+ external/icu/icu4c-mkdir.patch.1 \
+ external/icu/icu4c-$(if $(filter ANDROID,$(OS)),android,rpath).patch.1 \
+ external/icu/icu4c-ubsan.patch.1 \
external/icu/icu4c-icu11100.patch.1 \
- external/icu/icu4c-scriptrun.patch \
- external/icu/rtti.patch.0 \
- external/icu/clang-cl.patch.0 \
- $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.diff) \
- external/icu/khmerbreakengine.patch \
- external/icu/icu4c-changeset-39671.patch.1 \
+ external/icu/icu4c-scriptrun.patch.1 \
+ external/icu/icu4c-rtti.patch.1 \
+ external/icu/icu4c-clang-cl.patch.1 \
+ $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \
+ external/icu/icu4c-khmerbreakengine.patch.1 \
+ external/icu/icu4c-59-werror-undef.patch.1 \
+ external/icu/icu4c-59-werror-shadow.patch.1 \
))
$(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict))
diff --git a/external/icu/icu4c-59-werror-shadow.patch.1 b/external/icu/icu4c-59-werror-shadow.patch.1
new file mode 100644
index 000000000000..8d09e44025e3
--- /dev/null
+++ b/external/icu/icu4c-59-werror-shadow.patch.1
@@ -0,0 +1,74 @@
+diff -ur icu.org/source/common/unicode/char16ptr.h icu/source/common/unicode/char16ptr.h
+--- icu.org/source/common/unicode/char16ptr.h 2017-03-29 06:44:37.000000000 +0200
++++ icu/source/common/unicode/char16ptr.h 2017-04-24 11:56:47.707572355 +0200
+@@ -107,14 +107,14 @@
+
+ #ifdef U_ALIASING_BARRIER
+
+-Char16Ptr::Char16Ptr(char16_t *p) : p(p) {}
++Char16Ptr::Char16Ptr(char16_t *p_) : p(p_) {}
+ #if !U_CHAR16_IS_TYPEDEF
+-Char16Ptr::Char16Ptr(uint16_t *p) : p(cast(p)) {}
++Char16Ptr::Char16Ptr(uint16_t *p_) : p(cast(p_)) {}
+ #endif
+ #if U_SIZEOF_WCHAR_T==2
+-Char16Ptr::Char16Ptr(wchar_t *p) : p(cast(p)) {}
++Char16Ptr::Char16Ptr(wchar_t *p_) : p(cast(p_)) {}
+ #endif
+-Char16Ptr::Char16Ptr(std::nullptr_t p) : p(p) {}
++Char16Ptr::Char16Ptr(std::nullptr_t p_) : p(p_) {}
+ Char16Ptr::~Char16Ptr() {
+ U_ALIASING_BARRIER(p);
+ }
+@@ -215,14 +215,14 @@
+
+ #ifdef U_ALIASING_BARRIER
+
+-ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p(p) {}
++ConstChar16Ptr::ConstChar16Ptr(const char16_t *p_) : p(p_) {}
+ #if !U_CHAR16_IS_TYPEDEF
+-ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p(cast(p)) {}
++ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p_) : p(cast(p_)) {}
+ #endif
+ #if U_SIZEOF_WCHAR_T==2
+-ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p(cast(p)) {}
++ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p_) : p(cast(p_)) {}
+ #endif
+-ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p(p) {}
++ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p_) : p(p_) {}
+ ConstChar16Ptr::~ConstChar16Ptr() {
+ U_ALIASING_BARRIER(p);
+ }
+diff -ur icu.org/source/common/unicode/unistr.h icu/source/common/unicode/unistr.h
+--- icu.org/source/common/unicode/unistr.h 2017-03-29 06:44:37.000000000 +0200
++++ icu/source/common/unicode/unistr.h 2017-04-24 11:59:51.782076511 +0200
+@@ -3080,11 +3080,11 @@
+ * uint16_t * constructor.
+ * Delegates to UnicodeString(const char16_t *, int32_t).
+ * @param text UTF-16 string
+- * @param length string length
++ * @param length_ string length
+ * @draft ICU 59
+ */
+- UnicodeString(const uint16_t *text, int32_t length) :
+- UnicodeString(ConstChar16Ptr(text), length) {}
++ UnicodeString(const uint16_t *text, int32_t length_) :
++ UnicodeString(ConstChar16Ptr(text), length_) {}
+ #endif
+
+ /*
+@@ -3097,11 +3097,11 @@
+ * (Only defined if U_SIZEOF_WCHAR_T==2.)
+ * Delegates to UnicodeString(const char16_t *, int32_t).
+ * @param text NUL-terminated UTF-16 string
+- * @param length string length
++ * @param length_ string length
+ * @draft ICU 59
+ */
+- UnicodeString(const wchar_t *text, int32_t length) :
+- UnicodeString(ConstChar16Ptr(text), length) {}
++ UnicodeString(const wchar_t *text, int32_t length_) :
++ UnicodeString(ConstChar16Ptr(text), length_) {}
+ #endif
+
+ /*
diff --git a/external/icu/icu4c-59-werror-undef.patch.1 b/external/icu/icu4c-59-werror-undef.patch.1
new file mode 100644
index 000000000000..196d78984a18
--- /dev/null
+++ b/external/icu/icu4c-59-werror-undef.patch.1
@@ -0,0 +1,12 @@
+diff -ur icu.org/source/common/unicode/uvernum.h icu/source/common/unicode/uvernum.h
+--- icu.org/source/common/unicode/uvernum.h 2017-03-21 02:03:49.000000000 +0100
++++ icu/source/common/unicode/uvernum.h 2017-04-21 23:44:55.123597927 +0200
+@@ -125,7 +125,7 @@
+ * This value will change in the subsequent releases of ICU
+ * @stable ICU 2.6
+ */
+-#if U_PLATFORM_HAS_WINUWP_API == 0
++#if !defined(U_PLATFORM_HAS_WINUWP_API) || (U_PLATFORM_HAS_WINUWP_API == 0)
+ #define U_ICU_VERSION_SHORT "59"
+ #else
+ // U_DISABLE_RENAMING does not impact dat file name
diff --git a/external/icu/icu4c-aix.patch b/external/icu/icu4c-aix.patch.1
index f4a449f9b423..77982163b965 100644
--- a/external/icu/icu4c-aix.patch
+++ b/external/icu/icu4c-aix.patch.1
@@ -1,6 +1,7 @@
---- misc/icu/source/config/mh-aix-gcc 2010-06-24 20:58:16.000000000 -0500
-+++ misc/build/icu/source/config/mh-aix-gcc 2013-10-31 20:34:16.607982310 +0700
-@@ -13,84 +13,29 @@
+diff -ur icu.org/source/config/mh-aix-gcc icu/source/config/mh-aix-gcc
+--- icu.org/source/config/mh-aix-gcc 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/config/mh-aix-gcc 2017-04-21 21:58:49.731432198 +0200
+@@ -18,84 +18,29 @@
GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS)
GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS)
@@ -97,7 +98,7 @@
## Compilation rules
%.$(STATIC_O): $(srcdir)/%.c
-@@ -118,10 +63,10 @@
+@@ -123,10 +68,10 @@
[ -s $@ ] || rm -f $@'
## Versioned libraries rules
@@ -112,9 +113,10 @@
## BIR - bind with internal references [so app data and icu data doesn't collide]
---- misc/icu/source/tools/pkgdata/pkgdata.cpp 2013-04-06 20:56:00.935656635 +0100
-+++ misc/build/icu/source/tools/pkgdata/pkgdata.cpp 2013-10-31 20:38:10.623984554 +0700
-@@ -902,7 +902,7 @@
+diff -ur icu.org/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgdata.cpp
+--- icu.org/source/tools/pkgdata/pkgdata.cpp 2017-03-21 02:03:49.000000000 +0100
++++ icu/source/tools/pkgdata/pkgdata.cpp 2017-04-21 21:58:49.732432195 +0200
+@@ -934,7 +934,7 @@
uprv_strcat(pkgDataFlags[SO_EXT], ".");
uprv_strcat(pkgDataFlags[SO_EXT], pkgDataFlags[A_EXT]);
@@ -123,7 +125,7 @@
sprintf(libFileNames[LIB_FILE_VERSION_TMP], "%s%s%s",
libFileNames[LIB_FILE],
FILE_EXTENSION_SEP,
-@@ -1375,15 +1375,6 @@
+@@ -1407,15 +1407,6 @@
pkgDataFlags[LDICUDTFLAGS],
targetDir,
libFileNames[LIB_FILE_CYGWIN_VERSION],
diff --git a/external/icu/icu4c-android.patch b/external/icu/icu4c-android.patch.1
index 0b320a8cad81..c62cf54e5936 100644
--- a/external/icu/icu4c-android.patch
+++ b/external/icu/icu4c-android.patch.1
@@ -1,6 +1,19 @@
---- misc/icu/source/config/mh-linux 2013-10-05 03:50:00.000000000 +0700
-+++ misc/build/icu/source/config/mh-linux 2013-11-10 17:11:46.856222557 +0700
-@@ -25,7 +25,7 @@
+diff -ur icu.org/source/common/unicode/platform.h icu/source/common/unicode/platform.h
+--- icu.org/source/common/unicode/platform.h 2017-03-22 20:06:26.000000000 +0100
++++ icu/source/common/unicode/platform.h 2017-04-21 22:32:31.656693147 +0200
+@@ -818,7 +818,7 @@
+ #elif defined(U_STATIC_IMPLEMENTATION)
+ # define U_EXPORT
+ #elif defined(__GNUC__)
+-# define U_EXPORT __attribute__((visibility("default")))
++# define U_EXPORT
+ #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
+ || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550)
+ # define U_EXPORT __global
+diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
+--- icu.org/source/config/mh-linux 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/config/mh-linux 2017-04-21 22:32:31.653693154 +0200
+@@ -27,7 +27,7 @@
## Compiler switch to embed a library name
# The initial tab in the next line is to prevent icu-config from reading it.
@@ -9,9 +22,10 @@
#SH# # We can't depend on MIDDLE_SO_TARGET being set.
#SH# LD_SONAME=
---- misc/icu/source/configure 2013-10-05 03:54:58.000000000 +0700
-+++ misc/build/icu/source/configure 2013-11-10 17:19:19.200218763 +0700
-@@ -4872,7 +4872,7 @@
+diff -ur icu.org/source/configure icu/source/configure
+--- icu.org/source/configure 2017-04-07 09:40:30.000000000 +0200
++++ icu/source/configure 2017-04-21 22:32:31.656693147 +0200
+@@ -5134,7 +5134,7 @@
else
icu_cv_host_frag=mh-linux-va
fi ;;
@@ -20,7 +34,7 @@
i[34567]86-*-cygwin)
if test "$GCC" = yes; then
icu_cv_host_frag=mh-cygwin
-@@ -6032,6 +6032,10 @@
+@@ -6358,6 +6358,10 @@
# Check to see if genccode can generate simple assembly.
GENCCODE_ASSEMBLY=
case "${host}" in
@@ -31,7 +45,7 @@
*-linux*|*-kfreebsd*-gnu*|i*86-*-*bsd*|i*86-pc-gnu)
if test "$GCC" = yes; then
# We're using gcc, and the simple -a gcc command line works for genccode
-@@ -7104,6 +7108,10 @@
+@@ -7445,6 +7449,10 @@
# wchar_t can be used
CHECK_UTF16_STRING_RESULT="available"
;;
@@ -42,16 +56,3 @@
*)
;;
esac
-
---- misc/icu/source/common/unicode/platform.h 2013-10-05 03:49:10.000000000 +0700
-+++ misc/build/icu/source/common/unicode/platform.h 2013-11-10 17:22:27.160217186 +0700
-@@ -703,7 +703,7 @@
- #elif defined(U_STATIC_IMPLEMENTATION)
- # define U_EXPORT
- #elif defined(__GNUC__)
--# define U_EXPORT __attribute__((visibility("default")))
-+# define U_EXPORT
- #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
- || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550)
- # define U_EXPORT __global
-
diff --git a/external/icu/icu4c-build.patch b/external/icu/icu4c-build.patch.1
index 103e9aea5b64..6d9ade608cb5 100644
--- a/external/icu/icu4c-build.patch
+++ b/external/icu/icu4c-build.patch.1
@@ -1,48 +1,7 @@
---- misc/icu/source/tools/toolutil/pkg_genc.h
-+++ misc/build/icu/source/tools/toolutil/pkg_genc.h
-@@ -58,7 +58,7 @@
- #endif
-
- #define LARGE_BUFFER_MAX_SIZE 2048
--#define SMALL_BUFFER_MAX_SIZE 512
-+#define SMALL_BUFFER_MAX_SIZE 2048
- #define SMALL_BUFFER_FLAG_NAMES 32
- #define BUFFER_PADDING_SIZE 20
-
---- misc/icu/source/tools/toolutil/pkg_genc.c
-+++ misc/build/icu/source/tools/toolutil/pkg_genc.c
-@@ -152,6 +152,28 @@
-
- ".long ","",HEX_0X
- },
-+ {"gcc-android-arm",
-+ "\t.arch armv5te\n"
-+ "\t.fpu softvfp\n"
-+ "\t.eabi_attribute 20, 1\n"
-+ "\t.eabi_attribute 21, 1\n"
-+ "\t.eabi_attribute 23, 3\n"
-+ "\t.eabi_attribute 24, 1\n"
-+ "\t.eabi_attribute 25, 1\n"
-+ "\t.eabi_attribute 26, 2\n"
-+ "\t.eabi_attribute 30, 6\n"
-+ "\t.eabi_attribute 18, 4\n"
-+ "\t.file \"%s.s\"\n"
-+ "\t.global %s\n"
-+ "\t.section .rodata\n"
-+ "\t.align 2\n"
-+ "\t.type %s, %%object\n"
-+ "%s:\n",
-+
-+ "\t.word ",
-+ "\t.section .note.GNU-stack,\"\",%%progbits\n",
-+ HEX_0X
-+ },
- /* 16 bytes alignment. */
- /* http://docs.oracle.com/cd/E19641-01/802-1947/802-1947.pdf */
- {"sun",
---- misc/icu/source/config/mh-darwin 2010-09-29 20:37:36.000000000 +0200
-+++ misc/build/icu/source/config/mh-darwin 2011-03-15 10:56:26.653056004 +0100
-@@ -28,11 +28,7 @@
+diff -ur icu.org/source/config/mh-darwin icu/source/config/mh-darwin
+--- icu.org/source/config/mh-darwin 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/config/mh-darwin 2017-04-21 21:30:23.584568210 +0200
+@@ -30,11 +30,7 @@
SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS) $(LD_SOOPTIONS)
## Compiler switches to embed a library name and version information
@@ -55,7 +14,7 @@
## Compiler switch to embed a runtime search path
LD_RPATH=
-@@ -48,10 +44,6 @@
+@@ -50,10 +46,6 @@
## Non-shared intermediate object suffix
STATIC_O = ao
@@ -66,7 +25,7 @@
## Compilation and dependency rules
%.$(STATIC_O): $(srcdir)/%.c
$(call SILENT_COMPILE,$(strip $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS)) -MMD -MT "$*.d $*.o $*.$(STATIC_O)" -o $@ $<)
-@@ -65,16 +57,10 @@
+@@ -67,16 +59,10 @@
## Versioned libraries rules
@@ -86,3 +45,47 @@
## Remove shared library 's'
STATIC_PREFIX_WHEN_USED =
+diff -ur icu.org/source/tools/toolutil/pkg_genc.cpp icu/source/tools/toolutil/pkg_genc.cpp
+--- icu.org/source/tools/toolutil/pkg_genc.cpp 2017-04-13 11:46:02.000000000 +0200
++++ icu/source/tools/toolutil/pkg_genc.cpp 2017-04-21 21:30:23.583568212 +0200
+@@ -160,6 +160,28 @@
+
+ ".long ","",HEX_0X
+ },
++ {"gcc-android-arm",
++ "\t.arch armv5te\n"
++ "\t.fpu softvfp\n"
++ "\t.eabi_attribute 20, 1\n"
++ "\t.eabi_attribute 21, 1\n"
++ "\t.eabi_attribute 23, 3\n"
++ "\t.eabi_attribute 24, 1\n"
++ "\t.eabi_attribute 25, 1\n"
++ "\t.eabi_attribute 26, 2\n"
++ "\t.eabi_attribute 30, 6\n"
++ "\t.eabi_attribute 18, 4\n"
++ "\t.file \"%s.s\"\n"
++ "\t.global %s\n"
++ "\t.section .rodata\n"
++ "\t.align 2\n"
++ "\t.type %s, %%object\n"
++ "%s:\n",
++
++ "\t.word ",
++ "\t.section .note.GNU-stack,\"\",%%progbits\n",
++ HEX_0X
++ },
+ /* 16 bytes alignment. */
+ /* http://docs.oracle.com/cd/E19641-01/802-1947/802-1947.pdf */
+ {"sun",
+diff -ur icu.org/source/tools/toolutil/pkg_genc.h icu/source/tools/toolutil/pkg_genc.h
+--- icu.org/source/tools/toolutil/pkg_genc.h 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/tools/toolutil/pkg_genc.h 2017-04-21 21:30:23.582568215 +0200
+@@ -60,7 +60,7 @@
+ #endif
+
+ #define LARGE_BUFFER_MAX_SIZE 2048
+-#define SMALL_BUFFER_MAX_SIZE 512
++#define SMALL_BUFFER_MAX_SIZE 2048
+ #define SMALL_BUFFER_FLAG_NAMES 32
+ #define BUFFER_PADDING_SIZE 20
+
diff --git a/external/icu/clang-cl.patch.0 b/external/icu/icu4c-clang-cl.patch.1
index 4df5d0f56c83..9e287710a463 100644
--- a/external/icu/clang-cl.patch.0
+++ b/external/icu/icu4c-clang-cl.patch.1
@@ -1,19 +1,21 @@
---- source/config/mh-cygwin-msvc
-+++ source/config/mh-cygwin-msvc
-@@ -51,8 +51,8 @@
+diff -ur icu.org/source/config/mh-cygwin-msvc icu/source/config/mh-cygwin-msvc
+--- icu.org/source/config/mh-cygwin-msvc 2017-01-23 01:38:28.000000000 +0100
++++ icu/source/config/mh-cygwin-msvc 2017-04-21 23:07:28.482892025 +0200
+@@ -55,8 +55,8 @@
LDFLAGS+=-nologo
# Commands to compile
-COMPILE.c= $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
-+COMPILE.c= true && $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
-COMPILE.cc= $(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
++COMPILE.c= true && $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
+COMPILE.cc= true && $(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
# Commands to link
LINK.c= LINK.EXE -subsystem:console $(LDFLAGS)
---- source/runConfigureICU
-+++ source/runConfigureICU
-@@ -259,8 +259,8 @@
+diff -ur icu.org/source/runConfigureICU icu/source/runConfigureICU
+--- icu.org/source/runConfigureICU 2017-01-23 01:38:28.000000000 +0100
++++ icu/source/runConfigureICU 2017-04-21 23:07:28.482892025 +0200
+@@ -261,8 +261,8 @@
Cygwin/MSVC)
THE_OS="Windows with Cygwin"
THE_COMP="Microsoft Visual C++"
diff --git a/external/icu/icu4c-icu11100.patch.1 b/external/icu/icu4c-icu11100.patch.1
index 18bfe4f1c9c2..2f0e390961c1 100644
--- a/external/icu/icu4c-icu11100.patch.1
+++ b/external/icu/icu4c-icu11100.patch.1
@@ -1,6 +1,7 @@
---- icu/source/common/ubidi.c.orig 2014-08-09 20:54:39.338833533 +0100
-+++ icu/source/common/ubidi.c 2014-08-09 20:55:48.625469055 +0100
-@@ -2096,6 +2096,14 @@
+diff -ur icu.org/source/common/ubidi.cpp icu/source/common/ubidi.cpp
+--- icu.org/source/common/ubidi.cpp 2017-03-07 23:57:46.000000000 +0100
++++ icu/source/common/ubidi.cpp 2017-04-21 22:55:11.352659142 +0200
+@@ -2125,6 +2125,14 @@
return DirProp_ON;
}
@@ -15,7 +16,7 @@
static void
resolveImplicitLevels(UBiDi *pBiDi,
int32_t start, int32_t limit,
-@@ -2239,7 +2247,7 @@
+@@ -2271,7 +2279,7 @@
/* look for the last char not a BN or LRE/RLE/LRO/RLO/PDF */
for(i=limit-1; i>start&&(DIRPROP_FLAG(dirProps[i])&MASK_BN_EXPLICIT); i--);
dirProp=dirProps[i];
diff --git a/external/icu/icu4c-icudata-stdlibs.diff b/external/icu/icu4c-icudata-stdlibs.patch.1
index 16bea7b4a995..c8d66c6ed06f 100644
--- a/external/icu/icu4c-icudata-stdlibs.diff
+++ b/external/icu/icu4c-icudata-stdlibs.patch.1
@@ -1,8 +1,7 @@
-Index: icu-52~m1/source/config/mh-linux
-===================================================================
---- build/icu-52~m1.orig/source/config/mh-linux 2013-09-14 18:53:23.284040467 -0400
-+++ build/icu-52~m1/source/config/mh-linux 2013-09-14 18:53:23.284040467 -0400
-@@ -21,7 +21,9 @@
+diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
+--- icu.org/source/config/mh-linux 2017-04-21 23:09:57.588533707 +0200
++++ icu/source/config/mh-linux 2017-04-21 23:11:38.075292226 +0200
+@@ -27,7 +27,9 @@
RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN'
## These are the library specific LDFLAGS
diff --git a/external/icu/khmerbreakengine.patch b/external/icu/icu4c-khmerbreakengine.patch.1
index 8f81f315da3e..74f60f866257 100644
--- a/external/icu/khmerbreakengine.patch
+++ b/external/icu/icu4c-khmerbreakengine.patch.1
@@ -1,8 +1,7 @@
-diff --git a/source/common/dictbe.cpp b/source/common/dictbe.cpp
-index f1c874d..3ad1b3f 100644
---- misc/icu/source/common/dictbe.cpp
-+++ build/icu/source/common/dictbe.cpp
-@@ -27,8 +27,17 @@ U_NAMESPACE_BEGIN
+diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
+--- icu.org/source/common/dictbe.cpp 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/dictbe.cpp 2017-04-21 23:14:23.845894374 +0200
+@@ -29,8 +29,17 @@
******************************************************************
*/
@@ -21,7 +20,7 @@ index f1c874d..3ad1b3f 100644
}
DictionaryBreakEngine::~DictionaryBreakEngine() {
-@@ -90,7 +99,7 @@ DictionaryBreakEngine::findBreaks( UText *text,
+@@ -92,7 +101,7 @@
result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
utext_setNativeIndex(text, current);
}
@@ -30,7 +29,7 @@ index f1c874d..3ad1b3f 100644
return result;
}
-@@ -101,6 +110,169 @@ DictionaryBreakEngine::setCharacters( const UnicodeSet &set ) {
+@@ -103,6 +112,169 @@
fSet.compact();
}
@@ -200,7 +199,7 @@ index f1c874d..3ad1b3f 100644
/*
******************************************************************
* PossibleWord
-@@ -128,35 +302,35 @@ private:
+@@ -130,35 +302,35 @@
public:
PossibleWord() : count(0), prefix(0), offset(-1), mark(0), current(0) {};
~PossibleWord() {};
@@ -245,7 +244,7 @@ index f1c874d..3ad1b3f 100644
// Dictionary leaves text after longest prefix, not longest word. Back up.
if (count <= 0) {
utext_setNativeIndex(text, start);
-@@ -828,51 +1002,28 @@ foundBest:
+@@ -830,51 +1002,28 @@
* KhmerBreakEngine
*/
@@ -308,14 +307,22 @@ index f1c874d..3ad1b3f 100644
}
KhmerBreakEngine::~KhmerBreakEngine() {
-@@ -884,180 +1036,204 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text,
+@@ -886,180 +1035,204 @@
int32_t rangeStart,
int32_t rangeEnd,
UStack &foundBreaks ) const {
- if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
- return 0; // Not enough characters for two words
+- }
+-
+- uint32_t wordsFound = 0;
+- int32_t cpWordLength = 0;
+- int32_t cuWordLength = 0;
+- int32_t current;
+ uint32_t wordsFound = foundBreaks.size();
-+ UErrorCode status = U_ZERO_ERROR;
+ UErrorCode status = U_ZERO_ERROR;
+- PossibleWord words[KHMER_LOOKAHEAD];
+-
+ int32_t before = 0;
+ int32_t after = 0;
+ int32_t finalBefore = 0;
@@ -331,7 +338,7 @@ index f1c874d..3ad1b3f 100644
+ --scanStart;
+ startZwsp = scanBeforeStart(text, scanStart, breakStart);
+ }
-+ utext_setNativeIndex(text, rangeStart);
+ utext_setNativeIndex(text, rangeStart);
+ scanFwdClusters(text, rangeEnd, initAfter);
+ bool endZwsp = scanAfterEnd(text, utext_nativeLength(text), scanEnd, breakEnd);
+ utext_setNativeIndex(text, rangeEnd - 1);
@@ -342,14 +349,8 @@ index f1c874d..3ad1b3f 100644
+ if (breakEnd || fTypes < UBRK_LINE)
+ foundBreaks.push(rangeEnd, status);
+ return foundBreaks.size() - wordsFound;
- }
-
-- uint32_t wordsFound = 0;
-- int32_t cpWordLength = 0;
-- int32_t cuWordLength = 0;
-- int32_t current;
-- UErrorCode status = U_ZERO_ERROR;
-- PossibleWord words[KHMER_LOOKAHEAD];
++ }
++
+ scanStart = rangeStart;
+ scanWJ(text, scanStart, rangeEnd, before, after);
+ if (startZwsp || initAfter >= before) {
@@ -361,43 +362,20 @@ index f1c874d..3ad1b3f 100644
+ if (endZwsp && before > finalBefore)
+ before = finalBefore;
- utext_setNativeIndex(text, rangeStart);
-+ int32_t numCodePts = rangeEnd - rangeStart;
-+ // bestSnlp[i] is the snlp of the best segmentation of the first i
-+ // code points in the range to be matched.
-+ UVector32 bestSnlp(numCodePts + 1, status);
-+ bestSnlp.addElement(0, status);
-+ for(int32_t i = 1; i <= numCodePts; i++) {
-+ bestSnlp.addElement(kuint32max, status);
-+ }
-
- while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
- cuWordLength = 0;
- cpWordLength = 0;
-+ // prev[i] is the index of the last code point in the previous word in
-+ // the best segmentation of the first i characters. Note negative implies
-+ // that the code point is part of an unknown word.
-+ UVector32 prev(numCodePts + 1, status);
-+ for(int32_t i = 0; i <= numCodePts; i++) {
-+ prev.addElement(kuint32max, status);
-+ }
-
+-
- // Look for candidate words at the current position
- int32_t candidates = words[wordsFound%KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
-+ const int32_t maxWordSize = 20;
-+ UVector32 values(maxWordSize, status);
-+ values.setSize(maxWordSize);
-+ UVector32 lengths(maxWordSize, status);
-+ lengths.setSize(maxWordSize);
-
+-
- // If we found exactly one, use that
- if (candidates == 1) {
- cuWordLength = words[wordsFound % KHMER_LOOKAHEAD].acceptMarked(text);
- cpWordLength = words[wordsFound % KHMER_LOOKAHEAD].markedCPLength();
- wordsFound += 1;
- }
-+ // Dynamic programming to find the best segmentation.
-
+-
- // If there was more than one, see which one can take us forward the most words
- else if (candidates > 1) {
- // If we're already at the end of the range, we're done
@@ -412,25 +390,12 @@ index f1c874d..3ad1b3f 100644
- words[wordsFound % KHMER_LOOKAHEAD].markCurrent();
- wordsMatched = 2;
- }
-+ // In outer loop, i is the code point index,
-+ // ix is the corresponding string (code unit) index.
-+ // They differ when the string contains supplementary characters.
-+ int32_t ix = rangeStart;
-+ for (int32_t i = 0; i < numCodePts; ++i, utext_setNativeIndex(text, ++ix)) {
-+ if ((uint32_t)bestSnlp.elementAti(i) == kuint32max) {
-+ continue;
-+ }
-
+-
- // If we're already at the end of the range, we're done
- if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
- goto foundBest;
- }
-+ int32_t count;
-+ count = fDictionary->matches(text, numCodePts - i, maxWordSize,
-+ NULL, lengths.getBuffer(), values.getBuffer(), NULL, &fIgnoreSet, 2);
-+ // Note: lengths is filled with code point lengths
-+ // The NULL parameter is the ignored code unit lengths.
-
+-
- // See if any of the possible second words is followed by a third word
- do {
- // If we find a third word, stop right away
@@ -441,6 +406,47 @@ index f1c874d..3ad1b3f 100644
- }
- while (words[(wordsFound + 1) % KHMER_LOOKAHEAD].backUp(text));
- }
++ utext_setNativeIndex(text, rangeStart);
++ int32_t numCodePts = rangeEnd - rangeStart;
++ // bestSnlp[i] is the snlp of the best segmentation of the first i
++ // code points in the range to be matched.
++ UVector32 bestSnlp(numCodePts + 1, status);
++ bestSnlp.addElement(0, status);
++ for(int32_t i = 1; i <= numCodePts; i++) {
++ bestSnlp.addElement(kuint32max, status);
++ }
++
++ // prev[i] is the index of the last code point in the previous word in
++ // the best segmentation of the first i characters. Note negative implies
++ // that the code point is part of an unknown word.
++ UVector32 prev(numCodePts + 1, status);
++ for(int32_t i = 0; i <= numCodePts; i++) {
++ prev.addElement(kuint32max, status);
++ }
++
++ const int32_t maxWordSize = 20;
++ UVector32 values(maxWordSize, status);
++ values.setSize(maxWordSize);
++ UVector32 lengths(maxWordSize, status);
++ lengths.setSize(maxWordSize);
++
++ // Dynamic programming to find the best segmentation.
++
++ // In outer loop, i is the code point index,
++ // ix is the corresponding string (code unit) index.
++ // They differ when the string contains supplementary characters.
++ int32_t ix = rangeStart;
++ for (int32_t i = 0; i < numCodePts; ++i, utext_setNativeIndex(text, ++ix)) {
++ if ((uint32_t)bestSnlp.elementAti(i) == kuint32max) {
++ continue;
++ }
++
++ int32_t count;
++ count = fDictionary->matches(text, numCodePts - i, maxWordSize,
++ NULL, lengths.getBuffer(), values.getBuffer(), NULL, &fIgnoreSet, 2);
++ // Note: lengths is filled with code point lengths
++ // The NULL parameter is the ignored code unit lengths.
++
+ for (int32_t j = 0; j < count; j++) {
+ int32_t ln = lengths.elementAti(j);
+ if (ln + i >= numCodePts)
@@ -522,17 +528,27 @@ index f1c874d..3ad1b3f 100644
- if (cuWordLength <= 0) {
- wordsFound += 1;
- }
+-
+- // Update the length with the passed-over characters
+- cuWordLength += chars;
+- }
+- else {
+- // Back up to where we were for next iteration
+- utext_setNativeIndex(text, current+cuWordLength);
+ } while (fMarkSet.contains(c) || fIgnoreSet.contains(c));
+ values.setElementAt(BADSNLP, count);
+ lengths.setElementAt(utext_getNativeIndex(text) - currix, count++);
+ } else {
+ values.setElementAt(BADSNLP, count);
+ lengths.setElementAt(1, count++);
-+ }
-+ }
+ }
+ }
-- // Update the length with the passed-over characters
-- cuWordLength += chars;
+- // Never stop before a combining mark.
+- int32_t currPos;
+- while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) {
+- utext_next32(text);
+- cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos;
+ for (int32_t j = 0; j < count; j++) {
+ uint32_t v = values.elementAti(j);
+ int32_t newSnlp = bestSnlp.elementAti(i) + v;
@@ -543,10 +559,7 @@ index f1c874d..3ad1b3f 100644
+ ++ln;
+ utext_next32(text);
+ c = utext_current32(text);
- }
-- else {
-- // Back up to where we were for next iteration
-- utext_setNativeIndex(text, current+cuWordLength);
++ }
+ int32_t ln_j_i = ln + i; // yes really i!
+ if (newSnlp < bestSnlp.elementAti(ln_j_i)) {
+ if (v == BADSNLP) {
@@ -559,37 +572,9 @@ index f1c874d..3ad1b3f 100644
+ else
+ prev.setElementAt(i, ln_j_i);
+ bestSnlp.setElementAt(newSnlp, ln_j_i);
- }
- }
-+ }
-+ // Start pushing the optimal offset index into t_boundary (t for tentative).
-+ // prev[numCodePts] is guaranteed to be meaningful.
-+ // We'll first push in the reverse order, i.e.,
-+ // t_boundary[0] = numCodePts, and afterwards do a swap.
-+ UVector32 t_boundary(numCodePts+1, status);
-
-- // Never stop before a combining mark.
-- int32_t currPos;
-- while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) {
-- utext_next32(text);
-- cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos;
-+ int32_t numBreaks = 0;
-+ // No segmentation found, set boundary to end of range
-+ while (numCodePts >= 0 && (uint32_t)bestSnlp.elementAti(numCodePts) == kuint32max) {
-+ --numCodePts;
-+ }
-+ if (numCodePts < 0) {
-+ t_boundary.addElement(numCodePts, status);
-+ numBreaks++;
-+ } else {
-+ for (int32_t i = numCodePts; (uint32_t)i != kuint32max; i = prev.elementAti(i)) {
-+ if (i < 0) i = -i;
-+ t_boundary.addElement(i, status);
-+ numBreaks++;
++ }
}
-+ U_ASSERT(prev.elementAti(t_boundary.elementAti(numBreaks - 1)) == 0);
-+ }
-
+-
- // Look ahead for possible suffixes if a dictionary word does not follow.
- // We do this in code rather than using a rule so that the heuristic
- // resynch continues to function. For example, one of the suffix characters
@@ -631,6 +616,30 @@ index f1c874d..3ad1b3f 100644
- // Did we find a word on this iteration? If so, push it on the break stack
- if (cuWordLength > 0) {
- foundBreaks.push((current+cuWordLength), status);
++ }
++ // Start pushing the optimal offset index into t_boundary (t for tentative).
++ // prev[numCodePts] is guaranteed to be meaningful.
++ // We'll first push in the reverse order, i.e.,
++ // t_boundary[0] = numCodePts, and afterwards do a swap.
++ UVector32 t_boundary(numCodePts+1, status);
++
++ int32_t numBreaks = 0;
++ // No segmentation found, set boundary to end of range
++ while (numCodePts >= 0 && (uint32_t)bestSnlp.elementAti(numCodePts) == kuint32max) {
++ --numCodePts;
++ }
++ if (numCodePts < 0) {
++ t_boundary.addElement(numCodePts, status);
++ numBreaks++;
++ } else {
++ for (int32_t i = numCodePts; (uint32_t)i != kuint32max; i = prev.elementAti(i)) {
++ if (i < 0) i = -i;
++ t_boundary.addElement(i, status);
++ numBreaks++;
++ }
++ U_ASSERT(prev.elementAti(t_boundary.elementAti(numBreaks - 1)) == 0);
++ }
++
+ // Now that we're done, convert positions in t_boundary[] (indices in
+ // the normalized input string) back to indices in the original input UText
+ // while reversing t_boundary and pushing values to foundBreaks.
@@ -659,11 +668,10 @@ index f1c874d..3ad1b3f 100644
}
#if !UCONFIG_NO_NORMALIZATION
-diff --git a/source/common/dictbe.h b/source/common/dictbe.h
-index d3488cd..26caa75 100644
---- misc/icu/source/common/dictbe.h
-+++ build/icu/source/common/dictbe.h
-@@ -32,6 +32,15 @@ class Normalizer2;
+diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
+--- icu.org/source/common/dictbe.h 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/dictbe.h 2017-04-21 23:14:23.845894374 +0200
+@@ -34,6 +34,15 @@
*/
class DictionaryBreakEngine : public LanguageBreakEngine {
private:
@@ -679,7 +687,7 @@ index d3488cd..26caa75 100644
/**
* The set of characters handled by this engine
* @internal
-@@ -46,11 +55,63 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
+@@ -48,11 +57,63 @@
uint32_t fTypes;
@@ -746,7 +754,7 @@ index d3488cd..26caa75 100644
public:
-@@ -81,7 +142,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
+@@ -83,7 +144,7 @@
* <p>Find any breaks within a run in the supplied text.</p>
*
* @param text A UText representing the text. The iterator is left at
@@ -755,7 +763,7 @@ index d3488cd..26caa75 100644
* that starts from the first (or last) character in the range.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
-@@ -243,118 +304,120 @@ class LaoBreakEngine : public DictionaryBreakEngine {
+@@ -245,118 +306,120 @@
};
@@ -988,11 +996,10 @@ index d3488cd..26caa75 100644
#if !UCONFIG_NO_NORMALIZATION
/*******************************************************************
-diff --git a/source/common/dictionarydata.cpp b/source/common/dictionarydata.cpp
-index cb594c6..82f2e77 100644
---- misc/icu/source/common/dictionarydata.cpp
-+++ build/icu/source/common/dictionarydata.cpp
-@@ -42,7 +42,7 @@ int32_t UCharsDictionaryMatcher::getType() const {
+diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionarydata.cpp
+--- icu.org/source/common/dictionarydata.cpp 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/dictionarydata.cpp 2017-04-21 23:14:23.846894372 +0200
+@@ -44,7 +44,7 @@
int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1001,7 +1008,7 @@ index cb594c6..82f2e77 100644
UCharsTrie uct(characters);
int32_t startingTextIndex = (int32_t)utext_getNativeIndex(text);
-@@ -53,7 +53,13 @@ int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t
+@@ -55,7 +55,13 @@
UStringTrieResult result = (codePointsMatched == 0) ? uct.first(c) : uct.next(c);
int32_t lengthMatched = (int32_t)utext_getNativeIndex(text) - startingTextIndex;
codePointsMatched += 1;
@@ -1015,7 +1022,7 @@ index cb594c6..82f2e77 100644
if (wordCount < limit) {
if (values != NULL) {
values[wordCount] = uct.getValue();
-@@ -110,7 +116,7 @@ int32_t BytesDictionaryMatcher::getType() const {
+@@ -112,7 +118,7 @@
int32_t BytesDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1024,7 +1031,7 @@ index cb594c6..82f2e77 100644
BytesTrie bt(characters);
int32_t startingTextIndex = (int32_t)utext_getNativeIndex(text);
int32_t wordCount = 0;
-@@ -120,7 +126,13 @@ int32_t BytesDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t
+@@ -122,7 +128,13 @@
UStringTrieResult result = (codePointsMatched == 0) ? bt.first(transform(c)) : bt.next(transform(c));
int32_t lengthMatched = (int32_t)utext_getNativeIndex(text) - startingTextIndex;
codePointsMatched += 1;
@@ -1038,11 +1045,10 @@ index cb594c6..82f2e77 100644
if (wordCount < limit) {
if (values != NULL) {
values[wordCount] = bt.getValue();
-diff --git a/source/common/dictionarydata.h b/source/common/dictionarydata.h
-index 0216ab0..ee9e571 100644
---- misc/icu/source/common/dictionarydata.h
-+++ build/icu/source/common/dictionarydata.h
-@@ -19,6 +19,7 @@
+diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata.h
+--- icu.org/source/common/dictionarydata.h 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/dictionarydata.h 2017-04-21 23:14:23.846894372 +0200
+@@ -21,6 +21,7 @@
#include "unicode/utext.h"
#include "unicode/udata.h"
#include "udataswp.h"
@@ -1050,7 +1056,7 @@ index 0216ab0..ee9e571 100644
#include "unicode/uobject.h"
#include "unicode/ustringtrie.h"
-@@ -90,7 +91,7 @@ public:
+@@ -92,7 +93,7 @@
*/
virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1059,7 +1065,7 @@ index 0216ab0..ee9e571 100644
/** @return DictionaryData::TRIE_TYPE_XYZ */
virtual int32_t getType() const = 0;
-@@ -105,7 +106,7 @@ public:
+@@ -107,7 +108,7 @@
virtual ~UCharsDictionaryMatcher();
virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1068,7 +1074,7 @@ index 0216ab0..ee9e571 100644
virtual int32_t getType() const;
private:
const UChar *characters;
-@@ -123,7 +124,7 @@ public:
+@@ -125,7 +126,7 @@
virtual ~BytesDictionaryMatcher();
virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1077,11 +1083,10 @@ index 0216ab0..ee9e571 100644
virtual int32_t getType() const;
private:
UChar32 transform(UChar32 c) const;
-diff --git a/source/data/Makefile.in b/source/data/Makefile.in
-index 816c82d..c637d70 100644
---- misc/icu/source/data/Makefile.in
-+++ build/icu/source/data/Makefile.in
-@@ -181,7 +181,7 @@ endif
+diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in
+--- icu.org/source/data/Makefile.in 2017-04-21 23:13:03.248087545 +0200
++++ icu/source/data/Makefile.in 2017-04-21 23:14:23.846894372 +0200
+@@ -183,7 +183,7 @@
endif
endif
@@ -1090,9 +1095,9 @@ index 816c82d..c637d70 100644
ifneq ($(ENABLE_STATIC),)
ifeq ($(PKGDATA_MODE),dll)
$(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(PKGDATA_VERSIONING) $(PKGDATA_LIST)
-@@ -564,8 +564,14 @@ $(BRKBLDDIR)/burmesedict.dict: $(TOOLBINDIR)/gendict$(TOOLEXEEXT) $(DAT_FILES)
+@@ -567,8 +567,14 @@
$(INVOKE) $(TOOLBINDIR)/gendict --bytes --transform offset-0x1000 -c -i $(BUILDDIR) $(DICTSRCDIR)/burmesedict.txt $(BRKBLDDIR)/burmesedict.dict
-
+
# TODO: figure out why combining characters are here?
-$(BRKBLDDIR)/khmerdict.dict: $(TOOLBINDIR)/gendict$(TOOLEXEEXT) $(DAT_FILES)
- $(INVOKE) $(TOOLBINDIR)/gendict --bytes --transform offset-0x1780 -c -i $(BUILDDIR) $(DICTSRCDIR)/khmerdict.txt $(BRKBLDDIR)/khmerdict.dict
@@ -1104,7 +1109,6 @@ index 816c82d..c637d70 100644
+$(MAINBUILDDIR)/khmerdict.stamp: $(BRKSRCDIR)/khmerdict.dict build-local
+ cp $< $(BRKBLDDIR)
+ echo "timestamp" > $@
-
+
#################################################### CFU
# CFU FILES
-
diff --git a/external/icu/icu4c-macosx.patch b/external/icu/icu4c-macosx.patch.1
index 8f9f9a75507e..fee08eb05771 100644
--- a/external/icu/icu4c-macosx.patch
+++ b/external/icu/icu4c-macosx.patch.1
@@ -1,6 +1,7 @@
---- misc/icu/source/common/putil.cpp
-+++ misc/build/icu/source/common/putil.cpp
-@@ -1111,8 +1111,16 @@
+diff -ur icu.org/source/common/putil.cpp icu/source/common/putil.cpp
+--- icu.org/source/common/putil.cpp 2017-04-10 16:22:16.000000000 +0200
++++ icu/source/common/putil.cpp 2017-04-21 22:14:09.940217733 +0200
+@@ -1198,8 +1198,16 @@
static const time_t decemberSolstice=1198332540; /*2007-12-22 06:09 UT*/
/* This probing will tell us when daylight savings occurs. */
@@ -17,4 +18,3 @@
if(decemberSol.tm_isdst > 0) {
daylightType = U_DAYLIGHT_DECEMBER;
} else if(juneSol.tm_isdst > 0) {
-
diff --git a/external/icu/icu4c-mkdir.patch b/external/icu/icu4c-mkdir.patch.1
index 094ddd5abca4..3234f151b677 100644
--- a/external/icu/icu4c-mkdir.patch
+++ b/external/icu/icu4c-mkdir.patch.1
@@ -1,6 +1,7 @@
---- misc/icu/source/dataMakefile.in.sav 2012-04-05 22:49:20.000000000 +0200
-+++ build/icu/source/data/Makefile.in 2012-12-04 14:24:40.548026700 +0100
-@@ -363,6 +363,7 @@
+diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in
+--- icu.org/source/data/Makefile.in 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/data/Makefile.in 2017-04-21 22:29:00.747158002 +0200
+@@ -367,6 +367,7 @@
ifeq ($(PKGDATA_MODE),dll)
SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc
diff --git a/external/icu/icu4c-rpath.patch b/external/icu/icu4c-rpath.patch.1
index ba1a82595aea..debbab1a6e3d 100644
--- a/external/icu/icu4c-rpath.patch
+++ b/external/icu/icu4c-rpath.patch.1
@@ -1,6 +1,21 @@
---- misc/icu/source/data/pkgdataMakefile.in 2010-12-22 23:44:02.000000000 +0100
-+++ misc/build/icu/source/data/pkgdataMakefile.in 2011-01-03 17:52:44.000000000 +0100
-@@ -15,6 +15,9 @@ include $(top_builddir)/icudefs.mk
+diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
+--- icu.org/source/config/mh-linux 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/config/mh-linux 2017-04-21 22:38:18.893927819 +0200
+@@ -22,6 +22,10 @@
+ LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN
+ LD_RPATH_PRE = -Wl,-rpath,
+
++## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH:
++ENABLE_RPATH=YES
++RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN'
++
+ ## These are the library specific LDFLAGS
+ LDFLAGSICUDT=-nodefaultlibs -nostdlib
+
+diff -ur icu.org/source/data/pkgdataMakefile.in icu/source/data/pkgdataMakefile.in
+--- icu.org/source/data/pkgdataMakefile.in 2016-06-15 20:58:17.000000000 +0200
++++ icu/source/data/pkgdataMakefile.in 2017-04-21 22:38:18.892927822 +0200
+@@ -17,6 +17,9 @@
OUTPUTFILE=icupkg.inc
MIDDLE_SO_TARGET=
@@ -10,7 +25,7 @@
all : clean
@echo GENCCODE_ASSEMBLY_TYPE=$(GENCCODE_ASSEMBLY) >> $(OUTPUTFILE)
@echo SO=$(SO) >> $(OUTPUTFILE)
-@@ -24,7 +27,7 @@ all : clean
+@@ -26,7 +29,7 @@
@echo LIB_EXT_ORDER=$(FINAL_SO_TARGET) >> $(OUTPUTFILE)
@echo COMPILE="$(COMPILE.c)" >> $(OUTPUTFILE)
@echo LIBFLAGS="-I$(top_srcdir)/common -I$(top_builddir)/common $(SHAREDLIBCPPFLAGS) $(SHAREDLIBCFLAGS)" >> $(OUTPUTFILE)
@@ -19,17 +34,3 @@
@echo LDICUDTFLAGS=$(LDFLAGSICUDT) >> $(OUTPUTFILE)
@echo LD_SONAME=$(LD_SONAME) >> $(OUTPUTFILE)
@echo RPATH_FLAGS=$(RPATH_FLAGS) >> $(OUTPUTFILE)
---- misc/icu/source/config/mh-linux 2010-09-29 20:37:36.000000000 +0200
-+++ misc/build/icu/source/config/mh-linux 2011-03-15 10:56:26.653056004 +0100
-@@ -20,6 +20,10 @@
- LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN
- LD_RPATH_PRE = -Wl,-rpath,
-
-+## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH:
-+ENABLE_RPATH=YES
-+RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN'
-+
- ## These are the library specific LDFLAGS
- LDFLAGSICUDT=-nodefaultlibs -nostdlib
-
-
diff --git a/external/icu/icu4c-rtti.patch.1 b/external/icu/icu4c-rtti.patch.1
new file mode 100644
index 000000000000..c058c7f3c87e
--- /dev/null
+++ b/external/icu/icu4c-rtti.patch.1
@@ -0,0 +1,12 @@
+diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
+--- icu.org/source/config/mh-linux 2017-04-21 23:01:23.257769703 +0200
++++ icu/source/config/mh-linux 2017-04-21 23:03:23.166481552 +0200
+@@ -36,7 +36,7 @@
+ #SH# LD_SONAME=
+
+ ## Shared library options
+-LD_SOOPTIONS= -Wl,-Bsymbolic
++LD_SOOPTIONS= -Wl,-Bsymbolic-functions
+
+ ## Shared object suffix
+ SO = so
diff --git a/external/icu/icu4c-scriptrun.patch b/external/icu/icu4c-scriptrun.patch.1
index e307811acaad..fe81d19c846e 100644
--- a/external/icu/icu4c-scriptrun.patch
+++ b/external/icu/icu4c-scriptrun.patch.1
@@ -1,6 +1,7 @@
---- misc/icu/source/extra/scrptrun/scrptrun.cpp
-+++ misc/build/icu/source/extra/scrptrun/scrptrun.cpp
-@@ -150,7 +150,11 @@
+diff -ur icu.org/source/extra/scrptrun/scrptrun.cpp icu/source/extra/scrptrun/scrptrun.cpp
+--- icu.org/source/extra/scrptrun/scrptrun.cpp 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/extra/scrptrun/scrptrun.cpp 2017-04-21 22:59:31.708037770 +0200
+@@ -151,7 +151,11 @@
// characters above it on the stack will be poped.
if (pairIndex >= 0) {
if ((pairIndex & 1) == 0) {
@@ -13,7 +14,7 @@
parenStack[parenSP].scriptCode = scriptCode;
} else if (parenSP >= 0) {
int32_t pi = pairIndex & ~1;
-@@ -184,7 +188,14 @@
+@@ -185,7 +189,14 @@
// pop it from the stack
if (pairIndex >= 0 && (pairIndex & 1) != 0 && parenSP >= 0) {
parenSP -= 1;
@@ -29,9 +30,10 @@
}
} else {
// if the run broke on a surrogate pair,
---- misc/icu/source/extra/scrptrun/scrptrun.h
-+++ misc/build/icu/source/extra/scrptrun/scrptrun.h
-@@ -17,6 +17,7 @@
+diff -ur icu.org/source/extra/scrptrun/scrptrun.h icu/source/extra/scrptrun/scrptrun.h
+--- icu.org/source/extra/scrptrun/scrptrun.h 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/extra/scrptrun/scrptrun.h 2017-04-21 22:59:31.708037770 +0200
+@@ -19,6 +19,7 @@
#include "unicode/utypes.h"
#include "unicode/uobject.h"
#include "unicode/uscript.h"
@@ -39,7 +41,7 @@
struct ScriptRecord
{
-@@ -79,7 +80,7 @@
+@@ -81,7 +82,7 @@
int32_t scriptEnd;
UScriptCode scriptCode;
@@ -48,7 +50,7 @@
int32_t parenSP;
static int8_t highBit(int32_t value);
-@@ -133,6 +134,7 @@
+@@ -135,6 +136,7 @@
scriptEnd = charStart;
scriptCode = USCRIPT_INVALID_CODE;
parenSP = -1;
diff --git a/external/icu/icu4c-solarisgcc.patch b/external/icu/icu4c-solarisgcc.patch
deleted file mode 100644
index a47d9b1e3506..000000000000
--- a/external/icu/icu4c-solarisgcc.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- build/icu.old/source/common/uposixdefs.h
-+++ build/icu/source/common/uposixdefs.h
-@@ -52,7 +52,7 @@
- *
- * z/OS needs this definition for timeval and to get usleep.
- */
--#if !defined(_XOPEN_SOURCE_EXTENDED)
-+#if !defined(_XOPEN_SOURCE_EXTENDED) && (defined(__IBMC__) || defined(__IBMCPP__))
- # define _XOPEN_SOURCE_EXTENDED 1
- #endif
-
-
diff --git a/external/icu/icu4c-solarisgcc.patch.1 b/external/icu/icu4c-solarisgcc.patch.1
new file mode 100644
index 000000000000..6000ed0cb9e2
--- /dev/null
+++ b/external/icu/icu4c-solarisgcc.patch.1
@@ -0,0 +1,12 @@
+diff -ur icu.org/source/common/uposixdefs.h icu/source/common/uposixdefs.h
+--- icu.org/source/common/uposixdefs.h 2017-03-09 03:12:45.000000000 +0100
++++ icu/source/common/uposixdefs.h 2017-04-21 22:23:11.857926971 +0200
+@@ -54,7 +54,7 @@
+ *
+ * z/OS needs this definition for timeval and to get usleep.
+ */
+-#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__)
++#if !defined(_XOPEN_SOURCE_EXTENDED) && (defined(__TOS_MVS__) || defined(__IBMC__) || defined(__IBMCPP__))
+ # define _XOPEN_SOURCE_EXTENDED 1
+ #endif
+
diff --git a/external/icu/icu-ubsan.patch.0 b/external/icu/icu4c-ubsan.patch.1
index f16503eeb4ac..56594005e9d0 100644
--- a/external/icu/icu-ubsan.patch.0
+++ b/external/icu/icu4c-ubsan.patch.1
@@ -1,6 +1,7 @@
---- source/common/rbbidata.h
-+++ source/common/rbbidata.h
-@@ -113,7 +113,7 @@
+diff -ur icu.org/source/common/rbbidata.h icu/source/common/rbbidata.h
+--- icu.org/source/common/rbbidata.h 2017-02-03 19:57:23.000000000 +0100
++++ icu/source/common/rbbidata.h 2017-04-21 22:46:25.371651160 +0200
+@@ -115,7 +115,7 @@
/* StatusTable of the set of matching */
/* tags (rule status values) */
int16_t fReserved;
@@ -9,7 +10,7 @@
/* This array does not have two elements */
/* Array Size is actually fData->fHeader->fCatCount */
/* CAUTION: see RBBITableBuilder::getTableSize() */
-@@ -126,7 +126,7 @@
+@@ -128,7 +128,7 @@
uint32_t fRowLen; /* Length of a state table row, in bytes. */
uint32_t fFlags; /* Option Flags for this state table */
uint32_t fReserved; /* reserved */
@@ -18,9 +19,10 @@
/* (making it char[] simplifies ugly address */
/* arithmetic for indexing variable length rows.) */
};
---- source/common/rbbitblb.cpp
-+++ source/common/rbbitblb.cpp
-@@ -1067,15 +1067,15 @@
+diff -ur icu.org/source/common/rbbitblb.cpp icu/source/common/rbbitblb.cpp
+--- icu.org/source/common/rbbitblb.cpp 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/rbbitblb.cpp 2017-04-21 22:46:25.373651159 +0200
+@@ -1095,15 +1095,15 @@
return 0;
}
@@ -40,7 +42,7 @@
size += numRows * rowSize;
return size;
}
-@@ -1105,7 +1105,7 @@
+@@ -1133,7 +1133,7 @@
}
table->fRowLen = sizeof(RBBIStateTableRow) +
@@ -49,8 +51,9 @@
table->fNumStates = fDStates->size();
table->fFlags = 0;
if (fRB->fLookAheadHardBreak) {
---- source/common/ubidiimp.h
-+++ source/common/ubidiimp.h
+diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h
+--- icu.org/source/common/ubidiimp.h 2017-02-03 19:57:23.000000000 +0100
++++ icu/source/common/ubidiimp.h 2017-04-21 22:46:25.374651159 +0200
@@ -198,8 +198,8 @@
/* in a Run, logicalStart will get this bit set if the run level is odd */
#define INDEX_ODD_BIT (1UL<<31)
@@ -62,9 +65,10 @@
#define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT)
#define GET_INDEX(x) ((x)&~INDEX_ODD_BIT)
---- source/common/ucharstriebuilder.cpp
-+++ source/common/ucharstriebuilder.cpp
-@@ -285,7 +285,7 @@
+diff -ur icu.org/source/common/ucharstriebuilder.cpp icu/source/common/ucharstriebuilder.cpp
+--- icu.org/source/common/ucharstriebuilder.cpp 2017-02-03 19:57:23.000000000 +0100
++++ icu/source/common/ucharstriebuilder.cpp 2017-04-21 22:46:25.375651159 +0200
+@@ -287,7 +287,7 @@
UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode)
: LinearMatchNode(len, nextNode), s(units) {
@@ -73,9 +77,10 @@
}
UBool
---- source/common/ucmndata.c
-+++ source/common/ucmndata.c
-@@ -75,7 +75,7 @@
+diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp
+--- icu.org/source/common/ucmndata.cpp 2017-03-08 16:34:47.000000000 +0100
++++ icu/source/common/ucmndata.cpp 2017-04-21 22:46:25.376651159 +0200
+@@ -77,7 +77,7 @@
typedef struct {
uint32_t count;
uint32_t reserved;
@@ -84,9 +89,10 @@
} PointerTOC;
---- source/common/ucmndata.h
-+++ source/common/ucmndata.h
-@@ -50,7 +50,7 @@
+diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h
+--- icu.org/source/common/ucmndata.h 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/common/ucmndata.h 2017-04-21 22:46:25.377651159 +0200
+@@ -52,7 +52,7 @@
typedef struct {
uint32_t count;
@@ -95,9 +101,10 @@
} UDataOffsetTOC;
/**
---- source/common/unicode/stringtriebuilder.h
-+++ source/common/unicode/stringtriebuilder.h
-@@ -269,7 +269,7 @@
+diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/unicode/stringtriebuilder.h
+--- icu.org/source/common/unicode/stringtriebuilder.h 2017-03-10 23:01:34.000000000 +0100
++++ icu/source/common/unicode/stringtriebuilder.h 2017-04-21 22:47:43.395634383 +0200
+@@ -276,7 +276,7 @@
void setValue(int32_t v) {
hasValue=TRUE;
value=v;
@@ -106,7 +113,7 @@
}
protected:
UBool hasValue;
-@@ -296,7 +296,7 @@
+@@ -307,7 +307,7 @@
class LinearMatchNode : public ValueNode {
public:
LinearMatchNode(int32_t len, Node *nextNode)
@@ -115,7 +122,7 @@
length(len), next(nextNode) {}
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
-@@ -330,7 +330,7 @@
+@@ -342,7 +342,7 @@
equal[length]=NULL;
values[length]=value;
++length;
@@ -124,7 +131,7 @@
}
// Adds a unit which leads to another match node.
void add(int32_t c, Node *node) {
-@@ -338,7 +338,7 @@
+@@ -350,7 +350,7 @@
equal[length]=node;
values[length]=0;
++length;
@@ -133,16 +140,16 @@
}
protected:
Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value".
-@@ -353,7 +353,7 @@
+@@ -365,7 +365,7 @@
class SplitBranchNode : public BranchNode {
public:
- SplitBranchNode(UChar middleUnit, Node *lessThanNode, Node *greaterOrEqualNode)
+ SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode)
- : BranchNode(((0x555555*37+middleUnit)*37+
+ : BranchNode(((0x555555U*37+middleUnit)*37+
hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)),
unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {}
virtual UBool operator==(const Node &other) const;
-@@ -370,7 +370,7 @@
+@@ -382,7 +382,7 @@
class BranchHeadNode : public ValueNode {
public:
BranchHeadNode(int32_t len, Node *subNode)
@@ -151,8 +158,9 @@
length(len), next(subNode) {}
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
---- source/i18n/collationdatareader.cpp
-+++ source/i18n/collationdatareader.cpp
+diff -ur icu.org/source/i18n/collationdatareader.cpp icu/source/i18n/collationdatareader.cpp
+--- icu.org/source/i18n/collationdatareader.cpp 2017-01-20 01:20:31.000000000 +0100
++++ icu/source/i18n/collationdatareader.cpp 2017-04-21 22:46:25.380651158 +0200
@@ -419,6 +419,7 @@
tailoring.data, ts, fastLatinPrimaries, UPRV_LENGTHOF(fastLatinPrimaries));
if(options == ts.options && ts.variableTop != 0 &&
diff --git a/external/icu/icu4c-warnings.patch b/external/icu/icu4c-warnings.patch
deleted file mode 100644
index 96608d7d1ef3..000000000000
--- a/external/icu/icu4c-warnings.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- misc/icu/source/common/unicode/utf16.h
-+++ misc/build/icu/source/common/unicode/utf16.h
-@@ -319,6 +319,7 @@
- (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
- } else /* c>0x10ffff or not enough space */ { \
- (isError)=TRUE; \
-+ (void)(isError); \
- } \
- }
-
diff --git a/external/icu/icu4c-warnings.patch.1 b/external/icu/icu4c-warnings.patch.1
new file mode 100644
index 000000000000..3c39ba12ded7
--- /dev/null
+++ b/external/icu/icu4c-warnings.patch.1
@@ -0,0 +1,11 @@
+diff -ur icu.org/source/common/unicode/utf16.h icu/source/common/unicode/utf16.h
+--- icu.org/source/common/unicode/utf16.h 2017-02-03 19:57:23.000000000 +0100
++++ icu/source/common/unicode/utf16.h 2017-04-21 22:05:57.414397617 +0200
+@@ -321,6 +321,7 @@
+ (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
+ } else /* c>0x10ffff or not enough space */ { \
+ (isError)=TRUE; \
++ (void)(isError); \
+ } \
+ }
+
diff --git a/external/icu/rtti.patch.0 b/external/icu/rtti.patch.0
deleted file mode 100644
index 2af9622ec9ad..000000000000
--- a/external/icu/rtti.patch.0
+++ /dev/null
@@ -1,11 +0,0 @@
---- source/config/mh-linux
-+++ source/config/mh-linux
-@@ -35,7 +35,7 @@
- #SH# LD_SONAME=
-
- ## Shared library options
--LD_SOOPTIONS= -Wl,-Bsymbolic
-+LD_SOOPTIONS= -Wl,-Bsymbolic-functions
-
- ## Shared object suffix
- SO = so
diff --git a/external/libcdr/ExternalProject_libcdr.mk b/external/libcdr/ExternalProject_libcdr.mk
index 86f93daf1b90..2cd41db242cd 100644
--- a/external/libcdr/ExternalProject_libcdr.mk
+++ b/external/libcdr/ExternalProject_libcdr.mk
@@ -36,7 +36,7 @@ $(call gb_ExternalProject_get_state_target,libcdr,build) :
--disable-werror \
--disable-weffc \
$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
- CXXFLAGS="$(CXXFLAGS) $(BOOST_CPPFLAGS) \
+ CXXFLAGS="$(CXXFLAGS) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED" \
$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
&& $(MAKE) \
diff --git a/external/libebook/ExternalProject_libebook.mk b/external/libebook/ExternalProject_libebook.mk
index 45b15f2f5eb7..17065829014b 100644
--- a/external/libebook/ExternalProject_libebook.mk
+++ b/external/libebook/ExternalProject_libebook.mk
@@ -38,7 +38,7 @@ $(call gb_ExternalProject_get_state_target,libebook,build) :
$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
--disable-werror \
--disable-weffc \
- CXXFLAGS="$(CXXFLAGS) $(BOOST_CPPFLAGS) \
+ CXXFLAGS="$(CXXFLAGS) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED" \
XML_CFLAGS="$(LIBXML_CFLAGS)" \
XML_LIBS="$(LIBXML_LIBS)" \
diff --git a/external/libfreehand/ExternalProject_libfreehand.mk b/external/libfreehand/ExternalProject_libfreehand.mk
index 15a17072e872..f1bbacbb06e4 100644
--- a/external/libfreehand/ExternalProject_libfreehand.mk
+++ b/external/libfreehand/ExternalProject_libfreehand.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_ExternalProject_use_externals,libfreehand,\
$(call gb_ExternalProject_get_state_target,libfreehand,build) :
$(call gb_ExternalProject_run,build,\
export PKG_CONFIG="" \
+ && export CXXFLAGS="$(CXXFLAGS) $(ICU_UCHAR_TYPE)" \
&& MAKE=$(MAKE) ./configure \
--with-pic \
--enable-static \
diff --git a/external/libmspub/ExternalProject_libmspub.mk b/external/libmspub/ExternalProject_libmspub.mk
index a168a62c636f..808d74b2f571 100644
--- a/external/libmspub/ExternalProject_libmspub.mk
+++ b/external/libmspub/ExternalProject_libmspub.mk
@@ -35,7 +35,7 @@ $(call gb_ExternalProject_get_state_target,libmspub,build) :
--disable-werror \
--disable-weffc \
$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
- CXXFLAGS="$(CXXFLAGS) $(BOOST_CPPFLAGS) \
+ CXXFLAGS="$(CXXFLAGS) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED" \
$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
&& $(MAKE) \
diff --git a/external/libvisio/ExternalProject_libvisio.mk b/external/libvisio/ExternalProject_libvisio.mk
index 884fde820d00..2f212ceac249 100644
--- a/external/libvisio/ExternalProject_libvisio.mk
+++ b/external/libvisio/ExternalProject_libvisio.mk
@@ -35,7 +35,7 @@ $(call gb_ExternalProject_get_state_target,libvisio,build) :
$(if $(ENABLE_DEBUG),--enable-debug,--disable-debug) \
--disable-werror \
$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
- CXXFLAGS="$(CXXFLAGS) $(BOOST_CPPFLAGS)" \
+ CXXFLAGS="$(CXXFLAGS) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS)" \
$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
&& $(MAKE) \
)