aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/imports/qbs/base
diff options
context:
space:
mode:
Diffstat (limited to 'share/qbs/imports/qbs/base')
-rw-r--r--share/qbs/imports/qbs/base/AppleApplicationDiskImage.qbs3
-rw-r--r--share/qbs/imports/qbs/base/ApplicationExtension.qbs8
-rw-r--r--share/qbs/imports/qbs/base/QtModule.qbs87
-rw-r--r--share/qbs/imports/qbs/base/QtPlugin.qbs51
4 files changed, 146 insertions, 3 deletions
diff --git a/share/qbs/imports/qbs/base/AppleApplicationDiskImage.qbs b/share/qbs/imports/qbs/base/AppleApplicationDiskImage.qbs
index 6491bf14a..462b96b7c 100644
--- a/share/qbs/imports/qbs/base/AppleApplicationDiskImage.qbs
+++ b/share/qbs/imports/qbs/base/AppleApplicationDiskImage.qbs
@@ -34,7 +34,8 @@ import qbs.ModUtils
AppleDiskImage {
property string sourceBase: "/Applications"
- readonly property string absoluteSourceBase: FileInfo.joinPaths(qbs.installRoot, sourceBase)
+ readonly property string absoluteSourceBase:
+ FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, sourceBase)
property stringList symlinks: ["/Applications:Applications"]
readonly property string stageDirectory: FileInfo.joinPaths(destinationDirectory, "Volumes", dmg.volumeName)
diff --git a/share/qbs/imports/qbs/base/ApplicationExtension.qbs b/share/qbs/imports/qbs/base/ApplicationExtension.qbs
index eae5145ce..3d25d5f73 100644
--- a/share/qbs/imports/qbs/base/ApplicationExtension.qbs
+++ b/share/qbs/imports/qbs/base/ApplicationExtension.qbs
@@ -34,8 +34,12 @@ XPCService {
type: base.concat(["applicationextension"])
property bool _useLegacyExtensionLibraries:
- qbs.targetOS.contains("macos") && parseInt(xcode.sdkVersion.split(".")[1], 10) < 11 ||
- qbs.targetOS.contains("ios") && parseInt(xcode.sdkVersion.split(".")[0], 10) < 9
+ qbs.targetOS.contains("macos")
+ && xcode.present
+ && parseInt(xcode.sdkVersion.split(".")[1], 10) < 11
+ || qbs.targetOS.contains("ios")
+ && xcode.present
+ && parseInt(xcode.sdkVersion.split(".")[0], 10) < 9
cpp.entryPoint: "_NSExtensionMain"
cpp.frameworkPaths: base.concat(_useLegacyExtensionLibraries
diff --git a/share/qbs/imports/qbs/base/QtModule.qbs b/share/qbs/imports/qbs/base/QtModule.qbs
new file mode 100644
index 000000000..35421436f
--- /dev/null
+++ b/share/qbs/imports/qbs/base/QtModule.qbs
@@ -0,0 +1,87 @@
+import qbs.FileInfo
+
+Module {
+ condition: (qbs.targetPlatform === targetPlatform || isCombinedUIKitBuild)
+ && (!qbs.architecture
+ || architectures.length === 0
+ || architectures.contains(qbs.architecture))
+
+ readonly property bool isCombinedUIKitBuild: ["ios", "tvos", "watchos"].contains(targetPlatform)
+ && ["x86", "x86_64"].contains(qbs.architecture)
+ && qbs.targetPlatform === targetPlatform + "-simulator"
+
+ Depends { name: "cpp" }
+ Depends { name: "Qt.core" }
+
+ Depends { name: "Qt.plugin_support" }
+ property stringList pluginTypes
+ Qt.plugin_support.pluginTypes: pluginTypes
+ Depends {
+ condition: Qt.core.staticBuild && !isPlugin
+ name: "Qt";
+ submodules: {
+ // We have to pull in all plugins here, because dependency resolving happens
+ // before module merging, and we don't know yet if someone set
+ // Qt.pluginSupport.pluginsByType in the product.
+ // TODO: We might be able to use Qt.pluginSupport.pluginsByType now.
+ // The real filtering is done later by the plugin module files themselves.
+ var list = [];
+ var allPlugins = Qt.plugin_support.allPluginsByType;
+ for (var i = 0; i < (pluginTypes || []).length; ++i)
+ Array.prototype.push.apply(list, allPlugins[pluginTypes[i]])
+ return list;
+ }
+ }
+
+ property string qtModuleName
+ property path binPath: Qt.core.binPath
+ property path incPath: Qt.core.incPath
+ property path libPath: Qt.core.libPath
+ property string qtLibInfix: Qt.core.libInfix
+ property string libNameForLinkerDebug
+ property string libNameForLinkerRelease
+ property string libNameForLinker: Qt.core.qtBuildVariant === "debug"
+ ? libNameForLinkerDebug : libNameForLinkerRelease
+ property string libFilePathDebug
+ property string libFilePathRelease
+ property string libFilePath: Qt.core.qtBuildVariant === "debug"
+ ? libFilePathDebug : libFilePathRelease
+ version: Qt.core.version
+ property bool hasLibrary: true
+ property bool isStaticLibrary: false
+ property bool isPlugin: false
+
+ property stringList architectures
+ property string targetPlatform
+ property stringList staticLibsDebug
+ property stringList staticLibsRelease
+ property stringList dynamicLibsDebug
+ property stringList dynamicLibsRelease
+ property stringList linkerFlagsDebug
+ property stringList linkerFlagsRelease
+ property stringList staticLibs: Qt.core.qtBuildVariant === "debug"
+ ? staticLibsDebug : staticLibsRelease
+ property stringList dynamicLibs: Qt.core.qtBuildVariant === "debug"
+ ? dynamicLibsDebug : dynamicLibsRelease
+ property stringList frameworksDebug
+ property stringList frameworksRelease
+ property stringList frameworkPathsDebug
+ property stringList frameworkPathsRelease
+ property stringList mFrameworks: Qt.core.qtBuildVariant === "debug"
+ ? frameworksDebug : frameworksRelease
+ property stringList mFrameworkPaths: Qt.core.qtBuildVariant === "debug"
+ ? frameworkPathsDebug: frameworkPathsRelease
+ cpp.linkerFlags: Qt.core.qtBuildVariant === "debug"
+ ? linkerFlagsDebug : linkerFlagsRelease
+ property bool enableLinking: qtModuleName != undefined && hasLibrary
+ property stringList moduleConfig
+
+ Properties {
+ condition: enableLinking
+ cpp.staticLibraries: staticLibs
+ cpp.dynamicLibraries: dynamicLibs
+ cpp.frameworks: mFrameworks.concat(!isStaticLibrary && Qt.core.frameworkBuild
+ ? [libNameForLinker] : [])
+ cpp.systemFrameworkPaths: mFrameworkPaths
+ }
+}
diff --git a/share/qbs/imports/qbs/base/QtPlugin.qbs b/share/qbs/imports/qbs/base/QtPlugin.qbs
new file mode 100644
index 000000000..883e34465
--- /dev/null
+++ b/share/qbs/imports/qbs/base/QtPlugin.qbs
@@ -0,0 +1,51 @@
+import qbs.FileInfo
+import qbs.TextFile
+
+QtModule {
+ isPlugin: true
+
+ property string className
+ property stringList extendsModules
+
+ enableLinking: {
+ if (!base)
+ return false;
+ if (!isStaticLibrary)
+ return false;
+ if (!Qt.plugin_support.linkPlugins)
+ return false;
+ if (!(Qt.plugin_support.enabledPlugins || []).contains(qtModuleName))
+ return false;
+ if (!extendsModules || extendsModules.length === 0)
+ return true;
+ for (var i = 0; i < extendsModules.length; ++i) {
+ var moduleName = extendsModules[i];
+ if (product.Qt[moduleName] && product.Qt[moduleName].present)
+ return true;
+ }
+ return false;
+ }
+
+ Rule {
+ condition: enableLinking
+ multiplex: true
+ Artifact {
+ filePath: product.targetName + "_qt_plugin_import_"
+ + product.moduleProperty(product.moduleName, "qtModuleName") + ".cpp"
+ fileTags: "cpp"
+ }
+
+ prepare: {
+ var cmd = new JavaScriptCommand();
+ var pluginName = product.moduleProperty(product.moduleName, "qtModuleName");
+ cmd.description = "creating static import for plugin '" + pluginName + "'";
+ cmd.sourceCode = function() {
+ var f = new TextFile(output.filePath, TextFile.WriteOnly);
+ var className = product.moduleProperty(product.moduleName, "className");
+ f.writeLine("#include <QtPlugin>\n\nQ_IMPORT_PLUGIN(" + className + ")");
+ f.close();
+ };
+ return cmd;
+ }
+ }
+}