Skip to content

Commit e5106a9

Browse files
authored
Enable C11 for MSVC builds (#23912)
* Enable C11 for MSVC C sources * Respect requested C standard * Split mixed C and C++ builds
1 parent adf3971 commit e5106a9

2 files changed

Lines changed: 20 additions & 5 deletions

File tree

‎ext/intl/config.w32‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ if (PHP_INTL != "no") {
99
CHECK_HEADER("unicode/utf.h", "CFLAGS_INTL")) {
1010
// always build as shared - zend_strtod.c/ICU type conflict
1111
EXTENSION("intl", "php_intl.c intl_convert.c intl_icu_compat.c intl_convertcpp.cpp intl_error.c ", true,
12-
"/I \"" + configure_module_dirname + "\" /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
12+
"/I \"" + configure_module_dirname + "\" /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1", null, undefined, true);
1313
ADD_EXTENSION_DEP('intl', 'date');
1414
ADD_SOURCES(configure_module_dirname + "/collator", "\
1515
collator_attr.cpp \

‎win32/build/confutils.js‎

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var MINRE2C = "1.0.3";
5858

5959
/* Store the enabled extensions (summary + QA check) */
6060
var extensions_enabled = new Array();
61+
var cxx_mode_targets = {};
6162

6263
/* Store the SAPI enabled (summary + QA check) */
6364
var sapi_enabled = new Array();
@@ -1460,13 +1461,17 @@ function ZEND_EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir)
14601461
extensions_enabled[extensions_enabled.length - 1][2] = true;
14611462
}
14621463

1463-
function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir)
1464+
function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir, cxx_mode)
14641465
{
14651466
var objs = null;
14661467
var EXT = extname.toUpperCase();
14671468
var extname_for_printing;
14681469
var ldflags;
14691470

1471+
if (cxx_mode) {
1472+
cxx_mode_targets[extname] = true;
1473+
}
1474+
14701475
if (shared == null) {
14711476
if (force_all_shared()) {
14721477
shared = true;
@@ -1804,8 +1809,9 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
18041809
var _tmp = src.split("\\");
18051810
var filename = _tmp.pop();
18061811
obj = filename.replace(re, ".obj");
1812+
var c11_flag = VS_TOOLSET && !cxx_mode_targets[target] && /\.c$/i.test(src) ? " /std:c11" : "";
18071813

1808-
MFO.WriteLine("\t" + CMD_MOD1 + "$(CC) $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " /Fo" + sub_build + d + obj);
1814+
MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + c11_flag + " $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") /c " + dir + "\\" + src + " /Fo" + sub_build + d + obj);
18091815

18101816
if ("clang" == PHP_ANALYZER) {
18111817
MFO.WriteLine("\t" + CMD_MOD1 + "\"$(CLANG_CL)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + dir + "\\" + src);
@@ -1819,11 +1825,20 @@ function ADD_SOURCES(dir, file_list, target, obj_dir, duplicate_sources)
18191825
} else {
18201826
/* TODO create a response file at least for the source files to work around the cmd line length limit. */
18211827
var src_line = "";
1828+
var src_lines = ["", ""];
18221829
for (var j in srcs_by_dir[k]) {
1823-
src_line += dir + "\\" + file_list[srcs_by_dir[k][j]] + " ";
1830+
var source = file_list[srcs_by_dir[k][j]];
1831+
var source_path = dir + "\\" + source + " ";
1832+
src_line += source_path;
1833+
src_lines[VS_TOOLSET && /\.c$/i.test(source) ? 0 : 1] += source_path;
18241834
}
18251835

1826-
MFO.WriteLine("\t" + CMD_MOD1 + "$(CC) $(" + flags + ") $(CFLAGS) /Fo" + sub_build + d + " $(" + bd_flags_name + ") /c " + src_line);
1836+
for (var language = 0; language < src_lines.length; language++) {
1837+
if (src_lines[language]) {
1838+
var c11_flag = language == 0 && !cxx_mode_targets[target] ? " /std:c11" : "";
1839+
MFO.WriteLine("\t" + CMD_MOD1 + "$(CC)" + c11_flag + " $(" + flags + ") $(CFLAGS) /Fo" + sub_build + d + " $(" + bd_flags_name + ") /c " + src_lines[language]);
1840+
}
1841+
}
18271842

18281843
if ("clang" == PHP_ANALYZER) {
18291844
MFO.WriteLine("\t\"$(CLANG_CL)\" " + analyzer_base_args + " $(" + flags + "_ANALYZER) $(CFLAGS_ANALYZER) $(" + bd_flags_name + "_ANALYZER) " + src_line);

0 commit comments

Comments
 (0)