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:
|
env:
|
||||||
QT_VERSION: 6.6.0
|
QT_VERSION: 6.6.0
|
||||||
MACOS_DEPLOYMENT_TARGET: 10.15
|
MACOS_DEPLOYMENT_TARGET: 11.0
|
||||||
CLANG_VERSION: 17.0.1
|
CLANG_VERSION: 17.0.1
|
||||||
ELFUTILS_VERSION: 0.175
|
ELFUTILS_VERSION: 0.175
|
||||||
CMAKE_VERSION: 3.21.1
|
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:
|
The standalone binary packages support the following platforms:
|
||||||
|
|
||||||
* Windows 10 (64-bit) or later
|
* Windows 10 (64-bit) or later
|
||||||
* (K)Ubuntu Linux 20.04 (64-bit) or later
|
* (K)Ubuntu Linux 22.04 (64-bit) or later
|
||||||
* macOS 10.15 or later
|
* macOS 11 or later
|
||||||
|
|
||||||
|
When you compile Qt Creator yourself, the Qt version that you build with
|
||||||
|
determines the supported platforms.
|
||||||
|
|
||||||
## Contributing
|
## 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_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_COPYRIGHT_YEAR "2023") # The IDE current copyright year.
|
||||||
|
|
||||||
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
|
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"
|
variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.0-released/Qt"
|
||||||
- type: EnvironmentVariable
|
- type: EnvironmentVariable
|
||||||
variableName: QTC_QT_MODULES
|
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
|
- type: EnvironmentVariable
|
||||||
variableName: MACOSX_DEPLOYMENT_TARGET
|
variableName: MACOSX_DEPLOYMENT_TARGET
|
||||||
variableValue: 10.15
|
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
|
// 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
|
To hide the output, select the \inlineimage icons/rightsidebaricon.png
|
||||||
(\uicontrol {Hide/Show Right Sidebar}) button or press \key {Alt+Shift+0}.
|
(\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
|
\section1 CMake Build Steps
|
||||||
|
|
||||||
\QC builds CMake projects by running \c {cmake . --build}, which then runs
|
\QC builds CMake projects by running \c {cmake . --build}, which then runs
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
\section1 Linux
|
\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
|
To build Qt applications using \QC on Linux, you usually need the
|
||||||
following:
|
following:
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
\section1 macOS
|
\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.
|
version available in the Mac App Store.
|
||||||
|
|
||||||
\section1 Windows
|
\section1 Windows
|
||||||
|
@@ -7,7 +7,7 @@ Module {
|
|||||||
property string qtcreator_display_version: '12.0.1'
|
property string qtcreator_display_version: '12.0.1'
|
||||||
property string ide_version_major: '12'
|
property string ide_version_major: '12'
|
||||||
property string ide_version_minor: '0'
|
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 + '.'
|
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
|
||||||
+ ide_version_release
|
+ ide_version_release
|
||||||
|
|
||||||
|
@@ -1125,6 +1125,11 @@ public:
|
|||||||
[[maybe_unused]] const Document *context,
|
[[maybe_unused]] const Document *context,
|
||||||
[[maybe_unused]] ValueOwner *valueOwner,
|
[[maybe_unused]] ValueOwner *valueOwner,
|
||||||
[[maybe_unused]] Snapshot *snapshot) {}
|
[[maybe_unused]] Snapshot *snapshot) {}
|
||||||
|
virtual Utils::FilePaths prioritizeImportPaths([[maybe_unused]] const Document *context,
|
||||||
|
const Utils::FilePaths &importPaths)
|
||||||
|
{
|
||||||
|
return importPaths;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QmlJS
|
} // namespace QmlJS
|
||||||
|
@@ -219,6 +219,7 @@ Context::ImportsPerDocument LinkPrivate::linkImports()
|
|||||||
document.data(),
|
document.data(),
|
||||||
m_valueOwner,
|
m_valueOwner,
|
||||||
&m_snapshot);
|
&m_snapshot);
|
||||||
|
m_importPaths = provider->prioritizeImportPaths(document.data(), m_importPaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
populateImportedTypes(imports, document);
|
populateImportedTypes(imports, document);
|
||||||
|
@@ -386,10 +386,13 @@ QString TerminalView::textFromSelection() const
|
|||||||
if (!d->m_selection)
|
if (!d->m_selection)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
if (d->m_selection->start == d->m_selection->end)
|
||||||
|
return {};
|
||||||
|
|
||||||
CellIterator it = d->m_surface->iteratorAt(d->m_selection->start);
|
CellIterator it = d->m_surface->iteratorAt(d->m_selection->start);
|
||||||
CellIterator end = d->m_surface->iteratorAt(d->m_selection->end);
|
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";
|
qCWarning(selectionLog) << "Invalid selection: start >= end";
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -1070,7 +1073,7 @@ void TerminalView::mousePressEvent(QMouseEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (event->button() == Qt::LeftButton) {
|
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;
|
d->m_selectLineMode = true;
|
||||||
const Selection newSelection{d->m_surface->gridToPos(
|
const Selection newSelection{d->m_surface->gridToPos(
|
||||||
{0,
|
{0,
|
||||||
|
@@ -14,6 +14,11 @@ namespace Timeline {
|
|||||||
class TraceEvent : public SafeCastable<TraceEvent>
|
class TraceEvent : public SafeCastable<TraceEvent>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
TraceEvent(const TraceEvent &) = default;
|
||||||
|
TraceEvent(TraceEvent &&) = default;
|
||||||
|
TraceEvent &operator=(const TraceEvent &) = default;
|
||||||
|
TraceEvent &operator=(TraceEvent &&) = default;
|
||||||
|
|
||||||
qint64 timestamp() const { return m_timestamp; }
|
qint64 timestamp() const { return m_timestamp; }
|
||||||
void setTimestamp(qint64 timestamp) { m_timestamp = timestamp; }
|
void setTimestamp(qint64 timestamp) { m_timestamp = timestamp; }
|
||||||
|
|
||||||
@@ -29,11 +34,6 @@ protected:
|
|||||||
: m_timestamp(timestamp), m_typeIndex(typeIndex), m_classId(classId)
|
: 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:
|
private:
|
||||||
qint64 m_timestamp;
|
qint64 m_timestamp;
|
||||||
qint32 m_typeIndex;
|
qint32 m_typeIndex;
|
||||||
|
@@ -15,6 +15,11 @@ namespace Timeline {
|
|||||||
class TraceEventType : public SafeCastable<TraceEventType>
|
class TraceEventType : public SafeCastable<TraceEventType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
TraceEventType(const TraceEventType &) = default;
|
||||||
|
TraceEventType(TraceEventType &&) = default;
|
||||||
|
TraceEventType &operator=(const TraceEventType &) = default;
|
||||||
|
TraceEventType &operator=(TraceEventType &&) = default;
|
||||||
|
|
||||||
const QString &displayName() const { return m_displayName; }
|
const QString &displayName() const { return m_displayName; }
|
||||||
void setDisplayName(const QString &displayName) { m_displayName = displayName; }
|
void setDisplayName(const QString &displayName) { m_displayName = displayName; }
|
||||||
|
|
||||||
@@ -28,11 +33,6 @@ protected:
|
|||||||
: m_displayName(displayName), m_classId(classId), m_feature(feature)
|
: 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:
|
private:
|
||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
qint32 m_classId;
|
qint32 m_classId;
|
||||||
|
@@ -604,7 +604,7 @@ TreeItem::~TreeItem()
|
|||||||
{
|
{
|
||||||
QTC_CHECK(m_parent == nullptr);
|
QTC_CHECK(m_parent == nullptr);
|
||||||
QTC_CHECK(m_model == nullptr);
|
QTC_CHECK(m_model == nullptr);
|
||||||
removeChildren();
|
removeChildrenSilently();
|
||||||
}
|
}
|
||||||
|
|
||||||
TreeItem *TreeItem::childAt(int pos) const
|
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)
|
void TreeItem::sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp)
|
||||||
{
|
{
|
||||||
if (m_model) {
|
if (m_model) {
|
||||||
@@ -1060,6 +1067,13 @@ TreeItem *BaseTreeModel::rootItem() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BaseTreeModel::setRootItem(TreeItem *item)
|
void BaseTreeModel::setRootItem(TreeItem *item)
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
setRootItemInternal(item);
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseTreeModel::setRootItemInternal(TreeItem *item)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(item, return);
|
QTC_ASSERT(item, return);
|
||||||
QTC_ASSERT(item->m_model == nullptr, return);
|
QTC_ASSERT(item->m_model == nullptr, return);
|
||||||
@@ -1067,19 +1081,17 @@ void BaseTreeModel::setRootItem(TreeItem *item)
|
|||||||
QTC_ASSERT(item != m_root, return);
|
QTC_ASSERT(item != m_root, return);
|
||||||
QTC_CHECK(m_root);
|
QTC_CHECK(m_root);
|
||||||
|
|
||||||
beginResetModel();
|
|
||||||
if (m_root) {
|
if (m_root) {
|
||||||
QTC_CHECK(m_root->m_parent == nullptr);
|
QTC_CHECK(m_root->m_parent == nullptr);
|
||||||
QTC_CHECK(m_root->m_model == this);
|
QTC_CHECK(m_root->m_model == this);
|
||||||
// needs to be done explicitly before setting the model to 0, otherwise it might lead to a
|
// 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
|
// crash inside a view or proxy model, especially if there are selected items
|
||||||
m_root->removeChildren();
|
m_root->removeChildrenSilently();
|
||||||
m_root->m_model = nullptr;
|
m_root->m_model = nullptr;
|
||||||
delete m_root;
|
delete m_root;
|
||||||
}
|
}
|
||||||
m_root = item;
|
m_root = item;
|
||||||
item->propagateModel(this);
|
item->propagateModel(this);
|
||||||
endResetModel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseTreeModel::setHeader(const QStringList &displays)
|
void BaseTreeModel::setHeader(const QStringList &displays)
|
||||||
|
@@ -39,6 +39,7 @@ public:
|
|||||||
|
|
||||||
void removeChildAt(int pos);
|
void removeChildAt(int pos);
|
||||||
void removeChildren();
|
void removeChildren();
|
||||||
|
void removeChildrenSilently();
|
||||||
void sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp);
|
void sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp);
|
||||||
void update();
|
void update();
|
||||||
void updateAll();
|
void updateAll();
|
||||||
@@ -180,7 +181,8 @@ protected:
|
|||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
TreeItem *rootItem() const;
|
TreeItem *rootItem() const;
|
||||||
void setRootItem(TreeItem *item);
|
void setRootItem(TreeItem *item); // resets the model
|
||||||
|
void setRootItemInternal(TreeItem *item);
|
||||||
TreeItem *itemForIndex(const QModelIndex &) const;
|
TreeItem *itemForIndex(const QModelIndex &) const;
|
||||||
QModelIndex indexForItem(const TreeItem *needle) const;
|
QModelIndex indexForItem(const TreeItem *needle) const;
|
||||||
|
|
||||||
|
@@ -126,10 +126,8 @@ void AndroidPlugin::kitsRestored()
|
|||||||
return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE);
|
return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE);
|
||||||
}).isEmpty();
|
}).isEmpty();
|
||||||
|
|
||||||
if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled) {
|
if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled)
|
||||||
connect(Core::ICore::instance(), &Core::ICore::coreOpened, this,
|
askUserAboutAndroidSetup();
|
||||||
&AndroidPlugin::askUserAboutAndroidSetup, Qt::QueuedConnection);
|
|
||||||
}
|
|
||||||
|
|
||||||
AndroidConfigurations::registerNewToolChains();
|
AndroidConfigurations::registerNewToolChains();
|
||||||
AndroidConfigurations::updateAutomaticKitList();
|
AndroidConfigurations::updateAutomaticKitList();
|
||||||
|
@@ -392,6 +392,7 @@ Utils::ChangeSet convertReplacements(const QTextDocument *doc,
|
|||||||
.size();
|
.size();
|
||||||
|
|
||||||
QString replacementText = QString::fromStdString(replacement.getReplacementText().str());
|
QString replacementText = QString::fromStdString(replacement.getReplacementText().str());
|
||||||
|
replacementText.replace("\r", "");
|
||||||
auto sameCharAt = [&](int replacementOffset) {
|
auto sameCharAt = [&](int replacementOffset) {
|
||||||
if (replacementText.size() <= replacementOffset || replacementOffset < 0)
|
if (replacementText.size() <= replacementOffset || replacementOffset < 0)
|
||||||
return false;
|
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
|
const ProjectExplorer::Project *projectForFile
|
||||||
= ProjectExplorer::ProjectManager::projectForFile(fileName);
|
= ProjectExplorer::ProjectManager::projectForFile(fileName);
|
||||||
@@ -792,6 +794,9 @@ clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName)
|
|||||||
? projectForFile->editorConfiguration()->codeStyle("Cpp")->currentPreferences()
|
? projectForFile->editorConfiguration()->codeStyle("Cpp")->currentPreferences()
|
||||||
: TextEditor::TextEditorSettings::codeStyle("Cpp")->currentPreferences();
|
: TextEditor::TextEditorSettings::codeStyle("Cpp")->currentPreferences();
|
||||||
|
|
||||||
|
if (m_overriddenPreferences)
|
||||||
|
preferences = m_overriddenPreferences->currentPreferences();
|
||||||
|
|
||||||
Utils::FilePath filePath = filePathToCurrentSettings(preferences);
|
Utils::FilePath filePath = filePathToCurrentSettings(preferences);
|
||||||
|
|
||||||
if (!filePath.exists())
|
if (!filePath.exists())
|
||||||
@@ -854,4 +859,9 @@ const clang::format::FormatStyle &ClangFormatBaseIndenter::styleForFile() const
|
|||||||
return m_cachedStyle.style;
|
return m_cachedStyle.style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClangFormatBaseIndenter::setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences)
|
||||||
|
{
|
||||||
|
m_overriddenPreferences = preferences;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ClangFormat
|
} // namespace ClangFormat
|
||||||
|
@@ -49,6 +49,8 @@ public:
|
|||||||
|
|
||||||
const clang::format::FormatStyle &styleForFile() const;
|
const clang::format::FormatStyle &styleForFile() const;
|
||||||
|
|
||||||
|
void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool formatCodeInsteadOfIndent() const { return false; }
|
virtual bool formatCodeInsteadOfIndent() const { return false; }
|
||||||
virtual bool formatWhileTyping() const { return false; }
|
virtual bool formatWhileTyping() const { return false; }
|
||||||
@@ -84,6 +86,9 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
mutable CachedStyle m_cachedStyle;
|
mutable CachedStyle m_cachedStyle;
|
||||||
|
|
||||||
|
clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) const;
|
||||||
|
TextEditor::ICodeStylePreferences *m_overriddenPreferences = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ClangFormat
|
} // namespace ClangFormat
|
||||||
|
@@ -129,7 +129,9 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc
|
|||||||
displaySettings.m_visualizeWhitespace = true;
|
displaySettings.m_visualizeWhitespace = true;
|
||||||
d->preview->setDisplaySettings(displaySettings);
|
d->preview->setDisplaySettings(displaySettings);
|
||||||
d->preview->setPlainText(QLatin1String(CppEditor::Constants::DEFAULT_CODE_STYLE_SNIPPETS[0]));
|
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()->setFontSettings(TextEditor::TextEditorSettings::fontSettings());
|
||||||
d->preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter);
|
d->preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter);
|
||||||
d->preview->textDocument()->indenter()->setFileName(fileName);
|
d->preview->textDocument()->indenter()->setFileName(fileName);
|
||||||
@@ -271,7 +273,7 @@ void ClangFormatConfigWidget::updatePreview()
|
|||||||
QTextCursor cursor(d->preview->document());
|
QTextCursor cursor(d->preview->document());
|
||||||
cursor.setPosition(0);
|
cursor.setPosition(0);
|
||||||
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
||||||
d->preview->textDocument()->autoIndent(cursor);
|
d->preview->textDocument()->autoFormatOrIndent(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ClangFormatConfigWidget::readFile(const QString &path)
|
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
|
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
|
return action == ProjectAction::AddNewFile || action == ProjectAction::AddExistingFile
|
||||||
|| action == ProjectAction::AddExistingDirectory || action == ProjectAction::Rename
|
|| action == ProjectAction::AddExistingDirectory || action == ProjectAction::Rename
|
||||||
|| action == ProjectAction::RemoveFile;
|
|| action == ProjectAction::RemoveFile;
|
||||||
@@ -1623,7 +1624,9 @@ CMakeBuildConfiguration *CMakeBuildSystem::cmakeBuildConfiguration() const
|
|||||||
static FilePaths librarySearchPaths(const CMakeBuildSystem *bs, const QString &buildKey)
|
static FilePaths librarySearchPaths(const CMakeBuildSystem *bs, const QString &buildKey)
|
||||||
{
|
{
|
||||||
const CMakeBuildTarget cmakeBuildTarget
|
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;
|
return cmakeBuildTarget.libraryDirectories;
|
||||||
}
|
}
|
||||||
|
@@ -48,10 +48,6 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
|
|||||||
continue;
|
continue;
|
||||||
const int index = target.title.indexOf(input, 0, Qt::CaseInsensitive);
|
const int index = target.title.indexOf(input, 0, Qt::CaseInsensitive);
|
||||||
if (index >= 0) {
|
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 FilePath projectPath = cmakeProject->projectFilePath();
|
||||||
const QString displayName = target.title;
|
const QString displayName = target.title;
|
||||||
LocatorFilterEntry entry;
|
LocatorFilterEntry entry;
|
||||||
@@ -62,11 +58,20 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
|
|||||||
return AcceptResult();
|
return AcceptResult();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
entry.linkForEditor = {path, line};
|
bool realTarget = false;
|
||||||
entry.extraInfo = path.shortNativePath();
|
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.highlightInfo = {index, int(input.length())};
|
||||||
entry.filePath = cmakeProject->projectFilePath();
|
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();
|
return QVariant();
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
return entry->filePath().isEmpty() ? entry->displayName() : entry->filePath().toUserOutput();
|
return entry->filePath().isEmpty() ? entry->displayName() : entry->filePath().toUserOutput();
|
||||||
|
case DocumentModel::FilePathRole:
|
||||||
|
return entry->filePath().toVariant();
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -69,6 +69,8 @@ public:
|
|||||||
static QList<IEditor *> editorsForDocuments(const QList<IDocument *> &entries);
|
static QList<IEditor *> editorsForDocuments(const QList<IDocument *> &entries);
|
||||||
static QList<IEditor *> editorsForOpenedDocuments();
|
static QList<IEditor *> editorsForOpenedDocuments();
|
||||||
|
|
||||||
|
static const int FilePathRole = Qt::UserRole + 23;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DocumentModel();
|
DocumentModel();
|
||||||
};
|
};
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
|
using namespace Utils;
|
||||||
|
|
||||||
namespace Core::Internal {
|
namespace Core::Internal {
|
||||||
|
|
||||||
class ProxyModel : public QAbstractProxyModel
|
class ProxyModel : public QAbstractProxyModel
|
||||||
@@ -253,8 +255,8 @@ QVariant ProxyModel::data(const QModelIndex &index, int role) const
|
|||||||
const QVariant sourceDecoration = QAbstractProxyModel::data(index, role);
|
const QVariant sourceDecoration = QAbstractProxyModel::data(index, role);
|
||||||
if (sourceDecoration.isValid())
|
if (sourceDecoration.isValid())
|
||||||
return sourceDecoration;
|
return sourceDecoration;
|
||||||
const QString fileName = QAbstractProxyModel::data(index, Qt::DisplayRole).toString();
|
const QVariant filePath = QAbstractProxyModel::data(index, DocumentModel::FilePathRole);
|
||||||
return Utils::FileIconProvider::icon(Utils::FilePath::fromString(fileName));
|
return FileIconProvider::icon(FilePath::fromVariant(filePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
return QAbstractProxyModel::data(index, role);
|
return QAbstractProxyModel::data(index, role);
|
||||||
|
@@ -623,10 +623,8 @@ void ExternalToolRunner::run()
|
|||||||
}
|
}
|
||||||
m_process = new Process(this);
|
m_process = new Process(this);
|
||||||
connect(m_process, &Process::done, this, &ExternalToolRunner::done);
|
connect(m_process, &Process::done, this, &ExternalToolRunner::done);
|
||||||
connect(m_process, &Process::readyReadStandardOutput,
|
m_process->setStdOutLineCallback([this](const QString &s) { readStandardOutput(s); });
|
||||||
this, &ExternalToolRunner::readStandardOutput);
|
m_process->setStdErrLineCallback([this](const QString &s) { readStandardError(s); });
|
||||||
connect(m_process, &Process::readyReadStandardError,
|
|
||||||
this, &ExternalToolRunner::readStandardError);
|
|
||||||
if (!m_resolvedWorkingDirectory.isEmpty())
|
if (!m_resolvedWorkingDirectory.isEmpty())
|
||||||
m_process->setWorkingDirectory(m_resolvedWorkingDirectory);
|
m_process->setWorkingDirectory(m_resolvedWorkingDirectory);
|
||||||
const CommandLine cmd{m_resolvedExecutable, m_resolvedArguments, CommandLine::Raw};
|
const CommandLine cmd{m_resolvedExecutable, m_resolvedArguments, CommandLine::Raw};
|
||||||
@@ -665,30 +663,29 @@ void ExternalToolRunner::done()
|
|||||||
deleteLater();
|
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)
|
if (m_tool->outputHandling() == ExternalTool::Ignore)
|
||||||
return;
|
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)
|
if (m_tool->outputHandling() == ExternalTool::ShowInPane)
|
||||||
MessageManager::writeSilently(output);
|
MessageManager::writeSilently(stripNewline(output));
|
||||||
else if (m_tool->outputHandling() == ExternalTool::ReplaceSelection)
|
else if (m_tool->outputHandling() == ExternalTool::ReplaceSelection)
|
||||||
m_processOutput.append(output);
|
m_processOutput.append(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalToolRunner::readStandardError()
|
void ExternalToolRunner::readStandardError(const QString &output)
|
||||||
{
|
{
|
||||||
if (m_tool->errorHandling() == ExternalTool::Ignore)
|
if (m_tool->errorHandling() == ExternalTool::Ignore)
|
||||||
return;
|
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)
|
if (m_tool->errorHandling() == ExternalTool::ShowInPane)
|
||||||
MessageManager::writeSilently(output);
|
MessageManager::writeSilently(stripNewline(output));
|
||||||
else if (m_tool->errorHandling() == ExternalTool::ReplaceSelection)
|
else if (m_tool->errorHandling() == ExternalTool::ReplaceSelection)
|
||||||
m_processOutput.append(output);
|
m_processOutput.append(output);
|
||||||
}
|
}
|
||||||
|
@@ -115,8 +115,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void done();
|
void done();
|
||||||
void readStandardOutput();
|
void readStandardOutput(const QString &output);
|
||||||
void readStandardError();
|
void readStandardError(const QString &output);
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
bool resolve();
|
bool resolve();
|
||||||
@@ -128,6 +128,7 @@ private:
|
|||||||
Utils::FilePath m_resolvedWorkingDirectory;
|
Utils::FilePath m_resolvedWorkingDirectory;
|
||||||
Utils::Environment m_resolvedEnvironment;
|
Utils::Environment m_resolvedEnvironment;
|
||||||
Utils::Process *m_process;
|
Utils::Process *m_process;
|
||||||
|
// TODO remove codec handling, that is done by Process now
|
||||||
QTextCodec *m_outputCodec;
|
QTextCodec *m_outputCodec;
|
||||||
QTextCodec::ConverterState m_outputCodecState;
|
QTextCodec::ConverterState m_outputCodecState;
|
||||||
QTextCodec::ConverterState m_errorCodecState;
|
QTextCodec::ConverterState m_errorCodecState;
|
||||||
|
@@ -811,10 +811,24 @@ ListModel *SectionedGridView::addSection(const Section §ion, const QList<Lis
|
|||||||
vbox->insertWidget(position, sectionLabel);
|
vbox->insertWidget(position, sectionLabel);
|
||||||
vbox->insertWidget(position + 1, gridView);
|
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
|
// 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 *> allItems = m_allItemsModel->items();
|
||||||
const QList<ListItem *> newItems = filtered(items, [&allItems](ListItem *item) {
|
const std::unordered_set<ListItem *, ItemHash, ItemEqual> uniqueItems{allItems.constBegin(),
|
||||||
return !allItems.contains(item);
|
allItems.constEnd()};
|
||||||
|
const QList<ListItem *> newItems = filtered(items, [&uniqueItems](ListItem *item) {
|
||||||
|
return uniqueItems.find(item) == uniqueItems.end();
|
||||||
});
|
});
|
||||||
m_allItemsModel->appendItems(newItems);
|
m_allItemsModel->appendItems(newItems);
|
||||||
|
|
||||||
|
@@ -605,6 +605,11 @@ public:
|
|||||||
m_codeStyleEditor->apply();
|
m_codeStyleEditor->apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void finish() final
|
||||||
|
{
|
||||||
|
m_codeStyleEditor->finish();
|
||||||
|
}
|
||||||
|
|
||||||
CppCodeStylePreferences *m_pageCppCodeStylePreferences = nullptr;
|
CppCodeStylePreferences *m_pageCppCodeStylePreferences = nullptr;
|
||||||
CodeStyleEditorWidget *m_codeStyleEditor;
|
CodeStyleEditorWidget *m_codeStyleEditor;
|
||||||
};
|
};
|
||||||
|
@@ -219,7 +219,7 @@ void OutlineModel::rebuild()
|
|||||||
auto root = new SymbolItem;
|
auto root = new SymbolItem;
|
||||||
if (m_cppDocument)
|
if (m_cppDocument)
|
||||||
buildTree(root, true);
|
buildTree(root, true);
|
||||||
setRootItem(root);
|
setRootItemInternal(root);
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -782,6 +782,7 @@ SearchResultItems symbolOccurrencesInDeclarationComments(
|
|||||||
QList<Text::Range> symbolOccurrencesInText(const QTextDocument &doc, QStringView text, int offset,
|
QList<Text::Range> symbolOccurrencesInText(const QTextDocument &doc, QStringView text, int offset,
|
||||||
const QString &symbolName)
|
const QString &symbolName)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(!symbolName.isEmpty(), return QList<Text::Range>());
|
||||||
QList<Text::Range> ranges;
|
QList<Text::Range> ranges;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@@ -4407,6 +4407,13 @@ void GdbEngine::setupInferior()
|
|||||||
if (rp.breakOnMain)
|
if (rp.breakOnMain)
|
||||||
runCommand({"tbreak " + mainFunction()});
|
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) {
|
if (rp.startMode == AttachToRemoteProcess) {
|
||||||
|
|
||||||
handleInferiorPrepared();
|
handleInferiorPrepared();
|
||||||
@@ -4429,13 +4436,6 @@ void GdbEngine::setupInferior()
|
|||||||
|
|
||||||
// if (!remoteArch.isEmpty())
|
// if (!remoteArch.isEmpty())
|
||||||
// postCommand("set architecture " + remoteArch);
|
// 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())
|
if (!args.isEmpty())
|
||||||
runCommand({"-exec-arguments " + args});
|
runCommand({"-exec-arguments " + args});
|
||||||
|
@@ -1048,6 +1048,7 @@ void FakeVimPluginPrivate::initialize()
|
|||||||
INSTALL_HANDLER, Context(Core::Constants::C_GLOBAL), true);
|
INSTALL_HANDLER, Context(Core::Constants::C_GLOBAL), true);
|
||||||
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? Tr::tr("Meta+Shift+Y,Meta+Shift+Y")
|
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? Tr::tr("Meta+Shift+Y,Meta+Shift+Y")
|
||||||
: Tr::tr("Alt+Y,Alt+Y")));
|
: Tr::tr("Alt+Y,Alt+Y")));
|
||||||
|
connect(cmd->action(), &QAction::triggered, [this] { settings().writeSettings(); });
|
||||||
|
|
||||||
ActionContainer *advancedMenu =
|
ActionContainer *advancedMenu =
|
||||||
ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
||||||
|
@@ -236,7 +236,7 @@ bool IosDeployStep::checkProvisioningProfile()
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList();
|
const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList();
|
||||||
const QString targetId = device->uniqueDeviceID();
|
const QString targetId = device->uniqueInternalDeviceId();
|
||||||
for (const QString &deviceId : deviceIds) {
|
for (const QString &deviceId : deviceIds) {
|
||||||
if (deviceId == targetId)
|
if (deviceId == targetId)
|
||||||
return true;
|
return true;
|
||||||
|
@@ -317,7 +317,7 @@ public:
|
|||||||
});
|
});
|
||||||
|
|
||||||
setProposal(m_processor->start(std::move(interface)), prefix);
|
setProposal(m_processor->start(std::move(interface)), prefix);
|
||||||
if (!m_processor->running()) {
|
if (m_processor && !m_processor->running()) {
|
||||||
delete m_processor;
|
delete m_processor;
|
||||||
m_processor = nullptr;
|
m_processor = nullptr;
|
||||||
}
|
}
|
||||||
|
@@ -119,6 +119,30 @@ void McuSupportImportProvider::loadBuiltins(ImportsPerDocument *importsPerDocume
|
|||||||
import.info = ImportInfo::moduleImport("qul", {1, 0}, QString());
|
import.info = ImportInfo::moduleImport("qul", {1, 0}, QString());
|
||||||
getInterfacesImport(context->fileName(), importsPerDocument, import, valueOwner, snapshot);
|
getInterfacesImport(context->fileName(), importsPerDocument, import, valueOwner, snapshot);
|
||||||
imports->append(import);
|
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,
|
void McuSupportImportProvider::getInterfacesImport(const FilePath &path,
|
||||||
@@ -156,6 +180,7 @@ std::optional<FilePath> McuSupportImportProvider::getFileModule(const FilePath &
|
|||||||
const FilePath &inputFile) const
|
const FilePath &inputFile) const
|
||||||
{
|
{
|
||||||
const auto doc = QJsonDocument::fromJson(inputFile.fileContents().value_or(""));
|
const auto doc = QJsonDocument::fromJson(inputFile.fileContents().value_or(""));
|
||||||
|
|
||||||
if (!doc.isObject())
|
if (!doc.isObject())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@@ -29,6 +29,9 @@ public:
|
|||||||
ValueOwner *valueOwner,
|
ValueOwner *valueOwner,
|
||||||
Snapshot *snapshot) override;
|
Snapshot *snapshot) override;
|
||||||
|
|
||||||
|
virtual Utils::FilePaths prioritizeImportPaths(const Document *context,
|
||||||
|
const Utils::FilePaths &importPaths) override;
|
||||||
|
|
||||||
// Add to the interfaces needed for a document
|
// Add to the interfaces needed for a document
|
||||||
// path: opened qml document
|
// path: opened qml document
|
||||||
// importsPerDocument: imports available in the document (considered imported)
|
// 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
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
#include "abi.h"
|
#include "abi.h"
|
||||||
|
#include "projectexplorerconstants.h"
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
@@ -437,6 +438,18 @@ static Abis abiOf(const QByteArray &data)
|
|||||||
return result;
|
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
|
// Abi
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@@ -908,7 +921,11 @@ Abi Abi::fromString(const QString &abiString)
|
|||||||
return Abi(architecture, os, flavor, format, 0);
|
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)
|
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);
|
auto customTc = static_cast<const CustomToolChain *>(&other);
|
||||||
return m_makeCommand == customTc->m_makeCommand
|
return m_makeCommand == customTc->m_makeCommand
|
||||||
|
&& compilerCommand() == customTc->compilerCommand()
|
||||||
&& targetAbi() == customTc->targetAbi()
|
&& targetAbi() == customTc->targetAbi()
|
||||||
&& m_predefinedMacros == customTc->m_predefinedMacros
|
&& m_predefinedMacros == customTc->m_predefinedMacros
|
||||||
&& m_builtInHeaderPaths == customTc->m_builtInHeaderPaths;
|
&& m_builtInHeaderPaths == customTc->m_builtInHeaderPaths;
|
||||||
|
@@ -348,7 +348,7 @@ FilePath Node::pathOrDirectory(bool dir) const
|
|||||||
|
|
||||||
QTC_CHECK(!location.needsDevice());
|
QTC_CHECK(!location.needsDevice());
|
||||||
QFileInfo fi = location.toFileInfo();
|
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());
|
fi.setFile(fi.absolutePath());
|
||||||
return FilePath::fromString(fi.absoluteFilePath());
|
return FilePath::fromString(fi.absoluteFilePath());
|
||||||
}
|
}
|
||||||
|
@@ -78,7 +78,7 @@ class QtVersionData
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Update version if you add data members!
|
// Update version if you add data members!
|
||||||
static const int version = 2;
|
static const int version = 3;
|
||||||
|
|
||||||
bool installed = true;
|
bool installed = true;
|
||||||
bool hasExamples = false;
|
bool hasExamples = false;
|
||||||
@@ -207,8 +207,11 @@ public:
|
|||||||
hostDataPath = FilePath::fromSettings(map.value("HostDataPath"));
|
hostDataPath = FilePath::fromSettings(map.value("HostDataPath"));
|
||||||
hostPrefixPath = FilePath::fromSettings(map.value("HostPrefixPath"));
|
hostPrefixPath = FilePath::fromSettings(map.value("HostPrefixPath"));
|
||||||
auto it = map.find("QtAbis");
|
auto it = map.find("QtAbis");
|
||||||
if (it != map.end())
|
if (it != map.end()) {
|
||||||
qtAbis = Utils::transform(it.value().toStringList(), &Abi::fromString);
|
const auto qtAbisList = it.value().toStringList();
|
||||||
|
if (!qtAbisList.isEmpty())
|
||||||
|
qtAbis = Utils::transform(qtAbisList, &Abi::fromString);
|
||||||
|
}
|
||||||
versionInfo = fromStore(map.value("VersionInfo").value<Store>());
|
versionInfo = fromStore(map.value("VersionInfo").value<Store>());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -363,7 +363,8 @@ void ExamplesViewController::updateExamples()
|
|||||||
|
|
||||||
const QStringList sources = m_exampleSetModel->exampleSources(&examplesInstallPath,
|
const QStringList sources = m_exampleSetModel->exampleSources(&examplesInstallPath,
|
||||||
&demosInstallPath,
|
&demosInstallPath,
|
||||||
&qtVersion);
|
&qtVersion,
|
||||||
|
m_isExamples);
|
||||||
QStringList categoryOrder;
|
QStringList categoryOrder;
|
||||||
QList<ExampleItem *> items;
|
QList<ExampleItem *> items;
|
||||||
for (const QString &exampleSource : sources) {
|
for (const QString &exampleSource : sources) {
|
||||||
@@ -493,12 +494,15 @@ QtVersion *ExampleSetModel::findHighestQtVersion(const QtVersions &versions) con
|
|||||||
|
|
||||||
QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath,
|
QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath,
|
||||||
QString *demosInstallPath,
|
QString *demosInstallPath,
|
||||||
QVersionNumber *qtVersion)
|
QVersionNumber *qtVersion,
|
||||||
|
bool isExamples)
|
||||||
{
|
{
|
||||||
QStringList sources;
|
QStringList sources;
|
||||||
|
|
||||||
// Qt Creator shipped tutorials
|
if (!isExamples) {
|
||||||
sources << ":/qtsupport/qtcreator_tutorials.xml";
|
// Qt Creator shipped tutorials
|
||||||
|
sources << ":/qtsupport/qtcreator_tutorials.xml";
|
||||||
|
}
|
||||||
|
|
||||||
QString examplesPath;
|
QString examplesPath;
|
||||||
QString demosPath;
|
QString demosPath;
|
||||||
|
@@ -41,7 +41,8 @@ public:
|
|||||||
bool selectExampleSet(int index);
|
bool selectExampleSet(int index);
|
||||||
QStringList exampleSources(QString *examplesInstallPath,
|
QStringList exampleSources(QString *examplesInstallPath,
|
||||||
QString *demosInstallPath,
|
QString *demosInstallPath,
|
||||||
QVersionNumber *qtVersion);
|
QVersionNumber *qtVersion,
|
||||||
|
bool isExamples);
|
||||||
bool selectedQtSupports(const Utils::Id &target) const;
|
bool selectedQtSupports(const Utils::Id &target) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@@ -58,7 +58,11 @@ GroupItem KillAppStep::deployRecipe()
|
|||||||
addProgressMessage(Tr::tr("Failed to kill remote application. "
|
addProgressMessage(Tr::tr("Failed to kill remote application. "
|
||||||
"Assuming it was not running."));
|
"Assuming it was not running."));
|
||||||
};
|
};
|
||||||
return DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler);
|
const Group root {
|
||||||
|
finishAllAndDone,
|
||||||
|
DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler)
|
||||||
|
};
|
||||||
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
KillAppStepFactory::KillAppStepFactory()
|
KillAppStepFactory::KillAppStepFactory()
|
||||||
|
@@ -20,7 +20,9 @@
|
|||||||
#include <utils/stringutils.h>
|
#include <utils/stringutils.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
|
#include <QDesktopServices>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
#include <QRegularExpression>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QTextBrowser>
|
#include <QTextBrowser>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
@@ -70,9 +72,22 @@ public:
|
|||||||
|
|
||||||
// preview
|
// preview
|
||||||
m_previewWidget = new QTextBrowser();
|
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);
|
m_previewWidget->setFrameShape(QFrame::NoFrame);
|
||||||
new Utils::MarkdownHighlighter(m_previewWidget->document());
|
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
|
// editor
|
||||||
m_textEditorWidget = new TextEditorWidget;
|
m_textEditorWidget = new TextEditorWidget;
|
||||||
@@ -170,6 +185,26 @@ public:
|
|||||||
m_previewRestoreScrollPosition.reset();
|
m_previewRestoreScrollPosition.reset();
|
||||||
|
|
||||||
m_previewWidget->setMarkdown(m_document->plainText());
|
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->horizontalScrollBar()->setValue(positions.x());
|
||||||
m_previewWidget->verticalScrollBar()->setValue(positions.y());
|
m_previewWidget->verticalScrollBar()->setValue(positions.y());
|
||||||
|
@@ -8563,7 +8563,7 @@ QAction * TextEditorWidget::insertExtraToolBarWidget(TextEditorWidget::Side side
|
|||||||
findLeftMostAction);
|
findLeftMostAction);
|
||||||
return d->m_toolBar->insertWidget(before, widget);
|
return d->m_toolBar->insertWidget(before, widget);
|
||||||
} else {
|
} 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()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
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()
|
endmacro()
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -101,47 +109,61 @@ macro(qtc_auto_setup_conan)
|
|||||||
"include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
|
"include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
|
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
|
||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
|
unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
|
||||||
project(conan-setup)
|
project(conan-setup)
|
||||||
|
|
||||||
if (${conan_version} VERSION_GREATER_EQUAL 2.0)
|
if (${conan_version} VERSION_GREATER_EQUAL 2.0)
|
||||||
set(CONAN_COMMAND \"${conan_program}\")
|
set(CONAN_COMMAND \"${conan_program}\")
|
||||||
include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
|
include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
|
||||||
conan_profile_detect_default()
|
conan_profile_detect_default()
|
||||||
detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\")
|
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(
|
conan_install(
|
||||||
-pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\"
|
-pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\"
|
||||||
--build=${QT_CREATOR_CONAN_BUILD_POLICY}
|
--build=${QT_CREATOR_CONAN_BUILD_POLICY}
|
||||||
-s build_type=${CMAKE_BUILD_TYPE}
|
-s build_type=\${type}
|
||||||
-g CMakeDeps)
|
-g CMakeDeps)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
||||||
if (CONAN_INSTALL_SUCCESS)
|
if (CONAN_INSTALL_SUCCESS)
|
||||||
get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
|
get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
|
||||||
file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
|
file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
|
||||||
list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||||
list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||||
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
|
list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
|
||||||
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
|
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
|
||||||
set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
|
||||||
set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH)
|
||||||
\")
|
set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||||
endif()
|
set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||||
else()
|
set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
|
||||||
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()
|
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}
|
execute_process(COMMAND ${CMAKE_COMMAND}
|
||||||
-S "${CMAKE_BINARY_DIR}/conan-dependencies/"
|
-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"
|
-D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
|
||||||
-G ${CMAKE_GENERATOR}
|
-G ${CMAKE_GENERATOR}
|
||||||
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}"
|
||||||
RESULT_VARIABLE result
|
RESULT_VARIABLE result
|
||||||
)
|
)
|
||||||
if (result EQUAL 0)
|
if (result EQUAL 0)
|
||||||
|
Submodule src/shared/qbs updated: b1d6a0518a...aa044048f0
@@ -3984,7 +3984,7 @@ namespace qstring {
|
|||||||
// Check string "HiDu" QString.
|
// Check string "HiDu" QString.
|
||||||
// Continue.
|
// Continue.
|
||||||
delete pstring;
|
delete pstring;
|
||||||
dummyStatement(&str, &string, pstring);
|
dummyStatement(&str, &string, &pstring);
|
||||||
}
|
}
|
||||||
|
|
||||||
void testQString4()
|
void testQString4()
|
||||||
|
@@ -207,7 +207,8 @@ def __getExpectedCompilers__():
|
|||||||
for c in ('clang++', 'clang', 'afl-clang',
|
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]',
|
'clang-[0-9]', 'clang-[0-9].[0-9]', 'clang-1[0-9]', 'clang-1[0-9].[0-9]',
|
||||||
'*g++*', '*gcc*'):
|
'*g++*', '*gcc*'):
|
||||||
compilers.extend(findAllFilesInPATH(c))
|
filesInPath = set(findAllFilesInPATH(c))
|
||||||
|
compilers.extend(filesInPath | set(map(os.path.realpath, filesInPath)))
|
||||||
if platform.system() == 'Darwin':
|
if platform.system() == 'Darwin':
|
||||||
for compilerExe in ('clang++', 'clang'):
|
for compilerExe in ('clang++', 'clang'):
|
||||||
xcodeClang = getOutputFromCmdline(["xcrun", "--find", compilerExe]).strip("\n")
|
xcodeClang = getOutputFromCmdline(["xcrun", "--find", compilerExe]).strip("\n")
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user