aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-10-08 12:26:24 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-10-08 12:26:24 +0200
commitc84f4c258ef91c76e19198d7eeb64291d0171938 (patch)
treecae0c810b276483edeef26baf71bd38a92a0a2a9
parentf69cd3ef989b77fce08a421190c549c4341f1e02 (diff)
parentad11bb7383bf730ca0241af24a8b4179af157c7f (diff)
Merge 1.14 into master
-rw-r--r--share/qbs/imports/qbs/DarwinTools/darwin-tools.js31
-rw-r--r--share/qbs/modules/bundle/BundleModule.qbs6
-rw-r--r--share/qbs/modules/cpp/keil.js49
-rw-r--r--share/qbs/modules/cpp/keil.qbs62
-rw-r--r--share/qbs/modules/cpp/sdcc.js110
-rw-r--r--share/qbs/modules/cpp/sdcc.qbs57
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp3
7 files changed, 192 insertions, 126 deletions
diff --git a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
index 889720fcd..5f9076004 100644
--- a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
+++ b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
@@ -162,17 +162,17 @@ var PropertyListVariableExpander = (function () {
* Finds the first index of a replacement starting with one of the supported syntaxes
* This is needed so we don't do recursive substitutions
*/
- function indexOfReplacementStart(syntaxes, str, offset) {
+ function indexOfReplacementStart(syntaxes, str) {
var syntax;
- var idx = str.length;
+ var idx = -1;
for (var i in syntaxes) {
- var j = str.indexOf(syntaxes[i].open, offset);
- if (j !== -1 && j < idx) {
+ var j = str.lastIndexOf(syntaxes[i].open);
+ if (j > idx) {
syntax = syntaxes[i];
idx = j;
}
}
- return { "syntax": syntax, "index": idx === str.length ? -1 : idx };
+ return { "syntax": syntax, "index": idx };
}
function expandRecursive(obj, env, checked) {
@@ -202,19 +202,16 @@ var PropertyListVariableExpander = (function () {
// skip replacement
if ($this.undefinedVariableFunction)
$this.undefinedVariableFunction(key, varName);
- i = j + repl.syntax.close.length;
- } else {
- changes = true;
- varValue = String(varValue);
- if (varFormatter !== undefined)
- varFormatter = varFormatter.toLowerCase();
- if (varFormatter === "rfc1034identifier")
- varValue = Utilities.rfc1034Identifier(varValue);
- value = value.slice(0, i) + varValue + value.slice(j + repl.syntax.close.length);
- // avoid recursive substitutions to avoid potentially infinite loops
- i += varValue.length;
+ varValue = "";
}
- repl = indexOfReplacementStart(syntaxes, value, i);
+ varValue = String(varValue);
+ if (varFormatter !== undefined)
+ varFormatter = varFormatter.toLowerCase();
+ if (varFormatter === "rfc1034identifier")
+ varValue = Utilities.rfc1034Identifier(varValue);
+ value = value.slice(0, i) + varValue + value.slice(j + repl.syntax.close.length);
+ changes = true;
+ repl = indexOfReplacementStart(syntaxes, value);
i = repl.index;
}
if (changes)
diff --git a/share/qbs/modules/bundle/BundleModule.qbs b/share/qbs/modules/bundle/BundleModule.qbs
index f1845fe30..1e83dc458 100644
--- a/share/qbs/modules/bundle/BundleModule.qbs
+++ b/share/qbs/modules/bundle/BundleModule.qbs
@@ -63,9 +63,13 @@ Module {
"GENERATE_PKGINFO_FILE": generatePackageInfo !== undefined
? (generatePackageInfo ? "YES" : "NO")
: undefined,
+ "IS_MACCATALYST": "NO",
+ "LD_RUNPATH_SEARCH_PATHS_NO": [],
"PRODUCT_NAME": product.targetName,
"LOCAL_APPS_DIR": Environment.getEnv("HOME") + "/Applications",
"LOCAL_LIBRARY_DIR": Environment.getEnv("HOME") + "/Library",
+ "SWIFT_PLATFORM_TARGET_PREFIX": isMacOs ? "macos"
+ : qbs.targetOS.contains("ios") ? "ios" : "",
"TARGET_BUILD_DIR": product.buildDirectory,
"WRAPPER_NAME": bundleName,
"WRAPPER_EXTENSION": extension
@@ -427,7 +431,7 @@ Module {
|| {};
for (key in partialInfoPlist) {
if (partialInfoPlist.hasOwnProperty(key)
- && !aggregatePlist.hasOwnProperty(key))
+ && aggregatePlist[key] === undefined)
aggregatePlist[key] = partialInfoPlist[key];
}
}
diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js
index fc485373b..ceee3f0d2 100644
--- a/share/qbs/modules/cpp/keil.js
+++ b/share/qbs/modules/cpp/keil.js
@@ -33,6 +33,7 @@ var Environment = require("qbs.Environment");
var File = require("qbs.File");
var FileInfo = require("qbs.FileInfo");
var ModUtils = require("qbs.ModUtils");
+var PathTools = require("qbs.PathTools");
var Process = require("qbs.Process");
var TemporaryDir = require("qbs.TemporaryDir");
var TextFile = require("qbs.TextFile");
@@ -322,6 +323,51 @@ function filterStdOutput(cmd) {
};
}
+function compilerOutputArtifacts(input) {
+ var obj = {
+ fileTags: ["obj"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + input.cpp.objectSuffix
+ };
+ return [obj];
+}
+
+function applicationLinkerOutputArtifacts(product) {
+ var app = {
+ fileTags: ["application"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ PathTools.applicationFilePath(product))
+ };
+ var mem_map = {
+ fileTags: ["mem_map"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName
+ + (product.cpp.architecture === "mcs51" ? ".m51" : ".map"))
+ };
+ var artifacts = [app, mem_map];
+ if (product.cpp.generateLinkerMapFile) {
+ artifacts.push({
+ fileTags: ["map_file"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName + ".map")
+ });
+ }
+ return artifacts;
+}
+
+function staticLibraryLinkerOutputArtifacts(product) {
+ var staticLib = {
+ fileTags: ["staticlibrary"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ PathTools.staticLibraryFilePath(product))
+ };
+ return [staticLib]
+}
+
function compilerFlags(project, product, input, output, explicitlyDependsOn) {
// Determine which C-language we're compiling.
var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags));
@@ -614,6 +660,9 @@ function linkerFlags(project, product, input, outputs) {
// Output.
args.push("--output", outputs.application[0].filePath);
+ if (product.cpp.generateMapFile)
+ args.push("--list", outputs.mem_map[0].filePath);
+
// Library paths.
var libraryPaths = product.cpp.libraryPaths;
if (libraryPaths)
diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs
index 75eb323e3..1a1792118 100644
--- a/share/qbs/modules/cpp/keil.qbs
+++ b/share/qbs/modules/cpp/keil.qbs
@@ -32,9 +32,7 @@ import qbs 1.0
import qbs.File
import qbs.FileInfo
import qbs.ModUtils
-import qbs.PathTools
import qbs.Probes
-import qbs.Utilities
import "keil.js" as KEIL
CppModule {
@@ -99,18 +97,20 @@ CppModule {
Rule {
id: assembler
inputs: ["asm"]
-
- Artifact {
- fileTags: ["obj"]
- filePath: Utilities.getHash(input.baseDir) + "/"
- + input.fileName + input.cpp.objectSuffix
- }
-
+ outputFileTags: ["obj"]
+ outputArtifacts: KEIL.compilerOutputArtifacts(input)
prepare: KEIL.prepareAssembler.apply(KEIL, arguments)
}
FileTagger {
- patterns: ["*.s", "*.a51", ".asm"]
+ condition: qbs.architecture === "mcs51";
+ patterns: ["*.a51", "*.A51"]
+ fileTags: ["asm"]
+ }
+
+ FileTagger {
+ condition: qbs.architecture === "arm";
+ patterns: ["*.s", ".asm"]
fileTags: ["asm"]
}
@@ -118,13 +118,8 @@ CppModule {
id: compiler
inputs: ["cpp", "c"]
auxiliaryInputs: ["hpp"]
-
- Artifact {
- fileTags: ["obj"]
- filePath: Utilities.getHash(input.baseDir) + "/"
- + input.fileName + input.cpp.objectSuffix
- }
-
+ outputFileTags: ["obj"]
+ outputArtifacts: KEIL.compilerOutputArtifacts(input)
prepare: KEIL.prepareCompiler.apply(KEIL, arguments)
}
@@ -132,32 +127,13 @@ CppModule {
id: applicationLinker
multiplex: true
inputs: ["obj", "linkerscript"]
-
outputFileTags: {
- var tags = ["application"];
+ var tags = ["application", "mem_map"];
if (product.moduleProperty("cpp", "generateLinkerMapFile"))
tags.push("map_file");
return tags;
}
- outputArtifacts: {
- var app = {
- fileTags: ["application"],
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- PathTools.applicationFilePath(product))
- };
- var artifacts = [app];
- if (product.cpp.generateLinkerMapFile) {
- artifacts.push({
- fileTags: ["map_file"],
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- product.targetName + ".map")
- });
- }
- return artifacts;
- }
-
+ outputArtifacts: KEIL.applicationLinkerOutputArtifacts(product)
prepare: KEIL.prepareLinker.apply(KEIL, arguments)
}
@@ -166,14 +142,8 @@ CppModule {
multiplex: true
inputs: ["obj"]
inputsFromDependencies: ["staticlibrary"]
-
- Artifact {
- fileTags: ["staticlibrary"]
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- PathTools.staticLibraryFilePath(product))
- }
-
+ outputFileTags: ["staticlibrary"]
+ outputArtifacts: KEIL.staticLibraryLinkerOutputArtifacts(product)
prepare: KEIL.prepareArchiver.apply(KEIL, arguments)
}
}
diff --git a/share/qbs/modules/cpp/sdcc.js b/share/qbs/modules/cpp/sdcc.js
index cc76d4ebd..0d656ef17 100644
--- a/share/qbs/modules/cpp/sdcc.js
+++ b/share/qbs/modules/cpp/sdcc.js
@@ -33,6 +33,7 @@ var Environment = require("qbs.Environment");
var File = require("qbs.File");
var FileInfo = require("qbs.FileInfo");
var ModUtils = require("qbs.ModUtils");
+var PathTools = require("qbs.PathTools");
var Process = require("qbs.Process");
var TemporaryDir = require("qbs.TemporaryDir");
var TextFile = require("qbs.TextFile");
@@ -217,9 +218,90 @@ function collectLibraryDependencies(product) {
return result;
}
-function compilerFlags(project, product, input, output, explicitlyDependsOn) {
+function compilerOutputArtifacts(input) {
+ var obj = {
+ fileTags: ["obj"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + input.cpp.objectSuffix
+ };
+ var asm_adb = {
+ fileTags: ["asm_adb"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + ".adb"
+ };
+ var asm_lst = {
+ fileTags: ["asm_lst"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + ".lst"
+ };
+ var asm_src = {
+ fileTags: ["asm_src"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + ".asm"
+ };
+ var asm_sym = {
+ fileTags: ["asm_sym"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + ".sym"
+ };
+ var rst_data = {
+ fileTags: ["rst_data"],
+ filePath: Utilities.getHash(input.baseDir) + "/"
+ + input.fileName + ".rst"
+ };
+ return [obj, asm_adb, asm_lst, asm_src, asm_sym, rst_data];
+}
+
+function applicationLinkerOutputArtifacts(product) {
+ var app = {
+ fileTags: ["application"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ PathTools.applicationFilePath(product))
+ };
+ var lk_cmd = {
+ fileTags: ["lk_cmd"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName + ".lk")
+ };
+ var mem_summary = {
+ fileTags: ["mem_summary"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName + ".mem")
+ };
+ var mem_map = {
+ fileTags: ["mem_map"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName + ".map")
+ };
+ var artifacts = [app, lk_cmd, mem_summary, mem_map];
+ if (product.cpp.generateLinkerMapFile) {
+ artifacts.push({
+ fileTags: ["map_file"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ product.targetName + ".map")
+ });
+ }
+ return artifacts;
+}
+
+function staticLibraryLinkerOutputArtifacts(product) {
+ var staticLib = {
+ fileTags: ["staticlibrary"],
+ filePath: FileInfo.joinPaths(
+ product.destinationDirectory,
+ PathTools.staticLibraryFilePath(product))
+ };
+ return [staticLib]
+}
+
+function compilerFlags(project, product, input, outputs, explicitlyDependsOn) {
// Determine which C-language we"re compiling.
- var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags));
+ var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(outputs.obj[0].fileTags));
var args = [];
@@ -228,7 +310,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) {
// Output.
args.push("-c");
- args.push("-o", output.filePath);
+ args.push("-o", outputs.obj[0].filePath);
// Defines.
var allDefines = [];
@@ -305,18 +387,12 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) {
return args;
}
-function assemblerFlags(project, product, input, output, explicitlyDependsOn) {
+function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) {
// Determine which C-language we"re compiling
- var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags));
+ var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(outputs.obj[0].fileTags));
var args = [];
- // Input.
- args.push(input.filePath);
-
- // Output.
- args.push("-o", output.filePath);
-
// Includes.
var allIncludePaths = [];
var systemIncludePaths = input.cpp.systemIncludePaths;
@@ -331,6 +407,10 @@ function assemblerFlags(project, product, input, output, explicitlyDependsOn) {
args = args.concat(ModUtils.moduleProperty(input, "platformFlags", tag),
ModUtils.moduleProperty(input, "flags", tag),
ModUtils.moduleProperty(input, "driverFlags", tag));
+
+ args.push("-ol");
+ args.push(outputs.obj[0].filePath);
+ args.push(input.filePath);
return args;
}
@@ -407,7 +487,9 @@ function linkerFlags(project, product, input, outputs) {
var escapedLinkerFlags = escapeLinkerFlags(product, escapableLinkerFlags);
if (escapedLinkerFlags)
Array.prototype.push.apply(args, escapedLinkerFlags);
-
+ var driverLinkerFlags = useCompilerDriver ? product.cpp.driverLinkerFlags : undefined;
+ if (driverLinkerFlags)
+ Array.prototype.push.apply(args, driverLinkerFlags);
return args;
}
@@ -420,7 +502,7 @@ function archiverFlags(project, product, input, outputs) {
}
function prepareCompiler(project, product, inputs, outputs, input, output, explicitlyDependsOn) {
- var args = compilerFlags(project, product, input, output, explicitlyDependsOn);
+ var args = compilerFlags(project, product, input, outputs, explicitlyDependsOn);
var compilerPath = input.cpp.compilerPath;
var cmd = new Command(compilerPath, args);
cmd.description = "compiling " + input.fileName;
@@ -429,7 +511,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli
}
function prepareAssembler(project, product, inputs, outputs, input, output, explicitlyDependsOn) {
- var args = assemblerFlags(project, product, input, output, explicitlyDependsOn);
+ var args = assemblerFlags(project, product, input, outputs, explicitlyDependsOn);
var assemblerPath = input.cpp.assemblerPath;
var cmd = new Command(assemblerPath, args);
cmd.description = "assembling " + input.fileName;
diff --git a/share/qbs/modules/cpp/sdcc.qbs b/share/qbs/modules/cpp/sdcc.qbs
index 6bcbc2580..e4a040439 100644
--- a/share/qbs/modules/cpp/sdcc.qbs
+++ b/share/qbs/modules/cpp/sdcc.qbs
@@ -32,9 +32,7 @@ import qbs 1.0
import qbs.File
import qbs.FileInfo
import qbs.ModUtils
-import qbs.PathTools
import qbs.Probes
-import qbs.Utilities
import "sdcc.js" as SDCC
CppModule {
@@ -101,14 +99,9 @@ CppModule {
Rule {
id: assembler
inputs: ["asm"]
-
- Artifact {
- fileTags: ["obj"]
- filePath: Utilities.getHash(input.baseDir) + "/"
- + input.fileName + input.cpp.objectSuffix
- }
-
- prepare: SDCC.prepareAssembler.apply(SDCC, arguments)
+ outputFileTags: ["obj", "asm_adb", "asm_lst", "asm_src", "asm_sym", "rst_data"]
+ outputArtifacts: SDCC.compilerOutputArtifacts(input)
+ prepare: SDCC.prepareAssembler.apply(SDCC, arguments);
}
FileTagger {
@@ -127,13 +120,8 @@ CppModule {
id: compiler
inputs: ["cpp", "c"]
auxiliaryInputs: ["hpp"]
-
- Artifact {
- fileTags: ["obj"]
- filePath: Utilities.getHash(input.baseDir) + "/"
- + input.fileName + input.cpp.objectSuffix
- }
-
+ outputFileTags: ["obj", "asm_adb", "asm_lst", "asm_src", "asm_sym", "rst_data"]
+ outputArtifacts: SDCC.compilerOutputArtifacts(input)
prepare: SDCC.prepareCompiler.apply(SDCC, arguments)
}
@@ -142,33 +130,14 @@ CppModule {
multiplex: true
inputs: ["obj", "linkerscript"]
inputsFromDependencies: ["staticlibrary"]
-
outputFileTags: {
- var tags = ["application"];
+ var tags = ["application", "lk_cmd", "mem_summary", "mem_map"];
if (product.moduleProperty("cpp", "generateLinkerMapFile"))
tags.push("map_file");
return tags;
}
- outputArtifacts: {
- var app = {
- fileTags: ["application"],
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- PathTools.applicationFilePath(product))
- };
- var artifacts = [app];
- if (product.cpp.generateLinkerMapFile) {
- artifacts.push({
- fileTags: ["map_file"],
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- product.targetName + ".map")
- });
- }
- return artifacts;
- }
-
- prepare: SDCC.prepareLinker.apply(SDCC, arguments)
+ outputArtifacts: SDCC.applicationLinkerOutputArtifacts(product)
+ prepare:SDCC.prepareLinker.apply(SDCC, arguments)
}
Rule {
@@ -176,14 +145,8 @@ CppModule {
multiplex: true
inputs: ["obj"]
inputsFromDependencies: ["staticlibrary"]
-
- Artifact {
- fileTags: ["staticlibrary"]
- filePath: FileInfo.joinPaths(
- product.destinationDirectory,
- PathTools.staticLibraryFilePath(product))
- }
-
+ outputFileTags: ["staticlibrary"]
+ outputArtifacts: SDCC.staticLibraryLinkerOutputArtifacts(product)
prepare: SDCC.prepareArchiver.apply(SDCC, arguments)
}
}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 3a90d8ccb..dd877637e 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -4267,7 +4267,8 @@ void TestBlackbox::symbolLinkMode()
rmDirR(relativeBuildDir());
params.arguments = QStringList() << commonArgs << "project.lazy:true";
QCOMPARE(runQbs(params), 0);
- QVERIFY2(m_qbsStdout.contains("meow\nLib was loaded!\n"), m_qbsStdout.constData());
+ QVERIFY2(m_qbsStdout.contains("meow\n") && m_qbsStdout.contains("Lib was loaded!\n"),
+ m_qbsStdout.constData());
}
}