summaryrefslogtreecommitdiffstats
path: root/intl/icu-patches
diff options
context:
space:
mode:
Diffstat (limited to 'intl/icu-patches')
-rw-r--r--intl/icu-patches/bug-1198952-workaround-make-3.82-bug.diff42
-rw-r--r--intl/icu-patches/bug-1433303-minimize-subtags.diff45
-rw-r--r--intl/icu-patches/bug-1534160-android-timezone.diff112
-rw-r--r--intl/icu-patches/bug-1614941-dsb-hsb-dates.diff54
-rw-r--r--intl/icu-patches/bug-1636984-alias-append-items-sink.diff33
-rw-r--r--intl/icu-patches/bug-1636984-append-item-dayperiod-fractional-seconds.diff86
-rw-r--r--intl/icu-patches/bug-1636984-display-name-fractional-seconds.diff39
-rw-r--r--intl/icu-patches/bug-91573528
-rw-r--r--intl/icu-patches/suppress-warnings.diff80
9 files changed, 519 insertions, 0 deletions
diff --git a/intl/icu-patches/bug-1198952-workaround-make-3.82-bug.diff b/intl/icu-patches/bug-1198952-workaround-make-3.82-bug.diff
new file mode 100644
index 0000000000..dc4f4e2692
--- /dev/null
+++ b/intl/icu-patches/bug-1198952-workaround-make-3.82-bug.diff
@@ -0,0 +1,42 @@
+diff --git a/intl/icu/source/Makefile.in b/intl/icu/source/Makefile.in
+--- a/intl/icu/source/Makefile.in
++++ b/intl/icu/source/Makefile.in
+@@ -134,32 +134,36 @@ endif
+
+ LOCAL_SUBDIRS = $(SUBDIRS)
+ CLEAN_FIRST_SUBDIRS = $(TOOLS)
+
+ $(LIBDIR) $(BINDIR):
+ -$(MKINSTALLDIRS) $@
+
+ ## Recursive targets
++## Strictly speaking, the $(MAKEOVERRIDES) is not necessary when recursing, but
++## there is a bug in GNU make 3.82 that throws away the original overrides in
++## favor of RECURSIVE=YES when the submake in the subdirectory restarts itself
++## after dependency files have been created.
+ all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR)
+ ifneq ($(NEED_ESCAPING),)
+ @echo "building tools/escapesrc (Needed for this platform with NEED_ESCAPING)"
+- @(cd tools/escapesrc && $(MAKE) RECURSIVE=YES $$local_target) || exit
++ @(cd tools/escapesrc && $(MAKE) $(MAKEOVERRIDES) RECURSIVE=YES $$local_target) || exit
+ endif
+ @dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
+ echo "$(MAKE)[$(MAKELEVEL)]: Making \`$$target' in \`$$subdir'"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-local"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+- (cd $$subdir && $(MAKE) RECURSIVE=YES $$local_target) || exit; \
++ (cd $$subdir && $(MAKE) $(MAKEOVERRIDES) RECURSIVE=YES $$local_target) || exit; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) "$$target-local" || exit; \
+ fi
+
+ clean-recursive-with-twist:
+ $(MAKE) clean-recursive LOCAL_SUBDIRS='$(CLEAN_FIRST_SUBDIRS) $(filter-out $(CLEAN_FIRST_SUBDIRS),$(LOCAL_SUBDIRS))'
+
diff --git a/intl/icu-patches/bug-1433303-minimize-subtags.diff b/intl/icu-patches/bug-1433303-minimize-subtags.diff
new file mode 100644
index 0000000000..ed3d9861e0
--- /dev/null
+++ b/intl/icu-patches/bug-1433303-minimize-subtags.diff
@@ -0,0 +1,45 @@
+# Handle empty string results when calling createLikelySubtagsString() for _uloc_minimizeSubtags().
+#
+# ICU bug: https://ssl.icu-project.org/trac/ticket/13786
+
+diff --git a/intl/icu/source/common/loclikely.cpp b/intl/icu/source/common/loclikely.cpp
+--- a/intl/icu/source/common/loclikely.cpp
++++ b/intl/icu/source/common/loclikely.cpp
+@@ -1051,17 +1051,17 @@ _uloc_minimizeSubtags(const char* localeID,
+ 0,
+ sink,
+ err);
+ }
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+- else if (uprv_strnicmp(
++ else if (!tagBuffer.isEmpty() && uprv_strnicmp(
+ maximizedTagBuffer.data(),
+ tagBuffer.data(),
+ tagBuffer.length()) == 0) {
+
+ createTagString(
+ lang,
+ langLength,
+ NULL,
+@@ -1096,17 +1096,17 @@ _uloc_minimizeSubtags(const char* localeID,
+ 0,
+ sink,
+ err);
+ }
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+- else if (uprv_strnicmp(
++ else if (!tagBuffer.isEmpty() && uprv_strnicmp(
+ maximizedTagBuffer.data(),
+ tagBuffer.data(),
+ tagBuffer.length()) == 0) {
+
+ createTagString(
+ lang,
+ langLength,
+ script,
diff --git a/intl/icu-patches/bug-1534160-android-timezone.diff b/intl/icu-patches/bug-1534160-android-timezone.diff
new file mode 100644
index 0000000000..e9c997e812
--- /dev/null
+++ b/intl/icu-patches/bug-1534160-android-timezone.diff
@@ -0,0 +1,112 @@
+commit 6099f062f5d0e79586149d9a8963525a59f89557
+Author: Makoto Kato <m_kato@ga2.so-net.ne.jp>
+Date: Fri Nov 22 16:51:30 2019 +0900
+
+ ICU-11992 uprv_tzname doesn't return valid time zone on Android
+
+# ICU bug report:
+# https://unicode-org.atlassian.net/browse/ICU-11992
+#
+# Pull request:
+# https://github.com/unicode-org/icu/pull/605
+#
+# Commit:
+# https://github.com/unicode-org/icu/commit/c9037ca8d3c0738f1a044dd845bdc0dc646f3e97.patch
+
+diff --git a/intl/icu/source/common/putil.cpp b/intl/icu/source/common/putil.cpp
+--- a/intl/icu/source/common/putil.cpp
++++ b/intl/icu/source/common/putil.cpp
+@@ -116,15 +116,19 @@
+ # include <unistd.h>
+ # if U_PLATFORM == U_PF_SOLARIS
+ # ifndef _XPG4_2
+ # define _XPG4_2
+ # endif
++# elif U_PLATFORM == U_PF_ANDROID
++# include <sys/system_properties.h>
++# include <dlfcn.h>
+ # endif
+ #elif U_PLATFORM == U_PF_QNX
+ # include <sys/neutrino.h>
+ #endif
+
++
+ /*
+ * Only include langinfo.h if we have a way to get the codeset. If we later
+ * depend on more feature, we can test on U_HAVE_NL_LANGINFO.
+ *
+ */
+@@ -1041,13 +1045,57 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
+ }
+ return result;
+ }
+ #endif
+
++#if U_PLATFORM == U_PF_ANDROID
++typedef int(system_property_read_callback)(const prop_info* info,
++ void (*callback)(void* cookie,
++ const char* name,
++ const char* value,
++ uint32_t serial),
++ void* cookie);
++typedef int(system_property_get)(const char*, char*);
++
++static char gAndroidTimeZone[PROP_VALUE_MAX] = { '\0' };
++
++static void u_property_read(void* cookie, const char* name, const char* value,
++ uint32_t serial) {
++ uprv_strcpy((char* )cookie, value);
++}
++#endif
++
+ U_CAPI void U_EXPORT2
+ uprv_tzname_clear_cache()
+ {
++#if U_PLATFORM == U_PF_ANDROID
++ /* Android's timezone is stored in system property. */
++ gAndroidTimeZone[0] = '\0';
++ void* libc = dlopen("libc.so", RTLD_NOLOAD);
++ if (libc) {
++ /* Android API 26+ has new API to get system property and old API
++ * (__system_property_get) is deprecated */
++ system_property_read_callback* property_read_callback =
++ (system_property_read_callback*)dlsym(
++ libc, "__system_property_read_callback");
++ if (property_read_callback) {
++ const prop_info* info =
++ __system_property_find("persist.sys.timezone");
++ if (info) {
++ property_read_callback(info, &u_property_read, gAndroidTimeZone);
++ }
++ } else {
++ system_property_get* property_get =
++ (system_property_get*)dlsym(libc, "__system_property_get");
++ if (property_get) {
++ property_get("persist.sys.timezone", gAndroidTimeZone);
++ }
++ }
++ dlclose(libc);
++ }
++#endif
++
+ #if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
+ gTimeZoneBufferPtr = NULL;
+ #endif
+ }
+
+@@ -1082,11 +1130,15 @@ uprv_tzname(int n)
+ }
+ #endif*/
+
+ /* This code can be temporarily disabled to test tzname resolution later on. */
+ #ifndef DEBUG_TZNAME
++#if U_PLATFORM == U_PF_ANDROID
++ tzid = gAndroidTimeZone;
++#else
+ tzid = getenv("TZ");
++#endif
+ if (tzid != NULL && isValidOlsonID(tzid)
+ #if U_PLATFORM == U_PF_SOLARIS
+ /* When TZ equals localtime on Solaris, check the /etc/localtime file. */
+ && uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
+ #endif
diff --git a/intl/icu-patches/bug-1614941-dsb-hsb-dates.diff b/intl/icu-patches/bug-1614941-dsb-hsb-dates.diff
new file mode 100644
index 0000000000..cd3cdda8d3
--- /dev/null
+++ b/intl/icu-patches/bug-1614941-dsb-hsb-dates.diff
@@ -0,0 +1,54 @@
+diff --git a/intl/icu/source/data/locales/dsb.txt b/intl/icu/source/data/locales/dsb.txt
+--- a/intl/icu/source/data/locales/dsb.txt
++++ b/intl/icu/source/data/locales/dsb.txt
+@@ -351,7 +351,10 @@ dsb{
+ MEd{"E, d.M."}
+ MMM{"LLL"}
+ MMMEd{"E, d. MMM"}
++ MMMMd{"d. MMMM"}
+ MMMd{"d. MMM"}
++ MMd{"d. MM"}
++ MMdd{"dd. MM"}
+ Md{"d.M."}
+ d{"d"}
+ h{"h a"}
+@@ -361,9 +364,12 @@ dsb{
+ y{"y"}
+ yM{"M.y"}
+ yMEd{"E, d.M.y"}
++ yMM{"MM y"}
+ yMMM{"MMM y"}
+ yMMMEd{"E, d. MMM y"}
++ yMMMM{"MMMM y"}
+ yMMMd{"d. MMM y"}
++ yMMdd{"dd. MM y"}
+ yMd{"d.M.y"}
+ yQQQ{"QQQ y"}
+ yQQQQ{"QQQQ y"}
+diff --git a/intl/icu/source/data/locales/hsb.txt b/intl/icu/source/data/locales/hsb.txt
+--- a/intl/icu/source/data/locales/hsb.txt
++++ b/intl/icu/source/data/locales/hsb.txt
+@@ -351,7 +351,10 @@ hsb{
+ MEd{"E, d.M."}
+ MMM{"LLL"}
+ MMMEd{"E, d. MMM"}
++ MMMMd{"d. MMMM"}
+ MMMd{"d. MMM"}
++ MMd{"d. MM"}
++ MMdd{"dd. MM"}
+ Md{"d.M."}
+ d{"d"}
+ h{"h a"}
+@@ -361,9 +364,12 @@ hsb{
+ y{"y"}
+ yM{"M.y"}
+ yMEd{"E, d.M.y"}
++ yMM{"MM y"}
+ yMMM{"MMM y"}
+ yMMMEd{"E, d. MMM y"}
++ yMMMM{"MMMM y"}
+ yMMMd{"d. MMM y"}
++ yMMdd{"dd. MM y"}
+ yMd{"d.M.y"}
+ yQQQ{"QQQ y"}
+ yQQQQ{"QQQQ y"}
diff --git a/intl/icu-patches/bug-1636984-alias-append-items-sink.diff b/intl/icu-patches/bug-1636984-alias-append-items-sink.diff
new file mode 100644
index 0000000000..61d6a36cb9
--- /dev/null
+++ b/intl/icu-patches/bug-1636984-alias-append-items-sink.diff
@@ -0,0 +1,33 @@
+# Handle "alias" entries in DateTimePatternGenerator::AppendItemNamesSink.
+#
+# ICU bug: https://unicode-org.atlassian.net/browse/ICU-20992
+
+diff --git a/intl/icu/source/i18n/dtptngen.cpp b/intl/icu/source/i18n/dtptngen.cpp
+--- a/intl/icu/source/i18n/dtptngen.cpp
++++ b/intl/icu/source/i18n/dtptngen.cpp
+@@ -956,16 +956,25 @@ struct DateTimePatternGenerator::AppendI
+ virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
+ UErrorCode &errorCode) {
+ ResourceTable itemsTable = value.getTable(errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
+ UDateTimePGDisplayWidth width;
+ UDateTimePatternField field = dtpg.getFieldAndWidthIndices(key, &width);
+ if (field == UDATPG_FIELD_COUNT) { continue; }
++
++ UResType type = value.getType();
++ U_ASSERT(type == URES_TABLE || type == URES_ALIAS);
++
++ // TODO: Implement support for alias types.
++ if (type == URES_ALIAS) {
++ continue;
++ }
++
+ ResourceTable detailsTable = value.getTable(errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ for (int32_t j = 0; detailsTable.getKeyAndValue(j, key, value); ++j) {
+ if (uprv_strcmp(key, "dn") != 0) { continue; }
+ const UnicodeString& valueStr = value.getUnicodeString(errorCode);
+ if (dtpg.getFieldDisplayName(field,width).isEmpty() && !valueStr.isEmpty()) {
+ dtpg.setFieldDisplayName(field,width,valueStr);
+ }
diff --git a/intl/icu-patches/bug-1636984-append-item-dayperiod-fractional-seconds.diff b/intl/icu-patches/bug-1636984-append-item-dayperiod-fractional-seconds.diff
new file mode 100644
index 0000000000..32ba468950
--- /dev/null
+++ b/intl/icu-patches/bug-1636984-append-item-dayperiod-fractional-seconds.diff
@@ -0,0 +1,86 @@
+# Add <appendItem> entries for "DayPeriod" and "FractionalSeconds" to avoid the
+# "├ ┤" parentheses from ICU and instead use the normal "( )" parentheses.
+#
+# CLDR bug: https://unicode-org.atlassian.net/browse/CLDR-13184
+
+diff --git a/intl/icu/source/data/locales/root.txt b/intl/icu/source/data/locales/root.txt
+--- a/intl/icu/source/data/locales/root.txt
++++ b/intl/icu/source/data/locales/root.txt
+@@ -213,17 +213,19 @@ root{
+ }
+ NoonMarker:alias{"/LOCALE/calendar/gregorian/NoonMarker"}
+ NoonMarkerNarrow:alias{"/LOCALE/calendar/gregorian/NoonMarkerNarrow"}
+ appendItems{
+ Day{"{0} ({2}: {1})"}
++ DayPeriod{"{0} ({2}: {1})"}
+ Day-Of-Week{"{0} {1}"}
+ Era{"{1} {0}"}
+ Hour{"{0} ({2}: {1})"}
+ Minute{"{0} ({2}: {1})"}
+ Month{"{0} ({2}: {1})"}
+ Quarter{"{0} ({2}: {1})"}
+ Second{"{0} ({2}: {1})"}
++ FractionalSecond{"{0} ({2}: {1})"}
+ Timezone{"{0} {1}"}
+ Week{"{0} ({2}: {1})"}
+ Year{"{1} {0}"}
+ }
+ availableFormats{
+@@ -749,17 +751,19 @@ root{
+ }
+ NoonMarker:alias{"/LOCALE/calendar/gregorian/NoonMarker"}
+ NoonMarkerNarrow:alias{"/LOCALE/calendar/gregorian/NoonMarkerNarrow"}
+ appendItems{
+ Day{"{0} ({2}: {1})"}
++ DayPeriod{"{0} ({2}: {1})"}
+ Day-Of-Week{"{0} {1}"}
+ Era{"{1} {0}"}
+ Hour{"{0} ({2}: {1})"}
+ Minute{"{0} ({2}: {1})"}
+ Month{"{0} ({2}: {1})"}
+ Quarter{"{0} ({2}: {1})"}
+ Second{"{0} ({2}: {1})"}
++ FractionalSecond{"{0} ({2}: {1})"}
+ Timezone{"{0} {1}"}
+ Week{"{0} ({2}: {1})"}
+ Year{"{1} {0}"}
+ }
+ availableFormats{
+@@ -1018,17 +1022,19 @@ root{
+ "{1} {0}",
+ "{1} {0}",
+ }
+ appendItems{
+ Day{"{0} ({2}: {1})"}
++ DayPeriod{"{0} ({2}: {1})"}
+ Day-Of-Week{"{0} {1}"}
+ Era{"{1} {0}"}
+ Hour{"{0} ({2}: {1})"}
+ Minute{"{0} ({2}: {1})"}
+ Month{"{0} ({2}: {1})"}
+ Quarter{"{0} ({2}: {1})"}
+ Second{"{0} ({2}: {1})"}
++ FractionalSecond{"{0} ({2}: {1})"}
+ Timezone{"{0} {1}"}
+ Week{"{0} ({2}: {1})"}
+ Year{"{1} {0}"}
+ }
+ availableFormats{
+diff --git a/intl/icu/source/i18n/dtptngen.cpp b/intl/icu/source/i18n/dtptngen.cpp
+--- a/intl/icu/source/i18n/dtptngen.cpp
++++ b/intl/icu/source/i18n/dtptngen.cpp
+@@ -257,12 +257,12 @@ static const dtTypeElem dtTypes[] = {
+ {0, UDATPG_FIELD_COUNT, 0, 0, 0} , // last row of dtTypes[]
+ };
+
+ static const char* const CLDR_FIELD_APPEND[] = {
+ "Era", "Year", "Quarter", "Month", "Week", "*", "Day-Of-Week",
+- "*", "*", "Day", "*", // The UDATPG_x_FIELD constants and these fields have a different order than in ICU4J
+- "Hour", "Minute", "Second", "*", "Timezone"
++ "*", "*", "Day", "DayPeriod", // The UDATPG_x_FIELD constants and these fields have a different order than in ICU4J
++ "Hour", "Minute", "Second", "FractionalSecond", "Timezone"
+ };
+
+ static const char* const CLDR_FIELD_NAME[UDATPG_FIELD_COUNT] = {
+ "era", "year", "quarter", "month", "week", "weekOfMonth", "weekday",
+ "dayOfYear", "weekdayOfMonth", "day", "dayperiod", // The UDATPG_x_FIELD constants and these fields have a different order than in ICU4J
diff --git a/intl/icu-patches/bug-1636984-display-name-fractional-seconds.diff b/intl/icu-patches/bug-1636984-display-name-fractional-seconds.diff
new file mode 100644
index 0000000000..1e68a20b42
--- /dev/null
+++ b/intl/icu-patches/bug-1636984-display-name-fractional-seconds.diff
@@ -0,0 +1,39 @@
+# Give fractional seconds a more useful display name than "F14".
+#
+# CLDR bug: https://unicode-org.atlassian.net/browse/CLDR-13623
+
+diff --git a/intl/icu/source/data/locales/root.txt b/intl/icu/source/data/locales/root.txt
+--- a/intl/icu/source/data/locales/root.txt
++++ b/intl/icu/source/data/locales/root.txt
+@@ -2527,10 +2527,15 @@ root{
+ zone{
+ dn{"Zone"}
+ }
+ zone-narrow:alias{"/LOCALE/fields/zone-short"}
+ zone-short:alias{"/LOCALE/fields/zone"}
++ fractionalSecond{
++ dn{"Fractional Second"}
++ }
++ fractionalSecond-narrow:alias{"/LOCALE/fields/fractionalSecond-short"}
++ fractionalSecond-short:alias{"/LOCALE/fields/fractionalSecond"}
+ }
+ layout{
+ characters{"left-to-right"}
+ lines{"top-to-bottom"}
+ }
+diff --git a/intl/icu/source/i18n/dtptngen.cpp b/intl/icu/source/i18n/dtptngen.cpp
+--- a/intl/icu/source/i18n/dtptngen.cpp
++++ b/intl/icu/source/i18n/dtptngen.cpp
+@@ -264,11 +264,11 @@ static const char* const CLDR_FIELD_APPE
+ };
+
+ static const char* const CLDR_FIELD_NAME[UDATPG_FIELD_COUNT] = {
+ "era", "year", "quarter", "month", "week", "weekOfMonth", "weekday",
+ "dayOfYear", "weekdayOfMonth", "day", "dayperiod", // The UDATPG_x_FIELD constants and these fields have a different order than in ICU4J
+- "hour", "minute", "second", "*", "zone"
++ "hour", "minute", "second", "fractionalSecond", "zone"
+ };
+
+ static const char* const CLDR_FIELD_WIDTH[] = { // [UDATPG_WIDTH_COUNT]
+ "", "-short", "-narrow"
+ };
diff --git a/intl/icu-patches/bug-915735 b/intl/icu-patches/bug-915735
new file mode 100644
index 0000000000..c713581f8e
--- /dev/null
+++ b/intl/icu-patches/bug-915735
@@ -0,0 +1,28 @@
+Bug 915735 - Fix linking the ICU libraries on Mac
+
+diff --git a/intl/icu/source/config/mh-darwin b/intl/icu/source/config/mh-darwin
+--- a/intl/icu/source/config/mh-darwin
++++ b/intl/icu/source/config/mh-darwin
+@@ -25,21 +25,17 @@ ARFLAGS += -c
+ COMPILE.c= $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) -fno-common -c
+ COMPILE.cc= $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) -fno-common -c
+
+ ## Commands to make a shared library
+ SHLIB.c= $(CC) -dynamiclib -dynamic $(CFLAGS) $(LDFLAGS) $(LD_SOOPTIONS)
+ SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS) $(LD_SOOPTIONS)
+
+ ## Compiler switches to embed a library name and version information
+-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)) $(PKGDATA_TRAILING_SPACE)
+-endif
++LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name @executable_path/$(notdir $(MIDDLE_SO_TARGET)) $(PKGDATA_TRAILING_SPACE)
+
+ ## Compiler switch to embed a runtime search path
+ LD_RPATH=
+ LD_RPATH_PRE= -Wl,-rpath,
+
+ ## Environment variable to set a runtime search path
+ LDLIBRARYPATH_ENVVAR = DYLD_LIBRARY_PATH
+
diff --git a/intl/icu-patches/suppress-warnings.diff b/intl/icu-patches/suppress-warnings.diff
new file mode 100644
index 0000000000..e124a1689d
--- /dev/null
+++ b/intl/icu-patches/suppress-warnings.diff
@@ -0,0 +1,80 @@
+diff --git a/intl/icu/source/acinclude.m4 b/intl/icu/source/acinclude.m4
+--- a/intl/icu/source/acinclude.m4
++++ b/intl/icu/source/acinclude.m4
+@@ -469,30 +469,36 @@ AC_DEFUN([AC_CHECK_STRICT_COMPILE],
+ *)
+ # Do not use -ansi. It limits us to C90, and it breaks some platforms.
+ # We use -std=c11 to disable the gnu99 defaults and its associated warnings
+ CFLAGS="$CFLAGS -std=c11"
+ ;;
+ esac
+
+ CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
++
++ # Suppress clang C warnings:
++ CFLAGS="$CFLAGS -Wno-sign-compare -Wno-unused"
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CFLAGS="$CFLAGS /W4"
+ fi ;;
+ *-*-mingw*)
+ CFLAGS="$CFLAGS -W4" ;;
+ esac
+ fi
+ if test "$GXX" = yes
+ then
+ CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
++
++ # Suppress clang C++ warnings:
++ CXXFLAGS="$CXXFLAGS -Wno-unused -Wno-unused-parameter"
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CXXFLAGS="$CXXFLAGS /W4"
+ fi ;;
+ *-*-mingw*)
+diff --git a/intl/icu/source/configure b/intl/icu/source/configure
+--- a/intl/icu/source/configure
++++ b/intl/icu/source/configure
+@@ -4359,30 +4359,36 @@ fi
+ *)
+ # Do not use -ansi. It limits us to C90, and it breaks some platforms.
+ # We use -std=c11 to disable the gnu99 defaults and its associated warnings
+ CFLAGS="$CFLAGS -std=c11"
+ ;;
+ esac
+
+ CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
++
++ # Suppress clang C warnings:
++ CFLAGS="$CFLAGS -Wno-sign-compare -Wno-unused"
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CFLAGS="$CFLAGS /W4"
+ fi ;;
+ *-*-mingw*)
+ CFLAGS="$CFLAGS -W4" ;;
+ esac
+ fi
+ if test "$GXX" = yes
+ then
+ CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
++
++ # Suppress clang C++ warnings:
++ CXXFLAGS="$CXXFLAGS -Wno-unused -Wno-unused-parameter"
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CXXFLAGS="$CXXFLAGS /W4"
+ fi ;;
+ *-*-mingw*)