diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-03-16 22:15:51 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2020-03-18 16:29:07 +0000 |
commit | 6e7faeedbc24f496e6521fd380f6fc4fb39d6df2 (patch) | |
tree | 1e0b3fd4b7df40b3ab756c521a363c657ad2fd5f | |
parent | dcd57b60f8a79a2ee9c46cb5fddf60846302d375 (diff) |
Make Library.qbs configurable
Move all tag installation code to the Library.qbs to make it possible to
switch between dynamic/static libraries in user code.
Also, add test for the LoadableModule item.
Change-Id: I947977e5974f9c37d27be6ccd7ad3d117a05af18
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | share/qbs/imports/qbs/base/DynamicLibrary.qbs | 20 | ||||
-rw-r--r-- | share/qbs/imports/qbs/base/Library.qbs | 39 | ||||
-rw-r--r-- | share/qbs/imports/qbs/base/StaticLibrary.qbs | 9 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/install-locations/install-locations.qbs | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/install-locations/theplugin.cpp | 3 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 17 |
6 files changed, 63 insertions, 31 deletions
diff --git a/share/qbs/imports/qbs/base/DynamicLibrary.qbs b/share/qbs/imports/qbs/base/DynamicLibrary.qbs index 267519a42..818665e38 100644 --- a/share/qbs/imports/qbs/base/DynamicLibrary.qbs +++ b/share/qbs/imports/qbs/base/DynamicLibrary.qbs @@ -30,24 +30,4 @@ Library { type: ["dynamiclibrary"].concat(isForAndroid ? ["android.nativelibrary"] : []) - - installDir: isBundle ? "Library/Frameworks" : qbs.targetOS.contains("windows") - ? "bin" : "lib" - property bool installImportLib: false - property string importLibInstallDir: "lib" - - Group { - condition: install - fileTagsFilter: isBundle ? "bundle.content" : ["dynamiclibrary", "dynamiclibrary_symlink"] - qbs.install: true - qbs.installDir: installDir - qbs.installSourceBase: isBundle ? destinationDirectory : outer - } - - Group { - condition: installImportLib - fileTagsFilter: "dynamiclibrary_import" - qbs.install: true - qbs.installDir: importLibInstallDir - } } diff --git a/share/qbs/imports/qbs/base/Library.qbs b/share/qbs/imports/qbs/base/Library.qbs index 615c2319f..2a5183606 100644 --- a/share/qbs/imports/qbs/base/Library.qbs +++ b/share/qbs/imports/qbs/base/Library.qbs @@ -34,4 +34,43 @@ NativeBinary { return ["staticlibrary"]; return ["dynamiclibrary"].concat(isForAndroid ? ["android.nativelibrary"] : []); } + + readonly property bool isDynamicLibrary: type.contains("dynamiclibrary") + readonly property bool isStaticLibrary: type.contains("staticlibrary") + readonly property bool isLoadableModule: type.contains("loadablemodule") + + installDir: { + if (isBundle) + return "Library/Frameworks"; + if (isDynamicLibrary) + return qbs.targetOS.contains("windows") ? "bin" : "lib"; + if (isStaticLibrary) + return "lib"; + } + + property bool installImportLib: false + property string importLibInstallDir: "lib" + + Group { + condition: install + fileTagsFilter: { + if (isBundle) + return ["bundle.content"]; + if (isDynamicLibrary) + return ["dynamiclibrary", "dynamiclibrary_symlink"]; + if (isStaticLibrary) + return ["staticlibrary"]; + return []; + } + qbs.install: true + qbs.installDir: installDir + qbs.installSourceBase: isBundle ? destinationDirectory : outer + } + + Group { + condition: installImportLib && type.contains("dynamiclibrary") + fileTagsFilter: "dynamiclibrary_import" + qbs.install: true + qbs.installDir: importLibInstallDir + } } diff --git a/share/qbs/imports/qbs/base/StaticLibrary.qbs b/share/qbs/imports/qbs/base/StaticLibrary.qbs index 4eea3c991..5a78a83b0 100644 --- a/share/qbs/imports/qbs/base/StaticLibrary.qbs +++ b/share/qbs/imports/qbs/base/StaticLibrary.qbs @@ -30,13 +30,4 @@ Library { type: ["staticlibrary"] - - installDir: isBundle ? "Library/Frameworks" : "lib" - Group { - condition: install - fileTagsFilter: isBundle ? "bundle.content" : "staticlibrary"; - qbs.install: true - qbs.installDir: installDir - qbs.installSourceBase: isBundle ? destinationDirectory : outer - } } diff --git a/tests/auto/blackbox/testdata/install-locations/install-locations.qbs b/tests/auto/blackbox/testdata/install-locations/install-locations.qbs index 8a97f74a1..044ecf710 100644 --- a/tests/auto/blackbox/testdata/install-locations/install-locations.qbs +++ b/tests/auto/blackbox/testdata/install-locations/install-locations.qbs @@ -23,4 +23,10 @@ Project { Depends { name: "cpp" } files: "thelib.cpp" } + LoadableModule { + name: "theplugin" + install: true + Depends { name: "cpp" } + files: "theplugin.cpp" + } } diff --git a/tests/auto/blackbox/testdata/install-locations/theplugin.cpp b/tests/auto/blackbox/testdata/install-locations/theplugin.cpp new file mode 100644 index 000000000..ac1ede090 --- /dev/null +++ b/tests/auto/blackbox/testdata/install-locations/theplugin.cpp @@ -0,0 +1,3 @@ +#include "../dllexport.h" + +DLL_EXPORT void pluginFunc() {} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index ecb8bd1e9..87a14c853 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4001,8 +4001,11 @@ void TestBlackbox::installLocations_data() QTest::addColumn<QString>("binDir"); QTest::addColumn<QString>("dllDir"); QTest::addColumn<QString>("libDir"); - QTest::newRow("explicit values") << QString("bindir") << QString("dlldir") << QString("libdir"); - QTest::newRow("default values") << QString() << QString() << QString(); + QTest::addColumn<QString>("pluginDir"); + QTest::newRow("explicit values") + << QString("bindir") << QString("dlldir") << QString("libdir") << QString("pluginDir"); + QTest::newRow("default values") + << QString() << QString() << QString() << QString(); } void TestBlackbox::installLocations() @@ -4011,6 +4014,7 @@ void TestBlackbox::installLocations() QFETCH(QString, binDir); QFETCH(QString, dllDir); QFETCH(QString, libDir); + QFETCH(QString, pluginDir); QbsRunParameters params("resolve"); if (!binDir.isEmpty()) params.arguments.push_back("products.theapp.installDir:" + binDir); @@ -4018,6 +4022,8 @@ void TestBlackbox::installLocations() params.arguments.push_back("products.thelib.installDir:" + dllDir); if (!libDir.isEmpty()) params.arguments.push_back("products.thelib.importLibInstallDir:" + libDir); + if (!pluginDir.isEmpty()) + params.arguments.push_back("products.theplugin.installDir:" + pluginDir); QCOMPARE(runQbs(params), 0); const bool isWindows = m_qbsStdout.contains("is windows"); const bool isMac = m_qbsStdout.contains("is mac"); @@ -4025,6 +4031,8 @@ void TestBlackbox::installLocations() QVERIFY(isWindows || isMac || isUnix); QCOMPARE(runQbs(QbsRunParameters(QStringList("--clean-install-root"))), 0); const QString dllFileName = isWindows ? "thelib.dll" : isMac ? "thelib" : "libthelib.so"; + const QString pluginFileName = + isWindows ? "theplugin.dll" : isMac ? "theplugin" : "libtheplugin.so"; const QString appFileName = isWindows ? "theapp.exe" : "theapp"; if (binDir.isEmpty()) binDir = isMac ? "/Applications" : "/bin"; @@ -4032,9 +4040,12 @@ void TestBlackbox::installLocations() dllDir = isMac ? "/Library/Frameworks" : isWindows ? "/bin" : "/lib"; if (libDir.isEmpty()) libDir = "/lib"; + if (pluginDir.isEmpty()) + pluginDir = dllDir; if (isMac) { binDir += "/theapp.app/Contents/MacOS"; dllDir += "/thelib.framework"; + pluginDir += "/theplugin.bundle/Contents/MacOS"; } const QString installRoot = QDir::currentPath() + "/default/install-root"; const QString installPrefix = isWindows ? QString() : "/usr/local"; @@ -4047,6 +4058,8 @@ void TestBlackbox::installLocations() const QString libFilePath = fullInstallPrefix + libDir + "/thelib.lib"; QVERIFY2(QFile::exists(libFilePath), qPrintable(libFilePath)); } + const QString pluginFilePath = fullInstallPrefix + pluginDir + '/' + pluginFileName; + QVERIFY2(QFile::exists(pluginFilePath), qPrintable(pluginFilePath)); } void TestBlackbox::inputsFromDependencies() |