Commit be3477fc66c for php.net

commit be3477fc66c0e15ba9e21913afd4be7e55a3345e
Author: Weilin Du <weilindu@php.net>
Date:   Sun Jul 26 22:09:01 2026 +0800

    ext/intl: Remove icu-io as a dependency (#22891)

    This remove the dependency of the ICU IO library in the intl extension.

diff --git a/NEWS b/NEWS
index dfcbac91519..91ac10efd3b 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ PHP                                                                        NEWS
 - Intl:
   . Fixed grammatical issues in Normalizer invalid form and IntlCalendar time
     zone offset error messages. (Weilin Du)
+  . Removed the dependency on the ICU IO library. (Weilin Du)

 - ODBC:
   . Fixed bug GH-22668 (Heap buffer over-read when a column value exceeds the
diff --git a/build/php.m4 b/build/php.m4
index 6d9e3e21387..d8bf0221e83 100644
--- a/build/php.m4
+++ b/build/php.m4
@@ -1804,7 +1804,7 @@ dnl
 dnl Common setup macro for ICU.
 dnl
 AC_DEFUN([PHP_SETUP_ICU],[
-  PKG_CHECK_MODULES([ICU], [icu-uc >= 57.1 icu-io icu-i18n])
+  PKG_CHECK_MODULES([ICU], [icu-uc >= 57.1 icu-i18n])

   PHP_EVAL_INCLINE([$ICU_CFLAGS])
   PHP_EVAL_LIBLINE([$ICU_LIBS], [$1])
@@ -1812,7 +1812,7 @@ AC_DEFUN([PHP_SETUP_ICU],[
   ICU_CFLAGS="$ICU_CFLAGS -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1"
   ICU_CXXFLAGS="$ICU_CXXFLAGS -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit"

-  AS_IF([$PKG_CONFIG icu-io --atleast-version=60],
+  AS_IF([$PKG_CONFIG icu-uc --atleast-version=60],
     [ICU_CFLAGS="$ICU_CFLAGS -DU_HIDE_OBSOLETE_UTF_OLD_H=1"])
 ])

diff --git a/ext/intl/config.w32 b/ext/intl/config.w32
index 016f17835f8..fb30953697b 100644
--- a/ext/intl/config.w32
+++ b/ext/intl/config.w32
@@ -5,7 +5,6 @@ ARG_ENABLE("intl", "Enable internationalization support", "no");
 if (PHP_INTL != "no") {
 	if (CHECK_LIB("icudt.lib", "intl", PHP_INTL) &&
 		CHECK_LIB("icuin.lib", "intl", PHP_INTL) &&
-		CHECK_LIB("icuio.lib", "intl", PHP_INTL) &&
 		CHECK_LIB("icuuc.lib", "intl", PHP_INTL) &&
 					CHECK_HEADER("unicode/utf.h", "CFLAGS_INTL")) {
 		// always build as shared - zend_strtod.c/ICU type conflict
diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp
index e676a07416c..da18527591d 100644
--- a/ext/intl/msgformat/msgformat_helpers.cpp
+++ b/ext/intl/msgformat/msgformat_helpers.cpp
@@ -21,7 +21,6 @@
 #include <limits.h>
 #include <unicode/msgfmt.h>
 #include <unicode/chariter.h>
-#include <unicode/ustdio.h>
 #include <unicode/timezone.h>
 #include <unicode/datefmt.h>
 #include <unicode/calendar.h>
@@ -407,9 +406,9 @@ U_CFUNC void umsg_format_helper(MessageFormatter_object *mfo,
 				continue;
 			}

-		   UChar temp[16];
-		   const int32_t len = u_sprintf(temp, "%u", (uint32_t)num_index);
-		   key.append(temp, len);
+		   char temp[16];
+		   const int32_t len = slprintf(temp, sizeof(temp), "%u", (uint32_t)num_index);
+		   key.append(UnicodeString(temp, len, US_INV));

 		   storedArgType = (Formattable::Type*)zend_hash_index_find_ptr(types, num_index);
 		} else { //string; assumed to be in UTF-8