Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f8bb254
patch: apply 000-MSFT-Patch-Change_Windows_datafile_name_to_omit_vers…
May 14, 2026
ae3da47
patch: apply 001-MSFT-Patch-ICU_Header_changes_for_Windows
May 14, 2026
9ab984d
patch: apply 004-MSFT-Patch-ICU_Header_Additional_changes_for_Windows
May 14, 2026
efd787d
patch: apply 006-MSFT-Patch-ICU_Make_u_cleanup_NOOP_for_OS_ICU
May 14, 2026
957662b
patch: apply 007-MSFT-Patch-cldr_to_icu_build_tool_Windows_changes (h…
May 14, 2026
62fc00d
patch: apply 008-MSFT-Patch-ICU_Dont_use_extended_ICU_data_in_Windows
May 14, 2026
3b5926c
patch: apply 010-MSFT-PATCH-ICU_Modify_make_dist_for_Linux
May 14, 2026
896076e
patch: apply 011-MSFT-Patch_change-tests-data-to-not-include-blocked-…
May 14, 2026
727cf11
patch: apply 012-MSFT-Patch-StaticLink_VCRuntime_VCStartup_STL_but_Dy…
May 14, 2026
fc6ca46
patch: apply 013-MSFT-Patch-ICU_Add_version_number_to_PDB_names
May 14, 2026
f603944
patch: apply 018-MSFT-Patch_ICU_toolutil_increase_string_store_for_ex…
May 14, 2026
596dcea
patch: apply 020-MSFT-Patch_ICU_Add_uprefs_library_to_obtain_default_…
May 14, 2026
85bb300
chore: bump STRING_STORE_SIZE 120000 -> 200000 for CLDR 48
May 14, 2026
1bfbeb7
patch: add and apply 021-MSFT-Patch_ICU_Cldr2Icu_remove_icu4j_directo…
May 14, 2026
bda33d3
MSFT-PATCH: Override ar-SA Saudi Riyal symbol
May 19, 2026
33c97fa
Port English AM/PM spacing test expectations
May 18, 2026
f092b9b
Port MS locale display test expectations
May 18, 2026
bc0056e
Port CLDR-MS 029 locale test expectations
May 18, 2026
1c4b96b
Port remaining format display expectations
May 18, 2026
bf7c51e
Keep codepoint trie goldens LF-only
May 18, 2026
c231ae7
Align region validation with blocked subdivisions
May 18, 2026
b0e4c1b
Keep icu-config fragments LF-only
May 18, 2026
c85ae32
Refresh ICU 78 patch records
May 19, 2026
1206b84
Add ICU 78 dev report
May 19, 2026
423a0c7
Refresh patch record for Saudi Riyal symbol override
May 19, 2026
f97e193
Update dev report for Saudi Riyal override
May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,12 @@ configure text
# Use JSONC for syntax highlighting on GitHub.com
*.json linguist-language=jsonc

# Codepoint trie golden tests compare bytes; keep generated TOML line endings stable.
icu/icu4c/source/test/testdata/codepointtrie/*.toml text eol=lf

# Shell script fragments assembled into icu-config (an executable shell script).
# They must have LF line endings so WSL/Linux can execute the generated file.
icu/icu4c/source/config/icu-config-top text eol=lf
icu/icu4c/source/config/icu-config-bottom text eol=lf
icu/icu4c/source/config/mh-* text eol=lf

74 changes: 74 additions & 0 deletions icu-patches/dev_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# ICU Upgrade Dev Report

Generated: 2026-05-19 09:01:27

## 1. Version Summary

| Field | Value |
|-------|-------|
| ICU Version | 78.3.0.0 |
| Upstream Hash | `21d1eb0f30...` |

## 2. Source Changes

Diff from `icu72-pre-swap` to HEAD (icu/ directory only):

```
6919 files changed, 693820 insertions(+), 545058 deletions(-)
```

### Top file types changed

| Extension | Count |
|-----------|-------|
| .txt | 5117 |
| .cpp | 799 |
| .h | 552 |
| .c | 105 |
| .vcxproj | 77 |
| .json | 46 |
| .filters | 30 |
| .xml | 29 |
| .java | 28 |
| .in | 25 |

## 3. Patch Audit Results

*No audit report found in `icu-patches`. Final patch records are summarized from `icu-patches/patches` instead.*

- Latest patch-record commit: `70ae0ef8eab Refresh patch record for Saudi Riyal symbol override`
- Patch files present: 20
- Refreshed ICU 78 patch records: `002`, `017`, `018`, `020`, `022`, `023`
- Validation used for refreshed records: `git apply --cached --check --reverse` against the final ICU index

## 4. Build Results

| Config | Status | Log |
|--------|--------|-----|
| Debug-ARM64 | ✅ PASS | build-Debug-ARM64.log |
| Debug-Win32 | ✅ PASS | build-Debug-Win32.log |
| Debug-x64 | ✅ PASS | build-Debug-x64.log |
| Release-ARM64 | ✅ PASS | build-Release-ARM64.log |
| Release-Win32 | ✅ PASS | build-Release-Win32.log |
| Release-x64 | ✅ PASS | build-Release-x64.log |

## 5. Test Results

| Suite | Status | Log |
|-------|--------|-----|
| cintltst-Release-x64 | ✅ PASS | test-cintltst-Release-x64.log |
| intlRelease-x64 | ✅ PASS | test-intltest-Release-x64.log |
| ioRelease-x64 | ✅ PASS | test-iotest-Release-x64.log |

Post-report targeted validation for patch `023`: `genrb` parsed `icu/icu4c/source/data/curr/ar_SA.txt`, and `currtest.c` passed C syntax checking with the available compiler.

## 6. Action Items

- [x] Patch conflicts resolved and ICU 78 patch records refreshed
- [x] Saudi Riyal symbol override for `ar_SA` added and recorded as patch `023`
- [x] CLDR data rebuild consumed by ICU data generation
- [x] Timezone data check/regeneration completed
- [x] Full Stage 8 build/test pass completed
- [x] Refreshed dev report generated
- [ ] Create PR/PR stack (owner-handled)

1,146 changes: 1,004 additions & 142 deletions icu-patches/patches/002-MSFT-Patch-ICU_test_changes_for_MSFT_changes.patch

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,131 +1,58 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jeff Genovy <29107334+jefgen@users.noreply.github.com>
Date: Wed, 7 Apr 2021 20:47:08 -0700
Subject: MSFT-PATCH: Modify ICU tests to pass with extra locales from CLDR-MS.
From: Arvind Oruganti <aoruganti@microsoft.com>
Date: Tue, 19 May 2026 06:45:00 +0530
Subject: MSFT-PATCH: Refresh ICU tests for extra CLDR-MS locales on ICU 78

This changes modifies the ICU tests to pass with extra locales from
CLDR-MS.
Refreshes the CLDR-MS extra-locale test expectations for ICU 78.

The ICU 72-era patch no longer matched the refactored ICU 78 tests, so the applicable 029 locale expectations were re-derived from the final passing Stage 7/8 tree.

diff --git a/icu/icu4c/source/test/cintltst/cldrtest.c b/icu/icu4c/source/test/cintltst/cldrtest.c
index 179539d5178b5cfd8b5350043c539e89e8740185..bfb35c35a449f60c61c9a8eb6282c307e41fd161 100644
index e014a1e1d59a48fb6ef78923fb7de4160f69779b..8cf8e5dc1ba8f3059e4ce6b0d1bb6369cda51ca7 100644
--- a/icu/icu4c/source/test/cintltst/cldrtest.c
+++ b/icu/icu4c/source/test/cintltst/cldrtest.c
@@ -970,7 +970,14 @@ static void VerifyTranslation(void) {
uprv_strncmp(currLoc, "oc", 2) == 0 || uprv_strncmp(currLoc, "oc_FR", 5) == 0 ||
uprv_strncmp(currLoc, "syr", 3) == 0 || uprv_strncmp(currLoc, "syr_SY", 6) == 0 ||
uprv_strncmp(currLoc, "tig", 3) == 0 || uprv_strncmp(currLoc, "tig_ER", 6) == 0 ||
- uprv_strncmp(currLoc, "wal", 3) == 0 || uprv_strncmp(currLoc, "wal_ET", 6) == 0
+ uprv_strncmp(currLoc, "wal", 3) == 0 || uprv_strncmp(currLoc, "wal_ET", 6) == 0 ||
+ uprv_strncmp(currLoc, "bin", 3) == 0 || uprv_strncmp(currLoc, "bin_NG", 6) == 0 ||
+ uprv_strncmp(currLoc, "la", 2) == 0 || uprv_strncmp(currLoc, "la_VA", 6) == 0 ||
+ uprv_strncmp(currLoc, "jv_Java", 7) == 0 || uprv_strncmp(currLoc, "jv_Java_ID", 10) == 0 ||
+ uprv_strncmp(currLoc, "ks_Deva", 7) == 0 || uprv_strncmp(currLoc, "ks_Deva_IN", 10) == 0 ||
+ uprv_strncmp(currLoc, "pap", 3) == 0 || uprv_strncmp(currLoc, "pap_029", 7) == 0 ||
+ uprv_strncmp(currLoc, "tzm_Arab", 8) == 0 || uprv_strncmp(currLoc, "tzm_Arab_MA", 11) == 0 ||
+ uprv_strncmp(currLoc, "tzm_Tfng", 8) == 0 || uprv_strncmp(currLoc, "tzm_Tfng_MA", 11) == 0
) {
log_knownIssue("0", "MSFT Change: skipping test for %s which has issues due to CLDR Seed data.", currLoc);
}
@@ -1110,7 +1117,8 @@ static void VerifyTranslation(void) {
@@ -1122,7 +1122,7 @@ static void VerifyTranslation(void) {
if (U_FAILURE(errorCode)) {
log_err("ulocdata_getMeasurementSystem failed for locale %s with error: %s \n", currLoc, u_errorName(errorCode));
} else {
- if ( strstr(fullLoc, "_US")!=NULL || strstr(fullLoc, "_LR")!=NULL ) {
+ /* MSFT Change: CLDR-MS adds 029 region with US measurement */
+ if ( strstr(fullLoc, "_US")!=NULL || strstr(fullLoc, "_LR")!=NULL || strstr(fullLoc, "_029")!=NULL ) {
if(measurementSystem != UMS_US){
log_err("ulocdata_getMeasurementSystem did not return expected data for locale %s \n", currLoc);
}
@@ -1128,10 +1136,11 @@ static void VerifyTranslation(void) {
if (U_FAILURE(errorCode)) {
log_err("ulocdata_getPaperSize failed for locale %s with error: %s \n", currLoc, u_errorName(errorCode));
} else {
+ /* MSFT Change: CLDR-MS adds 029 region with US paper size */
@@ -1143,7 +1143,7 @@ static void VerifyTranslation(void) {
if ( strstr(fullLoc, "_US")!=NULL || strstr(fullLoc, "_BZ")!=NULL || strstr(fullLoc, "_CA")!=NULL || strstr(fullLoc, "_CL")!=NULL ||
strstr(fullLoc, "_CO")!=NULL || strstr(fullLoc, "_CR")!=NULL || strstr(fullLoc, "_GT")!=NULL || strstr(fullLoc, "_MX")!=NULL ||
strstr(fullLoc, "_NI")!=NULL || strstr(fullLoc, "_PA")!=NULL || strstr(fullLoc, "_PH")!=NULL || strstr(fullLoc, "_PR")!=NULL ||
- strstr(fullLoc, "_SV")!=NULL || strstr(fullLoc, "_VE")!=NULL ) {
+ strstr(fullLoc, "_SV")!=NULL || strstr(fullLoc, "_VE")!=NULL || strstr(fullLoc, "_029")!=NULL ) {
+ strstr(fullLoc, "_SV")!=NULL || strstr(fullLoc, "_VE")!=NULL || strstr(fullLoc, "_029")!=NULL ) {
if (height != 279 || width != 216) {
log_err("ulocdata_getPaperSize did not return expected data for locale %s \n", currLoc);
}
@@ -1251,8 +1260,14 @@ static void TestExemplarSet(void){

if (existsInScript == FALSE){
/* MSFT Change */
- if (uprv_strncmp(locale, "oc", 2) == 0 || uprv_strncmp(locale, "oc_FR", 5) == 0) {
- log_knownIssue("0", "MSFT Change: oc and oc_FR have ExemplarSet issues.");
+ if (uprv_strncmp(locale, "oc", 2) == 0 || uprv_strncmp(locale, "oc_FR", 5) == 0 ||
+ uprv_strncmp(locale, "jv_Java", 7) == 0 || uprv_strncmp(locale, "jv_Java_ID", 10) == 0 ||
+ uprv_strncmp(locale, "la", 2) == 0 || uprv_strncmp(locale, "la_VA", 6) == 0 ||
+ uprv_strncmp(locale, "pap", 3) == 0 || uprv_strncmp(locale, "pap_029", 7) == 0 ||
+ uprv_strncmp(locale, "tzm_Arab", 8) == 0 || uprv_strncmp(locale, "tzm_Arab_MA", 11) == 0 ||
+ uprv_strncmp(locale, "tzm_Tfng", 8) == 0 || uprv_strncmp(locale, "tzm_Tfng_MA", 11) == 0
+ ) {
+ log_knownIssue("0", "MSFT Change: skipping test for %s which has issue due to CLDR seed data.", locale);
continue;
} else {
log_err("ExemplarSet containment failed for locale : %s\n", locale);
diff --git a/icu/icu4c/source/test/cintltst/cnmdptst.c b/icu/icu4c/source/test/cintltst/cnmdptst.c
index 99a9ce23be7ef93923493b2b8312a254706c3f2d..a319b99e3faf6f6fc749e70852a298ce42268696 100644
index 98504e0220ffb26a5f02877e1bbf7343e07e5a64..b7ce012361befc52b1b23e068017ffb71bdc4b4a 100644
--- a/icu/icu4c/source/test/cintltst/cnmdptst.c
+++ b/icu/icu4c/source/test/cintltst/cnmdptst.c
@@ -811,7 +811,8 @@ static void TestGetKeywordValuesForLocale(void) {
@@ -813,7 +813,7 @@ static void TestGetKeywordValuesForLocale(void) {
{ "und", "USD", "USN", NULL },
/* { "und_ZZ", "USD", NULL, NULL }, -- temporarily remove as this locale now has 15 entries */
{ "en_US", "USD", "USN", NULL },
- { "en_029", "USD", "USN", NULL },
+ /* MSFT Change: CLDR-MS adds en_029 locale with XCD currency */
+ { "en_029", "XCD", NULL, NULL },
{ "en_TH", "THB", NULL, NULL },
{ "de", "EUR", NULL, NULL },
{ "de_DE", "EUR", NULL, NULL },
@@ -825,11 +826,13 @@ static void TestGetKeywordValuesForLocale(void) {
@@ -827,11 +827,11 @@ static void TestGetKeywordValuesForLocale(void) {
{ "en_US@currency=CAD;rg=THZZZZ", "THB", NULL, NULL },
};
const int32_t EXPECTED_SIZE[PREFERRED_SIZE] = {
- 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1
+ /* MSFT Change: CLDR-MS adds en_029 locale with XCD currency */
+ 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1
};
/* ucurr_forLocale results for same locales; "" if no result expected */
const char *FORLOCALE[PREFERRED_SIZE] = {
- "", "", "USD", "",
+ /* MSFT Change: CLDR-MS adds en_029 locale with XCD currency */
+ "", "", "USD", "XCD",
"THB", "", "EUR", "",
"ILS", "CAD", "ZZZ", "DEM",
"THB", "USD", "CAD"
diff --git a/icu/icu4c/source/test/intltest/dtptngts.cpp b/icu/icu4c/source/test/intltest/dtptngts.cpp
index dc86355f93fa68f509a0023dc95fc17a548170c1..c83e27bb68c212c3e9569c71ed5b417a96b7f9de 100644
--- a/icu/icu4c/source/test/intltest/dtptngts.cpp
+++ b/icu/icu4c/source/test/intltest/dtptngts.cpp
@@ -1408,7 +1408,8 @@ void IntlTestDateTimePatternGeneratorAPI::testJjMapping() {
uprv_strncmp(localeID, "ssy_ER", 6) == 0 || uprv_strncmp(localeID, "st_LS", 5) == 0 ||
uprv_strncmp(localeID, "syr", 3) == 0 || uprv_strncmp(localeID, "syr_SY", 6) == 0 ||
uprv_strncmp(localeID, "tig", 3) == 0 || uprv_strncmp(localeID, "tig_ER", 6) == 0 ||
- uprv_strncmp(localeID, "wal", 3) == 0 || uprv_strncmp(localeID, "wal_ET", 6) == 0
+ uprv_strncmp(localeID, "wal", 3) == 0 || uprv_strncmp(localeID, "wal_ET", 6) == 0 ||
+ uprv_strncmp(localeID, "ks_Deva", 7) == 0 || uprv_strncmp(localeID, "ks_Deva_IN", 10) == 0
) {
logKnownIssue("0", "MSFT Change: skipping test for %s which has issues due to CLDR Seed data.", localeID);
}
diff --git a/icu/icu4c/source/test/intltest/numfmtst.cpp b/icu/icu4c/source/test/intltest/numfmtst.cpp
index bc072bd8e3775554b8a8f96a81baf850b5e8feb7..a63c329c8eabf287512b9c152ac91d862d333264 100644
--- a/icu/icu4c/source/test/intltest/numfmtst.cpp
+++ b/icu/icu4c/source/test/intltest/numfmtst.cpp
@@ -8094,10 +8094,12 @@ void NumberFormatTest::TestAccountingCurrency() {
(Formattable)(double)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status);
expect(NumberFormat::createInstance("de_DE", style, status),
(Formattable)(double)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status);
+ /* MSFT Change: We add a CLDR-MS locale en_ID */
expect(NumberFormat::createInstance("en_ID", style, status),
- (Formattable)(double)0, UnicodeString("IDR\\u00A00.00").unescape(), TRUE, status);
+ (Formattable)(double)0, UnicodeString("IDR\\u00A00,00").unescape(), TRUE, status);
expect(NumberFormat::createInstance("en_ID", style, status),
- (Formattable)(double)-0.2, UnicodeString("(IDR\\u00A00.20)").unescape(), TRUE, status);
+ (Formattable)(double)-0.2, UnicodeString("(IDR\\u00A00,20)").unescape(), TRUE, status);
+ /* MSFT Change: End */
expect(NumberFormat::createInstance("sh_ME", style, status),
(Formattable)(double)0, UnicodeString("0,00\\u00A0\\u20AC").unescape(), TRUE, status);
expect(NumberFormat::createInstance("sh_ME", style, status),
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jeff Genovy <29107334+jefgen@users.noreply.github.com>
Date: Wed, 7 Apr 2021 20:47:31 -0700
Subject: MSFT-PATCH: Increase the STRING_STORE_SIZE due to extra locales from CLDR-MS
From: Arvind Oruganti <aoruganti@microsoft.com>
Date: Tue, 19 May 2026 06:45:00 +0530
Subject: MSFT-PATCH: Increase ICU string store for CLDR 48 extra locales

Increases STRING_STORE_SIZE for the larger CLDR 48 / CLDR-MS locale set.

The original 120000 value was carried from the older patch, but this ICU 78 upgrade settled on 200000 before the CLDR data build.

diff --git a/icu/icu4c/source/tools/toolutil/package.h b/icu/icu4c/source/tools/toolutil/package.h
index ea60c13a74a57b94057882e39b6aa05314c4ca1f..6c411ae5fd04c8463a089307efc056f4d2f622f9 100644
index ea60c13a74a57b94057882e39b6aa05314c4ca1f..3a1d3cd23d9ee75ad2881d52c0f34413dbd554f1 100644
--- a/icu/icu4c/source/tools/toolutil/package.h
+++ b/icu/icu4c/source/tools/toolutil/package.h
@@ -27,7 +27,7 @@

// .dat package file representation ---------------------------------------- ***

-#define STRING_STORE_SIZE 100000
+#define STRING_STORE_SIZE 120000
+#define STRING_STORE_SIZE 200000
#define MAX_PKG_NAME_LENGTH 64

typedef void CheckDependency(void *context, const char *itemName, const char *targetName);
Loading
Loading