diff --git a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc
index 388801786f3..fa7b1ddc554 100644
--- a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc
+++ b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc
@@ -22,10 +22,12 @@
Qt versions and compilers by adding the paths to them and by creating
\l{Kits}{kits} that use them.
- To make \QC behave more like your favorite code editor or IDE,
- change the preferences for keyboard shortcuts, color schemes, generic
- highlighting, code snippets, and version control systems. Manage plugins
- to turn on and off \QC features.
+ To make \QC behave more like your favorite code editor or IDE, change the
+ preferences for generic highlighting, code snippets, and version control
+ systems. Manage plugins to turn on and off \QC features.
+
+ To make \QC more accessible, use keyboard navigation or adjust colors and
+ zoom levels.
The following sections summarize the options that you have and point you to
detailed information to help you specify any required settings and to make
@@ -69,41 +71,6 @@
For more information, see \l{Manage Kits}{How To: Manage Kits} and
\l{Develop for Devices}{How To: Develop for Devices}.
- \section1 Changing Keyboard Shortcuts
-
- You can use \QC with your favorite keyboard shortcuts.
-
- To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
- \uicontrol Environment > \uicontrol Keyboard. For more information, see
- \l{Keyboard Shortcuts}.
-
- \section1 Changing Color Schemes
-
- Themes set the appearance of the \QC UI: widgets, colors, and icons.
-
- To switch themes, go to \preferences > \uicontrol Environment >
- \uicontrol Interface and select a theme in \uicontrol Theme.
-
- Use the \QC text and code editors with your favorite color scheme that sets
- highlighting of code elements and the background color. Select one of the
- predefined color schemes or create custom ones. The color schemes apply to
- highlighting C++ files, QML files, and generic files.
-
- To change the color scheme, go to \preferences >
- \uicontrol {Text Editor} > \uicontrol {Font & Colors}.
-
- For more information, see \l{Change editor colors}.
-
- \l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
- {KSyntaxHighlighting} offers generic highlighting. It is the syntax
- highlighting engine for Kate syntax definitions. \QC comes with most of
- the commonly used syntax files, and you can download additional files.
-
- To download and use highlight definition files, go to \preferences >
- \uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
-
- For more information, see \l{Download highlight definitions}.
-
\section1 Adding Your Own Code Snippets
As you write code, \QC suggests properties, IDs, and code snippets to
@@ -144,5 +111,72 @@
To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and
select \uicontrol {Install Plugins}.
+ \section1 Accessibility
+
+ You can use keyboard shortcuts to navigate the UI without a mouse, or set
+ zoom levels and change colors to improve the visibility of the text. Also,
+ \QC supports screen readers.
+
+ \section2 Changing Keyboard Shortcuts
+
+ You can use \QC with your favorite keyboard shortcuts.
+
+ To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
+ \uicontrol Environment > \uicontrol Keyboard. For more information, see
+ \l{Keyboard Shortcuts}.
+
+ \section2 Navigating with the Keyboard
+
+ To move between UI controls, press the the \key Tab key or the \key Left,
+ \key Right, \key Up, and \key Down arrow keys.
+
+ \section2 Setting Zoom Levels
+
+ To set editor font and colors, select \preferences >
+ \uicontrol {Text Editor} > \uicontrol {Font & Colors}.
+
+ Select the font family and size, and set the zoom level in percentage for
+ viewing the text or use keyboard shortcuts or the mouse wheel to zoom in or
+ out.
+
+ To improve the readability of text in the editor, adjust the line spacing.
+
+ For more information, see \l{Font & Colors}.
+
+ The system configuration determines the font sizes in other parts of \QC.
+
+ When viewing output, use the \inlineimage icons/plus.png {Plus button} and
+ \inlineimage icons/minus.png {Minus button} buttons or keyboard shortcuts to
+ set the zoom level.
+
+ For more information, see \l{View output}.
+
+ \section2 Changing Color Schemes
+
+ Themes set the appearance of the \QC UI: widgets, colors, and icons.
+
+ To switch themes, go to \preferences > \uicontrol Environment >
+ \uicontrol Interface and select a theme in \uicontrol Theme.
+
+ Use the \QC text and code editors with your favorite color scheme that sets
+ highlighting of code elements and the background color. Select one of the
+ predefined color schemes or create custom ones. The color schemes apply to
+ highlighting C++ files, QML files, and generic files.
+
+ To change the color scheme, go to \preferences >
+ \uicontrol {Text Editor} > \uicontrol {Font & Colors}.
+
+ For more information, see \l{Change editor colors}.
+
+ \l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
+ {KSyntaxHighlighting} offers generic highlighting. It is the syntax
+ highlighting engine for Kate syntax definitions. \QC comes with most of
+ the commonly used syntax files, and you can download additional files.
+
+ To download and use highlight definition files, go to \preferences >
+ \uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
+
+ For more information, see \l{Download highlight definitions}.
+
\sa {Installation}, {Reset \QC settings}, {Preferences}
*/
diff --git a/share/qtcreator/translations/qtcreator_fr.ts b/share/qtcreator/translations/qtcreator_fr.ts
index 2f571f310a6..19ae1e26c62 100644
--- a/share/qtcreator/translations/qtcreator_fr.ts
+++ b/share/qtcreator/translations/qtcreator_fr.ts
@@ -5373,7 +5373,8 @@ Erreur :
Axis
-
+ Peut être au pluriel ?
+ AxeThreshold
@@ -6184,10 +6185,6 @@ est en cours.
QKeychain::JobPrivate
-
- Unknown error
- Erreur inconnue
- Access to keychain deniedkeychain ?
@@ -6345,46 +6342,6 @@ Do you want to edit this effect?
Assurez-vous de l'avoir sauvegardé dans le compositeur d'effet.
Souhaitez-vous éditer cet effet ?
-
- Access to keychain denied
- Accès au porte-clés refusé
-
-
- No keyring daemon
- Aucun démon de trousseau disponible
-
-
- Already unlocked
- Déjà déverrouillé
-
-
- No such keyring
- Aucun trousseau de ce type
-
-
- Bad arguments
- Arguments incorrects
-
-
- I/O error
- Erreur d'E/S
-
-
- Cancelled
- Annulé
-
-
- Keyring already exists
- Le trousseau existe déjà
-
-
- No match
- Aucun résultat
-
-
- Unknown error
- Erreur inconnue
- Entry not foundEntrée introuvable
@@ -12958,7 +12915,7 @@ Exécutable : %2
Stop on failure
- Arrêt sur échec
+ Arrêter sur échecRun tests in parallel mode using given number of jobs.
@@ -13204,7 +13161,7 @@ Voir la documentation de Google Test pour plus d'informations sur les filtr
Event counter
- Compteurd'événements
+ Compteur d'événementsUses event counter when executing benchmarks.
@@ -15659,11 +15616,11 @@ Par exemple, « Revision : 15 » laissera la branche à la révis
CMake arguments:
- Arguments de Cmake :
+ Arguments de CMake :Tool arguments:
- Arguments de l’outil :
+ Arguments de l'outil :Stage for installation
@@ -16048,7 +16005,7 @@ Par exemple, « Revision : 15 » laissera la branche à la révis
CMake generator defines how a project is built when using CMake.<br>This setting is ignored when using other build systems.
-
+ Le générateur CMake définit comment le projet est compilé par CMake.<br>Ce paramètre est ignoré lors de l'utilisation d'un autre système de compilation.CMake Tool is unconfigured, CMake generator will be ignored.
@@ -17818,8 +17775,8 @@ Définissez d’abord un exécutable valide.
Class View
- Ou est-ce un rapport avec la Vue ? (graphics/view)
- Affichage de la classe
+ Ce texte est affiché dans le combobox du panneau de gauche (où l'on affiche la hiérarchie du projets ou le système de fichiers). Peut être que "symboles" aurait plus sa place, sachant que ce mode affiche une liste des classes et les symboles définis par ces classes.
+ Classes
@@ -20315,7 +20272,8 @@ provided they were unmodified before the refactoring.
Whole words o&nly
- &Mots complets uniquement
+ On trouve, plus couramment, l'expression "Mots entiers"
+ &Mots entiers uniquementUse re&gular expressions
@@ -20403,7 +20361,7 @@ provided they were unmodified before the refactoring.
Whole Words Only
- Mots complets uniquement
+ Mots entiers uniquementUse Regular Expressions
@@ -20696,7 +20654,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
<html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Open a document</div><table><tr><td><hr/><div style="margin-top: 5px">• File > Open File or Project (%1)</div><div style="margin-top: 5px">• File > Recent Files</div><div style="margin-top: 5px">• Tools > Locate (%2) and</div><div style="margin-left: 1em">- type to open file from any open project</div>%4%5<div style="margin-left: 1em">- type <code>%3<space><filename></code> to open file from file system</div><div style="margin-left: 1em">- select one of the other filters for jumping to a location</div><div style="margin-top: 5px">• Drag and drop files here</div></td></tr></table></div></body></html>
- <html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Ouvrir un document</div><table><tr><td><hr/><div style="margin-top: 5px">• Fichier> Ouvrir un fichier ou un projet (%1)</div><div style="margin-top: 5px">• Fichier > Fichiers récents</div><div style="margin-top: 5px">• Outils > Localiser (%2) et</div><div style="margin-left: 1em">- taper pour ouvrir un fichier à partir de n’importe quel projet ouvert</div>%4%5<div style="margin-left: 1em">- saisir <code>%3<espace><nom du fichier></code> pour ouvrir le fichier à partir du système de fichiers</div><div style="margin-left: 1em">- sélectionner l’un des autres filtres pour accéder à un emplacement donné</div><div style="margin-top: 5px">• Glisser-déposer des fichiers ici</div></td></tr></table></div></body></html>
+ <html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Ouvrir un document</div><table><tr><td><hr/><div style="margin-top: 5px">• Fichier > Ouvrir un fichier ou un projet (%1)</div><div style="margin-top: 5px">• Fichier > Fichiers récents</div><div style="margin-top: 5px">• Outils > Localiser (%2) et</div><div style="margin-left: 1em">- taper pour ouvrir un fichier à partir de n’importe quel projet ouvert</div>%4%5<div style="margin-left: 1em">- saisir <code>%3<espace><nom du fichier></code> pour ouvrir le fichier à partir du système de fichiers</div><div style="margin-left: 1em">- sélectionner l’un des autres filtres pour accéder à un emplacement donné</div><div style="margin-top: 5px">• Glisser-déposer des fichiers ici</div></td></tr></table></div></body></html><div style="margin-left: 1em">- type <code>%1<space><pattern></code> to jump to a class definition</div>
@@ -21214,8 +21172,8 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
Type
- <html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html>
- <html><head/><body><p>Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée d’informations MIME de <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html>
+ <html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/">freedesktop.org</a>.<hr/></p></body></html>
+ <html><head/><body><p>Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée d’informations MIME fournie par <a href="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/">freedesktop.org</a>.<hr/></p></body></html>String
@@ -23862,7 +23820,7 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer
Switch Between Function Declaration/Definition
- Changer entre la définition et déclaration de la fonction
+ Changer entre la définition et la déclaration de la fonctionOpen Function Declaration/Definition in Next Split
@@ -26804,7 +26762,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
Global Debugger &Log
- &Journal du débogueur général
+ Je pense que "Global" se réfère au log et non au débogueur.
+ &Journal général du débogueurReload Debugging Helpers
@@ -27195,7 +27154,7 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
Start and Break on Main
- Démarrer et s’arrêter sur le Main
+ Démarrer et s'arrêter sur la fonction MainDAP
@@ -27344,7 +27303,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
<html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used %3.</p><p>Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.</p><p>Running tools that need debug symbols on binaries that don't provide any may lead to missing function names or otherwise insufficient output.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html>
- <html><head/><body><p>Vous essayez d’exécuter l’outil « %1 » sur une application en mode %2. L’outil est conçu pour être utilisé en mode %3.</p><p>Les caractéristiques d’exécution diffèrent considérablement entre les binaires optimisés et non optimisés. L’exécution d’outils nécessitant des symboles de débogage sur des binaires qui n’en fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.</p><p>Voulez-vous continuer et exécuter l’outil en mode %2 ?</p></body></html>
+ %3 est remplacé par la chaîne précédente (on optimized code...)
+ <html><head/><body><p>Vous essayez d'exécuter l'outil « %1 » sur une application en mode %2. L'outil est conçu pour être utilisé %3.</p><p>Les caractéristiques d'exécution diffèrent considérablement entre les binaires optimisés et non optimisés. L'exécution d'outils nécessitant des symboles de débogage sur des binaires qui n'en fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.</p><p>Voulez-vous continuer et exécuter l'outil en mode %2 ?</p></body></html>Start
@@ -30909,7 +30869,7 @@ Raison : %3
Plugin Emulation
- Émulation de plug-in
+ Émulation de greffonUse smartcase
@@ -30917,7 +30877,7 @@ Raison : %3
Use wrapscan
- Utiliser recherche circulaire
+ Utiliser la recherche circulaireUse ignorecase
@@ -32712,7 +32672,7 @@ Valider maintenant ?
Manage Remotes...
-
+ Gérer les dépôts distants…Git &Tools
@@ -41850,7 +41810,7 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d
Nim Script File
-
+ Fichier de script NimCreates an empty Nim file using UTF-8 charset.
@@ -43467,7 +43427,8 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
Standard error
- Sortie erreur (stderr)
+ A revoir -> Sortie d'erreur
+ Sortie d'erreur (stderr)E&rror message:
@@ -43926,7 +43887,7 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
Files in All Project Directories:
- Fichiers dans tous les répertoires du projet :
+ Fichiers dans tous les répertoires du projet :Setting
@@ -55011,7 +54972,8 @@ Ne s’applique pas aux espaces blancs dans les commentaires et dans les chaîne
Underline
-
+ Vu dans LibreOffice
+ SoulignageColor:
@@ -57242,7 +57204,7 @@ dans « %2 ».
Show %1 Column
-
+ Afficher la colonne « %1 »No clangd executable specified.
@@ -57272,7 +57234,7 @@ dans « %2 ».
Error while trying to copy file: %1
-
+ Erreur lors de la copie du fichier : %1Could not copy file: %1
@@ -57441,7 +57403,7 @@ Pour définir ou changer une variable, utilisez VARIABLE=VALEUR.
Pour désactiver une variable, préfixez la ligne avec le caractère « # ».
Pour suffixer une variable, utilisez VARIABLE+=VALEUR.
Pour préfixer une variable, utilisez VARIABLE=+VALEUR.
-Les variables existantes peuvent être référencées dans une VALEUR avec ${OTHER}.
+Les variables existantes peuvent être référencées dans une VALEUR avec ${AUTRE}.
Pour effacer une variable, placez son nom sur une ligne avec rien d'autre sur celle-ci.
Les lignes débutant avec « ### » seront traitées comme commentaires.
@@ -57754,7 +57716,7 @@ Les lignes débutant avec « ### » seront traitées comme commentaire
Backtrace frame count:
- Backtracer le nombre de trames :
+ Nombre de trames à remonter :Suppression files:
@@ -57906,7 +57868,7 @@ Avec la simulation du cache, d’autres compteurs d’évènements sont activés
Check for leaks on finish:
- Vérification des fuites lorsque c’est fini :
+ Vérification des fuites à la fin :Summary Only
@@ -59205,7 +59167,7 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon
Wrap submit message at:
- Limiter la largeur du message à :
+ Limiter la taille du message à : characters
@@ -59550,7 +59512,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
Mode Selector
-
+ Sélecteur de modeSelect different modes depending on the task at hand.
@@ -59558,7 +59520,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
<p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Welcome:</td><td>Open examples, tutorials, and recent sessions and projects.</td></tr><tr><td>Edit:</td><td>Work with code and navigate your project.</td></tr><tr><td>Design:</td><td>Visually edit Widget-based user interfaces, state charts and UML models.</td></tr><tr><td>Debug:</td><td>Analyze your application with a debugger or other analyzers.</td></tr><tr><td>Projects:</td><td>Manage project settings.</td></tr><tr><td>Help:</td><td>Browse the help database.</td></tr></table></p>
- <p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Accueil :</td><td>Ouvrez des exemples, des tutoriels et des sessions et projets récents.</td></tr><td>Modifier :</td><td>Travaillez avec le code et naviguez dans votre projet.</td></tr><tr><td>Design:</td><td>Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes d’état et des modèles UML. </td></tr><ttr><td>Débogage :</td><td>Analysez votre application avec un débogueur ou d’autres analyseurs.</td></tr><tr><td>Projets :</td><td>Gérez les paramètres du projet.</td></tr><tr><td>Aide :</td><td>Parcourez la base de données d’aide.</td></tr></table></p>
+ <p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Accueil :</td><td>Ouvrez des exemples, des tutoriels et des sessions et projets récents.</td></tr><tr><td>Modifier :</td><td>Travaillez avec le code et naviguez dans votre projet.</td></tr><tr><td>Design :</td><td>Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes d'état et des modèles UML. </td></tr><tr><td>Débogage :</td><td>Analysez votre application avec un débogueur ou d'autres analyseurs.</td></tr><tr><td>Projets :</td><td>Gérez les paramètres du projet.</td></tr><tr><td>Aide :</td><td>Parcourez la base de données d'aide.</td></tr></table></p>Kit Selector
@@ -59590,7 +59552,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
Build the active project.
- Compiler le projet actif.
+ Compile le projet actif.Locator
@@ -59610,7 +59572,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
Find compile and application output here, as well as a list of configuration and build issues, and the panel for global searches.
- Vous y trouverez les résultats de la compilation et de l’application, ainsi qu’une liste des problèmes de configuration et de compilation, et le panneau des recherches générales.
+ Vous y trouverez les résultats de la compilation et de l'application, ainsi qu’une liste des problèmes de configuration et de compilation, ainsi que le panneau des recherches globales.Progress Indicator
@@ -59634,8 +59596,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
You have now completed the UI tour. To learn more about the highlighted controls, see <a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">User Interface</a>.
- Vous avez maintenant terminé la visite guidée de l’interface utilisateur
-Pour en savoir plus sur les contrôles mis en évidence, voir l’<a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">interface utilisateur</a>.
+ Vous avez maintenant terminé la visite guidée de l'interface utilisateur. Pour en savoir plus sur les contrôles mis en évidence, consultez la page d'aide concernant l'<a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">interface utilisateur</a>.UI Introduction %1/%2 >
@@ -60869,7 +60830,7 @@ Elle est utilisée pour calculer la taille totale implicite.
Current value of the Slider. The default value is 0.0.
-
+ Valeur actuelle du slider. La valeur par défaut est 0.0.Maximum value
diff --git a/src/libs/3rdparty/sol2/include/sol/sol.hpp b/src/libs/3rdparty/sol2/include/sol/sol.hpp
index 85665a50c93..c3e5fa31ae3 100644
--- a/src/libs/3rdparty/sol2/include/sol/sol.hpp
+++ b/src/libs/3rdparty/sol2/include/sol/sol.hpp
@@ -6818,7 +6818,8 @@ namespace sol {
static_assert(std::is_constructible::value, "T must be constructible with Args");
*this = nullopt;
- this->construct(std::forward(args)...);
+ new (static_cast(this)) optional(std::in_place, std::forward(args)...);
+ return **this;
}
/// Swaps this optional with the other.
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
index c06aaf83f1e..791a3e755e6 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
@@ -15,6 +15,7 @@
#include "cmakespecificsettings.h"
#include "cmaketoolmanager.h"
#include "projecttreehelper.h"
+#include "targethelper.h"
#include
@@ -1031,6 +1032,11 @@ bool CMakeBuildSystem::renameFile(Node *context,
return false;
}
+void CMakeBuildSystem::buildNamedTarget(const QString &target)
+{
+ CMakeProjectManager::Internal::buildTarget(this, target);
+}
+
FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const
{
FilePath project = projectDirectory();
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h
index c0f8c687d32..b4ac08c3b7b 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h
@@ -64,6 +64,7 @@ public:
bool renameFile(ProjectExplorer::Node *context,
const Utils::FilePath &oldFilePath,
const Utils::FilePath &newFilePath) final;
+ void buildNamedTarget(const QString &target) final;
Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final;
QString name() const final { return QLatin1String("cmake"); }
diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
index 01ed02bdb0c..9dc375d22c6 100644
--- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp
@@ -23,7 +23,7 @@ using namespace Utils;
namespace CMakeProjectManager::Internal {
-using BuildAcceptor = std::function;
+using BuildAcceptor = std::function;
// CMakeBuildTargetFilter
@@ -62,8 +62,8 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
LocatorFilterEntry entry;
entry.displayName = displayName;
if (acceptor) {
- entry.acceptor = [projectPath, displayName, acceptor] {
- acceptor(projectPath, displayName);
+ entry.acceptor = [bs, displayName, acceptor] {
+ acceptor(bs, displayName);
return AcceptResult();
};
}
diff --git a/src/plugins/cmakeprojectmanager/targethelper.cpp b/src/plugins/cmakeprojectmanager/targethelper.cpp
index 3d18deaa84a..c058f0ad482 100644
--- a/src/plugins/cmakeprojectmanager/targethelper.cpp
+++ b/src/plugins/cmakeprojectmanager/targethelper.cpp
@@ -4,34 +4,21 @@
#include "targethelper.h"
#include
+#include
#include
-#include
-#include
-#include
#include "cmakebuildstep.h"
-#include "cmakebuildsystem.h"
-#include "cmakeproject.h"
-namespace CMakeProjectManager {
+namespace CMakeProjectManager::Internal {
-void buildTarget(const Utils::FilePath &projectPath, const QString &targetName)
+void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName)
{
- // Get the project containing the target selected
- const auto cmakeProject = qobject_cast(Utils::findOrDefault(
- ProjectExplorer::ProjectManager::projects(), [projectPath](ProjectExplorer::Project *p) {
- return p->projectFilePath() == projectPath;
- }));
- if (!cmakeProject || !cmakeProject->activeTarget()
- || !cmakeProject->activeTarget()->activeBuildConfiguration())
- return;
-
- if (ProjectExplorer::BuildManager::isBuilding(cmakeProject))
+ if (ProjectExplorer::BuildManager::isBuilding(buildSystem->project()))
ProjectExplorer::BuildManager::cancel();
// Find the make step
const ProjectExplorer::BuildStepList *buildStepList
- = cmakeProject->activeTarget()->activeBuildConfiguration()->buildSteps();
+ = buildSystem->buildConfiguration()->buildSteps();
const auto buildStep = buildStepList->firstOfType();
if (!buildStep)
return;
@@ -41,8 +28,8 @@ void buildTarget(const Utils::FilePath &projectPath, const QString &targetName)
buildStep->setBuildTargets({targetName});
// Build
- ProjectExplorer::BuildManager::buildProjectWithDependencies(cmakeProject);
+ ProjectExplorer::BuildManager::buildProjectWithDependencies(buildSystem->project());
buildStep->setBuildTargets(oldTargets);
}
-} // namespace CMakeProjectManager
+} // namespace CMakeProjectManager::Internal
diff --git a/src/plugins/cmakeprojectmanager/targethelper.h b/src/plugins/cmakeprojectmanager/targethelper.h
index 1053d2b6d1b..c1d2edd9889 100644
--- a/src/plugins/cmakeprojectmanager/targethelper.h
+++ b/src/plugins/cmakeprojectmanager/targethelper.h
@@ -3,12 +3,12 @@
#pragma once
-#include "cmake_global.h"
+#include
-#include
+namespace ProjectExplorer { class BuildSystem; }
-namespace CMakeProjectManager {
+namespace CMakeProjectManager::Internal {
-CMAKE_EXPORT void buildTarget(const Utils::FilePath &projectPath, const QString &targetName);
+void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName);
-} // namespace CMakeProjectManager
+} // namespace CMakeProjectManager::Internal
diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp
index 0f104f3bfc0..2459d41b371 100644
--- a/src/plugins/debugger/procinterrupt.cpp
+++ b/src/plugins/debugger/procinterrupt.cpp
@@ -23,23 +23,118 @@ static inline QString msgCannotInterrupt(qint64 pid, const QString &why)
# define PROCESS_SUSPEND_RESUME (0x0800)
#endif // PROCESS_SUSPEND_RESUME
+static BOOL isWow64Process(HANDLE hproc)
+{
+ using LPFN_ISWOW64PROCESS = BOOL (WINAPI*)(HANDLE, PBOOL);
+
+ BOOL ret = false;
+
+ static LPFN_ISWOW64PROCESS fnIsWow64Process = NULL;
+ if (!fnIsWow64Process) {
+ if (HMODULE hModule = GetModuleHandle(L"kernel32.dll"))
+ fnIsWow64Process = reinterpret_cast(GetProcAddress(hModule, "IsWow64Process"));
+ }
+
+ if (!fnIsWow64Process) {
+ qWarning("Cannot retrieve symbol 'IsWow64Process'.");
+ return false;
+ }
+
+ if (!fnIsWow64Process(hproc, &ret)) {
+ qWarning("IsWow64Process() failed for %p: %s",
+ hproc, qPrintable(Utils::winErrorMessage(GetLastError())));
+ return false;
+ }
+ return ret;
+}
+
// Open the process and break into it
bool Debugger::Internal::interruptProcess(qint64 pID, QString *errorMessage)
{
bool ok = false;
HANDLE inferior = NULL;
- const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION
- | PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE
- | PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME;
- inferior = OpenProcess(rights, FALSE, DWORD(pID));
- if (inferior == NULL) {
- *errorMessage = QString::fromLatin1("Cannot open process %1: %2")
- .arg(pID)
- .arg(Utils::winErrorMessage(GetLastError()));
- } else if (ok = DebugBreakProcess(inferior); !ok) {
- *errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError());
- }
+ do {
+ const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
+ |PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
+ |PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
+ inferior = OpenProcess(rights, FALSE, DWORD(pID));
+ if (inferior == NULL) {
+ *errorMessage = QString::fromLatin1("Cannot open process %1: %2").
+ arg(pID).arg(Utils::winErrorMessage(GetLastError()));
+ break;
+ }
+ enum DebugBreakApi {
+ UseDebugBreakApi,
+ UseWin64Interrupt,
+ UseWin32Interrupt
+ };
+/*
+ Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
+ 32 bit application inside a 64 bit environment.
+ When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
+ the inferior.
+ Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
+ DebugBreakProcess from the correct system.
+
+ DebugBreak matrix for windows
+
+ Api = UseDebugBreakApi
+ Win64 = UseWin64Interrupt
+ Win32 = UseWin32Interrupt
+ N/A = This configuration is not possible
+
+ | Windows 32bit | Windows 64bit
+ | QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
+ | Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit |
+----------|-----------------|-----------------|-----------------|-----------------|----------------|
+GDB 32bit | Api | Api | NA | Win32 | NA |
+ 64bit | NA | Api | Win64 | Win32 | Api |
+----------|-----------------|-----------------|-----------------|-----------------|----------------|
+
+*/
+
+ DebugBreakApi breakApi = UseDebugBreakApi;
+#ifdef Q_OS_WIN64
+ if (isWow64Process(inferior))
+ breakApi = UseWin32Interrupt;
+#else
+ if (isWow64Process(GetCurrentProcess()) && !isWow64Process(inferior))
+ breakApi = UseWin64Interrupt;
+#endif
+ if (breakApi == UseDebugBreakApi) {
+ ok = DebugBreakProcess(inferior);
+ if (!ok)
+ *errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError());
+ } else {
+ const QString executable = breakApi == UseWin32Interrupt
+ ? QCoreApplication::applicationDirPath() + "/win32interrupt.exe"
+ : QCoreApplication::applicationDirPath() + "/win64interrupt.exe";
+ if (!QFileInfo::exists(executable)) {
+ *errorMessage = QString::fromLatin1(
+ "%1 does not exist. If you have built %2 "
+ "on your own, checkout "
+ "https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.")
+ .arg(QDir::toNativeSeparators(executable),
+ QGuiApplication::applicationDisplayName());
+ break;
+ }
+ switch (QProcess::execute(executable, QStringList(QString::number(pID)))) {
+ case -2:
+ *errorMessage = QString::fromLatin1("Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c for more information.").
+ arg(QDir::toNativeSeparators(executable));
+ break;
+ case 0:
+ ok = true;
+ break;
+ default:
+ *errorMessage = QDir::toNativeSeparators(executable)
+ + " could not break the process.";
+ break;
+ }
+ break;
+ }
+ } while (false);
if (inferior != NULL)
CloseHandle(inferior);
if (!ok)
diff --git a/src/plugins/projectexplorer/buildsystem.h b/src/plugins/projectexplorer/buildsystem.h
index 276427a7f91..19f32d83f87 100644
--- a/src/plugins/projectexplorer/buildsystem.h
+++ b/src/plugins/projectexplorer/buildsystem.h
@@ -82,6 +82,7 @@ public:
const Utils::FilePath &newFilePath);
virtual bool addDependencies(Node *context, const QStringList &dependencies);
virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const;
+ virtual void buildNamedTarget(const QString &target) { Q_UNUSED(target) }
virtual QString name() const = 0;
// Owned by the build system. Use only in main thread. Can go away at any time.
diff --git a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp
index 773f4d3bca5..70412124462 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp
@@ -102,20 +102,90 @@ void DesktopProcessSignalOperation::killProcessSilently(qint64 pid)
void DesktopProcessSignalOperation::interruptProcessSilently(qint64 pid)
{
#ifdef Q_OS_WIN
+ enum SpecialInterrupt { NoSpecialInterrupt, Win32Interrupt, Win64Interrupt };
+
+ bool is64BitSystem = is64BitWindowsSystem();
+ SpecialInterrupt si = NoSpecialInterrupt;
+ if (is64BitSystem)
+ si = is64BitWindowsBinary(m_debuggerCommand) ? Win64Interrupt : Win32Interrupt;
+ /*
+ Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
+ 32 bit application inside a 64 bit environment.
+ When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
+ the inferior. If CDB is used we could in theory break wow64 processes,
+ but the break is actually a wow64 breakpoint. CDB is configured to ignore these
+ breakpoints, because they also appear on module loading.
+ Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
+ DebugBreakProcess from the correct system.
+
+ DebugBreak matrix for windows
+
+ Api = UseDebugBreakApi
+ Win64 = UseWin64InterruptHelper
+ Win32 = UseWin32InterruptHelper
+ N/A = This configuration is not possible
+
+ | Windows 32bit | Windows 64bit
+ | QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
+ | Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit
+----------|-----------------|-----------------|-----------------|-----------------|----------------
+CDB 32bit | Api | Api | N/A | Win32 | N/A
+ 64bit | N/A | Win64 | Win64 | Api | Api
+----------|-----------------|-----------------|-----------------|-----------------|----------------
+GDB 32bit | Api | Api | N/A | Win32 | N/A
+ 64bit | N/A | N/A | Win64 | N/A | Api
+----------|-----------------|-----------------|-----------------|-----------------|----------------
+
+ */
HANDLE inferior = NULL;
- const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION
- | PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE
- | PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME;
- inferior = OpenProcess(rights, FALSE, pid);
- if (inferior == NULL) {
- appendMsgCannotInterrupt(
- pid, Tr::tr("Cannot open process: %1") + winErrorMessage(GetLastError()));
- } else if (!DebugBreakProcess(inferior)) {
- appendMsgCannotInterrupt(
- pid,
- Tr::tr("DebugBreakProcess failed:") + QLatin1Char(' ')
- + winErrorMessage(GetLastError()));
- }
+ do {
+ const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
+ |PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
+ |PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
+ inferior = OpenProcess(rights, FALSE, pid);
+ if (inferior == NULL) {
+ appendMsgCannotInterrupt(pid, Tr::tr("Cannot open process: %1")
+ + winErrorMessage(GetLastError()));
+ break;
+ }
+ bool creatorIs64Bit = is64BitWindowsBinary(
+ FilePath::fromUserInput(QCoreApplication::applicationFilePath()));
+ if (!is64BitSystem
+ || si == NoSpecialInterrupt
+ || (si == Win64Interrupt && creatorIs64Bit)
+ || (si == Win32Interrupt && !creatorIs64Bit)) {
+ if (!DebugBreakProcess(inferior)) {
+ appendMsgCannotInterrupt(pid, Tr::tr("DebugBreakProcess failed:")
+ + QLatin1Char(' ') + winErrorMessage(GetLastError()));
+ }
+ } else if (si == Win32Interrupt || si == Win64Interrupt) {
+ QString executable = QCoreApplication::applicationDirPath();
+ executable += si == Win32Interrupt
+ ? QLatin1String("/win32interrupt.exe")
+ : QLatin1String("/win64interrupt.exe");
+ if (!QFileInfo::exists(executable)) {
+ appendMsgCannotInterrupt(pid,
+ Tr::tr("%1 does not exist. If you built %2 "
+ "yourself, check out https://code.qt.io/cgit/"
+ "qt-creator/binary-artifacts.git/.")
+ .arg(QDir::toNativeSeparators(executable),
+ QGuiApplication::applicationDisplayName()));
+ }
+ switch (QProcess::execute(executable, QStringList(QString::number(pid)))) {
+ case -2:
+ appendMsgCannotInterrupt(pid, Tr::tr(
+ "Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c "
+ "for more information.").arg(QDir::toNativeSeparators(executable)));
+ break;
+ case 0:
+ break;
+ default:
+ appendMsgCannotInterrupt(pid, QDir::toNativeSeparators(executable)
+ + QLatin1Char(' ') + Tr::tr("could not break the process."));
+ break;
+ }
+ }
+ } while (false);
if (inferior != NULL)
CloseHandle(inferior);
#else
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index b56d6ba0a9b..7336b676513 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -1085,6 +1085,15 @@ void Project::configureAsExampleProject(Kit * /*kit*/)
{
}
+void Project::buildTarget(const QString &target)
+{
+ if (!activeTarget() || !activeTarget()->activeBuildConfiguration()
+ || !activeTarget()->activeBuildConfiguration()->buildSystem()) {
+ return;
+ }
+ activeTarget()->activeBuildConfiguration()->buildSystem()->buildNamedTarget(target);
+}
+
bool Project::hasMakeInstallEquivalent() const
{
return d->m_hasMakeInstallEquivalent;
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 9c60aa3ed6c..fc67acf0a81 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -131,6 +131,8 @@ public:
bool needsBuildConfigurations() const;
virtual void configureAsExampleProject(ProjectExplorer::Kit *kit);
+ void buildTarget(const QString &target);
+
virtual ProjectImporter *projectImporter() const;
virtual DeploymentKnowledge deploymentKnowledge() const { return DeploymentKnowledge::Bad; }
diff --git a/src/plugins/qmljseditor/CMakeLists.txt b/src/plugins/qmljseditor/CMakeLists.txt
index 2320c5ba7d1..fcba4765f3b 100644
--- a/src/plugins/qmljseditor/CMakeLists.txt
+++ b/src/plugins/qmljseditor/CMakeLists.txt
@@ -1,5 +1,5 @@
add_qtc_plugin(QmlJSEditor
- DEPENDS LanguageUtils QmlJS QmlEditorWidgets CMakeProjectManager
+ DEPENDS LanguageUtils QmlJS QmlEditorWidgets
PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools TextEditor LanguageClient
SOURCES
qmlexpressionundercursor.cpp qmlexpressionundercursor.h
diff --git a/src/plugins/qmljseditor/qmltaskmanager.cpp b/src/plugins/qmljseditor/qmltaskmanager.cpp
index 3bf2e2cbdec..07787127e2a 100644
--- a/src/plugins/qmljseditor/qmltaskmanager.cpp
+++ b/src/plugins/qmljseditor/qmltaskmanager.cpp
@@ -5,7 +5,6 @@
#include "qmljseditorconstants.h"
#include "qmljseditorsettings.h"
-#include
#include
#include
#include
@@ -120,11 +119,10 @@ void QmlTaskManager::updateSemanticMessagesNow()
static void triggerQmllintCMakeTarget()
{
- CMakeProjectManager::buildTarget(
- ProjectManager::startupProject()->projectFilePath(), Constants::QMLLINT_BUILD_TARGET);
+ if (ProjectManager::startupProject())
+ ProjectManager::startupProject()->buildTarget(Constants::QMLLINT_BUILD_TARGET);
}
-
void QmlTaskManager::updateMessagesNow(bool updateSemantic)
{
// heuristic: qmllint will output meaningful warnings if qmlls is enabled
diff --git a/src/shared/qbs b/src/shared/qbs
index 64e82d38558..f2906471ba3 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit 64e82d38558dccc0ddfb1bdcefe11d13a43fafaf
+Subproject commit f2906471ba374685347926432c2cbbca127cfb75