summaryrefslogtreecommitdiffstats
path: root/external
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2019-10-28 16:14:18 +0100
committerEike Rathke <erack@redhat.com>2019-10-28 18:01:27 +0100
commit398e1e6ae83999eea8fb8c845190667695ac115f (patch)
treed3debf18606dde15bf1d3289aa38d9c2f57782d0 /external
parentRelated tdf#117790: Caption order, caption positions for Lithuanian language (diff)
downloadcore-398e1e6ae83999eea8fb8c845190667695ac115f.tar.gz
core-398e1e6ae83999eea8fb8c845190667695ac115f.zip
Upgrade to ICU 64.2
As an interim step to upgrade to ICU 65.1 Adds new scripts and Unicode blocks from Unicode 12. Change-Id: Idc4a6b29ffb04bcb424522fcbd29a8db0428c056 Reviewed-on: https://gerrit.libreoffice.org/81611 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'external')
-rw-r--r--external/icu/CVE-2018-18928.patch.263
-rw-r--r--external/icu/UnpackedTarball_icu.mk3
-rw-r--r--external/icu/clang-cl.patch37
-rw-r--r--external/icu/icu4c-64-54558d1dd01b29c763ca12b6327108fe3ac66637.patch.2268
-rw-r--r--external/icu/icu4c-build.patch.12
-rw-r--r--external/icu/icu4c-khmerbreakengine.patch.160
-rw-r--r--external/icu/icu4c-mkdir.patch.18
-rw-r--r--external/icu/icu4c-rpath.patch.14
8 files changed, 281 insertions, 164 deletions
diff --git a/external/icu/CVE-2018-18928.patch.2 b/external/icu/CVE-2018-18928.patch.2
deleted file mode 100644
index f92cee05ceed..000000000000
--- a/external/icu/CVE-2018-18928.patch.2
+++ /dev/null
@@ -1,63 +0,0 @@
-From 6cbd62e59e30f73b444be89ea71fd74275ac53a4 Mon Sep 17 00:00:00 2001
-From: Shane Carr <shane@unicode.org>
-Date: Mon, 29 Oct 2018 23:52:44 -0700
-Subject: [PATCH] ICU-20246 Fixing another integer overflow in number parsing.
-
-(cherry picked from commit 53d8c8f3d181d87a6aa925b449b51c4a2c922a51)
----
- icu4c/source/i18n/fmtable.cpp | 2 +-
- icu4c/source/i18n/number_decimalquantity.cpp | 5 ++++-
- icu4c/source/test/intltest/numfmtst.cpp | 8 ++++++++
- .../icu/impl/number/DecimalQuantity_AbstractBCD.java | 5 ++++-
- .../impl/number/DecimalQuantity_DualStorageBCD.java | 10 +++++++++-
- .../com/ibm/icu/dev/test/format/NumberFormatTest.java | 5 +++++
- 6 files changed, 31 insertions(+), 4 deletions(-)
-
-diff --git a/icu4c/source/i18n/fmtable.cpp b/icu4c/source/i18n/fmtable.cpp
-index 45c7024fc29..8601d95f4a6 100644
---- a/icu4c/source/i18n/fmtable.cpp
-+++ b/icu4c/source/i18n/fmtable.cpp
-@@ -734,7 +734,7 @@ CharString *Formattable::internalGetCharString(UErrorCode &status) {
- // not print scientific notation for magnitudes greater than -5 and smaller than some amount (+5?).
- if (fDecimalQuantity->isZero()) {
- fDecimalStr->append("0", -1, status);
-- } else if (std::abs(fDecimalQuantity->getMagnitude()) < 5) {
-+ } else if (fDecimalQuantity->getMagnitude() != INT32_MIN && std::abs(fDecimalQuantity->getMagnitude()) < 5) {
- fDecimalStr->appendInvariantChars(fDecimalQuantity->toPlainString(), status);
- } else {
- fDecimalStr->appendInvariantChars(fDecimalQuantity->toScientificString(), status);
-diff --git a/icu4c/source/i18n/number_decimalquantity.cpp b/icu4c/source/i18n/number_decimalquantity.cpp
-index 2c4182b1c6e..f6f2b20fab0 100644
---- a/icu4c/source/i18n/number_decimalquantity.cpp
-+++ b/icu4c/source/i18n/number_decimalquantity.cpp
-@@ -820,7 +820,10 @@ UnicodeString DecimalQuantity::toScientificString() const {
- }
- result.append(u'E');
- int32_t _scale = upperPos + scale;
-- if (_scale < 0) {
-+ if (_scale == INT32_MIN) {
-+ result.append({u"-2147483648", -1});
-+ return result;
-+ } else if (_scale < 0) {
- _scale *= -1;
- result.append(u'-');
- } else {
-diff --git a/icu4c/source/test/intltest/numfmtst.cpp b/icu4c/source/test/intltest/numfmtst.cpp
-index 34355939113..8d52dc122bf 100644
---- a/icu4c/source/test/intltest/numfmtst.cpp
-+++ b/icu4c/source/test/intltest/numfmtst.cpp
-@@ -9226,6 +9226,14 @@ void NumberFormatTest::Test20037_ScientificIntegerOverflow() {
- assertEquals(u"Should not overflow and should parse only the first exponent",
- u"1E-2147483647",
- {sp.data(), sp.length(), US_INV});
-+
-+ // Test edge case overflow of exponent
-+ result = Formattable();
-+ nf->parse(u".0003e-2147483644", result, status);
-+ sp = result.getDecimalNumber(status);
-+ assertEquals(u"Should not overflow",
-+ u"3E-2147483648",
-+ {sp.data(), sp.length(), US_INV});
- }
-
- void NumberFormatTest::Test13840_ParseLongStringCrash() {
diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk
index 4d45f2108f99..4e23ba2686be 100644
--- a/external/icu/UnpackedTarball_icu.mk
+++ b/external/icu/UnpackedTarball_icu.mk
@@ -41,9 +41,8 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\
external/icu/icu4c-61-werror-shadow.patch.1 \
external/icu/gcc9.patch \
external/icu/char8_t.patch \
- external/icu/CVE-2018-18928.patch.2 \
- external/icu/clang-cl.patch \
external/icu/c++20-comparison.patch \
+ external/icu/icu4c-64-54558d1dd01b29c763ca12b6327108fe3ac66637.patch.2 \
))
$(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict))
diff --git a/external/icu/clang-cl.patch b/external/icu/clang-cl.patch
deleted file mode 100644
index 83e7baecf266..000000000000
--- a/external/icu/clang-cl.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- source/common/umutex.h
-+++ source/common/umutex.h
-@@ -54,15 +54,15 @@
-
- #include <atomic>
-
--U_NAMESPACE_BEGIN
--
- // Export an explicit template instantiation of std::atomic<int32_t>.
- // When building DLLs for Windows this is required as it is used as a data member of the exported SharedObject class.
- // See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.
- #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
- template struct U_COMMON_API std::atomic<int32_t>;
- #endif
-
-+U_NAMESPACE_BEGIN
-+
- typedef std::atomic<int32_t> u_atomic_int32_t;
- #define ATOMIC_INT32_T_INITIALIZER(val) ATOMIC_VAR_INIT(val)
-
---- source/i18n/unicode/numberrangeformatter.h
-+++ source/i18n/unicode/numberrangeformatter.h
-@@ -186,7 +186,13 @@
- * (When building DLLs for Windows this is required.)
- */
- #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN && !defined(U_IN_DOXYGEN)
--template struct U_I18N_API std::atomic<impl::NumberRangeFormatterImpl*>;
-+} // namespace number
-+U_NAMESPACE_END
-+
-+template struct U_I18N_API std::atomic< U_NAMESPACE_QUALIFIER number::impl::NumberRangeFormatterImpl*>;
-+
-+U_NAMESPACE_BEGIN
-+namespace number { // icu::number
- #endif
- /** \endcond */
-
diff --git a/external/icu/icu4c-64-54558d1dd01b29c763ca12b6327108fe3ac66637.patch.2 b/external/icu/icu4c-64-54558d1dd01b29c763ca12b6327108fe3ac66637.patch.2
new file mode 100644
index 000000000000..5b9a830f6112
--- /dev/null
+++ b/external/icu/icu4c-64-54558d1dd01b29c763ca12b6327108fe3ac66637.patch.2
@@ -0,0 +1,268 @@
+From 54558d1dd01b29c763ca12b6327108fe3ac66637 Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 30 Mar 2019 09:59:46 +0300
+Subject: [PATCH] ICU-20530 Re-support include under extern "C"
+
+Up until icu-6.3 icu supported include under extern "C" under the explicit
+requirements, see comment of U_NAMESPACE_BEGIN at uversion.h:
+
+ * \def U_NAMESPACE_BEGIN
+ * This is used to begin a declaration of a public ICU C++ API.
+ * When not compiling for C++, it does nothing.
+ * When compiling for C++, it begins an extern "C++" linkage block (to protect
+ * against cases in which an external client includes ICU header files inside
+ * an extern "C" linkage block).
+ *
+ * It also begins a versioned-ICU-namespace block.
+ * @stable ICU 2.4
+
+Recent changes were made to include C++ headers within global scope which
+broke this behavior.
+
+To keep requested behavior add two additional macros U_CXX_BEGIN, U_CXX_END to
+avoid breakage of doxygen while enforcing C++ API visibility.
+
+Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
+---
+ icu4c/source/common/unicode/char16ptr.h | 5 +++-
+ icu4c/source/common/unicode/localpointer.h | 2 ++
+ icu4c/source/common/unicode/std_string.h | 3 +++
+ icu4c/source/common/unicode/umachine.h | 25 +++++++++++++++++++
+ icu4c/source/common/unicode/unistr.h | 5 +++-
+ icu4c/source/common/unicode/uversion.h | 15 ++++-------
+ .../i18n/unicode/numberrangeformatter.h | 5 +++-
+ icu4c/source/io/unicode/ustream.h | 2 ++
+ icu4c/source/test/hdrtst/Makefile.in | 16 ++++++++++--
+ 9 files changed, 63 insertions(+), 15 deletions(-)
+
+diff --git a/icu4c/source/common/unicode/char16ptr.h b/icu4c/source/common/unicode/char16ptr.h
+index a7c5f1a0c5e..f774d7d8b21 100644
+--- a/icu4c/source/common/unicode/char16ptr.h
++++ b/icu4c/source/common/unicode/char16ptr.h
+@@ -7,9 +7,12 @@
+ #ifndef __CHAR16PTR_H__
+ #define __CHAR16PTR_H__
+
+-#include <cstddef>
+ #include "unicode/utypes.h"
+
++U_CXX_BEGIN
++#include <cstddef>
++U_CXX_END
++
+ /**
+ * \file
+ * \brief C++ API: char16_t pointer wrappers with
+diff --git a/icu4c/source/common/unicode/localpointer.h b/icu4c/source/common/unicode/localpointer.h
+index e011688b1a5..fd26dc40e9d 100644
+--- a/icu4c/source/common/unicode/localpointer.h
++++ b/icu4c/source/common/unicode/localpointer.h
+@@ -42,7 +42,9 @@
+
+ #if U_SHOW_CPLUSPLUS_API
+
++U_CXX_BEGIN
+ #include <memory>
++U_CXX_END
+
+ U_NAMESPACE_BEGIN
+
+diff --git a/icu4c/source/common/unicode/std_string.h b/icu4c/source/common/unicode/std_string.h
+index 729c5639950..d293e714fe0 100644
+--- a/icu4c/source/common/unicode/std_string.h
++++ b/icu4c/source/common/unicode/std_string.h
+@@ -32,6 +32,9 @@
+ #if defined(__GLIBCXX__)
+ namespace std { class type_info; }
+ #endif
++
++U_CXX_BEGIN
+ #include <string>
++U_CXX_END
+
+ #endif // __STD_STRING_H__
+diff --git a/icu4c/source/common/unicode/umachine.h b/icu4c/source/common/unicode/umachine.h
+index 0205da62eb4..6137c125df4 100644
+--- a/icu4c/source/common/unicode/umachine.h
++++ b/icu4c/source/common/unicode/umachine.h
+@@ -75,14 +75,39 @@
+ * @stable ICU 2.4
+ */
+
++/**
++ * \def U_CXX_BEGIN
++ * This is used to begin a C++ block.
++ * When not compiling for C++, it does nothing.
++ * When compiling for C++, it begins an extern "C++" linkage block (to protect
++ * against cases in which an external client includes ICU header files inside
++ * an extern "C" linkage block).
++ *
++ * @draft ICU 65
++ */
++
++/**
++ * \def U_CXX_END
++ * This is used to end a declaration of a C++ API.
++ * When not compiling for C++, it does nothing.
++ * When compiling for C++, it ends the extern "C++" block begun by
++ * U_CXX_BEGIN.
++ *
++ * @draft ICU 65
++ */
++
+ #ifdef __cplusplus
+ # define U_CFUNC extern "C"
+ # define U_CDECL_BEGIN extern "C" {
+ # define U_CDECL_END }
++# define U_CXX_BEGIN extern "C++" {
++# define U_CXX_END }
+ #else
+ # define U_CFUNC extern
+ # define U_CDECL_BEGIN
+ # define U_CDECL_END
++# define U_CXX_BEGIN
++# define U_CXX_END
+ #endif
+
+ #ifndef U_ATTRIBUTE_DEPRECATED
+diff --git a/icu4c/source/common/unicode/unistr.h b/icu4c/source/common/unicode/unistr.h
+index d79168b9195..c323e33c07c 100644
+--- a/icu4c/source/common/unicode/unistr.h
++++ b/icu4c/source/common/unicode/unistr.h
+@@ -28,7 +28,6 @@
+ * \brief C++ API: Unicode String
+ */
+
+-#include <cstddef>
+ #include "unicode/utypes.h"
+ #include "unicode/char16ptr.h"
+ #include "unicode/rep.h"
+@@ -36,6 +35,10 @@
+ #include "unicode/stringpiece.h"
+ #include "unicode/bytestream.h"
+
++U_CXX_BEGIN
++#include <cstddef>
++U_CXX_END
++
+ struct UConverter; // unicode/ucnv.h
+
+ #ifndef USTRING_H
+diff --git a/icu4c/source/common/unicode/uversion.h b/icu4c/source/common/unicode/uversion.h
+index 4aaa8b4d606..9e6bd13734f 100644
+--- a/icu4c/source/common/unicode/uversion.h
++++ b/icu4c/source/common/unicode/uversion.h
+@@ -64,13 +64,10 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
+
+ /**
+ * \def U_NAMESPACE_BEGIN
+- * This is used to begin a declaration of a public ICU C++ API.
++ * This is used to begin a declaration of a public ICU C++ API within
++ * versioned-ICU-namespace block.
+ * When not compiling for C++, it does nothing.
+- * When compiling for C++, it begins an extern "C++" linkage block (to protect
+- * against cases in which an external client includes ICU header files inside
+- * an extern "C" linkage block).
+ *
+- * It also begins a versioned-ICU-namespace block.
+ * @stable ICU 2.4
+ */
+
+@@ -78,10 +75,8 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
+ * \def U_NAMESPACE_END
+ * This is used to end a declaration of a public ICU C++ API.
+ * When not compiling for C++, it does nothing.
+- * When compiling for C++, it ends the extern "C++" block begun by
+- * U_NAMESPACE_BEGIN.
++ * It ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN.
+ *
+- * It also ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN.
+ * @stable ICU 2.4
+ */
+
+@@ -116,8 +111,8 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
+ namespace icu = U_ICU_NAMESPACE;
+ # endif
+
+-# define U_NAMESPACE_BEGIN extern "C++" { namespace U_ICU_NAMESPACE {
+-# define U_NAMESPACE_END } }
++# define U_NAMESPACE_BEGIN U_CXX_BEGIN namespace U_ICU_NAMESPACE {
++# define U_NAMESPACE_END } U_CXX_END
+ # define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
+ # define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
+
+diff --git a/icu4c/source/i18n/unicode/numberrangeformatter.h b/icu4c/source/i18n/unicode/numberrangeformatter.h
+index 4a386b80394..0c6eb62ae1f 100644
+--- a/icu4c/source/i18n/unicode/numberrangeformatter.h
++++ b/icu4c/source/i18n/unicode/numberrangeformatter.h
+@@ -5,13 +5,16 @@
+ #ifndef __NUMBERRANGEFORMATTER_H__
+ #define __NUMBERRANGEFORMATTER_H__
+
+-#include <atomic>
+ #include "unicode/appendable.h"
+ #include "unicode/fieldpos.h"
+ #include "unicode/formattedvalue.h"
+ #include "unicode/fpositer.h"
+ #include "unicode/numberformatter.h"
+
++U_CXX_BEGIN
++#include <atomic>
++U_CXX_END
++
+ #ifndef U_HIDE_DRAFT_API
+
+ /**
+diff --git a/icu4c/source/io/unicode/ustream.h b/icu4c/source/io/unicode/ustream.h
+index c10ce6a2de5..e1ec87c75d3 100644
+--- a/icu4c/source/io/unicode/ustream.h
++++ b/icu4c/source/io/unicode/ustream.h
+@@ -34,7 +34,9 @@
+ namespace std { class type_info; } // WORKAROUND: http://llvm.org/bugs/show_bug.cgi?id=13364
+ #endif
+
++U_CXX_BEGIN
+ #include <iostream>
++U_CXX_END
+
+ U_NAMESPACE_BEGIN
+
+diff --git a/icu4c/source/test/hdrtst/Makefile.in b/icu4c/source/test/hdrtst/Makefile.in
+index 55e833943d5..a485f7a80d6 100644
+--- a/icu4c/source/test/hdrtst/Makefile.in
++++ b/icu4c/source/test/hdrtst/Makefile.in
+@@ -53,7 +53,7 @@ E_DEP="[6/$(E_NUM)] Hide Deprecated: "
+ E_INT="[7/$(E_NUM)] Hide Internal: "
+ E_OBS="[8/$(E_NUM)] Hide Obsolete: "
+
+-check: dtest ctest cpptest doclean drafttest deprtest internaltest obsoletetest
++check: dtest ctest cpptest cpptest_extern_c doclean drafttest deprtest internaltest obsoletetest
+ ifeq ($(MAKECMDGOALS),check)
+ $(MAKE) clean
+ else
+@@ -74,6 +74,18 @@ cpptest:
+ done ;\
+ exit $$FAIL
+
++cpptest_extern_c:
++ @FAIL=0;for file in `ls $(prefix)/include/unicode/*.h | fgrep -v -f $(srcdir)/pfiles.txt`; do \
++ incfile=`basename $$file .h` ; \
++ echo "$@ unicode/$$incfile.h" ; \
++ echo 'extern "C" {' > ht_$$incfile.cpp ; \
++ echo '#include "'unicode/$$incfile'.h"' >> ht_$$incfile.cpp ; \
++ echo '}' >> ht_$$incfile.cpp ; \
++ echo 'void junk(){}' >> ht_$$incfile.cpp ; \
++ $(COMPILE.cc) -c $(cppflags) ht_$$incfile.cpp || FAIL=1 ; \
++ done ;\
++ exit $$FAIL
++
+ # layout is removed
+
+ dtest:
+@@ -170,5 +182,5 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+-.PHONY: doclean check all cpptest dtest ctest clean distclean
++.PHONY: doclean check all cpptest cpptest_extern_c dtest ctest clean distclean
+
diff --git a/external/icu/icu4c-build.patch.1 b/external/icu/icu4c-build.patch.1
index 6d9ade608cb5..a878de732322 100644
--- a/external/icu/icu4c-build.patch.1
+++ b/external/icu/icu4c-build.patch.1
@@ -8,7 +8,7 @@ diff -ur icu.org/source/config/mh-darwin icu/source/config/mh-darwin
-ifeq ($(ENABLE_RPATH),YES)
-LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(libdir)/$(notdir $(MIDDLE_SO_TARGET))
-else
--LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(notdir $(MIDDLE_SO_TARGET))
+-LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(notdir $(MIDDLE_SO_TARGET)) $(PKGDATA_TRAILING_SPACE)
-endif
+LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name @__________________________________________________URELIB/$(notdir $(MIDDLE_SO_TARGET))
diff --git a/external/icu/icu4c-khmerbreakengine.patch.1 b/external/icu/icu4c-khmerbreakengine.patch.1
index 65f7cc0d774f..7992da6fc18f 100644
--- a/external/icu/icu4c-khmerbreakengine.patch.1
+++ b/external/icu/icu4c-khmerbreakengine.patch.1
@@ -192,37 +192,16 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
/*
******************************************************************
* PossibleWord
-@@ -103,35 +278,35 @@
- public:
- PossibleWord() : count(0), prefix(0), offset(-1), mark(0), current(0) {};
- ~PossibleWord() {};
--
-+
+@@ -282,7 +282,7 @@
+ ~PossibleWord() {}
+
// Fill the list of candidates if needed, select the longest, and return the number found
- int32_t candidates( UText *text, DictionaryMatcher *dict, int32_t rangeEnd );
--
+ int32_t candidates( UText *text, DictionaryMatcher *dict, int32_t rangeEnd, UnicodeSet const *ignoreSet = NULL, int32_t minLength = 0 );
-+
+
// Select the currently marked candidate, point after it in the text, and invalidate self
int32_t acceptMarked( UText *text );
--
-+
- // Back up from the current candidate to the next shorter one; return TRUE if that exists
- // and point the text after it
- UBool backUp( UText *text );
--
-+
- // Return the longest prefix this candidate location shares with a dictionary word
- // Return value is in code points.
- int32_t longestPrefix() { return prefix; };
--
-+
- // Mark the current candidate as the one we like
- void markCurrent() { mark = current; };
--
-+
- // Get length in code points of the marked word.
- int32_t markedCPLength() { return cpLengths[mark]; };
+@@ -303,12 +303,12 @@
};
@@ -1085,32 +1064,3 @@ 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 2018-10-19 14:20:11.031075856 +0200
-+++ icu/source/data/Makefile.in 2018-10-19 14:21:00.339942804 +0200
-@@ -183,7 +183,7 @@
- endif
- endif
-
--packagedata: icupkg.inc $(PKGDATA_LIST) build-local
-+packagedata: icupkg.inc $(PKGDATA_LIST) build-local $(MAINBUILDDIR)/khmerdict.stamp
- 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 @@
- $(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
-+#$(BRKBLDDIR)/khmerdict.dict: $(TOOLBINDIR)/gendict$(TOOLEXEEXT) $(DAT_FILES)
-+# $(INVOKE) $(TOOLBINDIR)/gendict --bytes --transform offset-0x1780 -c -i $(BUILDDIR) $(DICTSRCDIR)/khmerdict.txt $(BRKBLDDIR)/khmerdict.dict
-+
-+#$(MAINBUILDDIR)/khmerdict.stamp: $(TOOLBINDIR)/gendict$(TOOLEXEEXT) $(BRKSRCDIR)/khmerdict.txt build-local
-+# $(INVOKE) $(TOOLBINDIR)/gendict --bytes --transform offset-0x1780 -c -i $(BUILDDIR) $(DICTSRCDIR)/khmerdict.txt $(BRKBLDDIR)/khmerdict.dict
-+$(MAINBUILDDIR)/khmerdict.stamp: $(BRKSRCDIR)/khmerdict.dict build-local
-+ cp $< $(BRKBLDDIR)
-+ echo "timestamp" > $@
-
- #################################################### CFU
- # CFU FILES
diff --git a/external/icu/icu4c-mkdir.patch.1 b/external/icu/icu4c-mkdir.patch.1
index 7de4cf51174c..112e57cc2910 100644
--- a/external/icu/icu4c-mkdir.patch.1
+++ b/external/icu/icu4c-mkdir.patch.1
@@ -1,10 +1,10 @@
diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in
---- icu.org/source/data/Makefile.in 2018-06-21 11:39:15.000000000 +0200
-+++ icu/source/data/Makefile.in 2018-07-16 13:18:26.928109541 +0200
-@@ -367,6 +367,7 @@
+--- icu.org/source/data/Makefile.in 2019-04-17 21:42:15.000000000 +0200
++++ icu/source/data/Makefile.in 2019-10-28 12:57:15.033649494 +0100
+@@ -226,6 +226,7 @@
ifeq ($(PKGDATA_MODE),dll)
SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
- $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc | build-dir
+ $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc
+ mkdir -p $(OUTTMPDIR)
ifeq ($(MSYS_RC_MODE),1)
rc.exe -i$(srcdir)/../common -i$(top_builddir)/common -fo$@ $(CPPFLAGS) $<
diff --git a/external/icu/icu4c-rpath.patch.1 b/external/icu/icu4c-rpath.patch.1
index debbab1a6e3d..35a5457780c4 100644
--- a/external/icu/icu4c-rpath.patch.1
+++ b/external/icu/icu4c-rpath.patch.1
@@ -15,9 +15,9 @@ diff -ur icu.org/source/config/mh-linux icu/source/config/mh-linux
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
+@@ -18,6 +18,9 @@
MIDDLE_SO_TARGET=
+ PKGDATA_TRAILING_SPACE=" "
+# escape $ with \ when passing to echo; needed to preserve $ORIGIN
+SHLIB.c.shell := $(subst $$,\$$,$(SHLIB.c))