diff options
Diffstat (limited to 'share/qbs/modules/cpp')
32 files changed, 228 insertions, 207 deletions
diff --git a/share/qbs/modules/cpp/DarwinGCC.qbs b/share/qbs/modules/cpp/DarwinGCC.qbs index 81d8bded2..e20973acc 100644 --- a/share/qbs/modules/cpp/DarwinGCC.qbs +++ b/share/qbs/modules/cpp/DarwinGCC.qbs @@ -43,7 +43,7 @@ import "gcc.js" as Gcc UnixGCC { condition: false - Depends { name: "xcode"; required: qbs.toolchain && qbs.toolchain.contains("xcode") } + Depends { name: "xcode"; required: qbs.toolchain && qbs.toolchain.includes("xcode") } Probes.BinaryProbe { id: lipoProbe @@ -76,7 +76,7 @@ UnixGCC { dynamicLibrarySuffix: ".dylib" Properties { - condition: product.multiplexByQbsProperties.contains("buildVariants") + condition: product.multiplexByQbsProperties.includes("buildVariants") && qbs.buildVariants && qbs.buildVariants.length > 1 && (!product.aggregate || !!product.multiplexConfigurationId) && qbs.buildVariant !== "release" @@ -107,39 +107,42 @@ UnixGCC { property var defaultInfoPlist: { var dict = {}; - if (qbs.targetOS.contains("macos")) { + if (qbs.targetOS.includes("macos")) { dict["NSPrincipalClass"] = "NSApplication"; // needed for Retina display support + // QBS-1670: set this flag by default to avoid extensive GPU usage + dict["NSSupportsAutomaticGraphicsSwitching"] = true; + if (minimumMacosVersion) dict["LSMinimumSystemVersion"] = minimumMacosVersion; } - if (qbs.targetOS.contains("ios") && minimumIosVersion) + if (qbs.targetOS.includes("ios") && minimumIosVersion) dict["MinimumOSVersion"] = minimumIosVersion; - else if (qbs.targetOS.contains("tvos") && minimumTvosVersion) + else if (qbs.targetOS.includes("tvos") && minimumTvosVersion) dict["MinimumOSVersion"] = minimumTvosVersion; - else if (qbs.targetOS.contains("watchos") && minimumWatchosVersion) + else if (qbs.targetOS.includes("watchos") && minimumWatchosVersion) dict["MinimumOSVersion"] = minimumWatchosVersion; if (qbs.targetOS.containsAny(["ios", "tvos"])) { dict["LSRequiresIPhoneOS"] = true; if (xcode.platformType === "device") { - if (qbs.targetOS.contains("ios")) { + if (qbs.targetOS.includes("ios")) { if (qbs.architecture === "arm64") dict["UIRequiredDeviceCapabilities"] = ["arm64"]; else dict["UIRequiredDeviceCapabilities"] = ["armv7"]; } - if (qbs.targetOS.contains("tvos")) + if (qbs.targetOS.includes("tvos")) dict["UIRequiredDeviceCapabilities"] = ["arm64"]; } } if (xcode.present) { var targetDevices = DarwinTools.targetedDeviceFamily(xcode.targetDevices); - if (qbs.targetOS.contains("ios")) + if (qbs.targetOS.includes("ios")) dict["UIDeviceFamily"] = targetDevices; if (qbs.targetOS.containsAny(["ios", "watchos"])) { @@ -150,13 +153,13 @@ UnixGCC { "UIInterfaceOrientationLandscapeRight" ]; - if (targetDevices.contains("ipad")) + if (targetDevices.includes("ipad")) dict["UISupportedInterfaceOrientations~ipad"] = orientations; - if (targetDevices.contains("watch")) + if (targetDevices.includes("watch")) dict["UISupportedInterfaceOrientations"] = orientations.slice(0, 2); - if (targetDevices.contains("iphone")) { + if (targetDevices.includes("iphone")) { orientations.splice(1, 1); dict["UISupportedInterfaceOrientations"] = orientations; } @@ -196,13 +199,13 @@ UnixGCC { // Set the corresponding environment variable even if the minimum OS version is undefined, // because this indicates the default deployment target for that OS - if (qbs.targetOS.contains("ios") && minimumIosVersion) + if (qbs.targetOS.includes("ios") && minimumIosVersion) env["IPHONEOS_DEPLOYMENT_TARGET"] = minimumIosVersion; - if (qbs.targetOS.contains("macos") && minimumMacosVersion) + if (qbs.targetOS.includes("macos") && minimumMacosVersion) env["MACOSX_DEPLOYMENT_TARGET"] = minimumMacosVersion; - if (qbs.targetOS.contains("watchos") && minimumWatchosVersion) + if (qbs.targetOS.includes("watchos") && minimumWatchosVersion) env["WATCHOS_DEPLOYMENT_TARGET"] = minimumWatchosVersion; - if (qbs.targetOS.contains("tvos") && minimumTvosVersion) + if (qbs.targetOS.includes("tvos") && minimumTvosVersion) env["TVOS_DEPLOYMENT_TARGET"] = minimumTvosVersion; if (xcode.present) @@ -215,7 +218,7 @@ UnixGCC { property string minimumDarwinVersionCompilerFlag property string minimumDarwinVersionLinkerFlag - property bool libcxxAvailable: qbs.toolchain.contains("clang") && cxxLanguageVersion !== "c++98" + property bool libcxxAvailable: qbs.toolchain.includes("clang") && cxxLanguageVersion !== "c++98" Rule { condition: enableAggregationRules @@ -268,7 +271,7 @@ UnixGCC { } Rule { - condition: qbs.targetOS.contains("darwin") + condition: qbs.targetOS.includes("darwin") multiplex: true Artifact { diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index 025aad498..f84028940 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -43,7 +43,7 @@ import 'cpp.js' as Cpp import 'gcc.js' as Gcc CppModule { - condition: qbs.toolchain && qbs.toolchain.contains("gcc") + condition: qbs.toolchain && qbs.toolchain.includes("gcc") priority: -100 Depends { name: "codesign" } @@ -123,9 +123,9 @@ CppModule { precompiledHeaderSuffix: ".gch" - property bool compilerHasTargetOption: qbs.toolchain.contains("clang") + property bool compilerHasTargetOption: qbs.toolchain.includes("clang") && Utilities.versionCompare(compilerVersion, "3.1") >= 0 - property bool assemblerHasTargetOption: qbs.toolchain.contains("xcode") + property bool assemblerHasTargetOption: qbs.toolchain.includes("xcode") && Utilities.versionCompare(compilerVersion, "7") >= 0 property string target: targetArch ? [targetArch, targetVendor, targetSystem, targetAbi].join("-") @@ -170,7 +170,7 @@ CppModule { property string linkerVariant PropertyOptions { name: "linkerVariant" - allowedValues: ["bfd", "gold", "lld"] + allowedValues: ["bfd", "gold", "lld", "mold"] description: "Allows to specify the linker variant. Maps to gcc's and clang's -fuse-ld " + "option." } @@ -182,9 +182,9 @@ CppModule { property string toolchainPathPrefix: Gcc.pathPrefix(toolchainInstallPath, toolchainPrefix) property string binutilsPathPrefix: Gcc.pathPrefix(binutilsPath, toolchainPrefix) - property string cCompilerName: (qbs.toolchain.contains("clang") ? "clang" : "gcc") + property string cCompilerName: (qbs.toolchain.includes("clang") ? "clang" : "gcc") + compilerExtension - property string cxxCompilerName: (qbs.toolchain.contains("clang") ? "clang++" : "g++") + property string cxxCompilerName: (qbs.toolchain.includes("clang") ? "clang++" : "g++") + compilerExtension compilerPathByLanguage: ({ @@ -216,7 +216,7 @@ CppModule { linkerScriptFlag: "-T" readonly property bool shouldCreateSymlinks: { - return createSymlinks && internalVersion && ["macho", "elf"].contains(cpp.imageFormat); + return createSymlinks && internalVersion && ["macho", "elf"].includes(imageFormat); } readonly property bool shouldSignArtifacts: codesign._canSignArtifacts @@ -251,18 +251,18 @@ CppModule { property var buildEnv: { var env = {}; - if (qbs.toolchain.contains("mingw")) - env.PATH = [toolchainInstallPath]; // For libwinpthread etc + if (qbs.toolchain.includes("mingw")) + env.PATH = toolchainInstallPath; // For libwinpthread etc return env; } exceptionHandlingModel: { - if (qbs.toolchain.contains("mingw")) { + if (qbs.toolchain.includes("mingw")) { // https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html claims // __USING_SJLJ_EXCEPTIONS__ is defined as 1 when using SJLJ exceptions, but there don't // seem to be defines for the other models, so use the presence of the DLLs for now. var prefix = toolchainInstallPath; - if (!Host.os().contains("windows")) + if (!Host.os().includes("windows")) prefix = FileInfo.joinPaths(toolchainInstallPath, "..", "lib", "gcc", toolchainPrefix, [compilerVersionMajor, compilerVersionMinor].join(".")); @@ -314,7 +314,7 @@ CppModule { if (gccProbe.targetPlatform) { // Can't differentiate Darwin OSes at the compiler level alone if (gccProbe.targetPlatform === "darwin" - ? !qbs.targetOS.contains("darwin") + ? !qbs.targetOS.includes("darwin") : qbs.targetPlatform !== gccProbe.targetPlatform) isWrongTriple = true; } else if (qbs.targetPlatform) { @@ -351,7 +351,7 @@ CppModule { var validateFlagsFunction = function (value) { if (value) { for (var i = 0; i < value.length; ++i) { - if (["-target", "-triple", "-arch"].contains(value[i])) + if (["-target", "-triple", "-arch"].includes(value[i])) return false; } } @@ -403,7 +403,7 @@ CppModule { inputs: { var tags = ["obj", "res", "linkerscript", "versionscript"]; if (product.bundle && product.bundle.embedInfoPlist - && product.qbs.targetOS.contains("darwin")) { + && product.qbs.targetOS.includes("darwin")) { tags.push("aggregate_infoplist"); } return tags; @@ -483,9 +483,9 @@ CppModule { var objCount = objs ? objs.length : 0; for (var i = 0; i < objCount; ++i) { var ft = objs[i].fileTags; - if (ft.contains("c_obj")) + if (ft.includes("c_obj")) tags.push("c_staticlibrary"); - if (ft.contains("cpp_obj")) + if (ft.includes("cpp_obj")) tags.push("cpp_staticlibrary"); } return [{ @@ -521,7 +521,7 @@ CppModule { inputs: { var tags = ["obj", "res", "linkerscript"]; if (product.bundle && product.bundle.embedInfoPlist - && product.qbs.targetOS.contains("darwin")) { + && product.qbs.targetOS.includes("darwin")) { tags.push("aggregate_infoplist"); } return tags; @@ -564,7 +564,7 @@ CppModule { inputs: { var tags = ["obj", "res", "linkerscript"]; if (product.bundle && product.bundle.embedInfoPlist - && product.qbs.targetOS.contains("darwin")) { + && product.qbs.targetOS.includes("darwin")) { tags.push("aggregate_infoplist"); } return tags; diff --git a/share/qbs/modules/cpp/LinuxGCC.qbs b/share/qbs/modules/cpp/LinuxGCC.qbs index 17346d048..4b594a0aa 100644 --- a/share/qbs/modules/cpp/LinuxGCC.qbs +++ b/share/qbs/modules/cpp/LinuxGCC.qbs @@ -32,8 +32,8 @@ import qbs.Host import qbs.Process UnixGCC { - condition: qbs.targetOS.contains('linux') && - qbs.toolchain && qbs.toolchain.contains('gcc') + condition: qbs.targetOS.includes('linux') && + qbs.toolchain && qbs.toolchain.includes('gcc') priority: 1 targetVendor: "pc" diff --git a/share/qbs/modules/cpp/MingwBaseModule.qbs b/share/qbs/modules/cpp/MingwBaseModule.qbs index e96f8ba41..c9cfe9bd8 100644 --- a/share/qbs/modules/cpp/MingwBaseModule.qbs +++ b/share/qbs/modules/cpp/MingwBaseModule.qbs @@ -47,7 +47,7 @@ GenericGCC { runtimeLibrary: "dynamic" Properties { - condition: product.multiplexByQbsProperties.contains("buildVariants") + condition: product.multiplexByQbsProperties.includes("buildVariants") && qbs.buildVariants && qbs.buildVariants.length > 1 && qbs.buildVariant !== "release" && product.type.containsAny(["staticlibrary", "dynamiclibrary"]) @@ -96,9 +96,9 @@ GenericGCC { var tf; try { tf = new TextFile(outputFilePath, TextFile.WriteOnly); - if (productType.contains("application")) + if (productType.includes("application")) tf.write("1 "); // CREATEPROCESS_MANIFEST_RESOURCE_ID - else if (productType.contains("dynamiclibrary")) + else if (productType.includes("dynamiclibrary")) tf.write("2 "); // ISOLATIONAWARE_MANIFEST_RESOURCE_ID tf.write("24 "); // RT_MANIFEST tf.writeLine(Utilities.cStringQuote(inputFilePath)); diff --git a/share/qbs/modules/cpp/UnixGCC.qbs b/share/qbs/modules/cpp/UnixGCC.qbs index 94dfb1907..6f377c5c8 100644 --- a/share/qbs/modules/cpp/UnixGCC.qbs +++ b/share/qbs/modules/cpp/UnixGCC.qbs @@ -31,8 +31,8 @@ import qbs.File GenericGCC { - condition: qbs.toolchain && qbs.toolchain.contains("gcc") - && qbs.targetOS.contains("unix") + condition: qbs.toolchain && qbs.toolchain.includes("gcc") + && qbs.targetOS.includes("unix") priority: -50 dynamicLibraryPrefix: "lib" diff --git a/share/qbs/modules/cpp/android-gcc.qbs b/share/qbs/modules/cpp/android-gcc.qbs index aded485cd..7c45d3c6b 100644 --- a/share/qbs/modules/cpp/android-gcc.qbs +++ b/share/qbs/modules/cpp/android-gcc.qbs @@ -39,7 +39,7 @@ import 'gcc.js' as Gcc LinuxGCC { Depends { name: "Android.ndk" } - condition: qbs.targetOS.contains("android") && qbs.toolchain && qbs.toolchain.contains("llvm") + condition: qbs.targetOS.includes("android") && qbs.toolchain && qbs.toolchain.includes("llvm") priority: 2 rpaths: [] @@ -58,7 +58,7 @@ LinuxGCC { return "i686"; } } - property string targetDir: "android" + (["armeabi", "armeabi-v7a"].contains(Android.ndk.abi) ? "eabi" : "") + property string targetDir: "android" + (["armeabi", "armeabi-v7a"].includes(Android.ndk.abi) ? "eabi" : "") property string triple: [archLibsDir, targetSystem, targetDir].join("-") property string libsDir: FileInfo.joinPaths(sysroot, "usr", "lib", triple); @@ -155,7 +155,7 @@ LinuxGCC { target: [targetArch, targetSystem, targetAbi].join("-") targetSystem: "linux" - targetAbi: "android" + (["armeabi", "armeabi-v7a"].contains(Android.ndk.abi) ? "eabi" : "") + + targetAbi: "android" + (["armeabi", "armeabi-v7a"].includes(Android.ndk.abi) ? "eabi" : "") + Android.ndk.platformVersion endianness: "little" diff --git a/share/qbs/modules/cpp/cosmic.qbs b/share/qbs/modules/cpp/cosmic.qbs index 46c904ac5..8bf0f22a3 100644 --- a/share/qbs/modules/cpp/cosmic.qbs +++ b/share/qbs/modules/cpp/cosmic.qbs @@ -37,7 +37,7 @@ import "cosmic.js" as COSMIC import "cpp.js" as Cpp CppModule { - condition: qbs.toolchain && qbs.toolchain.contains("cosmic") + condition: qbs.toolchain && qbs.toolchain.includes("cosmic") Probes.BinaryProbe { id: compilerPathProbe diff --git a/share/qbs/modules/cpp/cpp.js b/share/qbs/modules/cpp/cpp.js index b93d42f21..9f907580a 100644 --- a/share/qbs/modules/cpp/cpp.js +++ b/share/qbs/modules/cpp/cpp.js @@ -42,7 +42,7 @@ function languageVersion(versionArray, knownValues, lang) { return versions[0]; for (var i = 0; i < knownValues.length; ++i) { var candidate = knownValues[i]; - if (versions.contains(candidate)) + if (versions.includes(candidate)) return candidate; } var version = versions[0]; @@ -134,7 +134,7 @@ function assemblerOutputArtifacts(input) { } function compilerOutputArtifacts(input, inputs) { - var objTags = input.fileTags.contains("cpp_intermediate_object") + var objTags = input.fileTags.includes("cpp_intermediate_object") ? ["intermediate_obj"] : ["obj"]; if (inputs) { @@ -233,7 +233,7 @@ function collectLibraryDependencies(product) { var artifactFilePaths = artifacts.map(function(a) { return a.filePath; }); var wholeArchive = dep.parameters.cpp && dep.parameters.cpp.linkWholeArchive; var artifactsAreImportLibs = artifacts.length > 0 - && artifacts[0].fileTags.contains("dynamiclibrary_import"); + && artifacts[0].fileTags.includes("dynamiclibrary_import"); for (var i = 0; i < artifactFilePaths.length; ++i) { addFilePath(artifactFilePaths[i], wholeArchive, artifactsAreImportLibs ? dep.name : undefined); @@ -254,7 +254,7 @@ function collectLibraryDependencies(product) { externalLibs.forEach(function(libName) { var isObjectFile = objSuffix && libName.endsWith(objSuffix); if (isObjectFile) { - if (seenObjectFiles.contains(libName)) + if (seenObjectFiles.includes(libName)) return; seenObjectFiles.push(libName); } @@ -327,7 +327,10 @@ function collectIncludePaths(input) { var includePaths = input.cpp.includePaths; if (includePaths) allIncludePaths = allIncludePaths.uniqueConcat(includePaths); - return allIncludePaths; + var builtIns = input.cpp.compilerIncludePaths; + return allIncludePaths.filter(function(p) { + return !builtIns.includes(p); + }); } function collectSystemIncludePaths(input) { @@ -338,7 +341,10 @@ function collectSystemIncludePaths(input) { var distributionIncludePaths = input.cpp.distributionIncludePaths; if (distributionIncludePaths) allIncludePaths = allIncludePaths.uniqueConcat(distributionIncludePaths); - return allIncludePaths; + var builtIns = input.cpp.compilerIncludePaths; + return allIncludePaths.filter(function(p) { + return !builtIns.includes(p); + }); } function collectPreincludePaths(input) { diff --git a/share/qbs/modules/cpp/darwin.js b/share/qbs/modules/cpp/darwin.js index e4f740dbe..0223c5ed3 100644 --- a/share/qbs/modules/cpp/darwin.js +++ b/share/qbs/modules/cpp/darwin.js @@ -73,7 +73,7 @@ function lipoOutputArtifacts(product, inputs, fileTag, debugSuffix) { // approach for all bundle types. var defaultVariant; if (!buildVariants.some(function (x) { return x.name === "release"; }) - && product.multiplexByQbsProperties.contains("buildVariants") + && product.multiplexByQbsProperties.includes("buildVariants") && product.qbs.buildVariants && product.qbs.buildVariants.length > 1) { var defaultBuildVariant = product.qbs.defaultBuildVariant; buildVariants.map(function (variant) { @@ -137,7 +137,7 @@ function prepareLipo(project, product, inputs, outputs, input, output) { for (var p in inputs) inputs[p] = inputs[p].filter(function(inp) { return inp.product.name === product.name; }); var allInputs = [].concat.apply([], Object.keys(inputs).map(function (tag) { - return ["application", "dynamiclibrary", "staticlibrary", "loadablemodule"].contains(tag) + return ["application", "dynamiclibrary", "staticlibrary", "loadablemodule"].includes(tag) ? inputs[tag] : []; })); diff --git a/share/qbs/modules/cpp/dmc.js b/share/qbs/modules/cpp/dmc.js index a398d6581..ea7cd7bb5 100644 --- a/share/qbs/modules/cpp/dmc.js +++ b/share/qbs/modules/cpp/dmc.js @@ -56,15 +56,15 @@ function targetFlags(platform, architecture, extender, consoleApp, type) { var flags = []; if (architecture === "x86_16") { flags.push("-ml"); - if (type.contains("application") && !consoleApp) + if (type.includes("application") && !consoleApp) flags.push("-WA"); - else if (type.contains("dynamiclibrary")) + else if (type.includes("dynamiclibrary")) flags.push("-WD"); } else if (architecture === "x86") { flags.push("-mn"); - if (type.contains("application")) + if (type.includes("application")) flags.push("-WA"); - else if (type.contains("dynamiclibrary")) + else if (type.includes("dynamiclibrary")) flags.push("-WD"); } return flags; @@ -350,12 +350,12 @@ function linkerFlags(project, product, inputs, outputs) { })); // Output. - if (product.type.contains("application")) { + if (product.type.includes("application")) { args.push("-o" + FileInfo.toWindowsSeparators(outputs.application[0].filePath)); args.push("-L/" + (product.cpp.generateLinkerMapFile ? "MAP" : "NOMAP")); if (product.qbs.targetPlatform === "windows" && product.qbs.architecture === "x86") args.push("-L/SUBSYSTEM:" + (product.consoleApplication ? "CONSOLE" : "WINDOWS")); - } else if (product.type.contains("dynamiclibrary")) { + } else if (product.type.includes("dynamiclibrary")) { args.push("-o" + FileInfo.toWindowsSeparators(outputs.dynamiclibrary[0].filePath)); if (product.qbs.targetPlatform === "windows" && product.qbs.architecture === "x86") { args.push("kernel32.lib"); diff --git a/share/qbs/modules/cpp/dmc.qbs b/share/qbs/modules/cpp/dmc.qbs index db9e6b2fb..ac89550e8 100644 --- a/share/qbs/modules/cpp/dmc.qbs +++ b/share/qbs/modules/cpp/dmc.qbs @@ -38,7 +38,7 @@ import "dmc.js" as DMC import "cpp.js" as Cpp CppModule { - condition: Host.os().contains("windows") && qbs.toolchain && qbs.toolchain.contains("dmc") + condition: Host.os().includes("windows") && qbs.toolchain && qbs.toolchain.includes("dmc") Probes.BinaryProbe { id: compilerPathProbe diff --git a/share/qbs/modules/cpp/freebsd-gcc.qbs b/share/qbs/modules/cpp/freebsd-gcc.qbs index fb6d45b37..e04ed7f2b 100644 --- a/share/qbs/modules/cpp/freebsd-gcc.qbs +++ b/share/qbs/modules/cpp/freebsd-gcc.qbs @@ -32,11 +32,11 @@ import "freebsd.js" as FreeBSD import qbs.Host UnixGCC { - condition: qbs.targetOS.contains("freebsd") && - qbs.toolchain && qbs.toolchain.contains("gcc") + condition: qbs.targetOS.includes("freebsd") && + qbs.toolchain && qbs.toolchain.includes("gcc") priority: 1 - targetSystem: "freebsd" + (Host.os().contains("freebsd") ? FreeBSD.hostKernelRelease() : "") + targetSystem: "freebsd" + (Host.os().includes("freebsd") ? FreeBSD.hostKernelRelease() : "") distributionIncludePaths: ["/usr/local/include"] distributionLibraryPaths: ["/usr/local/lib"] diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index 25fe06861..90f8fc933 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -78,6 +78,7 @@ function useCompilerDriverLinker(product, inputs) { function collectLibraryDependencies(product, isDarwin) { var publicDeps = {}; + var privateDeps = {}; var objects = []; var objectByFilePath = {}; var tagForLinkingAgainstSharedLib = product.cpp.imageFormat === "pe" @@ -170,6 +171,8 @@ function collectLibraryDependencies(product, isDarwin) { && typeof dep.artifacts[tagForLinkingAgainstSharedLib] !== "undefined"; if (!isStaticLibrary && !isDynamicLibrary) return; + if (isBelowIndirectDynamicLib && privateDeps[dep.name]) + return; var nextIsBelowIndirectDynamicLib = isBelowIndirectDynamicLib || isDynamicLibrary; dep.dependencies.forEach(function(depdep) { @@ -193,6 +196,7 @@ function collectLibraryDependencies(product, isDarwin) { publicDeps[dep.name] = true; } else { addArtifactFilePaths(dep, tagForLinkingAgainstSharedLib, addPrivateFilePath); + privateDeps[dep.name] = true; } } } @@ -204,7 +208,6 @@ function collectLibraryDependencies(product, isDarwin) { product.dependencies.forEach(traverseDirectDependency); addExternalLibs(product); - var seenRPathLinkDirs = {}; var result = { libraries: [], rpath_link: [] }; objects.forEach( function (obj) { @@ -215,10 +218,7 @@ function collectLibraryDependencies(product, isDarwin) { framework: obj.framework }); } else { var dirPath = FileInfo.path(obj.filePath); - if (!seenRPathLinkDirs.hasOwnProperty(dirPath)) { - seenRPathLinkDirs[dirPath] = true; - result.rpath_link.push(dirPath); - } + result.rpath_link.push(dirPath); } }); return result; @@ -230,7 +230,7 @@ function escapeLinkerFlags(product, inputs, linkerFlags) { if (useCompilerDriverLinker(product, inputs)) { var sep = ","; - var useXlinker = linkerFlags.some(function (f) { return f.contains(sep); }); + var useXlinker = linkerFlags.some(function (f) { return f.includes(sep); }); if (useXlinker) { // One or more linker arguments contain the separator character itself // Use -Xlinker to handle these @@ -247,7 +247,7 @@ function escapeLinkerFlags(product, inputs, linkerFlags) { return xlinkerFlags; } - if (product.cpp.enableSuspiciousLinkerFlagWarnings && linkerFlags.contains("-Xlinker")) { + if (product.cpp.enableSuspiciousLinkerFlagWarnings && linkerFlags.includes("-Xlinker")) { console.warn("Encountered -Xlinker linker flag escape sequence. This may cause the " + "target to fail to link. Please do not escape these flags manually; " + "qbs does that for you."); @@ -262,7 +262,7 @@ function escapeLinkerFlags(product, inputs, linkerFlags) { } function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPath) { - var isDarwin = product.qbs.targetOS.contains("darwin"); + var isDarwin = product.qbs.targetOS.includes("darwin"); var libraryDependencies = collectLibraryDependencies(product, isDarwin); var frameworks = product.cpp.frameworks; var weakFrameworks = product.cpp.weakFrameworks; @@ -275,7 +275,7 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat var escapableLinkerFlags = []; - if (primaryOutput.fileTags.contains("dynamiclibrary")) { + if (primaryOutput.fileTags.includes("dynamiclibrary")) { if (isDarwin) { args.push((function () { var tags = ["c", "cpp", "objc", "objcpp", "asm_cpp"]; @@ -300,7 +300,7 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat } } - if (primaryOutput.fileTags.contains("loadablemodule")) + if (primaryOutput.fileTags.includes("loadablemodule")) args.push(isDarwin ? "-bundle" : "-shared"); if (primaryOutput.fileTags.containsAny(["dynamiclibrary", "loadablemodule"])) { @@ -323,7 +323,7 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat var sysroot = product.cpp.syslibroot; if (sysroot) { - if (product.qbs.toolchain.contains("qcc")) + if (product.qbs.toolchain.includes("qcc")) escapableLinkerFlags.push("--sysroot=" + sysroot); else if (isDarwin) escapableLinkerFlags.push("-syslibroot", sysroot); @@ -340,7 +340,7 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat function fixupRPath(rpath) { // iOS, tvOS, watchOS, and others, are fine - if (!product.qbs.targetOS.contains("macos")) + if (!product.qbs.targetOS.includes("macos")) return rpath; // ...as are newer versions of macOS @@ -356,11 +356,11 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat } function isNotSystemRunPath(p) { - return !FileInfo.isAbsolutePath(p) || (!systemRunPaths.contains(p) - && !canonicalSystemRunPaths.contains(File.canonicalFilePath(p))); + return !FileInfo.isAbsolutePath(p) || (!systemRunPaths.includes(p) + && !canonicalSystemRunPaths.includes(File.canonicalFilePath(p))); }; - if (!product.qbs.targetOS.contains("windows")) { + if (!product.qbs.targetOS.includes("windows")) { for (i in rpaths) { if (isNotSystemRunPath(rpaths[i])) escapableLinkerFlags.push("-rpath", fixupRPath(rpaths[i])); @@ -370,13 +370,16 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat if (product.cpp.entryPoint) escapableLinkerFlags.push("-e", product.cpp.entryPoint); - if (product.qbs.toolchain.contains("mingw")) { + if (product.qbs.toolchain.includes("mingw")) { if (product.consoleApplication !== undefined) escapableLinkerFlags.push("-subsystem", product.consoleApplication ? "console" : "windows"); var minimumWindowsVersion = product.cpp.minimumWindowsVersion; if (minimumWindowsVersion) { + // workaround for QBS-1724, mingw seems to be broken + if (Utilities.versionCompare(minimumWindowsVersion, "6.2") > 0) + minimumWindowsVersion = "6.2"; var subsystemVersion = WindowsUtils.getWindowsVersionInFormat(minimumWindowsVersion, 'subsystem'); if (subsystemVersion) { var major = subsystemVersion.split('.')[0]; @@ -398,13 +401,13 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat var stdlib = isLinkingCppObjects ? product.cpp.cxxStandardLibrary : undefined; - if (stdlib && product.qbs.toolchain.contains("clang")) + if (stdlib && product.qbs.toolchain.includes("clang")) args.push("-stdlib=" + stdlib); // Flags for library search paths var allLibraryPaths = Cpp.collectLibraryPaths(product); - if (systemRunPaths.length > 0) - allLibraryPaths = allLibraryPaths.filter(isNotSystemRunPath); + var builtIns = product.cpp.compilerLibraryPaths + allLibraryPaths = allLibraryPaths.filter(function(p) { return !builtIns.includes(p); }); args = args.concat(allLibraryPaths.map(function(path) { return product.cpp.libraryPathFlag + path })); escapableLinkerFlags = escapableLinkerFlags.concat(Cpp.collectLinkerScriptPathsArguments(product, inputs)); @@ -472,9 +475,12 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat var symbolLinkMode = dep.symbolLinkMode; if (isDarwin && symbolLinkMode) { - if (!["lazy", "reexport", "upward", "weak"].contains(symbolLinkMode)) + if (!["lazy", "reexport", "upward", "weak"].includes(symbolLinkMode)) throw new Error("unknown value '" + symbolLinkMode + "' for cpp.symbolLinkMode"); + } + var supportsLazyMode = Utilities.versionCompare(product.cpp.compilerVersion, "15.0.0") < 0; + if (isDarwin && symbolLinkMode && (symbolLinkMode !== "lazy" || supportsLazyMode)) { if (FileInfo.isAbsolutePath(lib) || lib.startsWith('@')) escapableLinkerFlags.push("-" + symbolLinkMode + "_library", lib); else if (dep.framework) @@ -530,7 +536,7 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat Array.prototype.push.apply(escapedLinkerFlags, args); if (useCompilerDriver) escapedLinkerFlags = escapedLinkerFlags.concat(Cpp.collectMiscLinkerArguments(product)); - if (product.qbs.toolchain.contains("mingw") && product.cpp.runtimeLibrary === "static") + if (product.qbs.toolchain.includes("mingw") && product.cpp.runtimeLibrary === "static") escapedLinkerFlags = ['-static-libgcc', '-static-libstdc++'].concat(escapedLinkerFlags); return escapedLinkerFlags; } @@ -577,7 +583,7 @@ function languageTagFromFileExtension(toolchain, fileName) { "s" : "asm", "S" : "asm_cpp" }; - if (!toolchain.contains("clang")) + if (!toolchain.includes("clang")) m["sx"] = "asm_cpp"; // clang does NOT recognize .sx return m[fileName.substring(i + 1)]; } @@ -585,7 +591,7 @@ function languageTagFromFileExtension(toolchain, fileName) { // Older versions of the QNX SDK have C and C++ compilers whose filenames differ only by case, // which won't work in case insensitive environments like Win32+NTFS, HFS+ and APFS function isLegacyQnxSdk(config) { - return config.qbs.toolchain.contains("qcc") && config.qnx && !config.qnx.qnx7; + return config.qbs.toolchain.includes("qcc") && config.qnx && !config.qnx.qnx7; } function effectiveCompilerInfo(toolchain, input, output) { @@ -593,7 +599,7 @@ function effectiveCompilerInfo(toolchain, input, output) { var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags)); // Whether we're compiling a precompiled header or normal source file - var pchOutput = output.fileTags.contains(tag + "_pch"); + var pchOutput = output.fileTags.includes(tag + "_pch"); var compilerPathByLanguage = input.cpp.compilerPathByLanguage; if (compilerPathByLanguage) @@ -601,7 +607,7 @@ function effectiveCompilerInfo(toolchain, input, output) { if (!compilerPath || tag !== languageTagFromFileExtension(toolchain, input.fileName) || isLegacyQnxSdk(input)) { - if (input.qbs.toolchain.contains("qcc")) + if (input.qbs.toolchain.includes("qcc")) language = qnxLangArgs(input, tag); else language = ["-x", languageName(tag) + (pchOutput ? '-header' : '')]; @@ -749,7 +755,7 @@ function standardFallbackValueOrDefault(toolchain, compilerVersion, languageVers if (m) { for (var idx = 0; idx < m.toolchains.length; ++idx) { var tc = m.toolchains[idx]; - if (toolchain.contains(tc.name)) { + if (toolchain.includes(tc.name)) { // If we found our toolchain and it doesn't yet support the language standard // we're requesting, or we're using an older version that only supports the // preliminary flag, use that. @@ -771,7 +777,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { // Determine which C-language we're compiling var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags)); - if (!["c", "cpp", "objc", "objcpp", "asm_cpp"].contains(tag)) + if (!["c", "cpp", "objc", "objcpp", "asm_cpp"].includes(tag)) throw ("unsupported source language: " + tag); var compilerInfo = effectiveCompilerInfo(product.qbs.toolchain, @@ -804,12 +810,12 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { args = args.concat(configFlags(input)); - if (!input.qbs.toolchain.contains("qcc")) + if (!input.qbs.toolchain.includes("qcc")) args.push('-pipe'); if (input.cpp.enableReproducibleBuilds) { var toolchain = product.qbs.toolchain; - if (!toolchain.contains("clang")) { + if (!toolchain.includes("clang")) { var hashString = FileInfo.relativePath(project.sourceDirectory, input.filePath); var hash = Utilities.getHash(hashString); args.push("-frandom-seed=0x" + hash.substring(0, 8)); @@ -817,8 +823,8 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { var major = product.cpp.compilerVersionMajor; var minor = product.cpp.compilerVersionMinor; - if ((toolchain.contains("clang") && (major > 3 || (major === 3 && minor >= 5))) || - (toolchain.contains("gcc") && (major > 4 || (major === 4 && minor >= 9)))) { + if ((toolchain.includes("clang") && (major > 3 || (major === 3 && minor >= 5))) || + (toolchain.includes("gcc") && (major > 4 || (major === 4 && minor >= 9)))) { args.push("-Wdate-time"); } } @@ -846,7 +852,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { } var visibility = input.cpp.visibility; - if (!product.qbs.toolchain.contains("mingw")) { + if (!product.qbs.toolchain.includes("mingw")) { if (visibility === 'hidden' || visibility === 'minimal') args.push('-fvisibility=hidden'); if ((visibility === 'hiddenInlines' || visibility === 'minimal') && tag === 'cpp') @@ -862,7 +868,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { args = args.concat(Cpp.collectMiscCompilerArguments(input, tag)); var pchTag = compilerInfo.tag + "_pch"; - var pchOutput = output.fileTags.contains(pchTag); + var pchOutput = output.fileTags.includes(pchTag); var pchInputs = explicitlyDependsOn[pchTag]; if (!pchOutput && pchInputs && pchInputs.length === 1 && ModUtils.moduleProperty(input, 'usePrecompiledHeader', tag)) { @@ -875,7 +881,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { args = args.concat(Cpp.collectPreincludePathsArguments(input)); var positionIndependentCode = input.cpp.positionIndependentCode; - if (positionIndependentCode && !product.qbs.targetOS.contains("windows")) + if (positionIndependentCode && !product.qbs.targetOS.includes("windows")) args.push('-fPIC'); var cppFlags = input.cpp.cppFlags; @@ -887,7 +893,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { args = args.concat(Cpp.collectSystemIncludePathsArguments(input)); var minimumWindowsVersion = input.cpp.minimumWindowsVersion; - if (minimumWindowsVersion && product.qbs.targetOS.contains("windows")) { + if (minimumWindowsVersion && product.qbs.targetOS.includes("windows")) { var hexVersion = WindowsUtils.getWindowsVersionInFormat(minimumWindowsVersion, 'hex'); if (hexVersion) { var versionDefs = [ 'WINVER', '_WIN32_WINNT', '_WIN32_WINDOWS' ]; @@ -921,7 +927,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { if (tag === "cpp" || tag === "objcpp") { var cxxStandardLibrary = product.cpp.cxxStandardLibrary; - if (cxxStandardLibrary && product.qbs.toolchain.contains("clang")) { + if (cxxStandardLibrary && product.qbs.toolchain.includes("clang")) { args.push("-stdlib=" + cxxStandardLibrary); } } @@ -936,7 +942,7 @@ function additionalCompilerAndLinkerFlags(product) { var args = [] var requireAppExtensionSafeApi = product.cpp.requireAppExtensionSafeApi; - if (requireAppExtensionSafeApi !== undefined && product.qbs.targetOS.contains("darwin")) { + if (requireAppExtensionSafeApi !== undefined && product.qbs.targetOS.includes("darwin")) { args.push(requireAppExtensionSafeApi ? "-fapplication-extension" : "-fno-application-extension"); } @@ -987,7 +993,7 @@ function prepareAssembler(project, product, inputs, outputs, input, output) { function compilerEnvVars(config, compilerInfo) { - if (config.qbs.toolchain.contains("qcc")) + if (config.qbs.toolchain.includes("qcc")) return ["QCC_CONF_PATH"]; var list = ["CPATH", "TMPDIR"]; @@ -999,15 +1005,15 @@ function compilerEnvVars(config, compilerInfo) list.push("OBJC_INCLUDE_PATH"); else if (compilerInfo.tag === "objccpp") list.push("OBJCPLUS_INCLUDE_PATH"); - if (config.qbs.targetOS.contains("macos")) + if (config.qbs.targetOS.includes("macos")) list.push("MACOSX_DEPLOYMENT_TARGET"); - else if (config.qbs.targetOS.contains("ios")) + else if (config.qbs.targetOS.includes("ios")) list.push("IPHONEOS_DEPLOYMENT_TARGET"); - else if (config.qbs.targetOS.contains("tvos")) + else if (config.qbs.targetOS.includes("tvos")) list.push("TVOS_DEPLOYMENT_TARGET"); - else if (config.qbs.targetOS.contains("watchos")) + else if (config.qbs.targetOS.includes("watchos")) list.push("WATCHOS_DEPLOYMENT_TARGET"); - if (config.qbs.toolchain.contains("clang")) { + if (config.qbs.toolchain.includes("clang")) { list.push("TEMP", "TMP"); } else { list.push("LANG", "LC_CTYPE", "LC_MESSAGES", "LC_ALL", "GCC_COMPARE_DEBUG", @@ -1018,7 +1024,7 @@ function compilerEnvVars(config, compilerInfo) function linkerEnvVars(config, inputs) { - if (config.qbs.toolchain.contains("clang") || config.qbs.toolchain.contains("qcc")) + if (config.qbs.toolchain.includes("clang") || config.qbs.toolchain.includes("qcc")) return []; var list = ["GNUTARGET", "LDEMULATION", "COLLECT_NO_DEMANGLE"]; if (useCompilerDriverLinker(config, inputs)) @@ -1028,7 +1034,7 @@ function linkerEnvVars(config, inputs) function setResponseFileThreshold(command, product) { - if (product.qbs.targetOS.contains("windows") && Host.os().contains("windows")) + if (product.qbs.targetOS.includes("windows") && Host.os().includes("windows")) command.responseFileThreshold = 10000; } @@ -1036,7 +1042,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli var compilerInfo = effectiveCompilerInfo(product.qbs.toolchain, input, output); var compilerPath = compilerInfo.path; - var pchOutput = output.fileTags.contains(compilerInfo.tag + "_pch"); + var pchOutput = output.fileTags.includes(compilerInfo.tag + "_pch"); var args = compilerFlags(project, product, input, output, explicitlyDependsOn); var wrapperArgsLength = 0; @@ -1126,7 +1132,7 @@ function getSymbolInfo(product, inputFile) // construct the list of defined symbols by subtracting. var undefinedGlobalSymbols = collectStdoutLines(command, args.concat(["-u", inputFile])); result.definedGlobalSymbols = result.allGlobalSymbols.filter(function(line) { - return !undefinedGlobalSymbols.contains(line); }); + return !undefinedGlobalSymbols.includes(line); }); result.success = true; } catch (e) { console.debug("Failed to collect symbols for shared library: nm command '" @@ -1338,7 +1344,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) { var responseFileArgumentIndex = wrapperArgsLength; // qcc doesn't properly handle response files, so we have to do it manually - var useQnxResponseFileHack = product.qbs.toolchain.contains("qcc") + var useQnxResponseFileHack = product.qbs.toolchain.includes("qcc") && useCompilerDriverLinker(product, inputs); if (useQnxResponseFileHack) { // qcc needs to see at least one object/library file to think it has something to do, @@ -1358,7 +1364,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) { setResponseFileThreshold(cmd, product); commands.push(cmd); - if (product.qbs.targetOS.contains("darwin")) { + if (product.qbs.targetOS.includes("darwin")) { if (!product.aggregate) { commands = commands.concat(separateDebugInfoCommandsDarwin( product, outputs, [primaryOutput])); @@ -1492,7 +1498,7 @@ function dumpDefaultPaths(env, compilerFilePath, args, nullDevice, pathListSepar if (libraryPaths.length === 0) libraryPaths.push(sysroot + "/lib", sysroot + "/usr/lib"); - if (frameworkPaths.length === 0 && targetOS.contains("darwin")) + if (frameworkPaths.length === 0 && targetOS.includes("darwin")) frameworkPaths.push(sysroot + "/System/Library/Frameworks"); return { @@ -1520,9 +1526,9 @@ function targetLinkerFlags(targetArch, targetOS) { "x86_64": "elf_x86_64", } }; - if (targetOS.contains("windows")) + if (targetOS.includes("windows")) return linkerFlags["windows"][targetArch]; - else if (targetOS.contains("freebsd")) + else if (targetOS.includes("freebsd")) return linkerFlags["freebsd"][targetArch]; return linkerFlags["other"][targetArch]; } diff --git a/share/qbs/modules/cpp/iar.js b/share/qbs/modules/cpp/iar.js index d5f019cbc..ed58ac262 100644 --- a/share/qbs/modules/cpp/iar.js +++ b/share/qbs/modules/cpp/iar.js @@ -450,6 +450,7 @@ function dumpMacros(compilerFilePath, tag) { args.push(cppLanguageOption(compilerFilePath)); var p = new Process(); + p.setWorkingDirectory(tempDir.path()); p.exec(compilerFilePath, args, true); var outFile = new TextFile(outFilePath, TextFile.ReadOnly); return Cpp.extractMacros(outFile.readAll()); @@ -471,6 +472,7 @@ function dumpCompilerIncludePaths(compilerFilePath, tag) { var includePaths = []; var p = new Process(); + p.setWorkingDirectory(tempDir.path()); // It is possible that the process can return an error code in case the // compiler does not support the `--IDE3` flag. So, don't throw an error in this case. p.exec(compilerFilePath, args, false); diff --git a/share/qbs/modules/cpp/iar.qbs b/share/qbs/modules/cpp/iar.qbs index f02c033ce..558635ef5 100644 --- a/share/qbs/modules/cpp/iar.qbs +++ b/share/qbs/modules/cpp/iar.qbs @@ -37,7 +37,7 @@ import "cpp.js" as Cpp import "iar.js" as IAR CppModule { - condition: qbs.toolchain && qbs.toolchain.contains("iar") + condition: qbs.toolchain && qbs.toolchain.includes("iar") Probes.BinaryProbe { id: compilerPathProbe diff --git a/share/qbs/modules/cpp/ios-gcc.qbs b/share/qbs/modules/cpp/ios-gcc.qbs index 92e072a0a..968b873da 100644 --- a/share/qbs/modules/cpp/ios-gcc.qbs +++ b/share/qbs/modules/cpp/ios-gcc.qbs @@ -37,8 +37,8 @@ import qbs.Utilities DarwinGCC { priority: 1 - condition: qbs.targetOS.contains('ios') && - qbs.toolchain && qbs.toolchain.contains('gcc') + condition: qbs.targetOS.includes('ios') && + qbs.toolchain && qbs.toolchain.includes('gcc') minimumIosVersion: { if (Host.architecture() == "armv7a") @@ -51,10 +51,10 @@ DarwinGCC { targetSystem: "ios" + (minimumIosVersion || "") minimumDarwinVersion: minimumIosVersion - minimumDarwinVersionCompilerFlag: qbs.targetOS.contains("ios-simulator") + minimumDarwinVersionCompilerFlag: qbs.targetOS.includes("ios-simulator") ? "-mios-simulator-version-min" : "-miphoneos-version-min" - minimumDarwinVersionLinkerFlag: qbs.targetOS.contains("ios-simulator") + minimumDarwinVersionLinkerFlag: qbs.targetOS.includes("ios-simulator") ? "-ios_simulator_version_min" : "-iphoneos_version_min" @@ -69,13 +69,13 @@ DarwinGCC { readonly property stringList simulatorObjcFlags: { // default in Xcode and also required for building 32-bit Simulator binaries with ARC // since the default ABI version is 0 for 32-bit targets - return qbs.targetOS.contains("ios-simulator") + return qbs.targetOS.includes("ios-simulator") ? ["-fobjc-abi-version=2", "-fobjc-legacy-dispatch"] : []; } Rule { - condition: !product.qbs.targetOS.contains("ios-simulator") + condition: !product.qbs.targetOS.includes("ios-simulator") inputsFromDependencies: ["bundle.content"] Artifact { diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs index edee1697b..5922ad4e2 100644 --- a/share/qbs/modules/cpp/keil.qbs +++ b/share/qbs/modules/cpp/keil.qbs @@ -36,7 +36,7 @@ import "cpp.js" as Cpp import "keil.js" as KEIL CppModule { - condition: Host.os().contains("windows") && qbs.toolchain && qbs.toolchain.contains("keil") + condition: Host.os().includes("windows") && qbs.toolchain && qbs.toolchain.includes("keil") Probes.BinaryProbe { id: compilerPathProbe diff --git a/share/qbs/modules/cpp/macos-gcc.qbs b/share/qbs/modules/cpp/macos-gcc.qbs index 612b46ae8..c667bbc29 100644 --- a/share/qbs/modules/cpp/macos-gcc.qbs +++ b/share/qbs/modules/cpp/macos-gcc.qbs @@ -33,8 +33,8 @@ import qbs.Utilities DarwinGCC { priority: 1 - condition: qbs.targetOS.contains('macos') && - qbs.toolchain && qbs.toolchain.contains('gcc') + condition: qbs.targetOS.includes('macos') && + qbs.toolchain && qbs.toolchain.includes('gcc') targetSystem: "macosx" + (minimumMacosVersion || "") diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index 1b70904c0..1700c21b3 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -79,8 +79,8 @@ function hasCxx17Option(input) { // Probably this is not the earliest version to support the flag, but we have tested this one // and it's a pain to find out the exact minimum. - return Utilities.versionCompare(input.cpp.compilerVersion, "19.12.25831") >= 0 - || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 7); + return (input.qbs.toolchain.includes("clang-cl") && input.cpp.compilerVersionMajor >= 7) + || Utilities.versionCompare(input.cpp.compilerVersion, "19.12.25831") >= 0; } function hasZCplusPlusOption(input) @@ -92,24 +92,24 @@ function hasZCplusPlusOption(input) // clang-cl supports this option starting around-ish versions 8/9, but it // ignores this option, so this doesn't really matter // https://reviews.llvm.org/D45877 - return Utilities.versionCompare(input.cpp.compilerVersion, "19.14.26433") >= 0 - || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 9); + return (input.qbs.toolchain.includes("clang-cl") && input.cpp.compilerVersionMajor >= 9) + || Utilities.versionCompare(input.cpp.compilerVersion, "19.14.26433") >= 0; } function hasCxx20Option(input) { - return Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30133.0") >= 0 - || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 13); + return (input.qbs.toolchain.includes("clang-cl") && input.cpp.compilerVersionMajor >= 13) + || Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30133.0") >= 0; } function hasCVerOption(input) { - return Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30138.0") >= 0 - || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 13); + return (input.qbs.toolchain.includes("clang-cl") && input.cpp.compilerVersionMajor >= 13) + || Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30138.0") >= 0; } function supportsExternalIncludesOption(input) { - if (input.qbs.toolchain.contains("clang-cl")) + if (input.qbs.toolchain.includes("clang-cl")) return false; // Exclude clang-cl. // This option was introcuded since MSVC 2017 v15.6 (aka _MSC_VER 19.13). // But due to some MSVC bugs: @@ -124,10 +124,9 @@ function addCxxLanguageVersionFlag(input, args) { if (!cxxVersion) return; - // Visual C++ 2013, Update 3 - var hasStdOption = Utilities.versionCompare(input.cpp.compilerVersion, "18.00.30723") >= 0 - // or clang-cl - || input.qbs.toolchain.contains("clang-cl"); + // Visual C++ 2013, Update 3 or clang-cl + var hasStdOption = input.qbs.toolchain.includes("clang-cl") + || Utilities.versionCompare(input.cpp.compilerVersion, "18.00.30723") >= 0; if (!hasStdOption) return; @@ -164,7 +163,7 @@ function addCLanguageVersionFlag(input, args) { } function handleClangClArchitectureFlags(product, architecture, flags) { - if (product.qbs.toolchain.contains("clang-cl")) { + if (product.qbs.toolchain.includes("clang-cl")) { if (architecture === "x86") flags.push("-m32"); else if (architecture === "x86_64") @@ -181,7 +180,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli // Determine which C-language we're compiling var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(Object.keys(outputs))); - if (!["c", "cpp"].contains(tag)) + if (!["c", "cpp"].includes(tag)) throw ("unsupported source language"); var enableExceptions = input.cpp.enableExceptions; @@ -250,14 +249,17 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli return input.cpp.includeFlag + FileInfo.toWindowsSeparators(path); })); - var includeFlag = input.cpp.includeFlag; - if (supportsExternalIncludesOption(input)) { - args.push("/experimental:external"); - var enforcesSlashW = - Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30037") >= 0 - if (enforcesSlashW) - args.push("/external:W0") - includeFlag = input.cpp.systemIncludeFlag; + var includeFlag = input.qbs.toolchain.includes("clang-cl") + ? input.cpp.systemIncludeFlag : input.cpp.includeFlag; + if (!input.qbs.toolchain.includes("clang-cl")) { + if (supportsExternalIncludesOption(input)) { + args.push("/experimental:external"); + var enforcesSlashW = + Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30037") >= 0 + if (enforcesSlashW) + args.push("/external:W0") + includeFlag = input.cpp.systemIncludeFlag; + } } var systemIncludePaths = Cpp.collectSystemIncludePaths(input); args = args.concat([].uniqueConcat(systemIncludePaths).map(function(path) { @@ -313,7 +315,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli var pchInputs = explicitlyDependsOn[tag + "_pch"]; if (pchOutput) { // create PCH - if (input.qbs.toolchain.contains("clang-cl")) { + if (input.qbs.toolchain.includes("clang-cl")) { // clang-cl does not support /Yc flag without filename args.push("/Yc" + FileInfo.toWindowsSeparators(input.filePath)); // clang-cl complains when pch file is not included @@ -371,7 +373,8 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli function linkerSupportsWholeArchive(product) { - return Utilities.versionCompare(product.cpp.compilerVersion, "19.0.24215.1") >= 0 + return product.qbs.toolchainType.includes("clang-cl") || + Utilities.versionCompare(product.cpp.compilerVersion, "19.0.24215.1") >= 0 } function handleDiscardProperty(product, flags) { @@ -387,16 +390,16 @@ function prepareLinker(project, product, inputs, outputs, input, output) { var linkDLL = (outputs.dynamiclibrary ? true : false) var primaryOutput = (linkDLL ? outputs.dynamiclibrary[0] : outputs.application[0]) var debugInformation = product.cpp.debugInformation; - var additionalManifestInputs = Array.prototype.map.call(inputs["native.pe.manifest"], + var additionalManifestInputs = Array.prototype.map.call(inputs["native.pe.manifest"] || [], function (a) { return a.filePath; }); - var moduleDefinitionInputs = Array.prototype.map.call(inputs["def"], + var moduleDefinitionInputs = Array.prototype.map.call(inputs["def"] || [], function (a) { return a.filePath; }); var generateManifestFiles = !linkDLL && product.cpp.generateManifestFile; - var useClangCl = product.qbs.toolchain.contains("clang-cl"); + var useClangCl = product.qbs.toolchain.includes("clang-cl"); var canEmbedManifest = useClangCl || product.cpp.compilerVersionMajor >= 17 // VS 2012 var linkerPath = effectiveLinkerPath(product, inputs); diff --git a/share/qbs/modules/cpp/qnx-qcc.qbs b/share/qbs/modules/cpp/qnx-qcc.qbs index a39a6a998..69288ddd8 100644 --- a/share/qbs/modules/cpp/qnx-qcc.qbs +++ b/share/qbs/modules/cpp/qnx-qcc.qbs @@ -33,8 +33,8 @@ import qbs.FileInfo UnixGCC { Depends { name: "qnx" } - condition: qbs.targetOS.contains("qnx") && - qbs.toolchain && qbs.toolchain.contains("qcc") + condition: qbs.targetOS.includes("qnx") && + qbs.toolchain && qbs.toolchain.includes("qcc") priority: 1 distributionIncludePaths: FileInfo.joinPaths(qnx.targetDir, "usr", "include") @@ -79,7 +79,7 @@ UnixGCC { toolchainPrefix: target + "-" - targetVendor: ["x86", "x86_64"].contains(qbs.architecture) ? "pc" : base + targetVendor: ["x86", "x86_64"].includes(qbs.architecture) ? "pc" : base targetSystem: "nto" targetAbi: "qnx" + qnx.version + (qnxTargetArchName === "armv7le" ? "eabi" : "") diff --git a/share/qbs/modules/cpp/sdcc.js b/share/qbs/modules/cpp/sdcc.js index 928ded5cf..49da8a715 100644 --- a/share/qbs/modules/cpp/sdcc.js +++ b/share/qbs/modules/cpp/sdcc.js @@ -396,7 +396,7 @@ function buildLinkerMapFilePath(target, suffix) { // We need to replace the '\r\n\' line endings with the'\n' line // endings for each generated object file. function patchObjectFile(project, product, inputs, outputs, input, output) { - var isWindows = Host.os().contains("windows"); + var isWindows = Host.os().includes("windows"); if (isWindows && input.cpp.debugInformation) { var cmd = new JavaScriptCommand(); cmd.objectPath = outputs.obj[0].filePath; @@ -461,10 +461,9 @@ function renameLinkerMapFile(project, product, inputs, outputs, input, output) { // remove a listing files only after the linking completes. function removeCompilerListingFiles(project, product, inputs, outputs, input, output) { var cmd = new JavaScriptCommand(); - cmd.objects = inputs.obj.map(function(a) { return a; }); cmd.silent = true; cmd.sourceCode = function() { - objects.forEach(function(object) { + inputs.obj.forEach(function(object) { if (!object.filePath.endsWith(".c" + object.cpp.objectSuffix)) return; // Skip the assembler generated objects. if (!object.cpp.generateCompilerListingFiles diff --git a/share/qbs/modules/cpp/sdcc.qbs b/share/qbs/modules/cpp/sdcc.qbs index 4e6f05bc0..24cb6d738 100644 --- a/share/qbs/modules/cpp/sdcc.qbs +++ b/share/qbs/modules/cpp/sdcc.qbs @@ -35,7 +35,7 @@ import "cpp.js" as Cpp import "sdcc.js" as SDCC CppModule { - condition: qbs.toolchain && qbs.toolchain.contains("sdcc") + condition: qbs.toolchain && qbs.toolchain.includes("sdcc") Probes.BinaryProbe { id: compilerPathProbe diff --git a/share/qbs/modules/cpp/setuprunenv.js b/share/qbs/modules/cpp/setuprunenv.js index df034e72a..2ea331a30 100644 --- a/share/qbs/modules/cpp/setuprunenv.js +++ b/share/qbs/modules/cpp/setuprunenv.js @@ -35,7 +35,7 @@ var ModUtils = require("qbs.ModUtils"); // TODO: append/prepend functionality sh function addNewElement(list, elem) { - if (!list.contains(elem)) + if (!list.includes(elem)) list.push(elem); } @@ -49,7 +49,7 @@ function artifactDir(artifact) function addExternalLibPath(product, list, path) { addNewElement(list, path); - if (Host.os().contains("windows") && FileInfo.fileName(path) === "lib") { + if (Host.os().includes("windows") && FileInfo.fileName(path) === "lib") { var binPath = FileInfo.joinPaths(FileInfo.path(path), "bin"); if (File.exists(binPath)) addNewElement(list, binPath); @@ -58,7 +58,7 @@ function addExternalLibPath(product, list, path) function gatherPaths(product, libPaths, frameworkPaths, seenProducts) { - if (seenProducts.contains(product.name)) + if (seenProducts.includes(product.name)) return; seenProducts.push(product.name); @@ -106,7 +106,7 @@ function gatherPaths(product, libPaths, frameworkPaths, seenProducts) function setupRunEnvironment(product, config) { - if (config.contains("ignore-lib-dependencies")) + if (config.includes("ignore-lib-dependencies")) return; if (Host.platform() !== product.qbs.targetPlatform) @@ -120,8 +120,8 @@ function setupRunEnvironment(product, config) if (runPaths && runPaths.length > 0) { var canonicalRunPaths = runPaths.map(function(p) { return File.canonicalFilePath(p); }); var filterFunc = function(libPath) { - return !runPaths.contains(libPath) - && !canonicalRunPaths.contains(File.canonicalFilePath(libPath)); + return !runPaths.includes(libPath) + && !canonicalRunPaths.includes(File.canonicalFilePath(libPath)); }; libPaths = libPaths.filter(filterFunc); frameworkPaths = frameworkPaths.filter(filterFunc); @@ -129,19 +129,19 @@ function setupRunEnvironment(product, config) if (libPaths.length > 0) { var envVarName; - if (product.qbs.targetOS.contains("windows")) + if (product.qbs.targetOS.includes("windows")) envVarName = "PATH"; - else if (product.qbs.targetOS.contains("macos")) + else if (product.qbs.targetOS.includes("macos")) envVarName = "DYLD_LIBRARY_PATH"; else envVarName = "LD_LIBRARY_PATH"; var envVar = new ModUtils.EnvironmentVariable(envVarName, FileInfo.pathListSeparator(), - Host.os().contains("windows")); + Host.os().includes("windows")); libPaths.forEach(function(p) { envVar.prepend(p); }); envVar.set(); } - if (product.qbs.targetOS.contains("macos") && frameworkPaths.length > 0) { + if (product.qbs.targetOS.includes("macos") && frameworkPaths.length > 0) { envVar = new ModUtils.EnvironmentVariable("DYLD_FRAMEWORK_PATH", ':', false); frameworkPaths.forEach(function(p) { envVar.prepend(p); }); envVar.set(); diff --git a/share/qbs/modules/cpp/tvos-gcc.qbs b/share/qbs/modules/cpp/tvos-gcc.qbs index 19bc9b787..eba3b091e 100644 --- a/share/qbs/modules/cpp/tvos-gcc.qbs +++ b/share/qbs/modules/cpp/tvos-gcc.qbs @@ -30,16 +30,16 @@ DarwinGCC { priority: 1 - condition: qbs.targetOS.contains('tvos') && - qbs.toolchain && qbs.toolchain.contains('gcc') + condition: qbs.targetOS.includes('tvos') && + qbs.toolchain && qbs.toolchain.includes('gcc') targetSystem: "tvos" + (minimumTvosVersion || "") minimumDarwinVersion: minimumTvosVersion - minimumDarwinVersionCompilerFlag: qbs.targetOS.contains("tvos-simulator") + minimumDarwinVersionCompilerFlag: qbs.targetOS.includes("tvos-simulator") ? "-mtvos-simulator-version-min" : "-mtvos-version-min" - minimumDarwinVersionLinkerFlag: qbs.targetOS.contains("tvos-simulator") + minimumDarwinVersionLinkerFlag: qbs.targetOS.includes("tvos-simulator") ? "-tvos_simulator_version_min" : "-tvos_version_min" } diff --git a/share/qbs/modules/cpp/watchos-gcc.qbs b/share/qbs/modules/cpp/watchos-gcc.qbs index 46e4bf874..3a160f6d0 100644 --- a/share/qbs/modules/cpp/watchos-gcc.qbs +++ b/share/qbs/modules/cpp/watchos-gcc.qbs @@ -31,16 +31,16 @@ DarwinGCC { priority: 1 - condition: qbs.targetOS.contains('watchos') && - qbs.toolchain && qbs.toolchain.contains('gcc') + condition: qbs.targetOS.includes('watchos') && + qbs.toolchain && qbs.toolchain.includes('gcc') targetSystem: "watchos" + (minimumWatchosVersion || "") minimumDarwinVersion: minimumWatchosVersion - minimumDarwinVersionCompilerFlag: qbs.targetOS.contains("watchos-simulator") + minimumDarwinVersionCompilerFlag: qbs.targetOS.includes("watchos-simulator") ? "-mwatchos-simulator-version-min" : "-mwatchos-version-min" - minimumDarwinVersionLinkerFlag: qbs.targetOS.contains("watchos-simulator") + minimumDarwinVersionLinkerFlag: qbs.targetOS.includes("watchos-simulator") ? "-watchos_simulator_version_min" : "-watchos_version_min" } diff --git a/share/qbs/modules/cpp/watcom.js b/share/qbs/modules/cpp/watcom.js index 005780c7d..9ae893db9 100644 --- a/share/qbs/modules/cpp/watcom.js +++ b/share/qbs/modules/cpp/watcom.js @@ -81,11 +81,11 @@ function targetFlag(platform, architecture, type) { return "-bos2v2"; } else if (platform === "windows") { if (architecture === "x86_16") { - if (type.contains("dynamiclibrary")) + if (type.includes("dynamiclibrary")) return "-bwindows_dll"; return "-bwindows"; } else if (architecture === "x86") { - if (type.contains("dynamiclibrary")) + if (type.includes("dynamiclibrary")) return "-bnt_dll"; return "-bnt"; } @@ -130,9 +130,9 @@ function guessEnvironment(hostOs, platform, architecture, setVariable("WATCOM", [toolchainRootPath], undefined, pathListSeparator); setVariable("EDPATH", ["eddat"], toolchainRootPath, pathListSeparator); - if (hostOs.contains("linux")) + if (hostOs.includes("linux")) setVariable("PATH", ["binl64", "binl"], toolchainRootPath, pathListSeparator); - else if (hostOs.contains("windows")) + else if (hostOs.includes("windows")) setVariable("PATH", ["binnt64", "binnt"], toolchainRootPath, pathListSeparator); if (platform === "linux") { @@ -311,12 +311,12 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { product.type); args.push(target); - if (product.type.contains("application")) { + if (product.type.includes("application")) { if (product.qbs.targetPlatform === "windows") { var consoleApplication = product.consoleApplication; args.push(consoleApplication ? "-mconsole" : "-mwindows"); } - } else if (product.type.contains("dynamiclibrary")) { + } else if (product.type.includes("dynamiclibrary")) { args.push("-shared"); } @@ -423,11 +423,11 @@ function linkerFlags(project, product, inputs, outputs) { product.type); args.push(target); - if (product.type.contains("application")) { + if (product.type.includes("application")) { args.push("-o", FileInfo.toNativeSeparators(outputs.application[0].filePath)); if (product.cpp.generateLinkerMapFile) args.push("-fm=" + FileInfo.toNativeSeparators(outputs.mem_map[0].filePath)); - } else if (product.type.contains("dynamiclibrary")) { + } else if (product.type.includes("dynamiclibrary")) { if (product.qbs.targetPlatform === "windows") { args.push("-Wl, option implib=" + FileInfo.toNativeSeparators( outputs.dynamiclibrary_import[0].filePath)); diff --git a/share/qbs/modules/cpp/watcom.qbs b/share/qbs/modules/cpp/watcom.qbs index eed63692c..84157b67b 100644 --- a/share/qbs/modules/cpp/watcom.qbs +++ b/share/qbs/modules/cpp/watcom.qbs @@ -37,7 +37,7 @@ import "cpp.js" as Cpp import "watcom.js" as WATCOM CppModule { - condition: qbs.toolchain && qbs.toolchain.contains("watcom") + condition: qbs.toolchain && qbs.toolchain.includes("watcom") Probes.BinaryProbe { id: compilerPathProbe @@ -170,7 +170,7 @@ CppModule { Rule { id: dynamicLibraryLinker - condition: qbs.targetOS.contains("windows") + condition: qbs.targetOS.includes("windows") multiplex: true inputs: ["obj", "res"] inputsFromDependencies: ["staticlibrary", "dynamiclibrary_import"] diff --git a/share/qbs/modules/cpp/windows-clang-cl.qbs b/share/qbs/modules/cpp/windows-clang-cl.qbs index cc58097f6..9aa9d7395 100644 --- a/share/qbs/modules/cpp/windows-clang-cl.qbs +++ b/share/qbs/modules/cpp/windows-clang-cl.qbs @@ -35,9 +35,9 @@ import qbs.FileInfo import 'windows-msvc-base.qbs' as MsvcBaseModule MsvcBaseModule { - condition: Host.os().contains('windows') && - qbs.targetOS.contains('windows') && - qbs.toolchain && qbs.toolchain.contains('clang-cl') + condition: Host.os().includes('windows') && + qbs.targetOS.includes('windows') && + qbs.toolchain && qbs.toolchain.includes('clang-cl') priority: 100 Probes.ClangClBinaryProbe { @@ -85,14 +85,17 @@ MsvcBaseModule { linkerName: "lld-link.exe" linkerPath: FileInfo.joinPaths(toolchainInstallPath, linkerName) + systemIncludeFlag: "/imsvc" + validateFunc: { + var baseFunc = base; return function() { if (_skipAllChecks) return; var validator = new ModUtils.PropertyValidator("cpp"); validator.setRequiredProperty("vcvarsallPath", vcvarsallPath); validator.validate(); - base(); + baseFunc(); } } } diff --git a/share/qbs/modules/cpp/windows-clang-mingw.qbs b/share/qbs/modules/cpp/windows-clang-mingw.qbs index b5bac0572..cfe6f2745 100644 --- a/share/qbs/modules/cpp/windows-clang-mingw.qbs +++ b/share/qbs/modules/cpp/windows-clang-mingw.qbs @@ -38,8 +38,8 @@ import "msvc.js" as MSVC import "setuprunenv.js" as SetupRunEnv MingwBaseModule { - condition: qbs.targetOS.contains("windows") && - qbs.toolchain && qbs.toolchain.contains("clang") + condition: qbs.targetOS.includes("windows") && + qbs.toolchain && qbs.toolchain.includes("clang") priority: 0 // llvm-as and llvm-objopy are not shipped with the official binaries on Windows at the @@ -69,7 +69,7 @@ MingwBaseModule { "llvm-rc" + compilerExtension) setupBuildEnvironment: { - if (Host.os().contains("windows") && product.qbs.sysroot) { + if (Host.os().includes("windows") && product.qbs.sysroot) { var v = new ModUtils.EnvironmentVariable("PATH", FileInfo.pathListSeparator(), true); v.prepend(FileInfo.joinPaths(product.qbs.sysroot, "bin")); v.set(); @@ -77,7 +77,7 @@ MingwBaseModule { } setupRunEnvironment: { - if (Host.os().contains("windows") && product.qbs.sysroot) { + if (Host.os().includes("windows") && product.qbs.sysroot) { var v = new ModUtils.EnvironmentVariable("PATH", FileInfo.pathListSeparator(), true); v.prepend(FileInfo.joinPaths(product.qbs.sysroot, "bin")); v.set(); diff --git a/share/qbs/modules/cpp/windows-mingw.qbs b/share/qbs/modules/cpp/windows-mingw.qbs index 4c20eda5f..9ba4258c5 100644 --- a/share/qbs/modules/cpp/windows-mingw.qbs +++ b/share/qbs/modules/cpp/windows-mingw.qbs @@ -37,8 +37,8 @@ import 'cpp.js' as Cpp import "setuprunenv.js" as SetupRunEnv MingwBaseModule { - condition: qbs.targetOS.contains("windows") && - qbs.toolchain && qbs.toolchain.contains("mingw") + condition: qbs.targetOS.includes("windows") && + qbs.toolchain && qbs.toolchain.includes("mingw") priority: 0 probeEnv: buildEnv diff --git a/share/qbs/modules/cpp/windows-msvc-base.qbs b/share/qbs/modules/cpp/windows-msvc-base.qbs index d188d53f3..9613800e5 100644 --- a/share/qbs/modules/cpp/windows-msvc-base.qbs +++ b/share/qbs/modules/cpp/windows-msvc-base.qbs @@ -95,7 +95,7 @@ CppModule { precompiledHeaderSuffix: ".pch" imageFormat: "pe" Properties { - condition: product.multiplexByQbsProperties.contains("buildVariants") + condition: product.multiplexByQbsProperties.includes("buildVariants") && qbs.buildVariants && qbs.buildVariants.length > 1 && qbs.buildVariant !== "release" && product.type.containsAny(["staticlibrary", "dynamiclibrary"]) @@ -320,12 +320,11 @@ CppModule { outputFileTags: Cpp.assemblerOutputTags(false) outputArtifacts: Cpp.assemblerOutputArtifacts(input) prepare: { - var args = ["/nologo", "/c", - "/Fo" + FileInfo.toWindowsSeparators(output.filePath), - FileInfo.toWindowsSeparators(input.filePath)]; + var args = ["/nologo", "/c", "/Fo" + FileInfo.toWindowsSeparators(output.filePath)]; if (product.cpp.debugInformation) args.push("/Zi"); args = args.concat(Cpp.collectMiscAssemblerArguments(input, "asm")); + args.push(FileInfo.toWindowsSeparators(input.filePath)); var cmd = new Command(product.cpp.assemblerPath, args); cmd.description = "assembling " + input.fileName; cmd.jobPool = "assembler"; diff --git a/share/qbs/modules/cpp/windows-msvc.qbs b/share/qbs/modules/cpp/windows-msvc.qbs index a57c4cc5a..c30cec239 100644 --- a/share/qbs/modules/cpp/windows-msvc.qbs +++ b/share/qbs/modules/cpp/windows-msvc.qbs @@ -34,9 +34,9 @@ import qbs.Probes import "windows-msvc-base.qbs" as MsvcBaseModule MsvcBaseModule { - condition: Host.os().contains('windows') && - qbs.targetOS.contains('windows') && - qbs.toolchain && qbs.toolchain.contains('msvc') + condition: Host.os().includes('windows') && + qbs.targetOS.includes('windows') && + qbs.toolchain && qbs.toolchain.includes('msvc') priority: 50 Probes.ClBinaryProbe { |