aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/qtprofilesetup/templates/core.qbs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/qtprofilesetup/templates/core.qbs')
-rw-r--r--src/lib/qtprofilesetup/templates/core.qbs351
1 files changed, 351 insertions, 0 deletions
diff --git a/src/lib/qtprofilesetup/templates/core.qbs b/src/lib/qtprofilesetup/templates/core.qbs
new file mode 100644
index 000000000..33c2ba856
--- /dev/null
+++ b/src/lib/qtprofilesetup/templates/core.qbs
@@ -0,0 +1,351 @@
+import qbs 1.0
+import qbs.FileInfo
+import "moc.js" as Moc
+import '../qtfunctions.js' as QtFunctions
+import '../utils.js' as ModUtils
+
+Module {
+ id: qtcore
+
+ Depends { name: "cpp" }
+
+ property string namespace
+ property string libInfix: ""
+ property string repository: versionMajor === 5 ? "qtbase" : undefined
+ property stringList config
+ property stringList qtConfig
+ property path binPath
+ property path incPath
+ property path libPath
+ property path pluginPath
+ property path mkspecPath
+ property string mocName: "moc"
+ property string lreleaseName: "lrelease"
+ property string qdocName: versionMajor >= 5 ? "qdoc" : "qdoc3"
+ property stringList qdocEnvironment
+ property string qdocQhpFileName
+ property path docPath
+ property stringList helpGeneratorArgs: versionMajor >= 5 ? ["-platform", "minimal"] : []
+ property string version
+ property var versionParts: version ? version.split('.').map(function(item) { return parseInt(item, 10); }) : []
+ property int versionMajor: versionParts[0]
+ property int versionMinor: versionParts[1]
+ property int versionPatch: versionParts[2]
+ property bool frameworkBuild
+ property bool staticBuild
+ property stringList buildVariant
+
+ // These are deliberately not path types
+ // We don't want to resolve them against the source directory
+ property string generatedFilesDir: "GeneratedFiles/" + product.name
+ property string qmFilesDir: product.destinationDirectory
+
+ // private properties
+ property string libraryInfix: cpp.debugInformation ? 'd' : ''
+
+ cpp.defines: {
+ var defines = ["QT_CORE_LIB"];
+ // ### QT_NO_DEBUG must be added if the current build variant is derived
+ // from the build variant "release"
+ if (!qbs.debugInformation)
+ defines.push("QT_NO_DEBUG");
+ if (namespace)
+ defines.push("QT_NAMESPACE=" + namespace);
+ if (qbs.targetOS.contains("ios"))
+ defines = defines.concat(["DARWIN_NO_CARBON", "QT_NO_CORESERVICES", "QT_NO_PRINTER",
+ "QT_NO_PRINTDIALOG", "main=qt_main"]);
+ return defines;
+ }
+ cpp.includePaths: {
+ var paths = [mkspecPath];
+ if (frameworkBuild)
+ paths.push(libPath + '/QtCore' + libInfix + '.framework/Versions/' + versionMajor + '/Headers');
+ paths.push(incPath + '/QtCore');
+ paths.push(incPath);
+ paths.push(product.buildDirectory + '/' + generatedFilesDir);
+ return paths;
+ }
+ cpp.libraryPaths: {
+ var libPaths = [libPath];
+ if (staticBuild && pluginPath)
+ libPaths.push(pluginPath + "/platforms");
+ return libPaths;
+ }
+ cpp.staticLibraries: {
+ if (qbs.targetOS.contains('windows') && !product.consoleApplication)
+ return ["qtmain" + libInfix + (cpp.debugInformation ? "d" : "") + (!qbs.toolchain.contains("mingw") ? ".lib" : "")];
+ }
+ cpp.dynamicLibraries: {
+ var libs = [];
+ if (!frameworkBuild)
+ libs=[QtFunctions.getQtLibraryName('Core' + libInfix, qtcore, qbs)];
+ if (qbs.targetOS.contains('ios') && staticBuild)
+ libs = libs.concat(["z", "m",
+ QtFunctions.getQtLibraryName("PlatformSupport", qtcore, qbs)]);
+ if (libs.length === 0)
+ return undefined;
+ return libs;
+ }
+ cpp.linkerFlags: ((qbs.targetOS.contains('ios') && staticBuild) ?
+ ["-force_load", pluginPath + "/platforms/" +
+ QtFunctions.getPlatformLibraryName("libqios", qtcore, qbs) + ".a"] : undefined)
+ cpp.frameworkPaths: frameworkBuild ? [libPath] : undefined
+ cpp.frameworks: {
+ var frameworks = [];
+ if (frameworkBuild)
+ frameworks = [QtFunctions.getQtLibraryName('Core' + libInfix, qtcore, qbs)]
+ if (qbs.targetOS.contains('ios') && staticBuild)
+ frameworks = frameworks.concat(["Foundation", "CoreFoundation"]);
+ if (frameworks.length === 0)
+ return undefined;
+ return frameworks;
+ }
+ cpp.rpaths: qbs.targetOS.contains('linux') ? [libPath] : undefined
+ cpp.positionIndependentCode: versionMajor >= 5 ? true : undefined
+ cpp.cxxFlags: {
+ var flags;
+ if (qbs.toolchain.contains('msvc')) {
+ flags = ['/Zm200'];
+ if (versionMajor < 5)
+ flags.push('/Zc:wchar_t-');
+ }
+ if (qbs.toolchain.contains('clang') && config.contains('c++11'))
+ flags.push('-stdlib=libc++');
+ return flags;
+ }
+
+ additionalProductFileTags: ["qm"]
+
+ validate: {
+ var requiredProperties = {
+ "binPath": binPath,
+ "incPath": incPath,
+ "libPath": libPath,
+ "mkspecPath": mkspecPath,
+ "version": version,
+ "config": config,
+ "qtConfig": qtConfig,
+ // Validate these in case 'version' is in some non-standard format
+ "versionMajor": versionMajor,
+ "versionMinor": versionMinor,
+ "versionPatch": versionPatch
+ };
+
+ if (!staticBuild) {
+ requiredProperties["pluginPath"] = pluginPath;
+ }
+
+ var missingProperties = [];
+ for (var i in requiredProperties) {
+ if (requiredProperties[i] === undefined) {
+ missingProperties.push("Qt.core." + i);
+ }
+ }
+
+ var invalidProperties = {};
+ if (versionMajor <= 0)
+ invalidProperties["versionMajor"] = "must be > 0";
+ if (versionMinor < 0)
+ invalidProperties["versionMinor"] = "must be >= 0";
+ if (versionPatch < 0)
+ invalidProperties["versionPatch"] = "must be >= 0";
+
+ var errorMessage = "";
+ if (missingProperties.length > 0) {
+ errorMessage += "The following Qt module properties are not set. " +
+ "Set them in your profile:\n" +
+ missingProperties.sort().join("\n");
+ }
+
+ if (Object.keys(invalidProperties).length > 0) {
+ errorMessage += "The following Qt module properties have invalid values:\n" +
+ Object.map(invalidProperties,
+ function(msg, prop) { return prop + ": " + msg; }).join("\n");
+ }
+
+ if (errorMessage.length > 0)
+ throw errorMessage;
+ }
+
+ setupRunEnvironment: {
+ if (qbs.targetOS.contains('windows')) {
+ var v = getEnv('PATH') || '';
+ if (v.length > 0 && v.charAt(0) != ';')
+ v = ';' + v;
+ v = FileInfo.toWindowsSeparators(binPath) + v;
+ putEnv('PATH', v);
+ }
+ }
+
+ FileTagger {
+ patterns: ["*.qrc"]
+ fileTags: ["qrc"]
+ }
+
+ FileTagger {
+ patterns: ["*.ts"]
+ fileTags: ["ts"]
+ }
+
+ FileTagger {
+ patterns: ["*.qdoc"]
+ fileTags: ["qdoc"]
+ }
+
+ FileTagger {
+ patterns: ["*.qdocconf"]
+ fileTags: ["qdocconf"]
+ }
+
+ FileTagger {
+ patterns: ["*.qhp"]
+ fileTags: ["qhp"]
+ }
+
+ Rule {
+ inputs: ["moc_cpp"]
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir")
+ + '/' + input.completeBaseName + ".moc"
+ fileTags: ["hpp"]
+ }
+
+ prepare: {
+ var cmd = new Command(Moc.fullPath(product),
+ Moc.args(product, input, output.fileName));
+ cmd.description = 'moc ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'codegen';
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: ["moc_hpp"]
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir")
+ + "/moc_" + input.completeBaseName + ".cpp"
+ fileTags: [ "cpp" ]
+ }
+
+ prepare: {
+ var cmd = new Command(Moc.fullPath(product),
+ Moc.args(product, input, output.fileName));
+ cmd.description = 'moc ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'codegen';
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: ["moc_hpp_inc"]
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir")
+ + "/moc_" + input.completeBaseName + ".cpp"
+ fileTags: [ "hpp" ]
+ }
+
+ prepare: {
+ var cmd = new Command(Moc.fullPath(product),
+ Moc.args(product, input, output.fileName));
+ cmd.description = 'moc ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'codegen';
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: ["qrc"]
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir")
+ + "/qrc_" + input.completeBaseName + ".cpp";
+ fileTags: ["cpp"]
+ }
+ prepare: {
+ var cmd = new Command(ModUtils.moduleProperty(product, "binPath") + '/rcc',
+ [input.fileName, '-name',
+ FileInfo.completeBaseName(input.fileName),
+ '-o', output.fileName]);
+ cmd.description = 'rcc ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'codegen';
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: ["ts"]
+
+ Artifact {
+ fileName: FileInfo.joinPaths(ModUtils.moduleProperty(product, "qmFilesDir"),
+ input.completeBaseName + ".qm")
+ fileTags: ["qm"]
+ }
+
+ prepare: {
+ var cmd = new Command(ModUtils.moduleProperty(product, "binPath") + '/'
+ + ModUtils.moduleProperty(product, "lreleaseName"),
+ ['-silent', input.fileName, '-qm', output.fileName]);
+ cmd.description = 'lrelease ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'filegen';
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: "qdocconf-main"
+ explicitlyDependsOn: ["qdoc", "qdocconf"]
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir") + "/html"
+ fileTags: ["qdoc-html"]
+ }
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir") + "/html/"
+ + ModUtils.moduleProperty(product, "qdocQhpFileName")
+ fileTags: ["qhp"]
+ }
+
+ prepare: {
+ var outputDir = outputs["qdoc-html"][0].fileName;
+ var args = [input.fileName];
+ var qtVersion = ModUtils.moduleProperty(product, "versionMajor");
+ if (qtVersion >= 5) {
+ args.push("-outputdir");
+ args.push(outputDir);
+ }
+ var cmd = new Command(ModUtils.moduleProperty(product, "binPath") + '/'
+ + ModUtils.moduleProperty(product, "qdocName"), args);
+ cmd.description = 'qdoc ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'filegen';
+ cmd.environment = ModUtils.moduleProperty(product, "qdocEnvironment");
+ cmd.environment.push("OUTDIR=" + outputDir); // Qt 4 replacement for -outputdir
+ return cmd;
+ }
+ }
+
+ Rule {
+ inputs: "qhp"
+
+ Artifact {
+ fileName: ModUtils.moduleProperty(product, "generatedFilesDir")
+ + '/' + input.completeBaseName + ".qch"
+ fileTags: ["qch"]
+ }
+
+ prepare: {
+ var args = [input.fileName];
+ args = args.concat(ModUtils.moduleProperty(product, "helpGeneratorArgs"));
+ args.push("-o");
+ args.push(output.fileName);
+ var cmd = new Command(ModUtils.moduleProperty(product, "binPath") + "/qhelpgenerator",
+ args);
+ cmd.description = 'qhelpgenerator ' + FileInfo.fileName(input.fileName);
+ cmd.highlight = 'filegen';
+ return cmd;
+ }
+ }
+}