aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-10-17 10:47:06 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-11-07 15:56:33 +0000
commit8ca922793f2a7a10023784d1c18e4b86f552209d (patch)
tree5150fddc8c4fb0e79fc41f65af210feb41a67c38 /tests
parent98e4cef3ea23842d6bceb438e0f1f8285a01d979 (diff)
Enable modules to declare target artifacts
Such artifacts appear to rules just like target artifacts of products. This functionality will be useful for auto-generating qbs modules from products. [ChangeLog] Modules can now declare target artifacts using the new filesAreTargets property of the Group item. Task-number: QBS-882 Change-Id: I3bba000be9a1057d9fef01e5576363719ff1f244 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/api/testdata/tool-in-module/use-outside-project/modules/thetool/thetool.qbs27
-rw-r--r--tests/auto/api/testdata/tool-in-module/use-outside-project/use-outside-project.qbs7
-rw-r--r--tests/auto/api/testdata/tool-in-module/use-within-project/main.cpp10
-rw-r--r--tests/auto/api/testdata/tool-in-module/use-within-project/tool-input.txt0
-rw-r--r--tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs37
-rw-r--r--tests/auto/api/tst_api.cpp33
-rw-r--r--tests/auto/api/tst_api.h1
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs16
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/lib1.cpp7
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/lib2.cpp7
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/lib3.cpp7
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/lib4.cpp8
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/main.cpp13
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thelib/thelib.qbs22
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/modules/theotherlib/theotherlib.qbs22
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thethirdlib/thethirdlib.qbs22
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/theapp.qbs21
-rw-r--r--tests/auto/blackbox/testdata/dynamic-library-in-module/thelibs.qbs16
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp15
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
20 files changed, 292 insertions, 0 deletions
diff --git a/tests/auto/api/testdata/tool-in-module/use-outside-project/modules/thetool/thetool.qbs b/tests/auto/api/testdata/tool-in-module/use-outside-project/modules/thetool/thetool.qbs
new file mode 100644
index 000000000..36c2cbdc7
--- /dev/null
+++ b/tests/auto/api/testdata/tool-in-module/use-outside-project/modules/thetool/thetool.qbs
@@ -0,0 +1,27 @@
+import qbs
+import qbs.FileInfo
+
+Module {
+ Group {
+ name: "thetool binary"
+ files: FileInfo.cleanPath(FileInfo.joinPaths(path, "..", "..",
+ "thetool" + (qbs.hostOS.contains("windows") ? ".exe" : "")));
+ fileTags: ["thetool.thetool"]
+ filesAreTargets: true
+ }
+
+ Rule {
+ multiplex: true
+ explicitlyDependsOn: ["thetool.thetool"]
+ Artifact {
+ filePath: "tool-output.txt"
+ fileTags: ["thetool.output"]
+ }
+ prepare: {
+ var cmd = new Command(explicitlyDependsOn["thetool.thetool"][0].filePath,
+ output.filePath);
+ cmd.description = "running the tool";
+ return [cmd];
+ }
+ }
+}
diff --git a/tests/auto/api/testdata/tool-in-module/use-outside-project/use-outside-project.qbs b/tests/auto/api/testdata/tool-in-module/use-outside-project/use-outside-project.qbs
new file mode 100644
index 000000000..439e68f51
--- /dev/null
+++ b/tests/auto/api/testdata/tool-in-module/use-outside-project/use-outside-project.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+Product {
+ name: "user-outside-project"
+ type: ["thetool.output"]
+ Depends { name: "thetool" }
+}
diff --git a/tests/auto/api/testdata/tool-in-module/use-within-project/main.cpp b/tests/auto/api/testdata/tool-in-module/use-within-project/main.cpp
new file mode 100644
index 000000000..723b8a3bf
--- /dev/null
+++ b/tests/auto/api/testdata/tool-in-module/use-within-project/main.cpp
@@ -0,0 +1,10 @@
+#include <cassert>
+#include <fstream>
+
+int main(int argc, char *argv[])
+{
+ assert(argc == 2);
+ std::ofstream file(argv[1]);
+ assert(file.is_open());
+ file << "content";
+}
diff --git a/tests/auto/api/testdata/tool-in-module/use-within-project/tool-input.txt b/tests/auto/api/testdata/tool-in-module/use-within-project/tool-input.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/api/testdata/tool-in-module/use-within-project/tool-input.txt
diff --git a/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs b/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs
new file mode 100644
index 000000000..ecfef55c3
--- /dev/null
+++ b/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs
@@ -0,0 +1,37 @@
+import qbs
+
+Project {
+ CppApplication {
+ name: "thetool"
+ files: "main.cpp"
+
+ Group {
+ fileTagsFilter: ["application"]
+ fileTags: ["thetool.thetool"]
+ qbs.install: true
+ }
+
+ Export {
+ Rule {
+ multiplex: true
+ explicitlyDependsOn: ["thetool.thetool"]
+ Artifact {
+ filePath: "tool-output.txt"
+ fileTags: ["thetool.output"]
+ }
+ prepare: {
+ var cmd = new Command(explicitlyDependsOn["thetool.thetool"][0].filePath,
+ output.filePath);
+ cmd.description = "running the tool";
+ return [cmd];
+ }
+ }
+ }
+ }
+
+ Product {
+ name: "user-in-project"
+ type: ["thetool.output"]
+ Depends { name: "thetool" }
+ }
+}
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 3229d6c16..6b64bc2ea 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -2629,6 +2629,39 @@ void TestApi::subProjects()
qPrintable(errorInfo.toString()));
}
+void TestApi::toolInModule()
+{
+ QVariantMap overrides({std::make_pair("qbs.installRoot", m_workingDataDir
+ + "/tool-in-module/use-outside-project")});
+ const qbs::ErrorInfo error
+ = doBuildProject("tool-in-module/use-within-project/use-within-project.qbs", nullptr,
+ nullptr, nullptr, qbs::BuildOptions(), overrides);
+ QVERIFY2(!error.hasError(), qPrintable(error.toString()));
+ const QString toolOutput = relativeProductBuildDir("user-in-project") + "/tool-output.txt";
+ QVERIFY2(QFile::exists(toolOutput), qPrintable(toolOutput));
+
+ const qbs::SetupProjectParameters params
+ = defaultSetupParameters("tool-in-module/use-outside-project/use-outside-project.qbs");
+ const std::unique_ptr<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params,
+ m_logSink, 0));
+ QVERIFY(waitForFinished(setupJob.get()));
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+ const qbs::Project project = setupJob->project();
+ const qbs::ProjectData projectData = project.projectData();
+ const QList<qbs::ProductData> products = projectData.products();
+ QCOMPARE(products.count(), 1);
+ const qbs::ProductData product = products.first();
+ for (const qbs::GroupData &group : product.groups())
+ QVERIFY(group.name() != "thetool binary");
+ const std::unique_ptr<qbs::BuildJob> buildJob(setupJob->project()
+ .buildAllProducts(qbs::BuildOptions()));
+ QVERIFY(waitForFinished(buildJob.get()));
+ QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString()));
+ const QString toolOutput2 = relativeProductBuildDir("user-outside-project")
+ + "/tool-output.txt";
+ QVERIFY2(QFile::exists(toolOutput2), qPrintable(toolOutput2));
+}
+
void TestApi::trackAddQObjectHeader()
{
const qbs::SetupProjectParameters params
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index b70c69afb..1bdcdb980 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -136,6 +136,7 @@ private slots:
void softDependency();
void sourceFileInBuildDir();
void subProjects();
+ void toolInModule();
void trackAddQObjectHeader();
void trackRemoveQObjectHeader();
void transformers();
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs
new file mode 100644
index 000000000..0f897df67
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs
@@ -0,0 +1,16 @@
+import qbs
+
+DynamicLibrary {
+ Depends { name: "cpp" }
+ Depends { name: "bundle"; condition: qbs.targetOS.contains("darwin") }
+ Properties {
+ condition: qbs.targetOS.contains("darwin")
+ bundle.isBundle: false
+ cpp.minimumMacosVersion: "10.5" // For -rpath
+ }
+
+ Group {
+ fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"]
+ qbs.install: true
+ }
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/lib1.cpp b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib1.cpp
new file mode 100644
index 000000000..ccf9e47ab
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib1.cpp
@@ -0,0 +1,7 @@
+#include "../dllexport.h"
+#include <iostream>
+
+DLL_EXPORT void theLibFunc()
+{
+ std::cout << "Hello from thelib!" << std::endl;
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/lib2.cpp b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib2.cpp
new file mode 100644
index 000000000..f3f0711f3
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib2.cpp
@@ -0,0 +1,7 @@
+#include "../dllexport.h"
+#include <iostream>
+
+DLL_EXPORT void theOtherLibFunc()
+{
+ std::cout << "Hello from theotherlib!" << std::endl;
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/lib3.cpp b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib3.cpp
new file mode 100644
index 000000000..d2beebbb4
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib3.cpp
@@ -0,0 +1,7 @@
+#include "../dllexport.h"
+#include <iostream>
+
+DLL_EXPORT void theThirdLibFunc()
+{
+ std::cout << "Hello from thethirdlib!" << std::endl;
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/lib4.cpp b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib4.cpp
new file mode 100644
index 000000000..9e43fe56f
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/lib4.cpp
@@ -0,0 +1,8 @@
+#include "../dllexport.h"
+
+DLL_IMPORT void theLibFunc();
+
+DLL_EXPORT void theFourthLibFunc()
+{
+ theLibFunc();
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/main.cpp b/tests/auto/blackbox/testdata/dynamic-library-in-module/main.cpp
new file mode 100644
index 000000000..75d272c64
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/main.cpp
@@ -0,0 +1,13 @@
+#include "../dllexport.h"
+
+DLL_IMPORT void theOtherLibFunc();
+DLL_IMPORT void theFourthLibFunc();
+
+void theThirdLibFunc() { }
+
+int main()
+{
+ theOtherLibFunc();
+ theThirdLibFunc();
+ theFourthLibFunc();
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thelib/thelib.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thelib/thelib.qbs
new file mode 100644
index 000000000..b45bba50a
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thelib/thelib.qbs
@@ -0,0 +1,22 @@
+import qbs
+import qbs.FileInfo
+
+Module {
+ Depends { name: "cpp" }
+ property string baseDir: FileInfo.cleanPath(FileInfo.joinPaths(path, "..", ".."))
+ cpp.rpaths: [product.thelib.baseDir]
+ Group {
+ name: "thelib dll"
+ files: FileInfo.joinPaths(product.thelib.baseDir,
+ cpp.dynamicLibraryPrefix + "thelib" + cpp.dynamicLibrarySuffix)
+ fileTags: ["dynamiclibrary"]
+ filesAreTargets: true
+ }
+ Group {
+ name: "thelib dll import"
+ condition: qbs.targetOS.contains("windows") && !qbs.toolchain.contains("mingw")
+ files: FileInfo.joinPaths(product.thelib.baseDir, "thelib.lib")
+ fileTags: ["dynamiclibrary_import"]
+ filesAreTargets: true
+ }
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/theotherlib/theotherlib.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/theotherlib/theotherlib.qbs
new file mode 100644
index 000000000..2a9a7314f
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/theotherlib/theotherlib.qbs
@@ -0,0 +1,22 @@
+import qbs
+import qbs.FileInfo
+
+Module {
+ Depends { name: "cpp" }
+ property string baseDir: FileInfo.cleanPath(FileInfo.joinPaths(path, "..", ".."))
+ cpp.rpaths: [product.theotherlib.baseDir]
+ Group {
+ name: "theotherlib dll"
+ files: FileInfo.joinPaths(product.theotherlib.baseDir, cpp.dynamicLibraryPrefix
+ + "theotherlib" + cpp.dynamicLibrarySuffix)
+ fileTags: ["dynamiclibrary"]
+ filesAreTargets: true
+ }
+ Group {
+ name: "theotherlib dll import"
+ condition: qbs.targetOS.contains("windows") && !qbs.toolchain.contains("mingw")
+ files: FileInfo.joinPaths(product.theotherlib.baseDir, "theotherlib.lib")
+ fileTags: ["dynamiclibrary_import"]
+ filesAreTargets: true
+ }
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thethirdlib/thethirdlib.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thethirdlib/thethirdlib.qbs
new file mode 100644
index 000000000..d422d3f2c
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/modules/thethirdlib/thethirdlib.qbs
@@ -0,0 +1,22 @@
+import qbs
+import qbs.FileInfo
+
+Module {
+ Depends { name: "cpp" }
+ property string baseDir: FileInfo.cleanPath(FileInfo.joinPaths(path, "..", ".."))
+ Group {
+ name: "thethirdlib dll"
+ condition: false
+ files: FileInfo.joinPaths(product.theotherlib.baseDir, cpp.dynamicLibraryPrefix
+ + "thethirdlib" + cpp.dynamicLibrarySuffix)
+ fileTags: ["dynamiclibrary"]
+ filesAreTargets: true
+ }
+ Group {
+ name: "thethirdlib dll import"
+ condition: false
+ files: FileInfo.joinPaths(product.thethirdlib.baseDir, "thethirdlib.lib")
+ fileTags: ["dynamiclibrary_import"]
+ filesAreTargets: true
+ }
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/theapp.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/theapp.qbs
new file mode 100644
index 000000000..50acfd447
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/theapp.qbs
@@ -0,0 +1,21 @@
+import qbs
+
+Project {
+ CppApplication {
+ name: "theapp"
+ cpp.minimumMacosVersion: "10.5" // For -rpath
+ Depends { name: "theotherlib" }
+ Depends { name: "thethirdlib" }
+ Depends { name: "thefourthlib" }
+ files: "main.cpp"
+ }
+ Dll {
+ name: "thefourthlib"
+ Depends { name: "thelib" }
+ files: "lib4.cpp"
+ Export {
+ Depends { name: "cpp" }
+ cpp.rpaths: [qbs.installRoot]
+ }
+ }
+}
diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/thelibs.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/thelibs.qbs
new file mode 100644
index 000000000..361642cca
--- /dev/null
+++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/thelibs.qbs
@@ -0,0 +1,16 @@
+import qbs
+
+Project {
+ Dll {
+ name: "thelib"
+ files: "lib1.cpp"
+ }
+ Dll {
+ name: "theotherlib"
+ files: "lib2.cpp"
+ }
+ Dll {
+ name: "thethirdlib"
+ files: "lib3.cpp"
+ }
+}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index af8edb489..d4e4c81ca 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -863,6 +863,21 @@ void TestBlackbox::driverLinkerFlags_data()
QTest::newRow("link using linker") << "manual" << false;
}
+void TestBlackbox::dynamicLibraryInModule()
+{
+ QDir::setCurrent(testDataDir + "/dynamic-library-in-module");
+ const QString installRootSpec = QString("qbs.installRoot:") + QDir::currentPath();
+ QbsRunParameters libParams(QStringList({"-f", "thelibs.qbs", installRootSpec}));
+ libParams.buildDirectory = "libbuild";
+ QCOMPARE(runQbs(libParams), 0);
+ QbsRunParameters appParams("run", QStringList({"-f", "theapp.qbs", installRootSpec}));
+ appParams.buildDirectory = "appbuild";
+ QCOMPARE(runQbs(appParams), 0);
+ QVERIFY2(m_qbsStdout.contains("Hello from thelib"), m_qbsStdout.constData());
+ QVERIFY2(m_qbsStdout.contains("Hello from theotherlib"), m_qbsStdout.constData());
+ QVERIFY2(!m_qbsStdout.contains("thirdlib"), m_qbsStdout.constData());
+}
+
void TestBlackbox::symlinkRemoval()
{
if (HostOsInfo::isWindowsHost())
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 67c9d152a..05b8d4838 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -79,6 +79,7 @@ private slots:
void discardUnusedData_data();
void driverLinkerFlags();
void driverLinkerFlags_data();
+ void dynamicLibraryInModule();
void dynamicMultiplexRule();
void dynamicProject();
void dynamicRuleOutputs();