forked from qt-creator/qt-creator
QmlProjectManager: Check the uri when generating cmake files
and use the Qt and QtQuick version specified in the qmlproject file.
Fixes: QDS-12799
Fixes: QDS-12798
Change-Id: I1b7cec3f3a1cc4c9e2c70a60a68e2acce0ce4b7e
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
(cherry picked from commit bb17d6617f
)
This commit is contained in:
committed by
Thomas Hartmann
parent
dc0c01974f
commit
15eddd9cbc
@@ -236,6 +236,22 @@ bool CMakeGenerator::ignore(const Utils::FilePath &path) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CMakeGenerator::checkUri(const QString& uri, const Utils::FilePath &path) const
|
||||||
|
{
|
||||||
|
Utils::FilePath relative = path.relativeChildPath(m_root->dir);
|
||||||
|
const QList<QStringView> pathComponents = relative.pathView().split('/', Qt::SkipEmptyParts);
|
||||||
|
const QStringList uriComponents = uri.split('.', Qt::SkipEmptyParts);
|
||||||
|
|
||||||
|
if (pathComponents.size() == uriComponents.size()) {
|
||||||
|
for (qsizetype i=0; i<pathComponents.size(); ++i) {
|
||||||
|
if (pathComponents[i] != uriComponents[i])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CMakeGenerator::createCMakeFiles(const NodePtr &node) const
|
void CMakeGenerator::createCMakeFiles(const NodePtr &node) const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_writer, return);
|
QTC_ASSERT(m_writer, return);
|
||||||
@@ -288,6 +304,11 @@ void CMakeGenerator::readQmlDir(const Utils::FilePath &filePath, NodePtr &node)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
f.close();
|
f.close();
|
||||||
|
|
||||||
|
if (!checkUri(node->uri, node->dir)) {
|
||||||
|
QString text("Unexpected uri %1");
|
||||||
|
logIssue(ProjectExplorer::Task::Warning, text.arg(node->uri), node->dir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NodePtr CMakeGenerator::findModuleFor(const NodePtr &node) const
|
NodePtr CMakeGenerator::findModuleFor(const NodePtr &node) const
|
||||||
|
@@ -48,6 +48,7 @@ private:
|
|||||||
bool isQml(const Utils::FilePath &path) const;
|
bool isQml(const Utils::FilePath &path) const;
|
||||||
bool isResource(const Utils::FilePath &path) const;
|
bool isResource(const Utils::FilePath &path) const;
|
||||||
bool ignore(const Utils::FilePath &path) const;
|
bool ignore(const Utils::FilePath &path) const;
|
||||||
|
bool checkUri(const QString& uri, const Utils::FilePath &path) const;
|
||||||
|
|
||||||
void createCMakeFiles(const NodePtr &node) const;
|
void createCMakeFiles(const NodePtr &node) const;
|
||||||
void createSourceFiles() const;
|
void createSourceFiles() const;
|
||||||
|
@@ -133,6 +133,31 @@ QString CMakeWriter::getEnvironmentVariable(const QString &key) const
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CMakeWriter::makeFindPackageBlock(const QmlBuildSystem* buildSystem) const
|
||||||
|
{
|
||||||
|
QString head = "find_package(Qt" + buildSystem->versionQt();
|
||||||
|
const QString tail = " REQUIRED COMPONENTS Core Gui Qml Quick)\n";
|
||||||
|
|
||||||
|
const QStringList versions = buildSystem->versionQtQuick().split('.', Qt::SkipEmptyParts);
|
||||||
|
if (versions.size() < 2)
|
||||||
|
return head + tail;
|
||||||
|
|
||||||
|
bool majorOk = false;
|
||||||
|
bool minorOk = false;
|
||||||
|
int major = versions[0].toInt(&majorOk);
|
||||||
|
int minor = versions[1].toInt(&minorOk);
|
||||||
|
if (!majorOk || !minorOk)
|
||||||
|
return head + tail;
|
||||||
|
|
||||||
|
const QString from = versions[0] + "." + versions[1];
|
||||||
|
QString out = head + " " + from + tail;
|
||||||
|
|
||||||
|
if (major >= 6 && minor >= 3)
|
||||||
|
out += "qt_standard_project_setup()\n";
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
QString CMakeWriter::makeRelative(const NodePtr &node, const Utils::FilePath &path) const
|
QString CMakeWriter::makeRelative(const NodePtr &node, const Utils::FilePath &path) const
|
||||||
{
|
{
|
||||||
const QString dir = node->dir.toString();
|
const QString dir = node->dir.toString();
|
||||||
|
@@ -82,6 +82,7 @@ protected:
|
|||||||
|
|
||||||
QString getEnvironmentVariable(const QString &key) const;
|
QString getEnvironmentVariable(const QString &key) const;
|
||||||
|
|
||||||
|
QString makeFindPackageBlock(const QmlBuildSystem* buildSystem) const;
|
||||||
QString makeRelative(const NodePtr &node, const Utils::FilePath &path) const;
|
QString makeRelative(const NodePtr &node, const Utils::FilePath &path) const;
|
||||||
QString makeQmlFilesBlock(const NodePtr &node) const;
|
QString makeQmlFilesBlock(const NodePtr &node) const;
|
||||||
QString makeSingletonBlock(const NodePtr &node) const;
|
QString makeSingletonBlock(const NodePtr &node) const;
|
||||||
|
@@ -40,6 +40,7 @@ void CMakeWriterV1::transformNode(NodePtr &node) const
|
|||||||
void CMakeWriterV1::writeRootCMakeFile(const NodePtr &node) const
|
void CMakeWriterV1::writeRootCMakeFile(const NodePtr &node) const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(parent(), return);
|
QTC_ASSERT(parent(), return);
|
||||||
|
QTC_ASSERT(parent()->buildSystem(), return);
|
||||||
|
|
||||||
const Utils::FilePath cmakeFolderPath = node->dir.pathAppended("cmake");
|
const Utils::FilePath cmakeFolderPath = node->dir.pathAppended("cmake");
|
||||||
if (!cmakeFolderPath.exists())
|
if (!cmakeFolderPath.exists())
|
||||||
@@ -66,6 +67,7 @@ void CMakeWriterV1::writeRootCMakeFile(const NodePtr &node) const
|
|||||||
const Utils::FilePath file = node->dir.pathAppended("CMakeLists.txt");
|
const Utils::FilePath file = node->dir.pathAppended("CMakeLists.txt");
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
const QString appName = parent()->projectName() + "App";
|
const QString appName = parent()->projectName() + "App";
|
||||||
|
const QString findPackage = makeFindPackageBlock(parent()->buildSystem());
|
||||||
|
|
||||||
QString fileSection = "";
|
QString fileSection = "";
|
||||||
const QString configFile = getEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
|
const QString configFile = getEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
|
||||||
@@ -73,7 +75,7 @@ void CMakeWriterV1::writeRootCMakeFile(const NodePtr &node) const
|
|||||||
fileSection = QString("\t\t%1").arg(configFile);
|
fileSection = QString("\t\t%1").arg(configFile);
|
||||||
|
|
||||||
const QString fileTemplate = readTemplate(":/templates/cmakeroot_v1");
|
const QString fileTemplate = readTemplate(":/templates/cmakeroot_v1");
|
||||||
const QString fileContent = fileTemplate.arg(appName, fileSection);
|
const QString fileContent = fileTemplate.arg(appName, findPackage, fileSection);
|
||||||
writeFile(file, fileContent);
|
writeFile(file, fileContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,17 +16,13 @@ set(QML_IMPORT_PATH ${QT_QML_OUTPUT_DIRECTORY}
|
|||||||
FORCE
|
FORCE
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Quick)
|
%2
|
||||||
|
|
||||||
if (Qt6_VERSION VERSION_GREATER_EQUAL 6.3)
|
|
||||||
qt_standard_project_setup()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
qt_add_executable(${CMAKE_PROJECT_NAME})
|
qt_add_executable(${CMAKE_PROJECT_NAME})
|
||||||
qt_add_resources(${CMAKE_PROJECT_NAME} "configuration"
|
qt_add_resources(${CMAKE_PROJECT_NAME} "configuration"
|
||||||
PREFIX "/"
|
PREFIX "/"
|
||||||
FILES
|
FILES
|
||||||
%2)
|
%3)
|
||||||
|
|
||||||
include(qds)
|
include(qds)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user