Merge remote-tracking branch 'origin/10.0'

Change-Id: Ie591b7130b33a042509e56701384f8ff4d9cb7f8
This commit is contained in:
Eike Ziller
2023-03-16 11:57:01 +01:00
42 changed files with 41567 additions and 40656 deletions

View File

@@ -15,6 +15,8 @@ General
* Added support for temporarily dragging progress details out of the way
in addition to hiding them with the button below them (QTCREATORBUG-28078)
* Fixed that the locator search term was not preserved when using `Open as
Centered Popup`
Editing
-------
@@ -108,6 +110,12 @@ Projects
by default (QTCREATORBUG-28513)
* Fixed that `Package manager auto setup` created a dependency of the project
build to the Qt Creator installation
* Fixed that cloned build configurations could miss values from the `Initial
Parameters` (QTCREATORBUG-28759)
* Fixed that CMake preset macros were not expanded for environment variables
(QTCREATORBUG-28606)
* Fixed a crash with the `Kit Configuration` button for build configurations
(QTCREATORBUG-28740)
### Qbs
@@ -129,9 +137,15 @@ Debugging
* Fixed highlighting in the `Disassembler` view
* Fixed skipping `std::function` details when stepping
* Fixed an out of memory issue when debugging long lists (QTCREATORBUG-26416)
* Fixed the highlighting of values and members in the memory view
(QTCREATORBUG-23681)
* GDB
* Fixed issues with GDB 13.1
* CDB
* Fixed the printing of addresses of pointers with multiple base classes
(QTCREATORBUG-28337)
* Fixed some performance issues (QTCREATORBUG-18287)
* Fixed a freeze with non-UTF-8 system encoding (QTCREATORBUG-25054)
### Python
@@ -159,9 +173,10 @@ Version Control Systems
### Git
* Improved tracking of external changes (QTCREATORBUG-21089)
* Added editor annotation for blame information (instant blame) with a setting
(opt-out) and an action to show it manually for the current line
(QTCREATORBUG-23299)
* Added editor annotation for blame information (instant blame) with the setting
`Edit > Preferences > Version Control Git > Add instant blame annotations to
editor` (opt-out) and the `Tools > Git > Current File > Instant Blame` action
to show annotation manually for the current line (QTCREATORBUG-23299)
Test Integration
----------------
@@ -169,7 +184,8 @@ Test Integration
* Improved `Run` and `Debug Test Under Cursor` (QTCREATORBUG-28496)
* Improved the number of files that are scanned for tests
* Improved output handling (QTCREATORBUG-28706)
* Made the expensive checking for tests in derived `TestCase` objects optional
* Added an option to enable the expensive checking for tests in derived
`TestCase` objects to `Edit > Preferences > Testing > Qt Test`
Platforms
---------
@@ -242,6 +258,7 @@ Philip Van Hoof
Pranta Dastider
Robert Löhning
Sami Shalayel
Samuel Gaist
Samuel Ghinet
Sergey Levin
Sivert Krøvel

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -172,7 +172,7 @@
\c {cmake-format.exe}.
\li Select \uicontrol {Enable auto format on file save} to automatically
format CMake files when you save them.
\li In \uicontrol {Restrict to MIME types}, add the \l{Adding MIME Types}
\li In \uicontrol {Restrict to MIME types}, add the \l{Editing MIME Types}
{MIME types} of the files to format, separated by semicolons. The
default value, \c {text/x-cmake} formats CMake files. If the field is
empty, all files are formatted.

View File

@@ -83,7 +83,7 @@
directories.
Also, the \uicontrol {Open Terminal} button in the
\uicontrol {Use build environment} section opens a terminal on the device.
\uicontrol {Build Environment} section opens a terminal on the device.
\section1 Starting External Processes

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -40,4 +40,22 @@
\uicontrol Uncommit leaves the working tree ready for a new commit. The only
change it might make is restoring pending merges that were present before
the commit.
\section1 Bazaar Preferences
To set Bazaar preferences, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol Bazaar:
\image qtcreator-preferences-vcs-bazaar.webp {Bazaar preferences}
\list
\li \uicontrol Command specifies the path to the command line client
executable.
\li \uicontrol {Default username} and \uicontrol {Default email}
specify the username and email address to use by default when
committing changes.
\li \uicontrol {Log count} sets the maximum number of lines the log can
have.
\li \uicontrol Timeout sets a timeout for version control operations.
\endlist
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -15,9 +15,8 @@
\title Using ClearCase
IBM Rational ClearCase is a version control, workspace management, parallel
development support, and build automation solution developed by IBM. The
ClearCase client plugin is available on Linux and Windows for accessing a
ClearCase server.
development support, and build automation solution developed by IBM. Use the
ClearCase client plugin on Linux and Windows to access a ClearCase server.
\section1 Using GNU Diffutils with ClearCase
@@ -32,8 +31,10 @@
\li Select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol ClearCase.
\image qtcreator-preferences-vcs-clearcase.webp {ClearCase preferences}
\li Select the \uicontrol External radio button. The radio button is
disabled if \c diff is not found in the PATH.
disabled if \c diff is not in the PATH.
\li In the \uicontrol Arguments field, specify arguments for running
\c diff.
@@ -51,12 +52,10 @@
a UCM activity. By default, the activities are automatically assigned names.
To disable this functionality, select \uicontrol Edit > \uicontrol Preferences
> \uicontrol {Version Control} > \uicontrol ClearCase, and then deselect the
\uicontrol {Automatically assign activity names} check box.
\uicontrol {Auto assign activity names} check box.
To automatically check out files when you edit them, select \uicontrol Edit
> \uicontrol Preferences > \uicontrol {Version Control} > \uicontrol ClearCase,
and then select the \uicontrol {Automatically check out files on edit}
check box.
To automatically check out files when you edit them, select the
\uicontrol {Automatically check out files on edit} check box.
To cancel the checkout for a file and delete the checked-out version,
select \uicontrol Tools > \uicontrol ClearCase >
@@ -68,12 +67,12 @@
To create a permanent new version of the current file or all files in the
versioned object base (VOB), select \uicontrol Tools >
\uicontrol {ClearCase} > \uicontrol {Check In}. To be asked to confirm
\uicontrol {ClearCase} > \uicontrol {Check In}. To confirm
that you want to check in the files, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} > \uicontrol ClearCase,
and then select the \uicontrol {Prompt on check-in} check box.
By default, you are asked to enter a comment when checking files out or in.
By default, you have to enter a comment when checking files out or in.
To suppress this prompt, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol ClearCase, and then select the
\uicontrol {Do not prompt for comment during checkout or check-in} check
@@ -89,4 +88,8 @@
> \uicontrol {Version Control} > \uicontrol ClearCase, and then select the
\uicontrol {Disable indexer} check box. To only have some VOBs indexed,
specify them in the \uicontrol {Index only VOBs} field.
Specify the number of event records to show in \uicontrol {History count}.
Set a timeout for version control operations in \uicontrol Timeout.
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2019 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -29,18 +29,20 @@
To unedit files in the local directory, as well as recursively in all
subdirectories, select \uicontrol {Unedit Repository}.
To specify the CVS root directory, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} > \uicontrol CVS, and then
specify the path to the directory in the \uicontrol {CVS root} field.
\section1 CVS Preferences
You can specify settings for viewing diff output in the
\uicontrol {Diff options} field.
To set CVS preferences, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol CVS:
By default, you are prompted to confirm that you want to submit changes.
To suppress the prompt, deselect the \uicontrol {Prompt on submit} check
box.
\image qtcreator-preferences-vcs-cvs.webp {CVS preferences}
By default, all files that belong to the commit are annotated. To disable
this feature, deselect the \uicontrol {Describe all files matching commit
id} check box.
\list
\li \uicontrol {CVS Command} specifies the path to the command line
client executable.
\li \uicontrol {CVS root} specifies the CVS root.
\li \uicontrol Timeout sets a timeout for version control operations.
\li \uicontrol {Diff options} sets preferences for viewing diff output.
\li \uicontrol {Describe all files matching commit id} annotates all
files that belong to the commit.
\endlist
*/

View File

@@ -29,6 +29,9 @@
\li Select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol Fossil, and set the
designated directory in the \uicontrol {Default path} field.
\image qtcreator-preferences-vcs-fossil.webp {Fossil preferences}
\endlist
To create a local Fossil repository, select \uicontrol Tools >
@@ -62,4 +65,28 @@
\li \uicontrol Settings
\li Configure the settings of the local repository.
\endtable
\section1 Fossil Preferences
To set Fossil preferences, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol Fossil:
\list
\li \uicontrol Command specifies the path to the command line client
executable.
\li \uicontrol {Default path} sets the path to the directory to store
local repositories by default.
\li \uicontrol {Default user} specifies an existing user who becomes the
author of changes made to the repository.
\li \uicontrol {SSL/TLS identity} sets the SSL/TLS client identity key
to use for authentication if the server requests it.
\li \uicontrol {Log count} sets the maximum number of lines the log can
have.
\li \uicontrol {Log width} sets the width of log entry lines to 20 or
above. The value 0 shows a single line per entry.
\li \uicontrol {Timeout} sets a timeout for version control operations.
\li \uicontrol {Disable auto sync} disables automatic pull before
a commit or update and automatic push after a commit or tag or branch
creation.
\endlist
*/

View File

@@ -42,4 +42,23 @@
\li \uicontrol{Push}
\li Push changes to the remote repository.
\endtable
\section1 Mercurial Preferences
To set preferences for Mercurial, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} > \uicontrol Mercurial:
\image qtcreator-preferences-vcs-mercurial.webp {Mercurial preferences}
\list
\li \uicontrol Command specifies the path to the command line client
executable.
\li \uicontrol {Default username} and \uicontrol {Default email}
specify the username and email address to use by default when
committing changes.
\li \uicontrol {Log count} sets the maximum number of lines the log can
have.
\li \uicontrol Timeout sets a timeout for version control operations.
\endlist
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
@@ -8,21 +8,14 @@
\section1 Setting Up Version Control Systems
\QC uses the version control system's command line clients to access your
repositories. To allow access, make sure that the command line clients can
be located using the \c{PATH} environment variable. Alternatively, specify
the path to the command line client executable in the \uicontrol Command
field in the version control system specific tab in \uicontrol Edit >
repositories. Make sure that the command line clients are in the \c{PATH}
environment variable, or specify the path to the command line client
executable in the version control system specific tab in \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control}.
If authentication is required to access the repository, enter the user
credentials in the \uicontrol Username and \uicontrol Password fields.
Enter a timeout for version control operations in the \uicontrol Timeout
field.
For some version control systems, you can specify the maximum number of
lines the log can have in the \uicontrol {Log count} field.
\image qtcreator-preferences-vcs-bazaar.webp {Bazaar preferences}
The other configuration options depend on the version control system.
After you set up the version control system, use the command line to check
that everything works (for example, use the status command). If no issues
arise, you should be ready to use the system also from \QC.
@@ -35,12 +28,14 @@
Select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Version Control}
> \uicontrol General to specify settings for submit messages:
\image qtcreator-preferences-vcs-general.webp {General tab in Version Control preferences}
\list
\li \uicontrol{Wrap submit messages at} limits the line length of a
submit message to the specified number of characters.
\li \uicontrol{Submit message check script} is a script or program that
can be used to perform checks on the submit message before
submitting. The submit message is passed in as the script's first
performs checks on the submit message before
submitting. The submit message is the script's first
parameter. If there is an error, the script should output a
message on standard error and return a non-zero exit code.
\li \uicontrol{User/alias configuration file} is a text file that lists
@@ -73,7 +68,7 @@
For example, \c ssh-askpass or \c x11-ssh-askpass, depending on the
ssh-askpass implementation that you use.
\li \uicontrol {Reset VCS Cache} resets the version control system
configuration to a state known to \QC after it has been changed
configuration to a state known to \QC after you change it
from the command line, for example.
\endlist

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2020 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -29,9 +29,18 @@
\section1 Configuring Perforce
In the Perforce preferences, you can specify workspace details:
\uicontrol {P4 user}, \uicontrol {P4 client}, and \uicontrol {P4 port}. To
specify the details individually for several projects, use configuration
To set Perforce preferences, select \uicontrol Edit > \uicontrol Preferences
> \uicontrol {Version Control} > \uicontrol Perforce:
\image qtcreator-preferences-vcs-perforce.webp {Perforce preferences}
In \uicontrol {P4 command}, set the path to the command line client
executable.
Set workspace details in \uicontrol {P4 user}, \uicontrol {P4 client}, and
\uicontrol {P4 port}.
To specify the details individually for several projects, use configuration
files instead. Create a \c {p4config.txt} configuration file for each
project in the top level project directory, and run
\c{p4 set P4CONFIG=p4config.txt} once. You must deselect the
@@ -56,9 +65,4 @@
To view information about change lists and the files in them, select
\uicontrol Tools > \uicontrol Perforce > \uicontrol Describe.
By default, you must confirm that you want to submit changes. To suppress
the confirmation prompt, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol Perforce, and then deselect the
\uicontrol {Prompt on submit} check box.
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2019 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -21,14 +21,27 @@
\uicontrol Subversion > \uicontrol Describe to display commit log messages
for a revision.
By default, you must confirm that you want to submit changes. To suppress the
confirmation prompt, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Version Control} > \uicontrol Subversion, and then deselect the
\uicontrol {Prompt on submit} check box.
To show whitespace changes in annotation views, deselect the
\uicontrol {Ignore whitespace changes in annotation} check box.
You can use Git as a client for a Subversion server. For more information,
see \l{Using Git with Subversion}.
\section1 Subversion Preferences
To set Subversion preferences, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} >
\uicontrol Subversion:
\image qtcreator-preferences-vcs-subversion.webp {Subversion preferences}
\list
\li \uicontrol {Subversion command} specifies the path to the command
line client executable.
\li \uicontrol {Username} and \uicontrol {Password} specify the user
credentials to access the repository if the server requires
\uicontrol Authentication.
\li \uicontrol {Log count} sets the maximum number of lines the log can
have.
\li \uicontrol Timeout sets a timeout for version control operations.
\li \uicontrol {Ignore whitespace changes in annotation} hides whitespace
changes in annotation views.
\endlist
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2022 The Qt Company Ltd.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -46,6 +46,8 @@
set to \c %HOMEDRIVE%%HOMEPATH% when the Git executable is run and
authorization works as it would with \c {git bash}.
\image qtcreator-preferences-vcs-git.webp {Git preferences}
\section1 Working with the Current File
To work with the current file, select the commands in \uicontrol Tools >
@@ -73,9 +75,15 @@
To display the versioning history of a file, select \uicontrol{Log of}.
The log output has the date, the commit message, and a commit
identifier. Click on the commit identifier to view commit details.
identifier.
\image qtcreator-git-log.png "Commit details in Git log"
You can set the maximum number of log entries to show in \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} > \uicontrol Git >
\uicontrol {Log count}.
Click on the commit identifier to view commit details.
\image qtcreator-git-log.png {Commit details in Git log}
Right-clicking on a commit identifier brings up a context menu that lets
you apply actions on the commit, such as view annotations or cherry-pick
@@ -109,7 +117,7 @@
\uicontrol {Git Show} view, select \uicontrol {Describe Change} in the
context menu.
\image qtcreator-vcs-show.png "Commit description in Git show"
\image qtcreator-vcs-show.png {Commit description in Git show}
\section2 Viewing Annotations
@@ -117,7 +125,14 @@
view displays the lines of the file prepended by the commit identifier they
originate from.
\image qtcreator-git-blame.webp "Git Blame view"
\image qtcreator-git-blame.webp {Git Blame view}
By default, each line is annotated in the editor when you scroll through
the file. To disable this feature, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Version Control} > \uicontrol Git, and
deselect \uicontrol {Add instant blame annotations to editor}. To view
annotations for the current line, select \uicontrol Tools > \uicontrol Git >
\uicontrol {Current File} > \uicontrol {Instant Blame}.
Click the commit identifier to show a detailed description of the change.
@@ -197,7 +212,7 @@
commit page containing a text editor where you can enter your commit
message and a checkable list of modified files to include.
\image qtcreator-vcs-commit.png "Committing changes with Git"
\image qtcreator-vcs-commit.png {Committing changes with Git}
\uicontrol {General Information} displays the names of the
repository and branch for the commit.
@@ -234,7 +249,7 @@
\uicontrol Git > \uicontrol {Local Repository} >
\uicontrol {Amend Last Commit}.
\image qtcreator-git-amend.png "Amending a Git commit"
\image qtcreator-git-amend.png {Amending a Git commit}
To view the commit in its current form, before amending, select
\uicontrol {Show HEAD}.
@@ -279,7 +294,7 @@
\uicontrol {Git Branches} sidebar view shows the checked out
branch in bold and underlined in the list of branches.
\image qtcreator-vcs-gitbranch.png "Git Branches sidebar view"
\image qtcreator-vcs-gitbranch.png {Git Branches sidebar view}
Old entries and tags are filtered out of the list of branches
by default. To include them, select \inlineimage icons/filtericon.png
@@ -424,7 +439,7 @@
commits, select \uicontrol Tools > \uicontrol Git >
\uicontrol {Actions on Commits}.
\image creator-git-commit-actions.png "Select a Git Commit dialog"
\image creator-git-commit-actions.png {Select a Git Commit dialog}
You can apply the following actions on commits:
@@ -565,7 +580,7 @@
Select the \uicontrol HTTPS check box to prepend \c https to the Gerrit URL
if Gerrit does not add it.
\image qtcreator-gerrit-options.png "Gerrit preferences"
\image qtcreator-preferences-vcs-gerrit.webp {Gerrit preferences}
\section1 Working with Git Tools

File diff suppressed because it is too large Load Diff

View File

@@ -326,7 +326,7 @@ void doSemanticHighlighting(
styles.mainStyle = C_PARAMETER;
} else if (token.type == "macro") {
styles.mainStyle = C_MACRO;
} else if (token.type == "type") {
} else if (token.type == "type" || token.type == "concept") {
styles.mainStyle = C_TYPE;
} else if (token.type == "modifier") {
styles.mainStyle = C_KEYWORD;

View File

@@ -1300,6 +1300,9 @@ void ClangdTestHighlighting::test_data()
<< QList<int>{C_FIELD} << 0;
QTest::newRow("fake operator method call") << 1050 << 8 << 1050 << 22
<< QList<int>{C_FUNCTION} << 0;
QTest::newRow("concept definition") << 1053 << 30 << 1053 << 42
<< QList<int>{C_TYPE, C_DECLARATION} << 0;
QTest::newRow("concept use") << 1054 << 29 << 1054 << 41 << QList<int>{C_TYPE} << 0;
}
void ClangdTestHighlighting::test()

View File

@@ -1049,3 +1049,6 @@ void useStrangeStruct(StructWithMisleadingMemberNames *s) {
s->operatormember = 5;
s->operatorMethod();
}
template<typename T> concept NoConstraint = true;
static void constrainedFunc(NoConstraint auto t) {}

View File

@@ -1,4 +1,5 @@
TEMPLATE = app
CONFIG -= qt
CONFIG += c++2a
SOURCES = highlighting.cpp
QMAKE_CXXFLAGS += -broken

View File

@@ -165,24 +165,23 @@ void ClangToolRunWorker::start()
.arg(toolName, projectFile.toUserOutput(), m_diagnosticConfig.displayName()),
Utils::NormalMessageFormat);
// Collect files
const auto [includeDir, clangVersion]
= getClangIncludeDirAndVersion(runControl()->commandLine().executable());
const ClangToolType tool = m_tool == ClangTidyTool::instance() ? ClangToolType::Tidy
: ClangToolType::Clazy;
const FilePath executable = toolExecutable(tool);
const auto [includeDir, clangVersion] = getClangIncludeDirAndVersion(executable);
// Collect files
AnalyzeUnits unitsToProcess;
for (const FileInfo &fileInfo : m_fileInfos)
unitsToProcess.append({fileInfo, includeDir, clangVersion});
qCDebug(LOG) << Q_FUNC_INFO << runControl()->commandLine().executable()
<< includeDir << clangVersion;
qCDebug(LOG) << Q_FUNC_INFO << executable << includeDir << clangVersion;
qCDebug(LOG) << "Files to process:" << unitsToProcess;
qCDebug(LOG) << "Environment:" << m_environment;
m_filesAnalyzed.clear();
m_filesNotAnalyzed.clear();
const ClangToolType tool = m_tool == ClangTidyTool::instance() ? ClangToolType::Tidy
: ClangToolType::Clazy;
using namespace Tasking;
QList<TaskItem> tasks{ParallelLimit(qMax(1, m_runSettings.parallelJobs()))};
for (const AnalyzeUnit &unit : std::as_const(unitsToProcess)) {

View File

@@ -225,6 +225,7 @@ static QPair<FilePath, QString> clangIncludeDirAndVersion(const FilePath &clangT
QPair<FilePath, QString> getClangIncludeDirAndVersion(const FilePath &clangToolPath)
{
QTC_CHECK(!clangToolPath.isEmpty());
static QMap<FilePath, QPair<FilePath, QString>> cache;
auto it = cache.find(clangToolPath);
if (it == cache.end())

View File

@@ -665,12 +665,15 @@ void CMakeBuildSettingsWidget::kitCMakeConfiguration()
auto layout = new QGridLayout(dialog);
kitAspect.createConfigWidget(m_buildSystem->kit())
->addToLayoutWithLabel(layout->parentWidget());
generatorAspect.createConfigWidget(m_buildSystem->kit())
->addToLayoutWithLabel(layout->parentWidget());
configurationKitAspect.createConfigWidget(m_buildSystem->kit())
->addToLayoutWithLabel(layout->parentWidget());
KitAspectWidget *widget = kitAspect.createConfigWidget(m_buildSystem->kit());
widget->setParent(dialog);
widget->addToLayoutWithLabel(layout->parentWidget());
widget = generatorAspect.createConfigWidget(m_buildSystem->kit());
widget->setParent(dialog);
widget->addToLayoutWithLabel(layout->parentWidget());
widget = configurationKitAspect.createConfigWidget(m_buildSystem->kit());
widget->setParent(dialog);
widget->addToLayoutWithLabel(layout->parentWidget());
layout->setColumnStretch(1, 1);
@@ -1175,6 +1178,12 @@ static void addCMakeConfigurePresetToInitialArguments(QStringList &initialArgume
initialArguments.removeIf(
[presetArgument](const QString &item) { return item == presetArgument; });
// Remove the -DQTC_KIT_DEFAULT_CONFIG_HASH argument
const QString presetHashArgument
= CMakeConfigurationKitAspect::kitDefaultConfigHashItem(k).toArgument();
initialArguments.removeIf(
[presetHashArgument](const QString &item) { return item == presetHashArgument; });
PresetsDetails::ConfigurePreset configurePreset
= Utils::findOrDefault(project->presetsData().configurePresets,
[presetName](const PresetsDetails::ConfigurePreset &preset) {

View File

@@ -209,12 +209,51 @@ void CMakeProject::readPresets()
return data;
};
std::function<void(Internal::PresetsData & presetData, Utils::FilePaths & inclueStack)>
resolveIncludes = [&](Internal::PresetsData &presetData, Utils::FilePaths &includeStack) {
if (presetData.include) {
for (const QString &path : presetData.include.value()) {
Utils::FilePath includePath = Utils::FilePath::fromUserInput(path);
if (!includePath.isAbsolutePath())
includePath = presetData.fileDir.resolvePath(path);
Internal::PresetsData includeData = parsePreset(includePath);
if (includeData.include) {
if (includeStack.contains(includePath)) {
TaskHub::addTask(BuildSystemTask(
Task::TaskType::Warning,
Tr::tr("Attempt to include %1 which was already parsed.")
.arg(includePath.path()),
Utils::FilePath(),
-1));
TaskHub::requestPopup();
} else {
resolveIncludes(includeData, includeStack);
}
}
presetData.configurePresets = includeData.configurePresets
+ presetData.configurePresets;
presetData.buildPresets = includeData.buildPresets + presetData.buildPresets;
includeStack << includePath;
}
}
};
const Utils::FilePath cmakePresetsJson = projectDirectory().pathAppended("CMakePresets.json");
const Utils::FilePath cmakeUserPresetsJson = projectDirectory().pathAppended("CMakeUserPresets.json");
Internal::PresetsData cmakePresetsData = parsePreset(cmakePresetsJson);
Internal::PresetsData cmakeUserPresetsData = parsePreset(cmakeUserPresetsJson);
// resolve the include
Utils::FilePaths includeStack = {cmakePresetsJson};
resolveIncludes(cmakePresetsData, includeStack);
includeStack = {cmakeUserPresetsJson};
resolveIncludes(cmakeUserPresetsData, includeStack);
m_presetsData = combinePresets(cmakePresetsData, cmakeUserPresetsData);
setupBuildPresets(m_presetsData);
}

View File

@@ -710,7 +710,10 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
data->cmakePresetDefaultConfigHash
= CMakeConfigurationKitAspect::computeDefaultConfigHash(config, data->cmakeBinary);
QByteArrayList buildConfigurationTypes = {cache.valueOf("CMAKE_BUILD_TYPE")};
QString cmakeBuildType = QString::fromUtf8(cache.valueOf("CMAKE_BUILD_TYPE"));
CMakePresets::Macros::expand(configurePreset, env, projectDirectory(), cmakeBuildType);
QByteArrayList buildConfigurationTypes = {cmakeBuildType.toUtf8()};
if (buildConfigurationTypes.front().isEmpty()) {
buildConfigurationTypes.clear();
QByteArray buildConfigurationTypesString = cache.valueOf("CMAKE_CONFIGURATION_TYPES");

View File

@@ -7,6 +7,7 @@
#include <utils/environment.h>
#include <utils/filepath.h>
#include <utils/hostosinfo.h>
#include <utils/osspecificaspects.h>
using namespace Utils;
@@ -40,10 +41,13 @@ static void expandAllButEnv(const PresetsDetails::ConfigurePreset &preset,
value.replace("${sourceDirName}", sourceDirectory.fileName());
value.replace("${presetName}", preset.name);
value.replace("${fileDir}", preset.fileDir.path());
if (preset.generator)
value.replace("${generator}", preset.generator.value());
value.replace("${hostSystemName}", getHostSystemName(sourceDirectory.osType()));
value.replace("${pathListSep}",
Utils::OsSpecificAspects::pathListSeparator(sourceDirectory.osType()));
}
static void expandAllButEnv(const PresetsDetails::BuildPreset &preset,
@@ -53,10 +57,13 @@ static void expandAllButEnv(const PresetsDetails::BuildPreset &preset,
value.replace("${dollar}", "$");
value.replace("${sourceDir}", sourceDirectory.toString());
value.replace("${fileDir}", preset.fileDir.path());
value.replace("${sourceParentDir}", sourceDirectory.parentDir().toString());
value.replace("${sourceDirName}", sourceDirectory.fileName());
value.replace("${presetName}", preset.name);
value.replace("${pathListSep}",
Utils::OsSpecificAspects::pathListSeparator(sourceDirectory.osType()));
}
static QString expandMacroEnv(const QString &macroPrefix,

View File

@@ -36,6 +36,22 @@ bool parseCMakeMinimumRequired(const QJsonValue &jsonValue, QVersionNumber &vers
return true;
}
std::optional<QStringList> parseInclude(const QJsonValue &jsonValue)
{
std::optional<QStringList> includes;
if (!jsonValue.isUndefined()) {
if (jsonValue.isArray()) {
includes = QStringList();
const QJsonArray includeArray = jsonValue.toArray();
for (const QJsonValue &includeValue : includeArray)
includes.value() << includeValue.toString();
}
}
return includes;
}
std::optional<PresetsDetails::Condition> parseCondition(const QJsonValue &jsonValue)
{
std::optional<PresetsDetails::Condition> condition;
@@ -133,7 +149,8 @@ std::optional<PresetsDetails::Condition> parseCondition(const QJsonValue &jsonVa
}
bool parseConfigurePresets(const QJsonValue &jsonValue,
QList<PresetsDetails::ConfigurePreset> &configurePresets)
QList<PresetsDetails::ConfigurePreset> &configurePresets,
const Utils::FilePath &fileDir)
{
// The whole section is optional
if (jsonValue.isUndefined())
@@ -151,6 +168,7 @@ bool parseConfigurePresets(const QJsonValue &jsonValue,
PresetsDetails::ConfigurePreset preset;
preset.name = object.value("name").toString();
preset.fileDir = fileDir;
preset.hidden = object.value("hidden").toBool();
QJsonValue inherits = object.value("inherits");
@@ -291,7 +309,8 @@ bool parseConfigurePresets(const QJsonValue &jsonValue,
}
bool parseBuildPresets(const QJsonValue &jsonValue,
QList<PresetsDetails::BuildPreset> &buildPresets)
QList<PresetsDetails::BuildPreset> &buildPresets,
const Utils::FilePath &fileDir)
{
// The whole section is optional
if (jsonValue.isUndefined())
@@ -309,6 +328,7 @@ bool parseBuildPresets(const QJsonValue &jsonValue,
PresetsDetails::BuildPreset preset;
preset.name = object.value("name").toString();
preset.fileDir = fileDir;
preset.hidden = object.value("hidden").toBool();
QJsonValue inherits = object.value("inherits");
@@ -416,6 +436,8 @@ bool PresetsParser::parse(const Utils::FilePath &jsonFile, QString &errorMessage
QJsonObject root = jsonDoc.object();
m_presetsData.fileDir = jsonFile.parentDir();
if (!parseVersion(root.value("version"), m_presetsData.version)) {
errorMessage = Tr::tr("Invalid \"version\" in file \"%1\".").arg(jsonFile.fileName());
return false;
@@ -426,14 +448,21 @@ bool PresetsParser::parse(const Utils::FilePath &jsonFile, QString &errorMessage
m_presetsData.cmakeMinimimRequired);
// optional
if (!parseConfigurePresets(root.value("configurePresets"), m_presetsData.configurePresets)) {
m_presetsData.include = parseInclude(root.value("include"));
// optional
if (!parseConfigurePresets(root.value("configurePresets"),
m_presetsData.configurePresets,
jsonFile.parentDir())) {
errorMessage
= Tr::tr("Invalid \"configurePresets\" section in %1 file").arg(jsonFile.fileName());
return false;
}
// optional
if (!parseBuildPresets(root.value("buildPresets"), m_presetsData.buildPresets)) {
if (!parseBuildPresets(root.value("buildPresets"),
m_presetsData.buildPresets,
jsonFile.parentDir())) {
errorMessage
= Tr::tr("Invalid \"buildPresets\" section in %1 file").arg(jsonFile.fileName());
return false;

View File

@@ -90,6 +90,7 @@ public:
void inheritFrom(const ConfigurePreset &other);
QString name;
Utils::FilePath fileDir;
std::optional<bool> hidden = false;
std::optional<QStringList> inherits;
std::optional<Condition> condition;
@@ -115,6 +116,7 @@ public:
void inheritFrom(const BuildPreset &other);
QString name;
Utils::FilePath fileDir;
std::optional<bool> hidden = false;
std::optional<QStringList> inherits;
std::optional<Condition> condition;
@@ -140,6 +142,8 @@ public:
int version = 0;
QVersionNumber cmakeMinimimRequired;
QHash<QString, QString> vendor;
std::optional<QStringList> include;
Utils::FilePath fileDir;
QList<PresetsDetails::ConfigurePreset> configurePresets;
QList<PresetsDetails::BuildPreset> buildPresets;
};

View File

@@ -3941,10 +3941,10 @@ void GdbEngine::handleGdbStarted()
}
if (!rp.sysRoot.isEmpty()) {
runCommand({"set sysroot " + rp.sysRoot.toString()});
runCommand({"set sysroot " + rp.sysRoot.path()});
// sysroot is not enough to correctly locate the sources, so explicitly
// relocate the most likely place for the debug source
runCommand({"set substitute-path /usr/src " + rp.sysRoot.toString() + "/usr/src"});
runCommand({"set substitute-path /usr/src " + rp.sysRoot.path() + "/usr/src"});
}
//QByteArray ba = QFileInfo(sp.dumperLibrary).path().toLocal8Bit();
@@ -4139,7 +4139,7 @@ void GdbEngine::handleDebugInfoLocation(const DebuggerResponse &response)
const FilePath debugInfoLocation = runParameters().debugInfoLocation;
if (!debugInfoLocation.isEmpty() && debugInfoLocation.exists()) {
const QString curDebugInfoLocations = response.consoleStreamOutput.split('"').value(1);
QString cmd = "set debug-file-directory " + debugInfoLocation.toString();
QString cmd = "set debug-file-directory " + debugInfoLocation.path();
if (!curDebugInfoLocations.isEmpty())
cmd += HostOsInfo::pathListSeparator() + curDebugInfoLocations;
runCommand({cmd});
@@ -4799,7 +4799,7 @@ void GdbEngine::handleTargetExtendedRemote(const DebuggerResponse &response)
runCommand({"attach " + QString::number(runParameters().attachPID.pid()),
CB(handleTargetExtendedAttach)});
} else if (!runParameters().inferior.command.isEmpty()) {
runCommand({"-gdb-set remote exec-file " + runParameters().inferior.command.executable().toString(),
runCommand({"-gdb-set remote exec-file " + runParameters().inferior.command.executable().path(),
CB(handleTargetExtendedAttach)});
} else {
const QString title = Tr::tr("No Remote Executable or Process ID Specified");

View File

@@ -53,9 +53,9 @@ McuPackage::McuPackage(const SettingsHandler::Ptr &settingsHandler,
, m_addToSystemPath(addToSystemPath)
, m_valueType(valueType)
{
m_path = FilePath::fromUserInput(qtcEnvironmentVariable(m_environmentVariableName));
if (!m_path.exists()) {
m_path = this->settingsHandler->getPath(settingsKey, QSettings::UserScope, m_defaultPath);
m_path = this->settingsHandler->getPath(settingsKey, QSettings::UserScope, m_defaultPath);
if (m_path.isEmpty()) {
m_path = FilePath::fromUserInput(qtcEnvironmentVariable(m_environmentVariableName));
}
}

View File

@@ -1,92 +1,14 @@
{
"version": 3,
"version": 4,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"minor": 23,
"patch": 0
},
"include": [
"mingw.json", "msvc.json"
],
"configurePresets": [
{
"name": "mingw",
"displayName": "MinGW 11.2.0",
"generator": "Ninja",
"installDir": "../inst-${presetName}",
"cacheVariables": {
"CMAKE_PREFIX_PATH": "$env{SYSTEMDRIVE}/Qt/6.4.2/mingw_64"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"environment": {
"PATH": "$env{SYSTEMDRIVE}/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
},
"debug" : {
"find" : true
}
},
{
"name": "mingw-make",
"binaryDir": "${sourceDir}/build-${presetName}-release",
"displayName": "MinGW 11.2.0 Makefiles",
"generator": "MinGW Makefiles",
"inherits" : "mingw",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_PREFIX_PATH": "$env{SystemDrive}/Qt/6.4.2/mingw_64"
}
},
{
"name": "visualc",
"displayName": "Visual C++ 2019 x64",
"generator": "Visual Studio 16 2019",
"binaryDir": "${sourceDir}/build-${presetName}",
"architecture" : {
"value": "x64"
},
"toolchainFile" : "../cmakepresets/msvc-toolchain.cmake",
"condition" : {
"type": "not",
"condition": {
"type": "notEquals",
"lhs": "${hostSystemName}",
"rhs": "$env{HOST_SYSTEM_NAME}"
}
},
"environment" : {
"HOST_SYSTEM_NAME": "Windows",
"QT_VERSION": "6.4.2"
}
},
{
"name": "visualc-ninja",
"displayName": "Visual C++ 2019 x64 Ninja",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-${presetName}",
"toolchainFile" : "c:/Qt/6.4.2/msvc2019_64/lib/cmake/Qt6/qt.toolchain.cmake",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"environment" : {
"VCToolsVersion": "14.29.30133",
"WindowsSDKVersion" : "10.0.22000.0",
"VCArch": "x64",
"VCToolsInstallDir": "$env{ProgramFiles(x86)}/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/$env{VCToolsVersion}",
"WindowsSdkDir" : "$env{ProgramFiles(x86)}/Windows Kits/10",
"WindowsSdkIncVerDir": "$env{WindowsSdkDir}/Include/$env{WindowsSDKVersion}",
"WindowsSdkLibVerDir": "$env{WindowsSdkDir}/Lib/$env{WindowsSDKVersion}",
"INCLUDE": "$env{VCToolsInstallDir}/ATLMFC/include;$env{VCToolsInstallDir}/include;$env{WindowsSdkIncVerDir}/ucrt;$env{WindowsSdkIncVerDir}/shared;$env{WindowsSdkIncVerDir}/um;$env{WindowsSdkIncVerDir}/winrt;$env{WindowsSdkIncVerDir}/cppwinrt",
"LIB": "$env{VCToolsInstallDir}/ATLMFC/lib/$env{VCArch};$env{VCToolsInstallDir}/lib/$env{VCArch};$env{WindowsSdkLibVerDir}/ucrt/$env{VCArch};$env{WindowsSdkLibVerDir}/um/$env{VCArch}",
"PATH": "$env{VCToolsInstallDir}/bin/HostX64/$env{VCArch};$env{WindowsSdkDir}/bin/$env{WindowsSDKVersion}/$env{VCArch};$penv{PATH}"
}
},
{
"name": "linux-gcc",
"displayName": "Linux GCC",
@@ -99,39 +21,5 @@
"rhs": "Linux"
}
}
],
"buildPresets": [
{
"name": "mingw",
"displayName": "MinGW default",
"configurePreset": "mingw",
"targets": "${sourceDirName}"
},
{
"name": "mingw-verbose",
"inherits": "mingw",
"displayName": "MinGW verbose",
"verbose": true
},
{
"name": "mingw-make",
"displayName": "MinGW make 4 CPUs",
"configurePreset": "mingw-make",
"jobs": 4
},
{
"name": "visualc-debug",
"configurePreset": "visualc",
"configuration": "Debug"
},
{
"name": "visualc-relwithdebinfo",
"inherits": "visualc-debug",
"configuration": "RelWithDebInfo"
},
{
"name": "visualc-ninja",
"configurePreset": "visualc-ninja"
}
]
}

View File

@@ -0,0 +1,61 @@
{
"version": 4,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "mingw",
"displayName": "MinGW 11.2.0",
"generator": "Ninja",
"installDir": "../inst-${presetName}",
"cacheVariables": {
"CMAKE_PREFIX_PATH": "$env{SYSTEMDRIVE}/Qt/6.4.2/mingw_64"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"environment": {
"PATH": "$env{SYSTEMDRIVE}/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
},
"debug" : {
"find" : true
}
},
{
"name": "mingw-make",
"binaryDir": "${sourceDir}/build-${presetName}-release",
"displayName": "MinGW 11.2.0 Makefiles",
"generator": "MinGW Makefiles",
"inherits" : "mingw",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_PREFIX_PATH": "$env{SystemDrive}/Qt/6.4.2/mingw_64"
}
}
],
"buildPresets": [
{
"name": "mingw",
"displayName": "MinGW default",
"configurePreset": "mingw",
"targets": "${sourceDirName}"
},
{
"name": "mingw-verbose",
"inherits": "mingw",
"displayName": "MinGW verbose",
"verbose": true
},
{
"name": "mingw-make",
"displayName": "MinGW make 4 CPUs",
"configurePreset": "mingw-make",
"jobs": 4
}
]
}

View File

@@ -0,0 +1,76 @@
{
"version": 4,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "visualc",
"displayName": "Visual C++ 2019 x64",
"generator": "Visual Studio 16 2019",
"binaryDir": "${sourceDir}/build-${presetName}",
"architecture" : {
"value": "x64"
},
"toolchainFile" : "../cmakepresets/msvc-toolchain.cmake",
"condition" : {
"type": "not",
"condition": {
"type": "notEquals",
"lhs": "${hostSystemName}",
"rhs": "$env{HOST_SYSTEM_NAME}"
}
},
"environment" : {
"HOST_SYSTEM_NAME": "Windows",
"QT_VERSION": "6.4.2"
}
},
{
"name": "visualc-ninja",
"displayName": "Visual C++ 2019 x64 Ninja",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-${presetName}",
"toolchainFile" : "c:/Qt/6.4.2/msvc2019_64/lib/cmake/Qt6/qt.toolchain.cmake",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"environment" : {
"VCToolsVersion": "14.29.30133",
"WindowsSDKVersion" : "10.0.22000.0",
"VCArch": "x64",
"VCToolsInstallDir": "$env{ProgramFiles(x86)}/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/$env{VCToolsVersion}",
"WindowsSdkDir" : "$env{ProgramFiles(x86)}/Windows Kits/10",
"WindowsSdkIncVerDir": "$env{WindowsSdkDir}/Include/$env{WindowsSDKVersion}",
"WindowsSdkLibVerDir": "$env{WindowsSdkDir}/Lib/$env{WindowsSDKVersion}",
"INCLUDE": "$env{VCToolsInstallDir}/ATLMFC/include;$env{VCToolsInstallDir}/include;$env{WindowsSdkIncVerDir}/ucrt;$env{WindowsSdkIncVerDir}/shared;$env{WindowsSdkIncVerDir}/um;$env{WindowsSdkIncVerDir}/winrt;$env{WindowsSdkIncVerDir}/cppwinrt",
"LIB": "$env{VCToolsInstallDir}/ATLMFC/lib/$env{VCArch};$env{VCToolsInstallDir}/lib/$env{VCArch};$env{WindowsSdkLibVerDir}/ucrt/$env{VCArch};$env{WindowsSdkLibVerDir}/um/$env{VCArch}",
"PATH": "$env{VCToolsInstallDir}/bin/HostX64/$env{VCArch};$env{WindowsSdkDir}/bin/$env{WindowsSDKVersion}/$env{VCArch};$penv{PATH}"
}
}
],
"buildPresets": [
{
"name": "visualc-debug",
"configurePreset": "visualc",
"configuration": "Debug"
},
{
"name": "visualc-relwithdebinfo",
"inherits": "visualc-debug",
"configuration": "RelWithDebInfo"
},
{
"name": "visualc-ninja",
"configurePreset": "visualc-ninja"
}
]
}

View File

@@ -2172,7 +2172,7 @@ namespace plugin {
void testPlugin()
{
QString dir = QDir::currentPath();
QString dir = QApplication::applicationDirPath();
#ifdef Q_OS_LINUX
QLibrary lib(dir + "/libsimple_test_plugin.so");
#endif