summaryrefslogtreecommitdiff
path: root/share/qbs/modules/cpp/msvc.js
diff options
context:
space:
mode:
Diffstat (limited to 'share/qbs/modules/cpp/msvc.js')
-rw-r--r--share/qbs/modules/cpp/msvc.js30
1 files changed, 28 insertions, 2 deletions
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js
index b206bd4ba..1b70904c0 100644
--- a/share/qbs/modules/cpp/msvc.js
+++ b/share/qbs/modules/cpp/msvc.js
@@ -102,6 +102,12 @@ function hasCxx20Option(input)
|| (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 13);
}
+function hasCVerOption(input)
+{
+ return Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30138.0") >= 0
+ || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 13);
+}
+
function supportsExternalIncludesOption(input) {
if (input.qbs.toolchain.contains("clang-cl"))
return false; // Exclude clang-cl.
@@ -112,7 +118,7 @@ function supportsExternalIncludesOption(input) {
return Utilities.versionCompare(input.cpp.compilerVersion, "19.16") >= 0;
}
-function addLanguageVersionFlag(input, args) {
+function addCxxLanguageVersionFlag(input, args) {
var cxxVersion = Cpp.languageVersion(input.cpp.cxxLanguageVersion,
["c++23", "c++20", "c++17", "c++14", "c++11", "c++98"], "C++");
if (!cxxVersion)
@@ -138,6 +144,25 @@ function addLanguageVersionFlag(input, args) {
args.push(flag);
}
+function addCLanguageVersionFlag(input, args) {
+ var cVersion = Cpp.languageVersion(input.cpp.cLanguageVersion,
+ ["c17", "c11"], "C");
+ if (!cVersion)
+ return;
+
+ var hasStdOption = hasCVerOption(input);
+ if (!hasStdOption)
+ return;
+
+ var flag;
+ if (cVersion === "c17")
+ flag = "/std:c17";
+ else if (cVersion === "c11")
+ flag = "/std:c11";
+ if (flag)
+ args.push(flag);
+}
+
function handleClangClArchitectureFlags(product, architecture, flags) {
if (product.qbs.toolchain.contains("clang-cl")) {
if (architecture === "x86")
@@ -277,9 +302,10 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli
// Language
if (tag === "cpp") {
args.push("/TP");
- addLanguageVersionFlag(input, args);
+ addCxxLanguageVersionFlag(input, args);
} else if (tag === "c") {
args.push("/TC");
+ addCLanguageVersionFlag(input, args);
}
// Whether we're compiling a precompiled header or normal source file