forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/12.0' into qds/dev
Change-Id: I264d3ce1a2d568c9f68c12c9ecd58fefd4c672a5
This commit is contained in:
2
.github/workflows/build_cmake.yml
vendored
2
.github/workflows/build_cmake.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
|
||||
env:
|
||||
QT_VERSION: 6.6.0
|
||||
MACOS_DEPLOYMENT_TARGET: 10.15
|
||||
MACOS_DEPLOYMENT_TARGET: 11.0
|
||||
CLANG_VERSION: 17.0.1
|
||||
ELFUTILS_VERSION: 0.175
|
||||
CMAKE_VERSION: 3.21.1
|
||||
|
@@ -17,8 +17,11 @@ https://doc.qt.io/qtcreator/creator-overview.html
|
||||
The standalone binary packages support the following platforms:
|
||||
|
||||
* Windows 10 (64-bit) or later
|
||||
* (K)Ubuntu Linux 20.04 (64-bit) or later
|
||||
* macOS 10.15 or later
|
||||
* (K)Ubuntu Linux 22.04 (64-bit) or later
|
||||
* macOS 11 or later
|
||||
|
||||
When you compile Qt Creator yourself, the Qt version that you build with
|
||||
determines the supported platforms.
|
||||
|
||||
## Contributing
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
set(IDE_VERSION "12.0.1") # The IDE version.
|
||||
set(IDE_VERSION "12.0.2") # The IDE version.
|
||||
set(IDE_VERSION_COMPAT "12.0.0") # The IDE Compatibility version.
|
||||
set(IDE_VERSION_DISPLAY "12.0.1") # The IDE display version.
|
||||
set(IDE_VERSION_DISPLAY "12.0.2") # The IDE display version.
|
||||
set(IDE_COPYRIGHT_YEAR "2023") # The IDE current copyright year.
|
||||
|
||||
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
|
||||
|
@@ -13,7 +13,7 @@ instructions:
|
||||
variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.0-released/Qt"
|
||||
- type: EnvironmentVariable
|
||||
variableName: QTC_QT_MODULES
|
||||
variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine"
|
||||
variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine"
|
||||
- type: EnvironmentVariable
|
||||
variableName: MACOSX_DEPLOYMENT_TARGET
|
||||
variableValue: 10.15
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
@@ -1,4 +1,4 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (C) 2024 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||
|
||||
/*!
|
||||
@@ -183,6 +183,16 @@
|
||||
To hide the output, select the \inlineimage icons/rightsidebaricon.png
|
||||
(\uicontrol {Hide/Show Right Sidebar}) button or press \key {Alt+Shift+0}.
|
||||
|
||||
\section1 CLICOLOR_FORCE Environment Variable
|
||||
|
||||
\QC sets the environment variable \c CLICOLOR_FORCE to \e 1 to show
|
||||
ANSI-colored output for CMake. This might affect the process output.
|
||||
|
||||
If the output looks incorrect or different from earlier \QC versions, try
|
||||
setting \c CLICOLOR_FORCE to \e 0 in \uicontrol {Use Build Environment}.
|
||||
|
||||
\image qtcreator-build-configuration-set-clicolor-force.webp {Build Environment with CLICOLOR_FORCE set}
|
||||
|
||||
\section1 CMake Build Steps
|
||||
|
||||
\QC builds CMake projects by running \c {cmake . --build}, which then runs
|
||||
|
@@ -25,7 +25,7 @@
|
||||
|
||||
\section1 Linux
|
||||
|
||||
(K)Ubuntu Linux 20.04 (64-bit) or later is supported.
|
||||
(K)Ubuntu Linux 22.04 (64-bit) or later is supported.
|
||||
|
||||
To build Qt applications using \QC on Linux, you usually need the
|
||||
following:
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
\section1 macOS
|
||||
|
||||
\macos 10.15 or later is supported with the Xcode tools for your \macos
|
||||
\macos 11.0 or later is supported with the Xcode tools for your \macos
|
||||
version available in the Mac App Store.
|
||||
|
||||
\section1 Windows
|
||||
|
@@ -7,7 +7,7 @@ Module {
|
||||
property string qtcreator_display_version: '12.0.1'
|
||||
property string ide_version_major: '12'
|
||||
property string ide_version_minor: '0'
|
||||
property string ide_version_release: '1'
|
||||
property string ide_version_release: '2'
|
||||
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
|
||||
+ ide_version_release
|
||||
|
||||
|
@@ -1125,6 +1125,11 @@ public:
|
||||
[[maybe_unused]] const Document *context,
|
||||
[[maybe_unused]] ValueOwner *valueOwner,
|
||||
[[maybe_unused]] Snapshot *snapshot) {}
|
||||
virtual Utils::FilePaths prioritizeImportPaths([[maybe_unused]] const Document *context,
|
||||
const Utils::FilePaths &importPaths)
|
||||
{
|
||||
return importPaths;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace QmlJS
|
||||
|
@@ -219,6 +219,7 @@ Context::ImportsPerDocument LinkPrivate::linkImports()
|
||||
document.data(),
|
||||
m_valueOwner,
|
||||
&m_snapshot);
|
||||
m_importPaths = provider->prioritizeImportPaths(document.data(), m_importPaths);
|
||||
}
|
||||
|
||||
populateImportedTypes(imports, document);
|
||||
|
@@ -386,10 +386,13 @@ QString TerminalView::textFromSelection() const
|
||||
if (!d->m_selection)
|
||||
return {};
|
||||
|
||||
if (d->m_selection->start == d->m_selection->end)
|
||||
return {};
|
||||
|
||||
CellIterator it = d->m_surface->iteratorAt(d->m_selection->start);
|
||||
CellIterator end = d->m_surface->iteratorAt(d->m_selection->end);
|
||||
|
||||
if (it.position() >= end.position()) {
|
||||
if (it.position() > end.position()) {
|
||||
qCWarning(selectionLog) << "Invalid selection: start >= end";
|
||||
return {};
|
||||
}
|
||||
@@ -1070,7 +1073,7 @@ void TerminalView::mousePressEvent(QMouseEvent *event)
|
||||
}
|
||||
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
if (std::chrono::system_clock::now() - d->m_lastDoubleClick < 500ms) {
|
||||
if (d->m_selection && std::chrono::system_clock::now() - d->m_lastDoubleClick < 500ms) {
|
||||
d->m_selectLineMode = true;
|
||||
const Selection newSelection{d->m_surface->gridToPos(
|
||||
{0,
|
||||
|
@@ -14,6 +14,11 @@ namespace Timeline {
|
||||
class TraceEvent : public SafeCastable<TraceEvent>
|
||||
{
|
||||
public:
|
||||
TraceEvent(const TraceEvent &) = default;
|
||||
TraceEvent(TraceEvent &&) = default;
|
||||
TraceEvent &operator=(const TraceEvent &) = default;
|
||||
TraceEvent &operator=(TraceEvent &&) = default;
|
||||
|
||||
qint64 timestamp() const { return m_timestamp; }
|
||||
void setTimestamp(qint64 timestamp) { m_timestamp = timestamp; }
|
||||
|
||||
@@ -29,11 +34,6 @@ protected:
|
||||
: m_timestamp(timestamp), m_typeIndex(typeIndex), m_classId(classId)
|
||||
{}
|
||||
|
||||
TraceEvent(const TraceEvent &) = default;
|
||||
TraceEvent(TraceEvent &&) = default;
|
||||
TraceEvent &operator=(const TraceEvent &) = default;
|
||||
TraceEvent &operator=(TraceEvent &&) = default;
|
||||
|
||||
private:
|
||||
qint64 m_timestamp;
|
||||
qint32 m_typeIndex;
|
||||
|
@@ -15,6 +15,11 @@ namespace Timeline {
|
||||
class TraceEventType : public SafeCastable<TraceEventType>
|
||||
{
|
||||
public:
|
||||
TraceEventType(const TraceEventType &) = default;
|
||||
TraceEventType(TraceEventType &&) = default;
|
||||
TraceEventType &operator=(const TraceEventType &) = default;
|
||||
TraceEventType &operator=(TraceEventType &&) = default;
|
||||
|
||||
const QString &displayName() const { return m_displayName; }
|
||||
void setDisplayName(const QString &displayName) { m_displayName = displayName; }
|
||||
|
||||
@@ -28,11 +33,6 @@ protected:
|
||||
: m_displayName(displayName), m_classId(classId), m_feature(feature)
|
||||
{}
|
||||
|
||||
TraceEventType(const TraceEventType &) = default;
|
||||
TraceEventType(TraceEventType &&) = default;
|
||||
TraceEventType &operator=(const TraceEventType &) = default;
|
||||
TraceEventType &operator=(TraceEventType &&) = default;
|
||||
|
||||
private:
|
||||
QString m_displayName;
|
||||
qint32 m_classId;
|
||||
|
@@ -604,7 +604,7 @@ TreeItem::~TreeItem()
|
||||
{
|
||||
QTC_CHECK(m_parent == nullptr);
|
||||
QTC_CHECK(m_model == nullptr);
|
||||
removeChildren();
|
||||
removeChildrenSilently();
|
||||
}
|
||||
|
||||
TreeItem *TreeItem::childAt(int pos) const
|
||||
@@ -714,6 +714,13 @@ void TreeItem::removeChildren()
|
||||
}
|
||||
}
|
||||
|
||||
void TreeItem::removeChildrenSilently()
|
||||
{
|
||||
if (childCount() == 0)
|
||||
return;
|
||||
clear();
|
||||
}
|
||||
|
||||
void TreeItem::sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp)
|
||||
{
|
||||
if (m_model) {
|
||||
@@ -1060,6 +1067,13 @@ TreeItem *BaseTreeModel::rootItem() const
|
||||
}
|
||||
|
||||
void BaseTreeModel::setRootItem(TreeItem *item)
|
||||
{
|
||||
beginResetModel();
|
||||
setRootItemInternal(item);
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void BaseTreeModel::setRootItemInternal(TreeItem *item)
|
||||
{
|
||||
QTC_ASSERT(item, return);
|
||||
QTC_ASSERT(item->m_model == nullptr, return);
|
||||
@@ -1067,19 +1081,17 @@ void BaseTreeModel::setRootItem(TreeItem *item)
|
||||
QTC_ASSERT(item != m_root, return);
|
||||
QTC_CHECK(m_root);
|
||||
|
||||
beginResetModel();
|
||||
if (m_root) {
|
||||
QTC_CHECK(m_root->m_parent == nullptr);
|
||||
QTC_CHECK(m_root->m_model == this);
|
||||
// needs to be done explicitly before setting the model to 0, otherwise it might lead to a
|
||||
// crash inside a view or proxy model, especially if there are selected items
|
||||
m_root->removeChildren();
|
||||
m_root->removeChildrenSilently();
|
||||
m_root->m_model = nullptr;
|
||||
delete m_root;
|
||||
}
|
||||
m_root = item;
|
||||
item->propagateModel(this);
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void BaseTreeModel::setHeader(const QStringList &displays)
|
||||
|
@@ -39,6 +39,7 @@ public:
|
||||
|
||||
void removeChildAt(int pos);
|
||||
void removeChildren();
|
||||
void removeChildrenSilently();
|
||||
void sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp);
|
||||
void update();
|
||||
void updateAll();
|
||||
@@ -180,7 +181,8 @@ protected:
|
||||
void clear();
|
||||
|
||||
TreeItem *rootItem() const;
|
||||
void setRootItem(TreeItem *item);
|
||||
void setRootItem(TreeItem *item); // resets the model
|
||||
void setRootItemInternal(TreeItem *item);
|
||||
TreeItem *itemForIndex(const QModelIndex &) const;
|
||||
QModelIndex indexForItem(const TreeItem *needle) const;
|
||||
|
||||
|
@@ -126,10 +126,8 @@ void AndroidPlugin::kitsRestored()
|
||||
return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE);
|
||||
}).isEmpty();
|
||||
|
||||
if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled) {
|
||||
connect(Core::ICore::instance(), &Core::ICore::coreOpened, this,
|
||||
&AndroidPlugin::askUserAboutAndroidSetup, Qt::QueuedConnection);
|
||||
}
|
||||
if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled)
|
||||
askUserAboutAndroidSetup();
|
||||
|
||||
AndroidConfigurations::registerNewToolChains();
|
||||
AndroidConfigurations::updateAutomaticKitList();
|
||||
|
@@ -392,6 +392,7 @@ Utils::ChangeSet convertReplacements(const QTextDocument *doc,
|
||||
.size();
|
||||
|
||||
QString replacementText = QString::fromStdString(replacement.getReplacementText().str());
|
||||
replacementText.replace("\r", "");
|
||||
auto sameCharAt = [&](int replacementOffset) {
|
||||
if (replacementText.size() <= replacementOffset || replacementOffset < 0)
|
||||
return false;
|
||||
@@ -782,7 +783,8 @@ void ClangFormatBaseIndenter::autoIndent(const QTextCursor &cursor,
|
||||
}
|
||||
}
|
||||
|
||||
clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName)
|
||||
clang::format::FormatStyle ClangFormatBaseIndenter::overrideStyle(
|
||||
const Utils::FilePath &fileName) const
|
||||
{
|
||||
const ProjectExplorer::Project *projectForFile
|
||||
= ProjectExplorer::ProjectManager::projectForFile(fileName);
|
||||
@@ -792,6 +794,9 @@ clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName)
|
||||
? projectForFile->editorConfiguration()->codeStyle("Cpp")->currentPreferences()
|
||||
: TextEditor::TextEditorSettings::codeStyle("Cpp")->currentPreferences();
|
||||
|
||||
if (m_overriddenPreferences)
|
||||
preferences = m_overriddenPreferences->currentPreferences();
|
||||
|
||||
Utils::FilePath filePath = filePathToCurrentSettings(preferences);
|
||||
|
||||
if (!filePath.exists())
|
||||
@@ -854,4 +859,9 @@ const clang::format::FormatStyle &ClangFormatBaseIndenter::styleForFile() const
|
||||
return m_cachedStyle.style;
|
||||
}
|
||||
|
||||
void ClangFormatBaseIndenter::setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences)
|
||||
{
|
||||
m_overriddenPreferences = preferences;
|
||||
}
|
||||
|
||||
} // namespace ClangFormat
|
||||
|
@@ -49,6 +49,8 @@ public:
|
||||
|
||||
const clang::format::FormatStyle &styleForFile() const;
|
||||
|
||||
void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences);
|
||||
|
||||
protected:
|
||||
virtual bool formatCodeInsteadOfIndent() const { return false; }
|
||||
virtual bool formatWhileTyping() const { return false; }
|
||||
@@ -84,6 +86,9 @@ private:
|
||||
};
|
||||
|
||||
mutable CachedStyle m_cachedStyle;
|
||||
|
||||
clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) const;
|
||||
TextEditor::ICodeStylePreferences *m_overriddenPreferences = nullptr;
|
||||
};
|
||||
|
||||
} // namespace ClangFormat
|
||||
|
@@ -129,7 +129,9 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc
|
||||
displaySettings.m_visualizeWhitespace = true;
|
||||
d->preview->setDisplaySettings(displaySettings);
|
||||
d->preview->setPlainText(QLatin1String(CppEditor::Constants::DEFAULT_CODE_STYLE_SNIPPETS[0]));
|
||||
d->preview->textDocument()->setIndenter(new ClangFormatIndenter(d->preview->document()));
|
||||
auto *indenter = new ClangFormatIndenter(d->preview->document());
|
||||
indenter->setOverriddenPreferences(codeStyle);
|
||||
d->preview->textDocument()->setIndenter(indenter);
|
||||
d->preview->textDocument()->setFontSettings(TextEditor::TextEditorSettings::fontSettings());
|
||||
d->preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter);
|
||||
d->preview->textDocument()->indenter()->setFileName(fileName);
|
||||
@@ -271,7 +273,7 @@ void ClangFormatConfigWidget::updatePreview()
|
||||
QTextCursor cursor(d->preview->document());
|
||||
cursor.setPosition(0);
|
||||
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
||||
d->preview->textDocument()->autoIndent(cursor);
|
||||
d->preview->textDocument()->autoFormatOrIndent(cursor);
|
||||
}
|
||||
|
||||
std::string ClangFormatConfigWidget::readFile(const QString &path)
|
||||
|
@@ -216,7 +216,8 @@ void CMakeBuildSystem::requestDebugging()
|
||||
|
||||
bool CMakeBuildSystem::supportsAction(Node *context, ProjectAction action, const Node *node) const
|
||||
{
|
||||
if (dynamic_cast<CMakeTargetNode *>(context))
|
||||
const auto cmakeTarget = dynamic_cast<CMakeTargetNode *>(context);
|
||||
if (cmakeTarget && cmakeTarget->productType() != ProductType::Other)
|
||||
return action == ProjectAction::AddNewFile || action == ProjectAction::AddExistingFile
|
||||
|| action == ProjectAction::AddExistingDirectory || action == ProjectAction::Rename
|
||||
|| action == ProjectAction::RemoveFile;
|
||||
@@ -1623,7 +1624,9 @@ CMakeBuildConfiguration *CMakeBuildSystem::cmakeBuildConfiguration() const
|
||||
static FilePaths librarySearchPaths(const CMakeBuildSystem *bs, const QString &buildKey)
|
||||
{
|
||||
const CMakeBuildTarget cmakeBuildTarget
|
||||
= Utils::findOrDefault(bs->buildTargets(), Utils::equal(&CMakeBuildTarget::title, buildKey));
|
||||
= Utils::findOrDefault(bs->buildTargets(), [buildKey](const auto &target) {
|
||||
return target.title == buildKey && target.targetType != UtilityType;
|
||||
});
|
||||
|
||||
return cmakeBuildTarget.libraryDirectories;
|
||||
}
|
||||
|
@@ -48,10 +48,6 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
|
||||
continue;
|
||||
const int index = target.title.indexOf(input, 0, Qt::CaseInsensitive);
|
||||
if (index >= 0) {
|
||||
const FilePath path = target.backtrace.isEmpty()
|
||||
? cmakeProject->projectFilePath()
|
||||
: target.backtrace.last().path;
|
||||
const int line = target.backtrace.isEmpty() ? 0 : target.backtrace.last().line;
|
||||
const FilePath projectPath = cmakeProject->projectFilePath();
|
||||
const QString displayName = target.title;
|
||||
LocatorFilterEntry entry;
|
||||
@@ -62,11 +58,20 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
|
||||
return AcceptResult();
|
||||
};
|
||||
}
|
||||
entry.linkForEditor = {path, line};
|
||||
entry.extraInfo = path.shortNativePath();
|
||||
bool realTarget = false;
|
||||
if (!target.backtrace.isEmpty() && target.targetType != UtilityType) {
|
||||
const FilePath path = target.backtrace.last().path;
|
||||
const int line = target.backtrace.last().line;
|
||||
entry.linkForEditor = {path, line};
|
||||
entry.extraInfo = path.shortNativePath();
|
||||
realTarget = true;
|
||||
} else {
|
||||
entry.extraInfo = projectPath.shortNativePath();
|
||||
}
|
||||
entry.highlightInfo = {index, int(input.length())};
|
||||
entry.filePath = cmakeProject->projectFilePath();
|
||||
entries.append(entry);
|
||||
if (acceptor || realTarget)
|
||||
entries.append(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -307,6 +307,8 @@ QVariant DocumentModelPrivate::data(const QModelIndex &index, int role) const
|
||||
return QVariant();
|
||||
case Qt::ToolTipRole:
|
||||
return entry->filePath().isEmpty() ? entry->displayName() : entry->filePath().toUserOutput();
|
||||
case DocumentModel::FilePathRole:
|
||||
return entry->filePath().toVariant();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@@ -69,6 +69,8 @@ public:
|
||||
static QList<IEditor *> editorsForDocuments(const QList<IDocument *> &entries);
|
||||
static QList<IEditor *> editorsForOpenedDocuments();
|
||||
|
||||
static const int FilePathRole = Qt::UserRole + 23;
|
||||
|
||||
private:
|
||||
DocumentModel();
|
||||
};
|
||||
|
@@ -17,6 +17,8 @@
|
||||
#include <QApplication>
|
||||
#include <QMenu>
|
||||
|
||||
using namespace Utils;
|
||||
|
||||
namespace Core::Internal {
|
||||
|
||||
class ProxyModel : public QAbstractProxyModel
|
||||
@@ -253,8 +255,8 @@ QVariant ProxyModel::data(const QModelIndex &index, int role) const
|
||||
const QVariant sourceDecoration = QAbstractProxyModel::data(index, role);
|
||||
if (sourceDecoration.isValid())
|
||||
return sourceDecoration;
|
||||
const QString fileName = QAbstractProxyModel::data(index, Qt::DisplayRole).toString();
|
||||
return Utils::FileIconProvider::icon(Utils::FilePath::fromString(fileName));
|
||||
const QVariant filePath = QAbstractProxyModel::data(index, DocumentModel::FilePathRole);
|
||||
return FileIconProvider::icon(FilePath::fromVariant(filePath));
|
||||
}
|
||||
|
||||
return QAbstractProxyModel::data(index, role);
|
||||
|
@@ -623,10 +623,8 @@ void ExternalToolRunner::run()
|
||||
}
|
||||
m_process = new Process(this);
|
||||
connect(m_process, &Process::done, this, &ExternalToolRunner::done);
|
||||
connect(m_process, &Process::readyReadStandardOutput,
|
||||
this, &ExternalToolRunner::readStandardOutput);
|
||||
connect(m_process, &Process::readyReadStandardError,
|
||||
this, &ExternalToolRunner::readStandardError);
|
||||
m_process->setStdOutLineCallback([this](const QString &s) { readStandardOutput(s); });
|
||||
m_process->setStdErrLineCallback([this](const QString &s) { readStandardError(s); });
|
||||
if (!m_resolvedWorkingDirectory.isEmpty())
|
||||
m_process->setWorkingDirectory(m_resolvedWorkingDirectory);
|
||||
const CommandLine cmd{m_resolvedExecutable, m_resolvedArguments, CommandLine::Raw};
|
||||
@@ -665,30 +663,29 @@ void ExternalToolRunner::done()
|
||||
deleteLater();
|
||||
}
|
||||
|
||||
void ExternalToolRunner::readStandardOutput()
|
||||
static QString stripNewline(const QString &output)
|
||||
{
|
||||
if (output.endsWith('\n'))
|
||||
return output.chopped(1);
|
||||
return output;
|
||||
}
|
||||
|
||||
void ExternalToolRunner::readStandardOutput(const QString &output)
|
||||
{
|
||||
if (m_tool->outputHandling() == ExternalTool::Ignore)
|
||||
return;
|
||||
const QByteArray data = m_process->readAllRawStandardOutput();
|
||||
const QString output = m_outputCodec->toUnicode(data.constData(),
|
||||
data.length(),
|
||||
&m_outputCodecState);
|
||||
if (m_tool->outputHandling() == ExternalTool::ShowInPane)
|
||||
MessageManager::writeSilently(output);
|
||||
MessageManager::writeSilently(stripNewline(output));
|
||||
else if (m_tool->outputHandling() == ExternalTool::ReplaceSelection)
|
||||
m_processOutput.append(output);
|
||||
}
|
||||
|
||||
void ExternalToolRunner::readStandardError()
|
||||
void ExternalToolRunner::readStandardError(const QString &output)
|
||||
{
|
||||
if (m_tool->errorHandling() == ExternalTool::Ignore)
|
||||
return;
|
||||
const QByteArray data = m_process->readAllRawStandardError();
|
||||
const QString output = m_outputCodec->toUnicode(data.constData(),
|
||||
data.length(),
|
||||
&m_errorCodecState);
|
||||
if (m_tool->errorHandling() == ExternalTool::ShowInPane)
|
||||
MessageManager::writeSilently(output);
|
||||
MessageManager::writeSilently(stripNewline(output));
|
||||
else if (m_tool->errorHandling() == ExternalTool::ReplaceSelection)
|
||||
m_processOutput.append(output);
|
||||
}
|
||||
|
@@ -115,8 +115,8 @@ public:
|
||||
|
||||
private:
|
||||
void done();
|
||||
void readStandardOutput();
|
||||
void readStandardError();
|
||||
void readStandardOutput(const QString &output);
|
||||
void readStandardError(const QString &output);
|
||||
|
||||
void run();
|
||||
bool resolve();
|
||||
@@ -128,6 +128,7 @@ private:
|
||||
Utils::FilePath m_resolvedWorkingDirectory;
|
||||
Utils::Environment m_resolvedEnvironment;
|
||||
Utils::Process *m_process;
|
||||
// TODO remove codec handling, that is done by Process now
|
||||
QTextCodec *m_outputCodec;
|
||||
QTextCodec::ConverterState m_outputCodecState;
|
||||
QTextCodec::ConverterState m_errorCodecState;
|
||||
|
@@ -811,10 +811,24 @@ ListModel *SectionedGridView::addSection(const Section §ion, const QList<Lis
|
||||
vbox->insertWidget(position, sectionLabel);
|
||||
vbox->insertWidget(position + 1, gridView);
|
||||
|
||||
struct ItemHash
|
||||
{
|
||||
std::size_t operator()(ListItem *item) const { return std::hash<QString>{}(item->name); }
|
||||
};
|
||||
struct ItemEqual
|
||||
{
|
||||
bool operator()(ListItem *lhs, ListItem *rhs) const
|
||||
{
|
||||
return lhs->name == rhs->name && lhs->description == rhs->description;
|
||||
}
|
||||
};
|
||||
|
||||
// add the items also to the all products model to be able to search correctly
|
||||
const QSet<ListItem *> allItems = toSet(m_allItemsModel->items());
|
||||
const QList<ListItem *> newItems = filtered(items, [&allItems](ListItem *item) {
|
||||
return !allItems.contains(item);
|
||||
const QList<ListItem *> allItems = m_allItemsModel->items();
|
||||
const std::unordered_set<ListItem *, ItemHash, ItemEqual> uniqueItems{allItems.constBegin(),
|
||||
allItems.constEnd()};
|
||||
const QList<ListItem *> newItems = filtered(items, [&uniqueItems](ListItem *item) {
|
||||
return uniqueItems.find(item) == uniqueItems.end();
|
||||
});
|
||||
m_allItemsModel->appendItems(newItems);
|
||||
|
||||
|
@@ -605,6 +605,11 @@ public:
|
||||
m_codeStyleEditor->apply();
|
||||
}
|
||||
|
||||
void finish() final
|
||||
{
|
||||
m_codeStyleEditor->finish();
|
||||
}
|
||||
|
||||
CppCodeStylePreferences *m_pageCppCodeStylePreferences = nullptr;
|
||||
CodeStyleEditorWidget *m_codeStyleEditor;
|
||||
};
|
||||
|
@@ -219,7 +219,7 @@ void OutlineModel::rebuild()
|
||||
auto root = new SymbolItem;
|
||||
if (m_cppDocument)
|
||||
buildTree(root, true);
|
||||
setRootItem(root);
|
||||
setRootItemInternal(root);
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
|
@@ -782,6 +782,7 @@ SearchResultItems symbolOccurrencesInDeclarationComments(
|
||||
QList<Text::Range> symbolOccurrencesInText(const QTextDocument &doc, QStringView text, int offset,
|
||||
const QString &symbolName)
|
||||
{
|
||||
QTC_ASSERT(!symbolName.isEmpty(), return QList<Text::Range>());
|
||||
QList<Text::Range> ranges;
|
||||
int index = 0;
|
||||
while (true) {
|
||||
|
@@ -4407,6 +4407,13 @@ void GdbEngine::setupInferior()
|
||||
if (rp.breakOnMain)
|
||||
runCommand({"tbreak " + mainFunction()});
|
||||
|
||||
if (!rp.solibSearchPath.isEmpty()) {
|
||||
DebuggerCommand cmd("appendSolibSearchPath");
|
||||
cmd.arg("path", transform(rp.solibSearchPath, &FilePath::path));
|
||||
cmd.arg("separator", HostOsInfo::pathListSeparator());
|
||||
runCommand(cmd);
|
||||
}
|
||||
|
||||
if (rp.startMode == AttachToRemoteProcess) {
|
||||
|
||||
handleInferiorPrepared();
|
||||
@@ -4429,13 +4436,6 @@ void GdbEngine::setupInferior()
|
||||
|
||||
// if (!remoteArch.isEmpty())
|
||||
// postCommand("set architecture " + remoteArch);
|
||||
if (!rp.solibSearchPath.isEmpty()) {
|
||||
DebuggerCommand cmd("appendSolibSearchPath");
|
||||
for (const FilePath &filePath : rp.solibSearchPath)
|
||||
cmd.arg("path", filePath.path());
|
||||
cmd.arg("separator", HostOsInfo::pathListSeparator());
|
||||
runCommand(cmd);
|
||||
}
|
||||
|
||||
if (!args.isEmpty())
|
||||
runCommand({"-exec-arguments " + args});
|
||||
|
@@ -1048,6 +1048,7 @@ void FakeVimPluginPrivate::initialize()
|
||||
INSTALL_HANDLER, Context(Core::Constants::C_GLOBAL), true);
|
||||
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? Tr::tr("Meta+Shift+Y,Meta+Shift+Y")
|
||||
: Tr::tr("Alt+Y,Alt+Y")));
|
||||
connect(cmd->action(), &QAction::triggered, [this] { settings().writeSettings(); });
|
||||
|
||||
ActionContainer *advancedMenu =
|
||||
ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
||||
|
@@ -236,7 +236,7 @@ bool IosDeployStep::checkProvisioningProfile()
|
||||
return true;
|
||||
|
||||
const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList();
|
||||
const QString targetId = device->uniqueDeviceID();
|
||||
const QString targetId = device->uniqueInternalDeviceId();
|
||||
for (const QString &deviceId : deviceIds) {
|
||||
if (deviceId == targetId)
|
||||
return true;
|
||||
|
@@ -317,7 +317,7 @@ public:
|
||||
});
|
||||
|
||||
setProposal(m_processor->start(std::move(interface)), prefix);
|
||||
if (!m_processor->running()) {
|
||||
if (m_processor && !m_processor->running()) {
|
||||
delete m_processor;
|
||||
m_processor = nullptr;
|
||||
}
|
||||
|
@@ -119,6 +119,30 @@ void McuSupportImportProvider::loadBuiltins(ImportsPerDocument *importsPerDocume
|
||||
import.info = ImportInfo::moduleImport("qul", {1, 0}, QString());
|
||||
getInterfacesImport(context->fileName(), importsPerDocument, import, valueOwner, snapshot);
|
||||
imports->append(import);
|
||||
}
|
||||
|
||||
FilePaths McuSupportImportProvider::prioritizeImportPaths(const Document *context,
|
||||
const FilePaths &importPaths)
|
||||
{
|
||||
if (!context)
|
||||
return importPaths;
|
||||
const std::optional<FilePath> cmakeFilesPathOpt = getTargetBuildFolder(context->fileName());
|
||||
if (!cmakeFilesPathOpt)
|
||||
return importPaths;
|
||||
FilePaths ret;
|
||||
// qmltocpp uses an incomplete QtQuick folder present in the build folder
|
||||
// to avoid taking precedence over the correct qul_install/include/*/StyleDefault
|
||||
// move the import path to be last
|
||||
std::copy_if(importPaths.cbegin(),
|
||||
importPaths.cend(),
|
||||
std::back_inserter(ret),
|
||||
[cmakeFilesPathOpt](const FilePath &path) { return path != *cmakeFilesPathOpt; });
|
||||
|
||||
// nothing was removed
|
||||
if (ret.size() == importPaths.size())
|
||||
return importPaths;
|
||||
ret.push_back(*cmakeFilesPathOpt);
|
||||
return ret;
|
||||
};
|
||||
|
||||
void McuSupportImportProvider::getInterfacesImport(const FilePath &path,
|
||||
@@ -156,6 +180,7 @@ std::optional<FilePath> McuSupportImportProvider::getFileModule(const FilePath &
|
||||
const FilePath &inputFile) const
|
||||
{
|
||||
const auto doc = QJsonDocument::fromJson(inputFile.fileContents().value_or(""));
|
||||
|
||||
if (!doc.isObject())
|
||||
return {};
|
||||
|
||||
|
@@ -29,6 +29,9 @@ public:
|
||||
ValueOwner *valueOwner,
|
||||
Snapshot *snapshot) override;
|
||||
|
||||
virtual Utils::FilePaths prioritizeImportPaths(const Document *context,
|
||||
const Utils::FilePaths &importPaths) override;
|
||||
|
||||
// Add to the interfaces needed for a document
|
||||
// path: opened qml document
|
||||
// importsPerDocument: imports available in the document (considered imported)
|
||||
|
@@ -2,6 +2,7 @@
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include "abi.h"
|
||||
#include "projectexplorerconstants.h"
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/environment.h>
|
||||
@@ -437,6 +438,18 @@ static Abis abiOf(const QByteArray &data)
|
||||
return result;
|
||||
}
|
||||
|
||||
static QString androidAbiFromAbi(const Abi &abi)
|
||||
{
|
||||
QString androidAbi;
|
||||
if (abi.architecture() == Abi::Architecture::ArmArchitecture)
|
||||
androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_ARM64_V8A
|
||||
: Constants::ANDROID_ABI_ARMEABI_V7A);
|
||||
else
|
||||
androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_X86_64
|
||||
: Constants::ANDROID_ABI_X86);
|
||||
return androidAbi;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Abi
|
||||
// --------------------------------------------------------------------------
|
||||
@@ -908,7 +921,11 @@ Abi Abi::fromString(const QString &abiString)
|
||||
return Abi(architecture, os, flavor, format, 0);
|
||||
}
|
||||
|
||||
return Abi(architecture, os, flavor, format, wordWidth);
|
||||
Abi abi(architecture, os, flavor, format, wordWidth);
|
||||
if (abi.os() == LinuxOS && abi.osFlavor() == AndroidLinuxFlavor)
|
||||
abi.m_param = androidAbiFromAbi(abi);
|
||||
|
||||
return abi;
|
||||
}
|
||||
|
||||
Abi::Architecture Abi::architectureFromString(const QString &a)
|
||||
|
@@ -305,6 +305,7 @@ bool CustomToolChain::operator ==(const ToolChain &other) const
|
||||
|
||||
auto customTc = static_cast<const CustomToolChain *>(&other);
|
||||
return m_makeCommand == customTc->m_makeCommand
|
||||
&& compilerCommand() == customTc->compilerCommand()
|
||||
&& targetAbi() == customTc->targetAbi()
|
||||
&& m_predefinedMacros == customTc->m_predefinedMacros
|
||||
&& m_builtInHeaderPaths == customTc->m_builtInHeaderPaths;
|
||||
|
@@ -348,7 +348,7 @@ FilePath Node::pathOrDirectory(bool dir) const
|
||||
|
||||
QTC_CHECK(!location.needsDevice());
|
||||
QFileInfo fi = location.toFileInfo();
|
||||
while ((!fi.exists() || !fi.isDir()) && !fi.isRoot())
|
||||
while ((!fi.exists() || !fi.isDir()) && !fi.isRoot() && (fi.fileName() != fi.absolutePath()))
|
||||
fi.setFile(fi.absolutePath());
|
||||
return FilePath::fromString(fi.absoluteFilePath());
|
||||
}
|
||||
|
@@ -78,7 +78,7 @@ class QtVersionData
|
||||
{
|
||||
public:
|
||||
// Update version if you add data members!
|
||||
static const int version = 2;
|
||||
static const int version = 3;
|
||||
|
||||
bool installed = true;
|
||||
bool hasExamples = false;
|
||||
@@ -207,8 +207,11 @@ public:
|
||||
hostDataPath = FilePath::fromSettings(map.value("HostDataPath"));
|
||||
hostPrefixPath = FilePath::fromSettings(map.value("HostPrefixPath"));
|
||||
auto it = map.find("QtAbis");
|
||||
if (it != map.end())
|
||||
qtAbis = Utils::transform(it.value().toStringList(), &Abi::fromString);
|
||||
if (it != map.end()) {
|
||||
const auto qtAbisList = it.value().toStringList();
|
||||
if (!qtAbisList.isEmpty())
|
||||
qtAbis = Utils::transform(qtAbisList, &Abi::fromString);
|
||||
}
|
||||
versionInfo = fromStore(map.value("VersionInfo").value<Store>());
|
||||
}
|
||||
};
|
||||
|
@@ -363,7 +363,8 @@ void ExamplesViewController::updateExamples()
|
||||
|
||||
const QStringList sources = m_exampleSetModel->exampleSources(&examplesInstallPath,
|
||||
&demosInstallPath,
|
||||
&qtVersion);
|
||||
&qtVersion,
|
||||
m_isExamples);
|
||||
QStringList categoryOrder;
|
||||
QList<ExampleItem *> items;
|
||||
for (const QString &exampleSource : sources) {
|
||||
@@ -493,12 +494,15 @@ QtVersion *ExampleSetModel::findHighestQtVersion(const QtVersions &versions) con
|
||||
|
||||
QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath,
|
||||
QString *demosInstallPath,
|
||||
QVersionNumber *qtVersion)
|
||||
QVersionNumber *qtVersion,
|
||||
bool isExamples)
|
||||
{
|
||||
QStringList sources;
|
||||
|
||||
// Qt Creator shipped tutorials
|
||||
sources << ":/qtsupport/qtcreator_tutorials.xml";
|
||||
if (!isExamples) {
|
||||
// Qt Creator shipped tutorials
|
||||
sources << ":/qtsupport/qtcreator_tutorials.xml";
|
||||
}
|
||||
|
||||
QString examplesPath;
|
||||
QString demosPath;
|
||||
|
@@ -41,7 +41,8 @@ public:
|
||||
bool selectExampleSet(int index);
|
||||
QStringList exampleSources(QString *examplesInstallPath,
|
||||
QString *demosInstallPath,
|
||||
QVersionNumber *qtVersion);
|
||||
QVersionNumber *qtVersion,
|
||||
bool isExamples);
|
||||
bool selectedQtSupports(const Utils::Id &target) const;
|
||||
|
||||
signals:
|
||||
|
@@ -58,7 +58,11 @@ GroupItem KillAppStep::deployRecipe()
|
||||
addProgressMessage(Tr::tr("Failed to kill remote application. "
|
||||
"Assuming it was not running."));
|
||||
};
|
||||
return DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler);
|
||||
const Group root {
|
||||
finishAllAndDone,
|
||||
DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler)
|
||||
};
|
||||
return root;
|
||||
}
|
||||
|
||||
KillAppStepFactory::KillAppStepFactory()
|
||||
|
@@ -20,7 +20,9 @@
|
||||
#include <utils/stringutils.h>
|
||||
#include <utils/utilsicons.h>
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QHBoxLayout>
|
||||
#include <QRegularExpression>
|
||||
#include <QScrollBar>
|
||||
#include <QTextBrowser>
|
||||
#include <QTimer>
|
||||
@@ -70,9 +72,22 @@ public:
|
||||
|
||||
// preview
|
||||
m_previewWidget = new QTextBrowser();
|
||||
m_previewWidget->setOpenExternalLinks(true);
|
||||
m_previewWidget->setOpenLinks(false); // we want to open files in QtC, not the browser
|
||||
m_previewWidget->setFrameShape(QFrame::NoFrame);
|
||||
new Utils::MarkdownHighlighter(m_previewWidget->document());
|
||||
connect(m_previewWidget, &QTextBrowser::anchorClicked, this, [this](const QUrl &link) {
|
||||
if (link.hasFragment() && link.path().isEmpty() && link.scheme().isEmpty()) {
|
||||
// local anchor
|
||||
m_previewWidget->scrollToAnchor(link.fragment(QUrl::FullyEncoded));
|
||||
} else if (link.isLocalFile() || link.scheme().isEmpty()) {
|
||||
// absolute path or relative (to the document)
|
||||
// open in Qt Creator
|
||||
EditorManager::openEditor(
|
||||
document()->filePath().parentDir().resolvePath(link.path()));
|
||||
} else {
|
||||
QDesktopServices::openUrl(link);
|
||||
}
|
||||
});
|
||||
|
||||
// editor
|
||||
m_textEditorWidget = new TextEditorWidget;
|
||||
@@ -170,6 +185,26 @@ public:
|
||||
m_previewRestoreScrollPosition.reset();
|
||||
|
||||
m_previewWidget->setMarkdown(m_document->plainText());
|
||||
// Add anchors to headings. This should actually be done by Qt QTBUG-120518
|
||||
for (QTextBlock block = m_previewWidget->document()->begin(); block.isValid();
|
||||
block = block.next()) {
|
||||
QTextBlockFormat fmt = block.blockFormat();
|
||||
if (fmt.hasProperty(QTextFormat::HeadingLevel)) {
|
||||
QTextCharFormat cFormat = block.charFormat();
|
||||
QString anchor;
|
||||
const QString text = block.text();
|
||||
for (const QChar &c : text) {
|
||||
if (c == ' ')
|
||||
anchor.append('-');
|
||||
else if (c == '_' || c == '-' || c.isDigit() || c.isLetter())
|
||||
anchor.append(c.toLower());
|
||||
}
|
||||
cFormat.setAnchor(true);
|
||||
cFormat.setAnchorNames({anchor});
|
||||
QTextCursor cursor(block);
|
||||
cursor.setBlockCharFormat(cFormat);
|
||||
}
|
||||
}
|
||||
|
||||
m_previewWidget->horizontalScrollBar()->setValue(positions.x());
|
||||
m_previewWidget->verticalScrollBar()->setValue(positions.y());
|
||||
|
@@ -8563,7 +8563,7 @@ QAction * TextEditorWidget::insertExtraToolBarWidget(TextEditorWidget::Side side
|
||||
findLeftMostAction);
|
||||
return d->m_toolBar->insertWidget(before, widget);
|
||||
} else {
|
||||
return d->m_toolBar->insertWidget(d->m_fileEncodingLabelAction, widget);
|
||||
return d->m_toolBar->insertWidget(d->m_fileLineEndingAction, widget);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -31,6 +31,14 @@ macro(qtc_auto_setup_compiler_standard toolchainFile)
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
# Forward important CMake variables to the package manager in the toolchain file
|
||||
foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES)
|
||||
if (${fwd_var})
|
||||
file(APPEND "${toolchainFile}"
|
||||
"set(${fwd_var} ${${fwd_var}})\n")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
#
|
||||
@@ -101,47 +109,61 @@ macro(qtc_auto_setup_conan)
|
||||
"include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
|
||||
endif()
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
|
||||
project(conan-setup)
|
||||
unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
|
||||
project(conan-setup)
|
||||
|
||||
if (${conan_version} VERSION_GREATER_EQUAL 2.0)
|
||||
set(CONAN_COMMAND \"${conan_program}\")
|
||||
include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
|
||||
conan_profile_detect_default()
|
||||
detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\")
|
||||
if (${conan_version} VERSION_GREATER_EQUAL 2.0)
|
||||
set(CONAN_COMMAND \"${conan_program}\")
|
||||
include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
|
||||
conan_profile_detect_default()
|
||||
detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\")
|
||||
|
||||
set(build_types \${CMAKE_BUILD_TYPE})
|
||||
if (CMAKE_CONFIGURATION_TYPES)
|
||||
set(build_types \${CMAKE_CONFIGURATION_TYPES})
|
||||
endif()
|
||||
|
||||
foreach(type \${build_types})
|
||||
conan_install(
|
||||
-pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\"
|
||||
--build=${QT_CREATOR_CONAN_BUILD_POLICY}
|
||||
-s build_type=${CMAKE_BUILD_TYPE}
|
||||
-s build_type=\${type}
|
||||
-g CMakeDeps)
|
||||
endforeach()
|
||||
|
||||
get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
||||
if (CONAN_INSTALL_SUCCESS)
|
||||
get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
|
||||
file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
|
||||
list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||
list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
|
||||
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
|
||||
set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||
set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||
\")
|
||||
endif()
|
||||
else()
|
||||
include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\")
|
||||
conan_cmake_run(
|
||||
CONANFILE \"${conanfile_txt}\"
|
||||
INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\"
|
||||
GENERATORS cmake_paths cmake_find_package json
|
||||
BUILD ${QT_CREATOR_CONAN_BUILD_POLICY}
|
||||
ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\"
|
||||
)
|
||||
get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
||||
if (CONAN_INSTALL_SUCCESS)
|
||||
get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
|
||||
file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
|
||||
list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||
list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||
list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
|
||||
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
|
||||
list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH)
|
||||
set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||
set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||
set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||
\")
|
||||
endif()
|
||||
")
|
||||
else()
|
||||
include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\")
|
||||
conan_cmake_run(
|
||||
CONANFILE \"${conanfile_txt}\"
|
||||
INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\"
|
||||
GENERATORS cmake_paths cmake_find_package json
|
||||
BUILD ${QT_CREATOR_CONAN_BUILD_POLICY}
|
||||
ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\"
|
||||
)
|
||||
endif()
|
||||
")
|
||||
|
||||
if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND}
|
||||
-S "${CMAKE_BINARY_DIR}/conan-dependencies/"
|
||||
@@ -150,6 +172,7 @@ macro(qtc_auto_setup_conan)
|
||||
-D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
|
||||
-G ${CMAKE_GENERATOR}
|
||||
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}"
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
if (result EQUAL 0)
|
||||
|
Submodule src/shared/qbs updated: b1d6a0518a...aa044048f0
@@ -3984,7 +3984,7 @@ namespace qstring {
|
||||
// Check string "HiDu" QString.
|
||||
// Continue.
|
||||
delete pstring;
|
||||
dummyStatement(&str, &string, pstring);
|
||||
dummyStatement(&str, &string, &pstring);
|
||||
}
|
||||
|
||||
void testQString4()
|
||||
|
@@ -207,7 +207,8 @@ def __getExpectedCompilers__():
|
||||
for c in ('clang++', 'clang', 'afl-clang',
|
||||
'clang-[0-9]', 'clang-[0-9].[0-9]', 'clang-1[0-9]', 'clang-1[0-9].[0-9]',
|
||||
'*g++*', '*gcc*'):
|
||||
compilers.extend(findAllFilesInPATH(c))
|
||||
filesInPath = set(findAllFilesInPATH(c))
|
||||
compilers.extend(filesInPath | set(map(os.path.realpath, filesInPath)))
|
||||
if platform.system() == 'Darwin':
|
||||
for compilerExe in ('clang++', 'clang'):
|
||||
xcodeClang = getOutputFromCmdline(["xcrun", "--find", compilerExe]).strip("\n")
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user