aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/moduleproviderinfo.h
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-02-23 16:42:37 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-01-23 14:35:02 +0000
commitc2833b1a009bc7c382b30d94109b9b7a25a404a6 (patch)
tree5b960940919310f8867e503234ca6d4f4295bfbe /src/lib/corelib/language/moduleproviderinfo.h
parent1bfc30065371a3d28421e2e7af5653e1e78259f3 (diff)
Introduce module providers
If a dependency is not found, we now search for a matching module provider that can generate one for us. We also provide a generic fall-back provider which uses pkg-config to locate the dependency (but could be extended to incorporate other methods in the future). This is the most important part of this change for practical purposes, as it makes hundreds of popular libraries available for use in qbs projects without users having to write any boilerplate code. In a future patch, a module provider could also be used to implement the functionality of the qtprofilesetup library, relieving users of the need to create a profile for building Qt applications. [ChangeLog] The Depends item now falls back to pkg-config to locate dependencies whose names do not correspond to a qbs module. Fixes: QBS-1107 Change-Id: Ifd4f05c237cf58cd9fe707c3da648d3dbb33e82b Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/language/moduleproviderinfo.h')
-rw-r--r--src/lib/corelib/language/moduleproviderinfo.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/lib/corelib/language/moduleproviderinfo.h b/src/lib/corelib/language/moduleproviderinfo.h
new file mode 100644
index 000000000..fef9d9765
--- /dev/null
+++ b/src/lib/corelib/language/moduleproviderinfo.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBS_MODULEPROVIDERINFO_H
+#define QBS_MODULEPROVIDERINFO_H
+
+#include "qualifiedid.h"
+#include <tools/persistence.h>
+
+#include <QtCore/qstringlist.h>
+#include <QtCore/qvariant.h>
+
+#include <vector>
+
+namespace qbs {
+namespace Internal {
+
+class ModuleProviderInfo
+{
+public:
+ ModuleProviderInfo() = default;
+ ModuleProviderInfo(const QualifiedId &name, const QVariantMap &config,
+ const QStringList &searchPaths, bool transientOutput)
+ : name(name), config(config), searchPaths(searchPaths), transientOutput(transientOutput)
+ {}
+
+ static QString outputBaseDirName() { return QStringLiteral("genmodules"); }
+ static QString outputDirPath(const QString &baseDir, const QualifiedId &name)
+ {
+ return baseDir + QLatin1Char('/') + outputBaseDirName() + QLatin1Char('/')
+ + name.toString();
+ }
+ QString outputDirPath(const QString &baseDir) const
+ {
+ return outputDirPath(baseDir, name);
+ }
+
+ template<PersistentPool::OpType opType> void completeSerializationOp(PersistentPool &pool)
+ {
+ pool.serializationOp<opType>(reinterpret_cast<QStringList &>(name), config, searchPaths);
+ }
+
+ QualifiedId name;
+ QVariantMap config;
+ QStringList searchPaths;
+ bool transientOutput = false; // Not to be serialized.
+};
+
+using ModuleProviderInfoList = std::vector<ModuleProviderInfo>;
+
+} // namespace Internal
+} // namespace qbs
+
+#endif // Include guard