Commit e1e20359 authored by Christian Kandeler's avatar Christian Kandeler

qbs build: Final steps to support building plugins "out of source".

- Use the entire Export block when creating a module, not just the
  Depends items. Adapt references to the product source directory
  and the "share" directory so that they point to the respective
  locations in the install tree.
- Install dev headers for some more plugins.
- Bug fixes & polishing.

Create a "dev installation" like this:
$ qbs qtc.make_dev_package:true qbs.installRoot:<install root>

Then build your plugin against it like this:
$ qbs qtc.make_dev_package:true qbs.installRoot:<install root>
project.qbsSearchPaths:<install root>/qbs-resources
(Using qbs from 1.5 branch; 1.5.1 requires a trivial wrapper project.)

That's all. Successfully tested with all commercial plugins on Linux.

Change-Id: Ie39c4717dafcd431c533421a15f2f898783d8521
Reviewed-by: Jake Petroules's avatarJake Petroules <jake.petroules@qt.io>
Reviewed-by: Orgad Shaneh's avatarOrgad Shaneh <orgads@gmail.com>
parent 96a3d49b
......@@ -3,13 +3,15 @@ import qbs.FileInfo
Product {
property string productName: project.name
property string baseDir: sourceDirectory
name: productName + " dev headers"
condition: qtc.make_dev_package
Depends { name: "qtc" }
Group {
prefix: baseDir + '/'
files: ["**/*.h"]
qbs.install: true
qbs.installDir: qtc.ide_include_path + '/' + FileInfo.fileName(product.sourceDirectory)
qbs.installSourceBase: product.sourceDirectory
qbs.installSourceBase: baseDir
}
}
import qbs 1.0
import qbs.FileInfo
import QtcFunctions
Product {
......@@ -7,6 +8,7 @@ Product {
property bool install: true
property string installDir
property stringList installTags: type
property string fileName: FileInfo.fileName(sourceDirectory) + ".qbs"
Depends { name: "cpp" }
Depends { name: "qtc" }
......
......@@ -14,77 +14,67 @@ function getExportBlock(productFile)
}
if (line.indexOf('}') === exportIndex)
break;
exportBlock += line + '\n';
exportBlock += " " + line.trim() + '\n';
}
return exportBlock;
}
function getDependsItemsFromExportBlock(exportBlock)
function insertOrAddToProperty(product, content, propertyName, value)
{
var lines = exportBlock.split('\n');
var dependsItems = ["Depends { name: 'cpp' }"];
var dependsIndex = -1;
var currentDependsItem;
for (var i = 0; i < lines.length; ++i) {
var line = lines[i];
if (dependsIndex !== -1) {
currentDependsItem += line;
if (line.indexOf('}') === dependsIndex) {
dependsItems.push(currentDependsItem);
dependsIndex = -1;
}
continue;
}
dependsIndex = line.indexOf("Depends {");
if (dependsIndex === -1)
continue;
if (line.contains('}')) {
if (!dependsItems.contains("cpp"))
dependsItems.push(line);
dependsIndex = -1;
} else {
currentDependsItem = line;
}
var valueAsList = '[' + value + ']';
var propertyNameIndex = content.indexOf(propertyName + ':');
if (propertyNameIndex !== -1) {
var endListIndex = content.indexOf(']', propertyNameIndex);
if (endListIndex === -1)
throw "Failed to parse Export item of product '" + product.name + "'";
var contentStart = content.slice(0, endListIndex + 1);
var contentEnd = content.slice(endListIndex + 1);
return contentStart + ".concat(" + valueAsList + ')' + contentEnd;
}
return dependsItems;
return content + '\n' + propertyName + ": " + valueAsList;
}
function getDependsItems(product)
function transformedExportBlock(product, input, output)
{
var productFilePath = FileInfo.joinPaths(product.sourceDirectory,
FileInfo.fileName(product.sourceDirectory) + ".qbs");
var productFilePath = FileInfo.joinPaths(product.sourceDirectory, product.fileName);
var productFile = new TextFile(productFilePath, TextFile.ReadOnly);
try {
var exportBlock = getExportBlock(productFile);
return getDependsItemsFromExportBlock(exportBlock);
exportBlock = " Depends { name: 'cpp' }\n" + exportBlock;
var modulePath = FileInfo.joinPaths("/",
product.moduleProperty("qtc", "ide_qbs_modules_path"), product.name);
var includePath = FileInfo.joinPaths("/",
product.moduleProperty("qtc", "ide_include_path"));
var relPathToIncludes = FileInfo.relativePath(modulePath, includePath);
var absPathToIncludes = "path + '/" + relPathToIncludes + "'";
exportBlock = exportBlock.replace(/product.sourceDirectory/g, absPathToIncludes + " + '/"
+ FileInfo.fileName(product.sourceDirectory) + "'");
var dataPath = FileInfo.joinPaths("/", product.moduleProperty("qtc", "ide_data_path"));
var relPathToData = FileInfo.relativePath(modulePath, dataPath);
exportBlock = exportBlock.replace(/qtc.export_data_base/g, "path + '/"
+ relPathToData + "'");
exportBlock = insertOrAddToProperty(product, exportBlock, "cpp.includePaths",
absPathToIncludes);
var libInstallPath = FileInfo.joinPaths("/", input.moduleProperty("qbs", "installDir"));
var relPathToLibrary = FileInfo.relativePath(modulePath, libInstallPath);
var fullPathToLibrary = "path + '/" + relPathToLibrary + "/" + input.fileName + "'";
var libType = input.fileTags.contains("dynamiclibrary") ? "dynamic" : "static";
exportBlock = insertOrAddToProperty(product, exportBlock, "cpp." + libType + "Libraries",
fullPathToLibrary);
return exportBlock;
} finally {
productFile.close();
}
}
function writeModuleFile(product, input, output, dependsItems)
function writeModuleFile(output, content)
{
var moduleFile = new TextFile(output.filePath, TextFile.WriteOnly);
try {
moduleFile.writeLine("import qbs");
moduleFile.writeLine("");
moduleFile.writeLine("Module {")
for (var i = 0; i < dependsItems.length; ++i) {
moduleFile.writeLine(" " + dependsItems[i].trim());
moduleFile.writeLine("");
}
var includePath = FileInfo.joinPaths("/",
product.moduleProperty("qtc", "ide_include_path"));
var modulePath = FileInfo.joinPaths("/",
product.moduleProperty("qtc", "ide_qbs_modules_path"), product.name);
var relPathToIncludes = FileInfo.relativePath(modulePath, includePath);
moduleFile.writeLine(" cpp.includePaths: [path + '/" + relPathToIncludes + "']");
var libInstallPath = FileInfo.joinPaths("/", input.moduleProperty("qbs", "installPrefix"),
input.moduleProperty("qbs", "installDir"));
var relPathToLibrary = FileInfo.relativePath(modulePath, libInstallPath);
var libType = input.fileTags.contains("dynamiclibrary") ? "dynamic" : "static";
moduleFile.writeLine(" cpp." + libType + "Libraries: [path + '/"
+ relPathToLibrary + "/" + input.fileName + "']");
moduleFile.writeLine(content);
moduleFile.writeLine("}");
} finally {
moduleFile.close();
......
......@@ -54,6 +54,9 @@ Module {
property bool make_dev_package: false
// Will be replaced when creating modules from products
property string export_data_base: project.ide_source_tree + "/share/qtcreator"
property bool testsEnabled: Environment.getEnv("TEST") || qbs.buildVariant === "debug"
property stringList generalDefines: [
"QT_CREATOR",
......@@ -65,6 +68,7 @@ Module {
Rule {
condition: make_dev_package
inputs: [product.type.contains("dynamiclibrary") ? "dynamiclibrary" : "staticlibrary"]
explicitlyDependsOn: ["qbs"]
Artifact {
filePath: product.name + "-module.qbs"
fileTags: ["qtc.dev-module"]
......@@ -73,8 +77,10 @@ Module {
var cmd = new JavaScriptCommand();
cmd.description = "Creating " + output.fileName;
cmd.sourceCode = function() {
var dependsItems = HelperFunctions.getDependsItems(product);
HelperFunctions.writeModuleFile(product, input, output, dependsItems);
var transformedExportBlock = HelperFunctions.transformedExportBlock(product, input,
output);
HelperFunctions.writeModuleFile(output, transformedExportBlock);
};
return [cmd];
}
......
import qbs 1.0
QtcLibrary {
Project {
name: "CPlusPlus"
cpp.includePaths: base.concat("../3rdparty")
cpp.defines: base.concat([
"NDEBUG",
"CPLUSPLUS_BUILD_LIB"
])
cpp.optimization: "fast"
QtcDevHeaders { }
QtcDevHeaders {
productName: "cplusplus (3rd party)"
baseDir: sourceDirectory + "/../3rdparty/cplusplus"
}
Depends { name: "Qt.widgets" }
Depends { name: "Utils" }
QtcLibrary {
cpp.includePaths: base.concat("../3rdparty")
cpp.defines: base.concat([
"NDEBUG",
"CPLUSPLUS_BUILD_LIB"
])
cpp.optimization: "fast"
Group {
name: "ThirdPartyCPlusPlus"
prefix: "../3rdparty/cplusplus/"
files: [
"AST.cpp",
"AST.h",
"ASTClone.cpp",
"ASTMatch0.cpp",
"ASTMatcher.cpp",
"ASTMatcher.h",
"ASTPatternBuilder.cpp",
"ASTPatternBuilder.h",
"ASTVisit.cpp",
"ASTVisitor.cpp",
"ASTVisitor.h",
"ASTfwd.h",
"Bind.cpp",
"Bind.h",
"CPlusPlus.h",
"Control.cpp",
"Control.h",
"CoreTypes.cpp",
"CoreTypes.h",
"DiagnosticClient.cpp",
"DiagnosticClient.h",
"FullySpecifiedType.cpp",
"FullySpecifiedType.h",
"Keywords.cpp",
"Lexer.cpp",
"Lexer.h",
"LiteralTable.h",
"Literals.cpp",
"Literals.h",
"Matcher.cpp",
"Matcher.h",
"MemoryPool.cpp",
"MemoryPool.h",
"Name.cpp",
"Name.h",
"NameVisitor.cpp",
"NameVisitor.h",
"Names.cpp",
"Names.h",
"ObjectiveCAtKeywords.cpp",
"ObjectiveCTypeQualifiers.cpp",
"ObjectiveCTypeQualifiers.h",
"Parser.cpp",
"Parser.h",
"QtContextKeywords.cpp",
"QtContextKeywords.h",
"SafeMatcher.cpp",
"SafeMatcher.h",
"Scope.cpp",
"Scope.h",
"Symbol.cpp",
"Symbol.h",
"SymbolVisitor.h",
"Symbols.cpp",
"Symbols.h",
"Templates.cpp",
"Templates.h",
"Token.cpp",
"Token.h",
"TranslationUnit.cpp",
"TranslationUnit.h",
"Type.cpp",
"Type.h",
"TypeVisitor.cpp",
"TypeVisitor.h",
]
}
Depends { name: "Qt.widgets" }
Depends { name: "Utils" }
Group {
name: "General"
files: [
"AlreadyConsideredClassContainer.h",
"ASTParent.cpp", "ASTParent.h",
"ASTPath.cpp", "ASTPath.h",
"BackwardsScanner.cpp", "BackwardsScanner.h",
"CppDocument.cpp", "CppDocument.h",
"CppRewriter.cpp", "CppRewriter.h",
"cppmodelmanagerbase.cpp", "cppmodelmanagerbase.h",
"DependencyTable.cpp", "DependencyTable.h",
"DeprecatedGenTemplateInstance.cpp", "DeprecatedGenTemplateInstance.h",
"ExpressionUnderCursor.cpp", "ExpressionUnderCursor.h",
"FastPreprocessor.cpp", "FastPreprocessor.h",
"FindUsages.cpp", "FindUsages.h",
"Icons.cpp", "Icons.h",
"LookupContext.cpp", "LookupContext.h",
"LookupItem.cpp", "LookupItem.h",
"Macro.cpp", "Macro.h",
"MatchingText.cpp", "MatchingText.h",
"NamePrettyPrinter.cpp", "NamePrettyPrinter.h",
"Overview.cpp", "Overview.h",
"OverviewModel.cpp", "OverviewModel.h",
"PPToken.cpp", "PPToken.h",
"PreprocessorClient.cpp", "PreprocessorClient.h",
"PreprocessorEnvironment.cpp", "PreprocessorEnvironment.h",
"ResolveExpression.cpp", "ResolveExpression.h",
"SimpleLexer.cpp", "SimpleLexer.h",
"SnapshotSymbolVisitor.cpp", "SnapshotSymbolVisitor.h",
"SymbolNameVisitor.cpp", "SymbolNameVisitor.h",
"TypeOfExpression.cpp", "TypeOfExpression.h",
"TypePrettyPrinter.cpp", "TypePrettyPrinter.h",
"cplusplus.qrc",
"findcdbbreakpoint.cpp", "findcdbbreakpoint.h",
"pp-cctype.h",
"pp-engine.cpp", "pp-engine.h",
"pp-scanner.cpp", "pp-scanner.h",
"pp.h",
]
}
Group {
name: "ThirdPartyCPlusPlus"
prefix: "../3rdparty/cplusplus/"
files: [
"AST.cpp",
"AST.h",
"ASTClone.cpp",
"ASTMatch0.cpp",
"ASTMatcher.cpp",
"ASTMatcher.h",
"ASTPatternBuilder.cpp",
"ASTPatternBuilder.h",
"ASTVisit.cpp",
"ASTVisitor.cpp",
"ASTVisitor.h",
"ASTfwd.h",
"Bind.cpp",
"Bind.h",
"CPlusPlus.h",
"Control.cpp",
"Control.h",
"CoreTypes.cpp",
"CoreTypes.h",
"DiagnosticClient.cpp",
"DiagnosticClient.h",
"FullySpecifiedType.cpp",
"FullySpecifiedType.h",
"Keywords.cpp",
"Lexer.cpp",
"Lexer.h",
"LiteralTable.h",
"Literals.cpp",
"Literals.h",
"Matcher.cpp",
"Matcher.h",
"MemoryPool.cpp",
"MemoryPool.h",
"Name.cpp",
"Name.h",
"NameVisitor.cpp",
"NameVisitor.h",
"Names.cpp",
"Names.h",
"ObjectiveCAtKeywords.cpp",
"ObjectiveCTypeQualifiers.cpp",
"ObjectiveCTypeQualifiers.h",
"Parser.cpp",
"Parser.h",
"QtContextKeywords.cpp",
"QtContextKeywords.h",
"SafeMatcher.cpp",
"SafeMatcher.h",
"Scope.cpp",
"Scope.h",
"Symbol.cpp",
"Symbol.h",
"SymbolVisitor.h",
"Symbols.cpp",
"Symbols.h",
"Templates.cpp",
"Templates.h",
"Token.cpp",
"Token.h",
"TranslationUnit.cpp",
"TranslationUnit.h",
"Type.cpp",
"Type.h",
"TypeVisitor.cpp",
"TypeVisitor.h",
]
}
Group {
name: "General"
files: [
"AlreadyConsideredClassContainer.h",
"ASTParent.cpp", "ASTParent.h",
"ASTPath.cpp", "ASTPath.h",
"BackwardsScanner.cpp", "BackwardsScanner.h",
"CppDocument.cpp", "CppDocument.h",
"CppRewriter.cpp", "CppRewriter.h",
"cppmodelmanagerbase.cpp", "cppmodelmanagerbase.h",
"DependencyTable.cpp", "DependencyTable.h",
"DeprecatedGenTemplateInstance.cpp", "DeprecatedGenTemplateInstance.h",
"ExpressionUnderCursor.cpp", "ExpressionUnderCursor.h",
"FastPreprocessor.cpp", "FastPreprocessor.h",
"FindUsages.cpp", "FindUsages.h",
"Icons.cpp", "Icons.h",
"LookupContext.cpp", "LookupContext.h",
"LookupItem.cpp", "LookupItem.h",
"Macro.cpp", "Macro.h",
"MatchingText.cpp", "MatchingText.h",
"NamePrettyPrinter.cpp", "NamePrettyPrinter.h",
"Overview.cpp", "Overview.h",
"OverviewModel.cpp", "OverviewModel.h",
"PPToken.cpp", "PPToken.h",
"PreprocessorClient.cpp", "PreprocessorClient.h",
"PreprocessorEnvironment.cpp", "PreprocessorEnvironment.h",
"ResolveExpression.cpp", "ResolveExpression.h",
"SimpleLexer.cpp", "SimpleLexer.h",
"SnapshotSymbolVisitor.cpp", "SnapshotSymbolVisitor.h",
"SymbolNameVisitor.cpp", "SymbolNameVisitor.h",
"TypeOfExpression.cpp", "TypeOfExpression.h",
"TypePrettyPrinter.cpp", "TypePrettyPrinter.h",
"cplusplus.qrc",
"findcdbbreakpoint.cpp", "findcdbbreakpoint.h",
"pp-cctype.h",
"pp-engine.cpp", "pp-engine.h",
"pp-scanner.cpp", "pp-scanner.h",
"pp.h",
]
}
Export {
cpp.includePaths: [
"../3rdparty"
]
Export {
cpp.includePaths: [
product.sourceDirectory + "/../3rdparty"
]
}
}
}
import qbs 1.0
QtcLibrary {
Project {
name: "LanguageUtils"
cpp.defines: base.concat([
"LANGUAGEUTILS_BUILD_DIR"
])
cpp.optimization: "fast"
QtcDevHeaders { }
Depends { name: "Qt.core" }
QtcLibrary {
cpp.defines: base.concat(["LANGUAGEUTILS_BUILD_DIR"])
cpp.optimization: "fast"
files: [
"componentversion.cpp",
"componentversion.h",
"fakemetaobject.cpp",
"fakemetaobject.h",
"languageutils_global.h",
]
}
Depends { name: "Qt.core" }
files: [
"componentversion.cpp",
"componentversion.h",
"fakemetaobject.cpp",
"fakemetaobject.h",
"languageutils_global.h",
]
}
}
import qbs 1.0
QtcLibrary {
Project {
name: "QmlJS"
cpp.defines: base.concat([
"QMLJS_BUILD_DIR"
])
cpp.optimization: "fast"
QtcDevHeaders { }
Depends { name: "ExtensionSystem" }
Depends { name: "Utils" }
Depends { name: "LanguageUtils" }
Depends { name: "CPlusPlus" }
Depends { name: "Qt"; submodules: ["widgets", "xml"] }
QtcLibrary {
cpp.defines: base.concat(["QMLJS_BUILD_DIR"])
cpp.optimization: "fast"
Group {
name: "General"
files: [
"jsoncheck.cpp", "jsoncheck.h",
"persistenttrie.cpp", "persistenttrie.h",
"qmljs_global.h",
"qmljsbind.cpp", "qmljsbind.h",
"qmljsbundle.cpp", "qmljsbundle.h",
"qmljscheck.cpp", "qmljscheck.h",
"qmljscodeformatter.cpp", "qmljscodeformatter.h",
"qmljscompletioncontextfinder.cpp", "qmljscompletioncontextfinder.h",
"qmljsconstants.h",
"qmljscontext.cpp", "qmljscontext.h",
"qmljsdescribevalue.cpp", "qmljsdescribevalue.h",
"qmljsdocument.cpp", "qmljsdocument.h",
"qmljsevaluate.cpp", "qmljsevaluate.h",
"qmljsfindexportedcpptypes.cpp", "qmljsfindexportedcpptypes.h",
"qmljsicons.cpp", "qmljsicons.h",
"qmljsicontextpane.h",
"qmljsimportdependencies.cpp", "qmljsimportdependencies.h",
"qmljsindenter.cpp", "qmljsindenter.h",
"qmljsinterpreter.cpp", "qmljsinterpreter.h",
"qmljsdialect.cpp", "qmljsdialect.h",
"qmljslineinfo.cpp", "qmljslineinfo.h",
"qmljslink.cpp", "qmljslink.h",
"qmljsmodelmanagerinterface.cpp", "qmljsmodelmanagerinterface.h",
"qmljsplugindumper.cpp", "qmljsplugindumper.h",
"qmljspropertyreader.cpp", "qmljspropertyreader.h",
"qmljsqrcparser.cpp", "qmljsqrcparser.h",
"qmljsreformatter.cpp", "qmljsreformatter.h",
"qmljsrewriter.cpp", "qmljsrewriter.h",
"qmljsscanner.cpp", "qmljsscanner.h",
"qmljsscopeastpath.cpp", "qmljsscopeastpath.h",
"qmljsscopebuilder.cpp", "qmljsscopebuilder.h",
"qmljsscopechain.cpp", "qmljsscopechain.h",
"qmljssimplereader.cpp", "qmljssimplereader.h",
"qmljsstaticanalysismessage.cpp", "qmljsstaticanalysismessage.h",
"qmljstypedescriptionreader.cpp", "qmljstypedescriptionreader.h",
"qmljsutils.cpp", "qmljsutils.h",
"qmljsvalueowner.cpp", "qmljsvalueowner.h",
"qmljsviewercontext.cpp", "qmljsviewercontext.h"
]
}
Depends { name: "ExtensionSystem" }
Depends { name: "Utils" }
Depends { name: "LanguageUtils" }
Depends { name: "CPlusPlus" }
Depends { name: "Qt"; submodules: ["widgets", "xml"] }
Group {
name: "Parser"
prefix: "parser/"
files: [
"qmldirparser.cpp", "qmldirparser_p.h",
"qmlerror.cpp", "qmlerror.h",
"qmljsast.cpp", "qmljsast_p.h",
"qmljsastfwd_p.h",
"qmljsastvisitor.cpp", "qmljsastvisitor_p.h",
"qmljsengine_p.cpp", "qmljsengine_p.h",
"qmljsglobal_p.h",
"qmljsgrammar.cpp", "qmljsgrammar_p.h",
"qmljskeywords_p.h",
"qmljslexer.cpp", "qmljslexer_p.h",
"qmljsmemorypool_p.h",
"qmljsparser.cpp", "qmljsparser_p.h",
]
}
Group {
name: "General"
files: [
"jsoncheck.cpp", "jsoncheck.h",
"persistenttrie.cpp", "persistenttrie.h",
"qmljs_global.h",
"qmljsbind.cpp", "qmljsbind.h",
"qmljsbundle.cpp", "qmljsbundle.h",
"qmljscheck.cpp", "qmljscheck.h",
"qmljscodeformatter.cpp", "qmljscodeformatter.h",
"qmljscompletioncontextfinder.cpp", "qmljscompletioncontextfinder.h",
"qmljsconstants.h",
"qmljscontext.cpp", "qmljscontext.h",
"qmljsdescribevalue.cpp", "qmljsdescribevalue.h",
"qmljsdocument.cpp", "qmljsdocument.h",
"qmljsevaluate.cpp", "qmljsevaluate.h",
"qmljsfindexportedcpptypes.cpp", "qmljsfindexportedcpptypes.h",
"qmljsicons.cpp", "qmljsicons.h",
"qmljsicontextpane.h",
"qmljsimportdependencies.cpp", "qmljsimportdependencies.h",
"qmljsindenter.cpp", "qmljsindenter.h",
"qmljsinterpreter.cpp", "qmljsinterpreter.h",
"qmljsdialect.cpp", "qmljsdialect.h",
"qmljslineinfo.cpp", "qmljslineinfo.h",
"qmljslink.cpp", "qmljslink.h",
"qmljsmodelmanagerinterface.cpp", "qmljsmodelmanagerinterface.h",
"qmljsplugindumper.cpp", "qmljsplugindumper.h",
"qmljspropertyreader.cpp", "qmljspropertyreader.h",
"qmljsqrcparser.cpp", "qmljsqrcparser.h",
"qmljsreformatter.cpp", "qmljsreformatter.h",
"qmljsrewriter.cpp", "qmljsrewriter.h",
"qmljsscanner.cpp", "qmljsscanner.h",
"qmljsscopeastpath.cpp", "qmljsscopeastpath.h",
"qmljsscopebuilder.cpp", "qmljsscopebuilder.h",
"qmljsscopechain.cpp", "qmljsscopechain.h",
"qmljssimplereader.cpp", "qmljssimplereader.h",
"qmljsstaticanalysismessage.cpp", "qmljsstaticanalysismessage.h",
"qmljstypedescriptionreader.cpp", "qmljstypedescriptionreader.h",
"qmljsutils.cpp", "qmljsutils.h",
"qmljsvalueowner.cpp", "qmljsvalueowner.h",
"qmljsviewercontext.cpp", "qmljsviewercontext.h"
]
}
Export {
Depends { name: "CPlusPlus" }
Depends { name: "LanguageUtils" }
Group {
name: "Parser"
prefix: "parser/"
files: [
"qmldirparser.cpp", "qmldirparser_p.h",
"qmlerror.cpp", "qmlerror.h",
"qmljsast.cpp", "qmljsast_p.h",
"qmljsastfwd_p.h",
"qmljsastvisitor.cpp", "qmljsastvisitor_p.h",
"qmljsengine_p.cpp", "qmljsengine_p.h",
"qmljsglobal_p.h",
"qmljsgrammar.cpp", "qmljsgrammar_p.h",
"qmljskeywords_p.h",
"qmljslexer.cpp", "qmljslexer_p.h",
"qmljsmemorypool_p.h",
"qmljsparser.cpp", "qmljsparser_p.h",
]
}
Export {
Depends { name: "CPlusPlus" }
Depends { name: "LanguageUtils" }
}
}
}
This diff is collapsed.
import qbs 1.0
import QtcPlugin
import qbs.FileInfo
Project {
name: "QmlDesigner"
......@@ -8,6 +7,8 @@ Project {
QtcDevHeaders { }
QtcPlugin {
fileName: FileInfo.fileName(filePath)
Depends {
name: "Qt";
submodules: [
......@@ -59,13 +60,13 @@ Project {
Export {
Depends { name: "QmlJS" }
cpp.includePaths: base.concat([
".",
"components/componentcore",
"components/formeditor",
"components/integration",
"designercore",
"designercore/include",
project.ide_source_tree + "/share/qtcreator/qml/qmlpuppet/interfaces",
product.sourceDirectory,
product.sourceDirectory + "/components/componentcore",
product.sourceDirectory + "/components/formeditor",
product.sourceDirectory + "/components/integration",
product.sourceDirectory + "/designercore",
product.sourceDirectory + "/designercore/include",
qtc.export_data_base + "/qml/qmlpuppet/interfaces",
])
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment