aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/corelib/buildgraph/processcommandexecutor.cpp4
-rw-r--r--tests/auto/blackbox/testdata/output-redirection/input.binbin0 -> 1024 bytes
-rw-r--r--tests/auto/blackbox/testdata/output-redirection/input.txt1
-rw-r--r--tests/auto/blackbox/testdata/output-redirection/output-redirection.qbs38
-rw-r--r--tests/auto/blackbox/testdata/output-redirection/output.binbin0 -> 2048 bytes
-rw-r--r--tests/auto/blackbox/testdata/output-redirection/output.txt2
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp8
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
8 files changed, 53 insertions, 1 deletions
diff --git a/src/lib/corelib/buildgraph/processcommandexecutor.cpp b/src/lib/corelib/buildgraph/processcommandexecutor.cpp
index c34a734b4..c4e4a2be6 100644
--- a/src/lib/corelib/buildgraph/processcommandexecutor.cpp
+++ b/src/lib/corelib/buildgraph/processcommandexecutor.cpp
@@ -274,7 +274,9 @@ void ProcessCommandExecutor::getProcessOutput(bool stdOut, ProcessResult &result
}
QString contentString = filterProcessOutput(content, filterFunction);
if (!redirectPath.isEmpty()) {
- const QProcess::ProcessError error = saveToFile(redirectPath, contentString.toLocal8Bit());
+ const QByteArray dataToWrite = filterFunction.isEmpty() ? content
+ : contentString.toLocal8Bit();
+ const QProcess::ProcessError error = saveToFile(redirectPath, dataToWrite);
if (result.error() == QProcess::UnknownError && error != QProcess::UnknownError)
result.d->error = error;
} else {
diff --git a/tests/auto/blackbox/testdata/output-redirection/input.bin b/tests/auto/blackbox/testdata/output-redirection/input.bin
new file mode 100644
index 000000000..2b231c7a8
--- /dev/null
+++ b/tests/auto/blackbox/testdata/output-redirection/input.bin
Binary files differ
diff --git a/tests/auto/blackbox/testdata/output-redirection/input.txt b/tests/auto/blackbox/testdata/output-redirection/input.txt
new file mode 100644
index 000000000..0ba7b6bf7
--- /dev/null
+++ b/tests/auto/blackbox/testdata/output-redirection/input.txt
@@ -0,0 +1 @@
+this is a plain text file
diff --git a/tests/auto/blackbox/testdata/output-redirection/output-redirection.qbs b/tests/auto/blackbox/testdata/output-redirection/output-redirection.qbs
new file mode 100644
index 000000000..3ee443438
--- /dev/null
+++ b/tests/auto/blackbox/testdata/output-redirection/output-redirection.qbs
@@ -0,0 +1,38 @@
+import qbs.FileInfo
+
+Product {
+ name: "the-product"
+ type: "output"
+ Group {
+ files: "input.bin"
+ fileTags: "binary"
+ }
+ Group {
+ files: "input.txt"
+ fileTags: "text"
+ }
+
+ Rule {
+ inputs: ["text", "binary"]
+ Artifact {
+ filePath: "output." + FileInfo.completeSuffix(input.filePath)
+ fileTags: "output"
+ }
+ prepare: {
+ var binary;
+ var prefixArgs;
+ if (product.qbs.hostOS.contains("windows")) {
+ binary = product.qbs.windowsShellPath;
+ prefixArgs = ["/c", "type"];
+ } else {
+ binary = "cat";
+ prefixArgs = [];
+ }
+ var inputPath = FileInfo.toNativeSeparators(input.filePath);
+ var cmd = new Command(binary, prefixArgs.concat([inputPath, inputPath]));
+ cmd.stdoutFilePath = output.filePath;
+ cmd.highlight = "filegen";
+ return cmd;
+ }
+ }
+}
diff --git a/tests/auto/blackbox/testdata/output-redirection/output.bin b/tests/auto/blackbox/testdata/output-redirection/output.bin
new file mode 100644
index 000000000..efb4ec03b
--- /dev/null
+++ b/tests/auto/blackbox/testdata/output-redirection/output.bin
Binary files differ
diff --git a/tests/auto/blackbox/testdata/output-redirection/output.txt b/tests/auto/blackbox/testdata/output-redirection/output.txt
new file mode 100644
index 000000000..e309ab1af
--- /dev/null
+++ b/tests/auto/blackbox/testdata/output-redirection/output.txt
@@ -0,0 +1,2 @@
+this is a plain text file
+this is a plain text file
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index f87889155..19676d050 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -6263,6 +6263,14 @@ void TestBlackbox::outputArtifactAutoTagging()
QVERIFY(regularFileExists(relativeExecutableFilePath("output-artifact-auto-tagging")));
}
+void TestBlackbox::outputRedirection()
+{
+ QDir::setCurrent(testDataDir + "/output-redirection");
+ QCOMPARE(runQbs(), 0);
+ TEXT_FILE_COMPARE("output.txt", relativeProductBuildDir("the-product") + "/output.txt");
+ TEXT_FILE_COMPARE("output.bin", relativeProductBuildDir("the-product") + "/output.bin");
+}
+
void TestBlackbox::wildCardsAndRules()
{
QDir::setCurrent(testDataDir + "/wildcards-and-rules");
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 0a14c418c..959858321 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -206,6 +206,7 @@ private slots:
void nsisDependencies();
void outOfDateMarking();
void outputArtifactAutoTagging();
+ void outputRedirection();
void overrideProjectProperties();
void pathProbe_data();
void pathProbe();