Commit c5cadc5c8cf for php
commit c5cadc5c8cf084a7aa3dc23230509e45d623466c
Author: Shivam Mathur <shivam_jpr@hotmail.com>
Date: Tue Sep 29 03:34:36 2026 +0000
Fix C11 builds for intl (#23977)
diff --git a/ext/intl/config.w32 b/ext/intl/config.w32
index 5f689214c1b..7369619404b 100644
--- a/ext/intl/config.w32
+++ b/ext/intl/config.w32
@@ -9,7 +9,7 @@ if (PHP_INTL != "no") {
CHECK_HEADER("unicode/utf.h", "CFLAGS_INTL")) {
// always build as shared - zend_strtod.c/ICU type conflict
EXTENSION("intl", "php_intl.c intl_convert.c intl_icu_compat.c intl_convertcpp.cpp intl_error.c ", true,
- "/I \"" + configure_module_dirname + "\" /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1", null, undefined, true);
+ "/I \"" + configure_module_dirname + "\" /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
ADD_EXTENSION_DEP('intl', 'date');
ADD_SOURCES(configure_module_dirname + "/collator", "\
collator_attr.cpp \
@@ -125,7 +125,8 @@ if (PHP_INTL != "no") {
/* Compat for ICU before 58.1.*/
CHECK_LIB("icule.lib", "intl", PHP_INTL);
CHECK_LIB("iculx.lib", "intl", PHP_INTL);
- ADD_FLAG("CFLAGS_INTL", "/std:c++17 /EHsc /DUNISTR_FROM_CHAR_EXPLICIT=explicit /DUNISTR_FROM_STRING_EXPLICIT=explicit /DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 /DU_HIDE_OBSOLETE_UTF_OLD_H=1");
+ ADD_FLAG("CXXFLAGS_INTL", "/std:c++17");
+ ADD_FLAG("CFLAGS_INTL", "/EHsc /DUNISTR_FROM_CHAR_EXPLICIT=explicit /DUNISTR_FROM_STRING_EXPLICIT=explicit /DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 /DU_HIDE_OBSOLETE_UTF_OLD_H=1");
} else {
WARNING("intl not enabled; libraries and/or headers not found");
}
diff --git a/win32/build/confutils.js b/win32/build/confutils.js
index c5128f70498..6b6fbe96b52 100644
--- a/win32/build/confutils.js
+++ b/win32/build/confutils.js
@@ -1625,6 +1625,8 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
sym = target.toUpperCase() + "_GLOBAL_OBJS";
flags = "CFLAGS_" + target.toUpperCase() + '_OBJ';
+ var c_flags = VS_TOOLSET ? " /std:c11" : "";
+ var cxx_flags = " $(CXXFLAGS_" + target.toUpperCase() + ")";
var bd = get_define('BUILD_DIR');
var respd = bd + '\\resp';
@@ -1790,7 +1792,7 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
"--library=win32\\build\\cppcheck.cfg " +
"--library=" + cppcheck_lib + " " +
/* "--rule-file=win32\build\cppcheck_rules.xml " + */
- " --std=c89 --std=c++11 " +
+ " --std=c11 --std=c++11 " +
"--quiet --inconclusive --template=vs -j 4 " +
"--suppress=unmatchedSuppression " +
"--suppressions-list=win32\\build\\cppcheck_suppress.txt ";
@@ -1809,16 +1811,17 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
var _tmp = src.split("\\");
var filename = _tmp.pop();
obj = filename.replace(re, ".obj");
- var c11_flag = VS_TOOLSET && !cxx_mode_targets[target] && /\.c$/i.test(src) ? " /std:c11" : "";
+ var lang_flags = cxx_mode_targets[target] || !/\.c$/i.test(src) ? cxx_flags : c_flags;
+ var analyzer_lang_flags = lang_flags.replace(")", "_ANALYZER)");
- MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + c11_flag + " $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " /Fo" + sub_build + d + obj);
+ MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + lang_flags + " $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " /Fo" + sub_build + d + obj);
if ("clang" == PHP_ANALYZER) {
- MFO.WriteLine("\t" + CMD_MOD1 + "\"$(CLANG_CL)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + dir + "\\" + src);
+ MFO.WriteLine("\t" + CMD_MOD1 + "\"$(CLANG_CL)\"" + analyzer_lang_flags + " " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + dir + "\\" + src);
} else if ("cppcheck" == PHP_ANALYZER) {
MFO.WriteLine("\t\"" + CMD_MOD1 + "$(CPPCHECK)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + analyzer_base_flags + " " + dir + "\\" + src);
}else if (PHP_ANALYZER == "pvs") {
- MFO.WriteLine("\t" + CMD_MOD1 + "\"$(PVS_STUDIO)\" --cl-params $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " --source-file " + dir + "\\" + src
+ MFO.WriteLine("\t" + CMD_MOD1 + "\"$(PVS_STUDIO)\" --cl-params" + lang_flags + " $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " --source-file " + dir + "\\" + src
+ " --cfg PVS-Studio.conf --errors-off \"V122 V117 V111\" ");
}
}
@@ -1830,19 +1833,21 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
var source = file_list[srcs_by_dir[k][j]];
var source_path = dir + "\\" + source + " ";
src_line += source_path;
- src_lines[VS_TOOLSET && /\.c$/i.test(source) ? 0 : 1] += source_path;
+ src_lines[!cxx_mode_targets[target] && /\.c$/i.test(source) ? 0 : 1] += source_path;
}
for (var language = 0; language < src_lines.length; language++) {
if (src_lines[language]) {
- var c11_flag = language == 0 && !cxx_mode_targets[target] ? " /std:c11" : "";
- MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + c11_flag + " $(" + flags + ") $(CFLAGS) /Fo" + sub_build + d + " $(" + bd_flags_name + ") /c " + src_lines[language]);
+ var lang_flags = language == 0 ? c_flags : cxx_flags;
+ MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + lang_flags + " $(" + flags + ") $(CFLAGS) /Fo" + sub_build + d + " $(" + bd_flags_name + ") /c " + src_lines[language]);
+ if ("clang" == PHP_ANALYZER) {
+ var analyzer_lang_flags = lang_flags.replace(")", "_ANALYZER)");
+ MFO.WriteLine("\t\"$(CLANG_CL)\"" + analyzer_lang_flags + " " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + src_lines[language]);
+ }
}
}
- if ("clang" == PHP_ANALYZER) {
- MFO.WriteLine("\t\"$(CLANG_CL)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + src_line);
- } else if ("cppcheck" == PHP_ANALYZER) {
+ if ("cppcheck" == PHP_ANALYZER) {
MFO.WriteLine("\t\"$(CPPCHECK)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + analyzer_base_flags + " " + src_line);
}
}
@@ -2539,7 +2544,7 @@ function handle_analyzer_makefile_flags(fd, key, val)
return;
}
- if (key.match("CFLAGS")) {
+ if (key.match(/C(?:XX)?FLAGS/)) {
var new_val = val;
var reg = /\$\(([^\)]+)\)/g;
var r;