aboutsummaryrefslogtreecommitdiffstats
path: root/share
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 /share
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 'share')
-rw-r--r--share/qbs/module-providers/__fallback/fallback.qbs76
-rw-r--r--share/qbs/module-providers/__fallback/provider.qbs53
-rw-r--r--share/qbs/modules/pkgconfig/pkgconfig.qbs62
-rw-r--r--share/share.qbs9
4 files changed, 200 insertions, 0 deletions
diff --git a/share/qbs/module-providers/__fallback/fallback.qbs b/share/qbs/module-providers/__fallback/fallback.qbs
new file mode 100644
index 000000000..e23851951
--- /dev/null
+++ b/share/qbs/module-providers/__fallback/fallback.qbs
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import qbs
+import qbs.FileInfo
+import qbs.Probes
+
+Module {
+ Depends { name: "cpp" }
+ Depends { name: "pkgconfig"; required: false }
+
+ property string theName: FileInfo.completeBaseName(filePath)
+
+ Probes.PkgConfigProbe {
+ id: pkgConfigProbe
+ condition: pkgconfig.present
+ name: theName
+ executable: pkgconfig.executableFilePath
+ libDirs: pkgconfig.libDirs
+ forStaticBuild: pkgconfig.staticMode
+ }
+
+ Properties {
+ condition: pkgConfigProbe.found
+ version: pkgConfigProbe.modversion
+ cpp.dynamicLibraries: pkgConfigProbe.libraries
+ cpp.libraryPaths: pkgConfigProbe.libraryPaths
+ cpp.includePaths: pkgConfigProbe.includePaths
+ cpp.defines: pkgConfigProbe.defines
+ cpp.driverLinkerFlags: pkgConfigProbe.linkerFlags
+ cpp.commonCompilerFlags: pkgConfigProbe.compilerFlags
+ }
+
+ validate: {
+ if (!pkgConfigProbe.found) {
+ throw "Dependency '" + theName + "' not found for product '" + product.name + "'. "
+ + "Locating a package of this name via pkg-config also failed.";
+ }
+ }
+}
diff --git a/share/qbs/module-providers/__fallback/provider.qbs b/share/qbs/module-providers/__fallback/provider.qbs
new file mode 100644
index 000000000..72740f3c3
--- /dev/null
+++ b/share/qbs/module-providers/__fallback/provider.qbs
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import qbs.File
+import qbs.FileInfo
+
+ModuleProvider {
+ relativeSearchPaths: {
+ console.debug("Running fallback provider for module '" + name + "'.");
+ var inputFilePath = FileInfo.joinPaths(path, "fallback.qbs");
+ var outputDir = FileInfo.joinPaths(outputBaseDir, "modules", name.replace(".", "/"));
+ File.makePath(outputDir);
+ var outputFilePath = FileInfo.joinPaths(outputDir, name + ".qbs");
+ File.copy(inputFilePath, outputFilePath);
+ return "";
+ }
+}
diff --git a/share/qbs/modules/pkgconfig/pkgconfig.qbs b/share/qbs/modules/pkgconfig/pkgconfig.qbs
new file mode 100644
index 000000000..92e0bfb25
--- /dev/null
+++ b/share/qbs/modules/pkgconfig/pkgconfig.qbs
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import qbs
+import qbs.File
+import qbs.Probes
+
+Module {
+ Probes.BinaryProbe {
+ id: pkgconfigProbe
+ names: "pkg-config"
+ }
+
+ property string executableFilePath: pkgconfigProbe.filePath
+ property stringList libDirs
+ property bool staticMode: false
+
+ validate: {
+ if (!executableFilePath) {
+ throw "No pkg-config executable found. "
+ + "Please set modules.pkgconfig.executableFilePath.";
+ }
+ if (!File.exists(executableFilePath))
+ throw "The pkg-config executable '" + executableFilePath + "' does not exist.";
+ }
+}
diff --git a/share/share.qbs b/share/share.qbs
index 6c99f64d5..9349d5c8b 100644
--- a/share/share.qbs
+++ b/share/share.qbs
@@ -56,6 +56,15 @@ Product {
}
Group {
+ name: "Module providers"
+ files: ["qbs/module-providers/**/*"]
+ fileTags: ["qbs resources"]
+ qbs.install: true
+ qbs.installDir: qbsbuildconfig.resourcesInstallDir + "/share"
+ qbs.installSourceBase: "."
+ }
+
+ Group {
name: "Examples as resources"
files: ["../examples/**/*"]
fileTags: []