[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - config_host.mk.in configure.ac download.lst external/firebird external/harfbuzz external/icu external/libcdr external/libebook external/libfreehand external/libmspub external/libvisio Makefile.fetch

Eike Rathke erack at redhat.com
Mon May 29 14:43:11 UTC 2017


 Makefile.fetch                                      |    1 
 config_host.mk.in                                   |    1 
 configure.ac                                        |   12 
 download.lst                                        |    6 
 external/firebird/ExternalProject_firebird.mk       |    1 
 external/harfbuzz/ExternalProject_harfbuzz.mk       |    4 
 external/icu/UnpackedTarball_icu.mk                 |   35 +-
 external/icu/clang-cl.patch.0                       |   16 -
 external/icu/icu-ubsan.patch.0                      |   68 ++---
 external/icu/icu4c-59-werror-shadow.patch.1         |   75 -----
 external/icu/icu4c-59-werror-undef.patch.1          |   13 
 external/icu/icu4c-aix.patch                        |   18 -
 external/icu/icu4c-android.patch                    |   43 +--
 external/icu/icu4c-build.patch                      |   97 +++----
 external/icu/icu4c-icu11100.patch.1                 |    9 
 external/icu/icu4c-icudata-stdlibs.diff             |    9 
 external/icu/icu4c-macosx.patch                     |    8 
 external/icu/icu4c-mkdir.patch                      |    7 
 external/icu/icu4c-rpath.patch                      |   37 +-
 external/icu/icu4c-rtti.patch.1                     |   12 
 external/icu/icu4c-scriptrun.patch                  |   20 -
 external/icu/icu4c-solarisgcc.patch                 |   12 
 external/icu/icu4c-solarisgcc.patch.1               |   12 
 external/icu/icu4c-warnings.patch                   |   10 
 external/icu/icu4c-warnings.patch.1                 |   11 
 external/icu/khmerbreakengine.patch                 |  268 +++++++++-----------
 external/icu/rtti.patch.0                           |   11 
 external/libcdr/ExternalProject_libcdr.mk           |    2 
 external/libebook/ExternalProject_libebook.mk       |    2 
 external/libfreehand/ExternalProject_libfreehand.mk |    1 
 external/libmspub/ExternalProject_libmspub.mk       |    2 
 external/libvisio/ExternalProject_libvisio.mk       |    2 
 32 files changed, 343 insertions(+), 482 deletions(-)

New commits:
commit 617aa72fe2c097183cb9dd73dd378d6fb0145208
Author: Eike Rathke <erack at redhat.com>
Date:   Mon May 29 14:25:57 2017 +0200

    Resolves: tdf#108043 Revert "Upgrade to ICU 59.1"
    
    As it would force us to not run on XP *AND* Vista anymore already with
    this 5.4 release.
    
     This is a combination of 4 commits.
    
    Revert "Add ICU ticket number for this patch"
    
    This reverts commit e24cd3818821971fe3c52820dafe0f5ccb4b023a.
    
    Revert "Add ICU ticket number for this patch"
    
    This reverts commit 8720877b8b6bc96e330842f7391ae49a21ec2f63.
    
    Revert "Upgrade to ICU 59.1 follow-up: only add icu/source/data/misc/icudata.rc"
    
    This reverts commit 89de6f62ae1e96d2c492cb5cd8f7d313b51e2f98.
    
    Revert "Upgrade to ICU 59.1"
    
    This reverts commit fabad007c60958f2ff87e8f636ff6a798ad1f963.
    
    Change-Id: Idd2bfecf7f3c148ee404322e7287ac236c46b6cf
    Reviewed-on: https://gerrit.libreoffice.org/38143
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/Makefile.fetch b/Makefile.fetch
index 3b0cf56facd6..1529f1109f2f 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -135,7 +135,6 @@ $(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 880895e3c00f..e9d16f61f414 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -264,7 +264,6 @@ 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 b38623879abd..3b1e6a0f699c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8981,7 +8981,7 @@ SYSTEM_GENBRK=
 SYSTEM_GENCCODE=
 SYSTEM_GENCMN=
 
-ICU_MAJOR=59
+ICU_MAJOR=58
 ICU_MINOR=1
 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
@@ -9069,15 +9069,6 @@ 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)
@@ -9089,7 +9080,6 @@ 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 d545b9668fed..a9e8d1c7b168 100644
--- a/download.lst
+++ b/download.lst
@@ -89,10 +89,8 @@ 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 := 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe
-export ICU_TARBALL := icu4c-59_1-src.tgz
-export ICU_DATA_SHA256SUM := 38a84c1289c32a96924ff286a2f33edc97671b4cc90e8c99708553a6b5a9e70a
-export ICU_DATA_TARBALL := icu4c-59_1-data.zip
+export ICU_SHA256SUM := 0eb46ba3746a9c2092c8ad347a29b1a1b4941144772d13a88667a7b11ea30309
+export ICU_TARBALL := 1901302aaff1c1633ef81862663d2917-icu4c-58_1-src.tgz
 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 988a24b5ed74..361fffc86c64 100644
--- a/external/firebird/ExternalProject_firebird.mk
+++ b/external/firebird/ExternalProject_firebird.mk
@@ -66,7 +66,6 @@ $(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 070c58ea80a7..53490abc2eaa 100644
--- a/external/harfbuzz/ExternalProject_harfbuzz.mk
+++ b/external/harfbuzz/ExternalProject_harfbuzz.mk
@@ -47,9 +47,7 @@ $(call gb_ExternalProject_get_state_target,harfbuzz,build) :
 					$(gb_COMPILERNOOPTFLAGS) $(gb_DEBUG_CFLAGS) \
 						$(gb_DEBUG_CXXFLAGS), \
 					$(gb_COMPILEROPTFLAGS)) \
-				$(CXXFLAGS) \
-				$(ICU_UCHAR_TYPE) \
-				$(if $(filter LINUX,$(OS)),-fvisibility=hidden)' \
+				$(CXXFLAGS) $(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 1047fdebfeaf..fae37f5dd922 100644
--- a/external/icu/UnpackedTarball_icu.mk
+++ b/external/icu/UnpackedTarball_icu.mk
@@ -11,29 +11,22 @@ $(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/...
-# Only data/misc/icudata.rc is needed for a Cygwin/MSVC build.
-$(eval $(call gb_UnpackedTarball_set_pre_action,icu,\
-	unzip -q -d source -o $(gb_UnpackedTarget_TARFILE_LOCATION)/$(ICU_DATA_TARBALL) data/misc/icudata.rc \
-))
-
 $(eval $(call gb_UnpackedTarball_add_patches,icu,\
-	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-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-icu11100.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 \
+	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 \
 ))
 
 $(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict))
diff --git a/external/icu/icu4c-clang-cl.patch.1 b/external/icu/clang-cl.patch.0
similarity index 58%
rename from external/icu/icu4c-clang-cl.patch.1
rename to external/icu/clang-cl.patch.0
index 9e287710a463..4df5d0f56c83 100644
--- a/external/icu/icu4c-clang-cl.patch.1
+++ b/external/icu/clang-cl.patch.0
@@ -1,21 +1,19 @@
-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 @@
+--- source/config/mh-cygwin-msvc
++++ source/config/mh-cygwin-msvc
+@@ -51,8 +51,8 @@
  LDFLAGS+=-nologo
  
  # Commands to compile
 -COMPILE.c=	$(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
--COMPILE.cc=	$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
 +COMPILE.c=	true && $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
+-COMPILE.cc=	$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
 +COMPILE.cc=	true && $(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
  
  # Commands to link
  LINK.c=		LINK.EXE -subsystem:console $(LDFLAGS)
-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 @@
+--- source/runConfigureICU
++++ source/runConfigureICU
+@@ -259,8 +259,8 @@
      Cygwin/MSVC)
          THE_OS="Windows with Cygwin"
          THE_COMP="Microsoft Visual C++"
diff --git a/external/icu/icu4c-ubsan.patch.1 b/external/icu/icu-ubsan.patch.0
similarity index 74%
rename from external/icu/icu4c-ubsan.patch.1
rename to external/icu/icu-ubsan.patch.0
index 56594005e9d0..f16503eeb4ac 100644
--- a/external/icu/icu4c-ubsan.patch.1
+++ b/external/icu/icu-ubsan.patch.0
@@ -1,7 +1,6 @@
-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 @@
+--- source/common/rbbidata.h
++++ source/common/rbbidata.h
+@@ -113,7 +113,7 @@
                                      /*     StatusTable of the set of matching             */
                                      /*     tags (rule status values)                      */
      int16_t          fReserved;
@@ -10,7 +9,7 @@ diff -ur icu.org/source/common/rbbidata.h icu/source/common/rbbidata.h
                                      /*  This array does not have two elements             */
                                      /*    Array Size is actually fData->fHeader->fCatCount         */
                                      /*    CAUTION:  see RBBITableBuilder::getTableSize()  */
-@@ -128,7 +128,7 @@
+@@ -126,7 +126,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                                          */
@@ -19,10 +18,9 @@ diff -ur icu.org/source/common/rbbidata.h icu/source/common/rbbidata.h
                                      /*    (making it char[] simplifies ugly address       */
                                      /*     arithmetic for indexing variable length rows.) */
  };
-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 @@
+--- source/common/rbbitblb.cpp
++++ source/common/rbbitblb.cpp
+@@ -1067,15 +1067,15 @@
          return 0;
      }
  
@@ -42,7 +40,7 @@ diff -ur icu.org/source/common/rbbitblb.cpp icu/source/common/rbbitblb.cpp
      size   += numRows * rowSize;
      return size;
  }
-@@ -1133,7 +1133,7 @@
+@@ -1105,7 +1105,7 @@
      }
  
      table->fRowLen    = sizeof(RBBIStateTableRow) +
@@ -51,9 +49,8 @@ diff -ur icu.org/source/common/rbbitblb.cpp icu/source/common/rbbitblb.cpp
      table->fNumStates = fDStates->size();
      table->fFlags     = 0;
      if (fRB->fLookAheadHardBreak) {
-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
+--- source/common/ubidiimp.h
++++ source/common/ubidiimp.h
 @@ -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)
@@ -65,10 +62,9 @@ diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h
  #define REMOVE_ODD_BIT(x)                 ((x)&=~INDEX_ODD_BIT)
  
  #define GET_INDEX(x)   ((x)&~INDEX_ODD_BIT)
-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 @@
+--- source/common/ucharstriebuilder.cpp
++++ source/common/ucharstriebuilder.cpp
+@@ -285,7 +285,7 @@
  
  UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode)
          : LinearMatchNode(len, nextNode), s(units) {
@@ -77,10 +73,9 @@ diff -ur icu.org/source/common/ucharstriebuilder.cpp icu/source/common/ucharstri
  }
  
  UBool
-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 @@
+--- source/common/ucmndata.c
++++ source/common/ucmndata.c
+@@ -75,7 +75,7 @@
  typedef struct  {
      uint32_t          count;
      uint32_t          reserved;
@@ -89,10 +84,9 @@ diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp
  }  PointerTOC;
  
  
-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 @@
+--- source/common/ucmndata.h
++++ source/common/ucmndata.h
+@@ -50,7 +50,7 @@
  
  typedef struct {
      uint32_t count;
@@ -101,10 +95,9 @@ diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h
  } UDataOffsetTOC;
  
  /**
-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 @@
+--- source/common/unicode/stringtriebuilder.h
++++ source/common/unicode/stringtriebuilder.h
+@@ -269,7 +269,7 @@
          void setValue(int32_t v) {
              hasValue=TRUE;
              value=v;
@@ -113,7 +106,7 @@ diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/uni
          }
      protected:
          UBool hasValue;
-@@ -307,7 +307,7 @@
+@@ -296,7 +296,7 @@
      class LinearMatchNode : public ValueNode {
      public:
          LinearMatchNode(int32_t len, Node *nextNode)
@@ -122,7 +115,7 @@ diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/uni
                    length(len), next(nextNode) {}
          virtual UBool operator==(const Node &other) const;
          virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
-@@ -342,7 +342,7 @@
+@@ -330,7 +330,7 @@
              equal[length]=NULL;
              values[length]=value;
              ++length;
@@ -131,7 +124,7 @@ diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/uni
          }
          // Adds a unit which leads to another match node.
          void add(int32_t c, Node *node) {
-@@ -350,7 +350,7 @@
+@@ -338,7 +338,7 @@
              equal[length]=node;
              values[length]=0;
              ++length;
@@ -140,16 +133,16 @@ diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/uni
          }
      protected:
          Node *equal[kMaxBranchLinearSubNodeLength];  // NULL means "has final value".
-@@ -365,7 +365,7 @@
+@@ -353,7 +353,7 @@
      class SplitBranchNode : public BranchNode {
      public:
-         SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode)
+         SplitBranchNode(UChar 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;
-@@ -382,7 +382,7 @@
+@@ -370,7 +370,7 @@
      class BranchHeadNode : public ValueNode {
      public:
          BranchHeadNode(int32_t len, Node *subNode)
@@ -158,9 +151,8 @@ diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/uni
                    length(len), next(subNode) {}
          virtual UBool operator==(const Node &other) const;
          virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
-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
+--- source/i18n/collationdatareader.cpp
++++ source/i18n/collationdatareader.cpp
 @@ -419,6 +419,7 @@
              tailoring.data, ts, fastLatinPrimaries, UPRV_LENGTHOF(fastLatinPrimaries));
      if(options == ts.options && ts.variableTop != 0 &&
diff --git a/external/icu/icu4c-59-werror-shadow.patch.1 b/external/icu/icu4c-59-werror-shadow.patch.1
deleted file mode 100644
index 2031f80cb908..000000000000
--- a/external/icu/icu4c-59-werror-shadow.patch.1
+++ /dev/null
@@ -1,75 +0,0 @@
-diff -ur icu.org/source/common/unicode/char16ptr.h icu/source/common/unicode/char16ptr.h
-# https://ssl.icu-project.org/trac/ticket/13176
---- 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
deleted file mode 100644
index 0792e7357257..000000000000
--- a/external/icu/icu4c-59-werror-undef.patch.1
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ur icu.org/source/common/unicode/uvernum.h icu/source/common/unicode/uvernum.h
-# https://ssl.icu-project.org/trac/ticket/13175
---- 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.1 b/external/icu/icu4c-aix.patch
similarity index 89%
rename from external/icu/icu4c-aix.patch.1
rename to external/icu/icu4c-aix.patch
index 77982163b965..f4a449f9b423 100644
--- a/external/icu/icu4c-aix.patch.1
+++ b/external/icu/icu4c-aix.patch
@@ -1,7 +1,6 @@
-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 @@
+--- 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 @@
  GEN_DEPS.c=	$(CC) -E -MM $(DEFS) $(CPPFLAGS)
  GEN_DEPS.cc=	$(CXX) -E -MM $(DEFS) $(CPPFLAGS)
  
@@ -98,7 +97,7 @@ diff -ur icu.org/source/config/mh-aix-gcc icu/source/config/mh-aix-gcc
  
  ## Compilation rules
  %.$(STATIC_O): $(srcdir)/%.c
-@@ -123,10 +68,10 @@
+@@ -118,10 +63,10 @@
  		[ -s $@ ] || rm -f $@'
  
  ## Versioned libraries rules
@@ -113,10 +112,9 @@ diff -ur icu.org/source/config/mh-aix-gcc icu/source/config/mh-aix-gcc
  
  
  ## BIR  - bind with internal references [so app data and icu data doesn't collide]
-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 @@
+--- 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 @@
  
          uprv_strcat(pkgDataFlags[SO_EXT], ".");
          uprv_strcat(pkgDataFlags[SO_EXT], pkgDataFlags[A_EXT]);
@@ -125,7 +123,7 @@ diff -ur icu.org/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgda
          sprintf(libFileNames[LIB_FILE_VERSION_TMP], "%s%s%s",
                  libFileNames[LIB_FILE],
                  FILE_EXTENSION_SEP,
-@@ -1407,15 +1407,6 @@
+@@ -1375,15 +1375,6 @@
                  pkgDataFlags[LDICUDTFLAGS],
                  targetDir,
                  libFileNames[LIB_FILE_CYGWIN_VERSION],
diff --git a/external/icu/icu4c-android.patch.1 b/external/icu/icu4c-android.patch
similarity index 68%
rename from external/icu/icu4c-android.patch.1
rename to external/icu/icu4c-android.patch
index c62cf54e5936..0b320a8cad81 100644
--- a/external/icu/icu4c-android.patch.1
+++ b/external/icu/icu4c-android.patch
@@ -1,19 +1,6 @@
-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 @@
+--- 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 @@
  
  ## Compiler switch to embed a library name
  # The initial tab in the next line is to prevent icu-config from reading it.
@@ -22,10 +9,9 @@ diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
  #SH# # We can't depend on MIDDLE_SO_TARGET being set.
  #SH# LD_SONAME=
  
-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 @@
+--- 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 @@
  	else
  		icu_cv_host_frag=mh-linux-va
  	fi ;;
@@ -34,7 +20,7 @@ diff -ur icu.org/source/configure icu/source/configure
  i[34567]86-*-cygwin)
  	if test "$GCC" = yes; then
  		icu_cv_host_frag=mh-cygwin
-@@ -6358,6 +6358,10 @@
+@@ -6032,6 +6032,10 @@
  # Check to see if genccode can generate simple assembly.
  GENCCODE_ASSEMBLY=
  case "${host}" in
@@ -45,7 +31,7 @@ diff -ur icu.org/source/configure icu/source/configure
  *-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
-@@ -7445,6 +7449,10 @@
+@@ -7104,6 +7108,10 @@
      # wchar_t can be used
      CHECK_UTF16_STRING_RESULT="available"
      ;;
@@ -56,3 +42,16 @@ diff -ur icu.org/source/configure icu/source/configure
  *)
      ;;
  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.1 b/external/icu/icu4c-build.patch
similarity index 77%
rename from external/icu/icu4c-build.patch.1
rename to external/icu/icu4c-build.patch
index 6d9ade608cb5..103e9aea5b64 100644
--- a/external/icu/icu4c-build.patch.1
+++ b/external/icu/icu4c-build.patch
@@ -1,7 +1,48 @@
-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 @@
+--- 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 @@
  SHLIB.cc=	$(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS) $(LD_SOOPTIONS)
  
  ## Compiler switches to embed a library name and version information
@@ -14,7 +55,7 @@ diff -ur icu.org/source/config/mh-darwin icu/source/config/mh-darwin
  
  ## Compiler switch to embed a runtime search path
  LD_RPATH=
-@@ -50,10 +46,6 @@
+@@ -48,10 +44,6 @@
  ## Non-shared intermediate object suffix
  STATIC_O = ao
  
@@ -25,7 +66,7 @@ diff -ur icu.org/source/config/mh-darwin icu/source/config/mh-darwin
  ## Compilation and dependency rules
  %.$(STATIC_O): $(srcdir)/%.c
  	$(call SILENT_COMPILE,$(strip $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS)) -MMD -MT "$*.d $*.o $*.$(STATIC_O)" -o $@ $<)
-@@ -67,16 +59,10 @@
+@@ -65,16 +57,10 @@
  
  ## Versioned libraries rules
  
@@ -45,47 +86,3 @@ diff -ur icu.org/source/config/mh-darwin icu/source/config/mh-darwin
  
  ## 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/icu4c-icu11100.patch.1 b/external/icu/icu4c-icu11100.patch.1
index 2f0e390961c1..18bfe4f1c9c2 100644
--- a/external/icu/icu4c-icu11100.patch.1
+++ b/external/icu/icu4c-icu11100.patch.1
@@ -1,7 +1,6 @@
-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 @@
+--- 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 @@
      return DirProp_ON;
  }
  
@@ -16,7 +15,7 @@ diff -ur icu.org/source/common/ubidi.cpp icu/source/common/ubidi.cpp
  static void
  resolveImplicitLevels(UBiDi *pBiDi,
                        int32_t start, int32_t limit,
-@@ -2271,7 +2279,7 @@
+@@ -2239,7 +2247,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.patch.1 b/external/icu/icu4c-icudata-stdlibs.diff
similarity index 56%
rename from external/icu/icu4c-icudata-stdlibs.patch.1
rename to external/icu/icu4c-icudata-stdlibs.diff
index c8d66c6ed06f..16bea7b4a995 100644
--- a/external/icu/icu4c-icudata-stdlibs.patch.1
+++ b/external/icu/icu4c-icudata-stdlibs.diff
@@ -1,7 +1,8 @@
-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 @@
+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 @@
  RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN'
  
  ## These are the library specific LDFLAGS
diff --git a/external/icu/icu4c-macosx.patch.1 b/external/icu/icu4c-macosx.patch
similarity index 72%
rename from external/icu/icu4c-macosx.patch.1
rename to external/icu/icu4c-macosx.patch
index fee08eb05771..8f9f9a75507e 100644
--- a/external/icu/icu4c-macosx.patch.1
+++ b/external/icu/icu4c-macosx.patch
@@ -1,7 +1,6 @@
-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 @@
+--- misc/icu/source/common/putil.cpp
++++ misc/build/icu/source/common/putil.cpp
+@@ -1111,8 +1111,16 @@
          static const time_t decemberSolstice=1198332540; /*2007-12-22 06:09 UT*/
  
          /* This probing will tell us when daylight savings occurs.  */
@@ -18,3 +17,4 @@ diff -ur icu.org/source/common/putil.cpp icu/source/common/putil.cpp
          if(decemberSol.tm_isdst > 0) {
            daylightType = U_DAYLIGHT_DECEMBER;
          } else if(juneSol.tm_isdst > 0) {
+
diff --git a/external/icu/icu4c-mkdir.patch.1 b/external/icu/icu4c-mkdir.patch
similarity index 52%
rename from external/icu/icu4c-mkdir.patch.1
rename to external/icu/icu4c-mkdir.patch
index 3234f151b677..094ddd5abca4 100644
--- a/external/icu/icu4c-mkdir.patch.1
+++ b/external/icu/icu4c-mkdir.patch
@@ -1,7 +1,6 @@
-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 @@
+--- 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 @@
  ifeq ($(PKGDATA_MODE),dll)
  SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
  $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc
diff --git a/external/icu/icu4c-rpath.patch.1 b/external/icu/icu4c-rpath.patch
similarity index 67%
rename from external/icu/icu4c-rpath.patch.1
rename to external/icu/icu4c-rpath.patch
index debbab1a6e3d..ba1a82595aea 100644
--- a/external/icu/icu4c-rpath.patch.1
+++ b/external/icu/icu4c-rpath.patch
@@ -1,21 +1,6 @@
-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 @@
+--- 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
  OUTPUTFILE=icupkg.inc
  MIDDLE_SO_TARGET=
  
@@ -25,7 +10,7 @@ diff -ur icu.org/source/data/pkgdataMakefile.in icu/source/data/pkgdataMakefile.
  all : clean 
  	@echo GENCCODE_ASSEMBLY_TYPE=$(GENCCODE_ASSEMBLY) >> $(OUTPUTFILE)
  	@echo SO=$(SO) >> $(OUTPUTFILE)
-@@ -26,7 +29,7 @@
+@@ -24,7 +27,7 @@ all : clean
  	@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)
@@ -34,3 +19,17 @@ diff -ur icu.org/source/data/pkgdataMakefile.in icu/source/data/pkgdataMakefile.
  	@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
deleted file mode 100644
index c058c7f3c87e..000000000000
--- a/external/icu/icu4c-rtti.patch.1
+++ /dev/null
@@ -1,12 +0,0 @@
-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.1 b/external/icu/icu4c-scriptrun.patch
similarity index 74%
rename from external/icu/icu4c-scriptrun.patch.1
rename to external/icu/icu4c-scriptrun.patch
index fe81d19c846e..e307811acaad 100644
--- a/external/icu/icu4c-scriptrun.patch.1
+++ b/external/icu/icu4c-scriptrun.patch
@@ -1,7 +1,6 @@
-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 @@
+--- misc/icu/source/extra/scrptrun/scrptrun.cpp
++++ misc/build/icu/source/extra/scrptrun/scrptrun.cpp
+@@ -150,7 +150,11 @@
          // characters above it on the stack will be poped.
          if (pairIndex >= 0) {
              if ((pairIndex & 1) == 0) {
@@ -14,7 +13,7 @@ diff -ur icu.org/source/extra/scrptrun/scrptrun.cpp icu/source/extra/scrptrun/sc
                  parenStack[parenSP].scriptCode  = scriptCode;
              } else if (parenSP >= 0) {
                  int32_t pi = pairIndex & ~1;
-@@ -185,7 +189,14 @@
+@@ -184,7 +188,14 @@
              // pop it from the stack
              if (pairIndex >= 0 && (pairIndex & 1) != 0 && parenSP >= 0) {
                  parenSP -= 1;
@@ -30,10 +29,9 @@ diff -ur icu.org/source/extra/scrptrun/scrptrun.cpp icu/source/extra/scrptrun/sc
              }
          } else {
              // if the run broke on a surrogate pair,
-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 @@
+--- misc/icu/source/extra/scrptrun/scrptrun.h
++++ misc/build/icu/source/extra/scrptrun/scrptrun.h
+@@ -17,6 +17,7 @@
  #include "unicode/utypes.h"
  #include "unicode/uobject.h"
  #include "unicode/uscript.h"
@@ -41,7 +39,7 @@ diff -ur icu.org/source/extra/scrptrun/scrptrun.h icu/source/extra/scrptrun/scrp
  
  struct ScriptRecord
  {
-@@ -81,7 +82,7 @@
+@@ -79,7 +80,7 @@
      int32_t scriptEnd;
      UScriptCode scriptCode;
  
@@ -50,7 +48,7 @@ diff -ur icu.org/source/extra/scrptrun/scrptrun.h icu/source/extra/scrptrun/scrp
      int32_t parenSP;
  
      static int8_t highBit(int32_t value);
-@@ -135,6 +136,7 @@
+@@ -133,6 +134,7 @@
      scriptEnd   = charStart;
      scriptCode  = USCRIPT_INVALID_CODE;
      parenSP     = -1;
diff --git a/external/icu/icu4c-solarisgcc.patch b/external/icu/icu4c-solarisgcc.patch
new file mode 100644
index 000000000000..a47d9b1e3506
--- /dev/null
+++ b/external/icu/icu4c-solarisgcc.patch
@@ -0,0 +1,12 @@
+--- 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
deleted file mode 100644
index 6000ed0cb9e2..000000000000
--- a/external/icu/icu4c-solarisgcc.patch.1
+++ /dev/null
@@ -1,12 +0,0 @@
-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/icu4c-warnings.patch b/external/icu/icu4c-warnings.patch
new file mode 100644
index 000000000000..96608d7d1ef3
--- /dev/null
+++ b/external/icu/icu4c-warnings.patch
@@ -0,0 +1,10 @@
+--- 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
deleted file mode 100644
index 3c39ba12ded7..000000000000
--- a/external/icu/icu4c-warnings.patch.1
+++ /dev/null
@@ -1,11 +0,0 @@
-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/icu4c-khmerbreakengine.patch.1 b/external/icu/khmerbreakengine.patch
similarity index 95%
rename from external/icu/icu4c-khmerbreakengine.patch.1
rename to external/icu/khmerbreakengine.patch
index 74f60f866257..8f81f315da3e 100644
--- a/external/icu/icu4c-khmerbreakengine.patch.1
+++ b/external/icu/khmerbreakengine.patch
@@ -1,7 +1,8 @@
-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 @@
+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
   ******************************************************************
   */
  
@@ -20,7 +21,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
  }
  
  DictionaryBreakEngine::~DictionaryBreakEngine() {
-@@ -92,7 +101,7 @@
+@@ -90,7 +99,7 @@ DictionaryBreakEngine::findBreaks( UText *text,
          result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
          utext_setNativeIndex(text, current);
      }
@@ -29,7 +30,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
      return result;
  }
  
-@@ -103,6 +112,169 @@
+@@ -101,6 +110,169 @@ DictionaryBreakEngine::setCharacters( const UnicodeSet &set ) {
      fSet.compact();
  }
  
@@ -199,7 +200,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
  /*
   ******************************************************************
   * PossibleWord
-@@ -130,35 +302,35 @@
+@@ -128,35 +302,35 @@ private:
  public:
      PossibleWord() : count(0), prefix(0), offset(-1), mark(0), current(0) {};
      ~PossibleWord() {};
@@ -244,7 +245,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
          // Dictionary leaves text after longest prefix, not longest word. Back up.
          if (count <= 0) {
              utext_setNativeIndex(text, start);
-@@ -830,51 +1002,28 @@
+@@ -828,51 +1002,28 @@ foundBest:
   * KhmerBreakEngine
   */
  
@@ -307,22 +308,14 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
  }
  
  KhmerBreakEngine::~KhmerBreakEngine() {
-@@ -886,180 +1035,204 @@
+@@ -884,180 +1036,204 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text,
                                                  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;
--    PossibleWord words[KHMER_LOOKAHEAD];
--
++    UErrorCode status = U_ZERO_ERROR;
 +    int32_t before = 0;
 +    int32_t after = 0;
 +    int32_t finalBefore = 0;
@@ -338,7 +331,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 +        --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);
@@ -349,8 +342,14 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 +        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) {
@@ -362,20 +361,43 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 +    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
@@ -390,12 +412,25 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 -                        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
@@ -406,47 +441,6 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 -                    }
 -                    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)
@@ -528,27 +522,17 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 -                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++);
-             }
-         }
++            }
++        }
  
--        // 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;
+-                // Update the length with the passed-over characters
+-                cuWordLength += chars;
 +        for (int32_t j = 0; j < count; j++) {
 +            uint32_t v = values.elementAti(j);
 +            int32_t newSnlp = bestSnlp.elementAti(i) + v;
@@ -559,7 +543,10 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 +                ++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) {
@@ -572,9 +559,37 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 +                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
@@ -616,30 +631,6 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
 -        // 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.
@@ -668,10 +659,11 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
  }
  
  #if !UCONFIG_NO_NORMALIZATION
-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 @@
+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;
   */
  class DictionaryBreakEngine : public LanguageBreakEngine {
   private:
@@ -687,7 +679,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
      /**
       * The set of characters handled by this engine
       * @internal
-@@ -48,11 +57,63 @@
+@@ -46,11 +55,63 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
  
    uint32_t      fTypes;
  
@@ -754,7 +746,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
  
   public:
  
-@@ -83,7 +144,7 @@
+@@ -81,7 +142,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
     * <p>Find any breaks within a run in the supplied text.</p>
     *
     * @param text A UText representing the text. The iterator is left at
@@ -763,7 +755,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
     * 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.
-@@ -245,118 +306,120 @@
+@@ -243,118 +304,120 @@ class LaoBreakEngine : public DictionaryBreakEngine {
  
  };
  
@@ -996,10 +988,11 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
  #if !UCONFIG_NO_NORMALIZATION
  
  /*******************************************************************
-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 @@
+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 {
  
  int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t limit,
                              int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1008,7 +1001,7 @@ diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionaryda
  
      UCharsTrie uct(characters);
      int32_t startingTextIndex = (int32_t)utext_getNativeIndex(text);
-@@ -55,7 +55,13 @@
+@@ -53,7 +53,13 @@ int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t
          UStringTrieResult result = (codePointsMatched == 0) ? uct.first(c) : uct.next(c);
          int32_t lengthMatched = (int32_t)utext_getNativeIndex(text) - startingTextIndex;
          codePointsMatched += 1;
@@ -1022,7 +1015,7 @@ diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionaryda
              if (wordCount < limit) {
                  if (values != NULL) {
                      values[wordCount] = uct.getValue();
-@@ -112,7 +118,7 @@
+@@ -110,7 +116,7 @@ int32_t BytesDictionaryMatcher::getType() const {
  
  int32_t BytesDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t limit,
                              int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1031,7 +1024,7 @@ diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionaryda
      BytesTrie bt(characters);
      int32_t startingTextIndex = (int32_t)utext_getNativeIndex(text);
      int32_t wordCount = 0;
-@@ -122,7 +128,13 @@
+@@ -120,7 +126,13 @@ int32_t BytesDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t
          UStringTrieResult result = (codePointsMatched == 0) ? bt.first(transform(c)) : bt.next(transform(c));
          int32_t lengthMatched = (int32_t)utext_getNativeIndex(text) - startingTextIndex;
          codePointsMatched += 1;
@@ -1045,10 +1038,11 @@ diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionaryda
              if (wordCount < limit) {
                  if (values != NULL) {
                      values[wordCount] = bt.getValue();
-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 @@
+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 @@
  #include "unicode/utext.h"
  #include "unicode/udata.h"
  #include "udataswp.h"
@@ -1056,7 +1050,7 @@ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata
  #include "unicode/uobject.h"
  #include "unicode/ustringtrie.h"
  
-@@ -92,7 +93,7 @@
+@@ -90,7 +91,7 @@ public:
       */
      virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
                              int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1065,7 +1059,7 @@ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata
  
      /** @return DictionaryData::TRIE_TYPE_XYZ */
      virtual int32_t getType() const = 0;
-@@ -107,7 +108,7 @@
+@@ -105,7 +106,7 @@ public:
      virtual ~UCharsDictionaryMatcher();
      virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
                              int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1074,7 +1068,7 @@ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata
      virtual int32_t getType() const;
  private:
      const UChar *characters;
-@@ -125,7 +126,7 @@
+@@ -123,7 +124,7 @@ public:
      virtual ~BytesDictionaryMatcher();
      virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
                              int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -1083,10 +1077,11 @@ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata
      virtual int32_t getType() const;
  private:
      UChar32 transform(UChar32 c) const;
-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 @@
+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
  endif
  endif
  
@@ -1095,9 +1090,9 @@ diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in
  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)
-@@ -567,8 +567,14 @@
+@@ -564,8 +564,14 @@ $(BRKBLDDIR)/burmesedict.dict: $(TOOLBINDIR)/gendict$(TOOLEXEEXT) $(DAT_FILES)
  	$(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
@@ -1109,6 +1104,7 @@ diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in
 +$(MAINBUILDDIR)/khmerdict.stamp: $(BRKSRCDIR)/khmerdict.dict build-local
 +	cp $< $(BRKBLDDIR)
 +	echo "timestamp" > $@
- 
+
  ####################################################    CFU
  # CFU FILES
+
diff --git a/external/icu/rtti.patch.0 b/external/icu/rtti.patch.0
new file mode 100644
index 000000000000..2af9622ec9ad
--- /dev/null
+++ b/external/icu/rtti.patch.0
@@ -0,0 +1,11 @@
+--- 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 2cd41db242cd..86f93daf1b90 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) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
+			CXXFLAGS="$(CXXFLAGS) $(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 17065829014b..45b15f2f5eb7 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) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
+			CXXFLAGS="$(CXXFLAGS) $(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 f1bbacbb06e4..15a17072e872 100644
--- a/external/libfreehand/ExternalProject_libfreehand.mk
+++ b/external/libfreehand/ExternalProject_libfreehand.mk
@@ -25,7 +25,6 @@ $(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 808d74b2f571..a168a62c636f 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) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS) \
+			CXXFLAGS="$(CXXFLAGS) $(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 2f212ceac249..884fde820d00 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) $(ICU_UCHAR_TYPE) $(BOOST_CPPFLAGS)" \
+			CXXFLAGS="$(CXXFLAGS) $(BOOST_CPPFLAGS)" \
 			$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
 		&& $(MAKE) \
 	)


More information about the Libreoffice-commits mailing list