Hi all, I have a project with some rules: 'producer' and 'consumer',
The 'producer' generates an artifact with the JSON file, and the 'consumer' receive this artifact on input and does trying to read content of this JSON file. BUT: The consumer always reads an empty content, even the file exists and is not empty. == Producer == Rule { //alwaysRun: true multiplex: true inputs: ["rwwcoreapp", "nrwwcoreapp", "mergedcoreapp"] Artifact { fileTags: ["firmwarebin"] filePath: product.targetName + ".bin" } Artifact { fileTags: ["firmwarecrc"] filePath: "crcs.json" } prepare: { var cmd = new JavaScriptCommand(); cmd.workingDirectory = product.buildDirectory cmd.patcher = project.sourceDirectory + "/tools/patcher.exe"; cmd.outputFirmwareFilePath = outputs["firmwarebin"][0].filePath; cmd.outputCrcFilePath = outputs["firmwarecrc"][0].filePath; cmd.inputMergedFilePaths = inputs["mergedcoreapp"].map(function(a) { return a.filePath; }).sort(); cmd.inputRwwFilePaths = inputs["rwwcoreapp"].map(function(a) { return a.filePath; }).sort(); cmd.inputNrwwFilePaths = inputs["nrwwcoreapp"].map(function(a) { return a.filePath; }).sort(); cmd.crcSize = 2; cmd.sourceCode = function() { var p = new Process(); p.setWorkingDirectory(workingDirectory); // TODO: Make it more good!! var crcStarts = [ 0x1EBFE, 0x1F3FE ]; var crcEnds = [ 0x1EBFE + crcSize, 0x1F3FE + crcSize ]; var crcConfigs = { }; crcConfigs["crcs"] = []; // Patch each of NRWW file. for (var i = 0; i < inputMergedFilePaths.length; ++i) { var args = [ // Some arguments ]; var crcValue = p.exec(patcher, args, false); var startOffset = crcStarts[i]; var endOffset = crcEnds[i]; var crcConfig = {}; crcConfig["crcValue"] = crcValue; crcConfig["startOffset"] = startOffset; crcConfig["endOffset"] = endOffset; crcConfigs["crcs"].push(crcConfig); } // Generate JSON file. var tf = new TextFile(outputCrcFilePath, TextFile.WriteOnly); tf.writeLine(JSON.stringify(crcConfigs, undefined, 4)); // Generate final binary firmware. var args = [ "/C", "copy", "/b" ]; for (var i = 0; i < inputRwwFilePaths.length; ++i) { args.push(FileInfo.toWindowsSeparators(inputRwwFilePaths[i])); args.push("+"); args.push(FileInfo.toWindowsSeparators(inputNrwwFilePaths[i])); if (i < (inputRwwFilePaths.length - 1)) args.push("+"); } args.push(FileInfo.toWindowsSeparators(outputFirmwareFilePath)); p.exec("cmd.exe", args, true); } cmd.description = "generating " + FileInfo.fileName(cmd.outputFirmwareFilePath); return cmd; } } == Consumer== Rule { //alwaysRun: true multiplex: true inputs: ["firmwarecrc"] inputsFromDependencies: ["hex", "firmwarecrc"] explicitlyDependsOn: ["firmwarecrc"] Artifact { fileTags: ["firmwarehex"] filePath: product.targetName + ".hex" } prepare: { var cmd = new JavaScriptCommand(); cmd.workingDirectory = product.buildDirectory cmd.sreccat = project.sourceDirectory + "/tools/srec_cat.exe"; cmd.inputCrcFilePath = inputs["firmwarecrc"][0].filePath; cmd.inputHexFilePaths = inputs["hex"].map(function(a) { return a.filePath; }).sort(); cmd.outputFirmwareFilePath = outputs["firmwarehex"][0].filePath; cmd.description = "generating " + FileInfo.fileName(cmd.outputFirmwareFilePath); cmd.sourceCode = function() { var p = new Process(); p.setWorkingDirectory(workingDirectory); // Merge all hex files to one. var srecArgs = []; for (var i = 0; i < inputHexFilePaths.length; ++i) { srecArgs.push(inputHexFilePaths[i]); srecArgs.push("-I"); } srecArgs.push("-o"); srecArgs.push(outputFirmwareFilePath); srecArgs.push("-I"); p.exec(sreccat, srecArgs, true); // Add crc var tf = new TextFile(inputCrcFilePath, TextFile.ReadOnly); var content = tf.readAll(); console.info("tf: " + inputCrcFilePath + ", content : " + content); //var crcs = JSON.parse(tf.readAll())["crcs"]; } return cmd; } } I had tries to add the 'firmwarecrc' target to inputsFromDependencies, and to explicitlyDependsOn .. *But, it does not help... What's wrong?* BR, Denis
_______________________________________________ Qbs mailing list Qbs@qt-project.org http://lists.qt-project.org/mailman/listinfo/qbs