summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-04-22 01:24:19 +0200
committerEike Rathke <erack@redhat.com>2017-04-26 19:48:18 +0200
commitfabad007c60958f2ff87e8f636ff6a798ad1f963 (patch)
treecc7b5c588235f251b71738b128bfaa0b3ce291b0 /external
parent1b471124df251011b0053900cb82ceb0f3d8be86 (diff)
Upgrade to ICU 59.1
Also regenerated all patches using make icu.genpatch (hence the .1 suffix that indicates the path level) as some hunks did not apply anyway and all now have the correct offset. Using genpatch may have the future benefit to yield smaller diffs between different versions of patches. Also prefixed all patch names with icu4c- for a cleaner listing. New patches introduced are prefixed with icu4c-59-... Change-Id: Ia83754b0823839887fce1a1d4ed04f8375b113c2 Reviewed-on: https://gerrit.libreoffice.org/36809 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'external')
-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
28 files changed, 465 insertions, 340 deletions
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) \
)