From 3187199a17e013882b0d0ea7aff9c7b9411e4cd1 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Fri, 14 May 2021 00:55:15 +0200 Subject: Implement eager pkg-config provider This implements provider that generates modules based on all .pc files present in system. This allows to get rid of the multi-shot providers such as fallback provider. Fixes: QBS-1614 Change-Id: Icf87ac609bc34bd26e8ed94ae547a7e649835a3a Reviewed-by: Christian Kandeler --- .../qbspkgconfig-module-provider/libdir/libA.pc | 6 +++++ .../qbspkgconfig-module-provider/libs/libA.cpp | 14 +++++++++++ .../qbspkgconfig-module-provider/libs/libA.h | 21 ++++++++++++++++ .../qbspkgconfig-module-provider/libs/libs.qbs | 29 ++++++++++++++++++++++ .../testdata/qbspkgconfig-module-provider/main.cpp | 11 ++++++++ .../qbspkgconfig-module-provider.qbs | 6 +++++ tests/auto/blackbox/tst_blackbox.cpp | 22 ++++++++++++++++ tests/auto/blackbox/tst_blackbox.h | 1 + 8 files changed, 110 insertions(+) create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libdir/libA.pc create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp create mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs (limited to 'tests/auto') diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libdir/libA.pc b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libdir/libA.pc new file mode 100644 index 000000000..077a05893 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libdir/libA.pc @@ -0,0 +1,6 @@ +Name: libA +Description: just a test +Version: 0.0.1 + +Cflags: -DTHE_MAGIC_DEFINE -I/usr/local/include +Libs: -L/usr/local/lib -llibA diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp new file mode 100644 index 000000000..0c5274415 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp @@ -0,0 +1,14 @@ +#include "libA.h" + +#include + +void foo() +{ + std::cout << "hello from foo: "; +#ifdef MYLIB_FRAMEWORK + std::cout << "bundled: yes"; +#else + std::cout << "bundled: no"; +#endif + std::cout << std::endl; +} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h new file mode 100644 index 000000000..ddaaf1609 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h @@ -0,0 +1,21 @@ +#pragma once + +#if defined(_WIN32) || defined(WIN32) +# define DECL_EXPORT __declspec(dllexport) +# define DECL_IMPORT __declspec(dllimport) +#else +# define DECL_EXPORT __attribute__((visibility("default"))) +# define DECL_IMPORT __attribute__((visibility("default"))) +# endif + +#if defined(LIBA_STATIC_LIBRARY) +# define LIBA_EXPORT +#else +# if defined(MYLIB_LIBRARY) +# define LIBA_EXPORT DECL_EXPORT +# else +# define LIBA_EXPORT DECL_IMPORT +# endif +#endif + +LIBA_EXPORT void foo(); diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs new file mode 100644 index 000000000..9d482415b --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs @@ -0,0 +1,29 @@ +import qbs.FileInfo + +Project { + property bool isBundle: false + + DynamicLibrary { + Depends { name: "cpp" } + Depends { name: "bundle" } + name: "libA" + bundle.isBundle: project.isBundle + bundle.publicHeaders: ["libA.h"] + files: "libA.cpp" + cpp.defines: { + var result = []; + if (project.isBundle) + result.push("MYLIB_FRAMEWORK"); + return result; + } + qbs.installPrefix: "" + install: true + installImportLib: true + installDir: "lib" + Group { + files: ["libA.h"] + qbs.install: !project.isBundle + qbs.installDir: FileInfo.joinPaths("include", product.name) + } + } +} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp new file mode 100644 index 000000000..5fa0f7eed --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp @@ -0,0 +1,11 @@ +#include + +#ifndef THE_MAGIC_DEFINE +#error "missing the magic define" +#endif + +int main() +{ + foo(); + return 0; +} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs new file mode 100644 index 000000000..d2b3654ae --- /dev/null +++ b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs @@ -0,0 +1,6 @@ +CppApplication { + name: "p" + Depends { name: "libA" } + files: "main.cpp" + qbsModuleProviders: "qbspkgconfig" +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 3cacd67e9..44026fc86 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -6144,6 +6144,28 @@ void TestBlackbox::qbsModuleProvidersCompatibility_data() QTest::newRow("named") << QStringList("project.qbsModuleProviders:named_provider") << "from_named_provider"; } +void TestBlackbox::qbspkgconfigModuleProvider() +{ + QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider/libs"); + + const auto commonParams = QbsRunParameters(QStringLiteral("install"), { + QStringLiteral("qbs.installPrefix:/usr/local"), + QStringLiteral("--install-root"), + QStringLiteral("install-root") + }); + auto dynamicParams = commonParams; + dynamicParams.arguments << "config:library" << "projects.libs.isBundle:false"; + QCOMPARE(runQbs(dynamicParams), 0); + + QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider"); + + QbsRunParameters params; + params.arguments + << "moduleProviders.qbspkgconfig.libDirs:libdir" + << "moduleProviders.qbspkgconfig.sysroot:" + QDir::currentPath() + "/libs/install-root"; + QCOMPARE(runQbs(params), 0); +} + static QJsonObject getNextSessionPacket(QProcess &session, QByteArray &data) { int totalSize = -1; diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 8728f2b10..2f443f681 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -265,6 +265,7 @@ private slots: void qbsModuleProvidersCliOverride_data(); void qbsModuleProvidersCompatibility(); void qbsModuleProvidersCompatibility_data(); + void qbspkgconfigModuleProvider(); void qbsSession(); void qbsVersion(); void qtBug51237(); -- cgit v1.2.3