From 166c7d98f7d81b89ccb76b42a4e1c16a83b9b51f Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 20 Nov 2024 11:17:51 +0100 Subject: [PATCH 01/26] TextEditor: readd rust mime type Change-Id: I51883a6fa0c9f4a13c2c01e6fa9ef79b653c6703 Reviewed-by: Eike Ziller --- src/plugins/texteditor/TextEditor.json.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/texteditor/TextEditor.json.in b/src/plugins/texteditor/TextEditor.json.in index 3da549f27b6..00cd67212eb 100644 --- a/src/plugins/texteditor/TextEditor.json.in +++ b/src/plugins/texteditor/TextEditor.json.in @@ -50,6 +50,11 @@ " ", " ", " ", + " ", + " Rust souce file", + " ", + " ", + " ", "" ] } From ab504f92d7fa7036b8328892107eb2f54d1f3dcf Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 19 Nov 2024 16:36:31 +0100 Subject: [PATCH 02/26] TextEditor: Don't let QPlainTextEdit interfere after refactor marker clicked QPlainTextEdit::mousePressEvent can do various things after the user clicks a refactor marker. We don't want that so if the user hits the refactor marker we return after the callback. Change-Id: I4742136d7319c644eb1ac97e2dbc365e6c670e75 Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 1ae3b953b73..5f22059414a 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7061,8 +7061,10 @@ void TextEditorWidget::mousePressEvent(QMouseEvent *e) RefactorMarker refactorMarker = d->m_refactorOverlay->markerAt(e->pos()); if (refactorMarker.isValid()) { - if (refactorMarker.callback) + if (refactorMarker.callback) { refactorMarker.callback(this); + return; + } } else { d->m_linkPressed = d->isMouseNavigationEvent(e); } From c4386e194396363bc25d5b121ebb8624ae16415d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Wed, 20 Nov 2024 13:58:51 +0100 Subject: [PATCH 03/26] CMakePM: Add conanfile / vcpkg.json as project dependencies This change will achieve two things: 1. Make sure that CMake is rerun when the conanfile / vpkg.json is changed 2. Will be displayed in the project view under "CMake Modules" Fixes: QTCREATORBUG-32041 Change-Id: I37c5d5dfd4e9f9e7c4493cdb09ba45af66f06de6 Reviewed-by: Alessandro Portale --- src/share/3rdparty/package-manager/auto-setup.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index 6f6aa159d88..867b7f41ee6 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -63,6 +63,11 @@ macro(qtc_auto_setup_conan) option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") + set_property( + DIRECTORY "${CMAKE_SOURCE_DIR}" + APPEND + PROPERTY CMAKE_CONFIGURE_DEPENDS "${conanfile_txt}") + find_program(conan_program conan) if (NOT conan_program) message(WARNING "Qt Creator: conan executable not found. " @@ -206,6 +211,11 @@ macro(qtc_auto_setup_vcpkg) if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) + set_property( + DIRECTORY "${CMAKE_SOURCE_DIR}" + APPEND + PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/vcpkg.json") + find_program(vcpkg_program vcpkg PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg ${CMAKE_SOURCE_DIR}/3rdparty/vcpkg NO_DEFAULT_PATH From 4f56f64cbf3a91839cf9743d38e9dd6f61f66903 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 20 Nov 2024 16:45:20 +0100 Subject: [PATCH 04/26] StringUtils: Fix a typo It was meant to be less-equal, like in case of lowercase. Amends d91d4028536ea496cf0b9b09945b730ead6158d0 Change-Id: I0c47da1a5a1da1638a66d28ac7ef3830bf733371 Reviewed-by: hjk --- src/libs/utils/stringutils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp index dae35b817ba..04617064cab 100644 --- a/src/libs/utils/stringutils.cpp +++ b/src/libs/utils/stringutils.cpp @@ -110,7 +110,7 @@ enum class Base { Dec, Hex }; static bool isHex(const QChar &c) { - return (c >= 'a' && c <= 'f') || (c >= 'A' && c < 'F'); + return (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } static bool isDigit(const QChar &c, Base base) From 11c043f6b37006f0c4eb9cda1d344d5c7f05ad68 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 12 Nov 2024 15:23:26 +0100 Subject: [PATCH 05/26] Axivion: Fix filter help button enabled state Explicitly reset project info when switching dashboards and update the toolbar. Drive by change of silencing another occurrence of running into 'NetworkError () 301'. Change-Id: I9eb142a02e7ccccb1a38e2f6fb6c8b9b4e1cb299 Reviewed-by: Daniel Hofmann Reviewed-by: hjk --- src/plugins/axivion/axivionplugin.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index cbb62c75b0d..28fb094ae22 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -1013,7 +1013,7 @@ void AxivionPluginPrivate::enableInlineIssues(bool enable) return; m_inlineIssuesEnabled = enable; - if (enable) + if (enable && m_dashboardServerId.isValid()) handleOpenedDocs(); else clearAllMarks(); @@ -1087,6 +1087,8 @@ void switchActiveDashboardId(const Id &toDashboardId) dd->m_serverAccess = ServerAccess::Unknown; dd->m_apiToken.reset(); dd->m_dashboardInfo.reset(); + dd->m_currentProjectInfo.reset(); + updatePerspectiveToolbar(); } const std::optional currentDashboardInfo() From 2b9e960996c1ecc3b16bf59f46002eba059096e4 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 18 Nov 2024 12:11:28 +0100 Subject: [PATCH 06/26] Axivion: Fix hiding columns Originally the key had been used as header values, but nowadays we may use the display name if it is present. This broke the logic that hid columns on first fetch. Change-Id: I567f0ca79b0691750dc4a2e8a45ff0479a94e0fd Reviewed-by: hjk --- src/plugins/axivion/axivionperspective.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/axivion/axivionperspective.cpp b/src/plugins/axivion/axivionperspective.cpp index 128b06e3962..16842d79fef 100644 --- a/src/plugins/axivion/axivionperspective.cpp +++ b/src/plugins/axivion/axivionperspective.cpp @@ -520,7 +520,7 @@ void IssuesWidget::updateTable() for (const Dto::ColumnInfoDto &column : m_currentTableInfo->columns) { columnHeaders << column.header.value_or(column.key); if (!column.showByDefault) - hiddenColumns << column.key; + hiddenColumns << columnHeaders.last(); IssueHeaderView::ColumnInfo info; info.key = column.key; info.sortable = column.canSort; From 7912ae41170288a58754569fecaf1067fec52839 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 21 Nov 2024 08:44:15 +0100 Subject: [PATCH 07/26] Copilot: Change metadata Fixes: QTCREATORBUG-32048 Change-Id: I17089075f43c3ca1cfa6a8f2e3c592b835c38c92 Reviewed-by: Eike Ziller Reviewed-by: hjk --- src/plugins/copilot/Copilot.json.in | 2 +- src/plugins/copilot/Description.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/copilot/Copilot.json.in b/src/plugins/copilot/Copilot.json.in index 9bdffdad8df..98d35670e2e 100644 --- a/src/plugins/copilot/Copilot.json.in +++ b/src/plugins/copilot/Copilot.json.in @@ -3,7 +3,7 @@ "Name" : "Copilot", "Version" : "${IDE_VERSION}", "CompatVersion" : "${IDE_VERSION_COMPAT}", - "DisabledByDefault" : true, + "Experimental" : true, "VendorId" : "theqtcompany", "Vendor" : "The Qt Company Ltd", "Copyright" : "${IDE_COPYRIGHT}", diff --git a/src/plugins/copilot/Description.md b/src/plugins/copilot/Description.md index a7dde131a41..6347d4bf732 100644 --- a/src/plugins/copilot/Description.md +++ b/src/plugins/copilot/Description.md @@ -1,3 +1,5 @@ +As with most solutions that use Generative AI, the Github Copilot extension is considered experimental. + ![Writing a function with Copilot](https://qtccache.qt.io/images/copilot/Copilot.gif) *Copilot in action* From 95a3eb05781249b0b650f104f6d3337b4b704e87 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 4 Nov 2024 17:26:39 +0100 Subject: [PATCH 08/26] Doc: Edit "Evaluating Expressions" - Add some information about what users can see in the Expressions view. - Add debugger backend limitations. - Add subtitles. - Move the list of context menu commands to the end. Fixes: QTCREATORBUG-31953 Change-Id: I11aafde8eaebe888981611fc201a693add7de051 Reviewed-by: hjk --- .../src/debugger/creator-debug-views.qdoc | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/doc/qtcreator/src/debugger/creator-debug-views.qdoc b/doc/qtcreator/src/debugger/creator-debug-views.qdoc index ad8d948c753..fa73b33784d 100644 --- a/doc/qtcreator/src/debugger/creator-debug-views.qdoc +++ b/doc/qtcreator/src/debugger/creator-debug-views.qdoc @@ -462,15 +462,19 @@ \brief Compute values of arithmetic expressions or function calls. - To compute values of arithmetic expressions or function calls, use + To access global data that is not visible in the + \l {Local Variables and Function Parameters}{Locals} view or to compute + values of arithmetic expressions or function calls, use expression evaluators in the \uicontrol Expressions view. - You can examine static variables that the debuggers don't pick up as - \e {local variables}. For example, if you define + For example, if you define \c {static int staticVar = 42;} in a source file and then add \c staticVar as an evaluated expression, you should see \e 42 in the view when the debugger stops in the source file. + You can also use Expression Evaluators as shortcuts to items that are + nested deeply in the locals tree. + \image qtcreator-debugger-expressions.webp {Expressions view} \section1 Adding Expression Evaluators @@ -481,8 +485,8 @@ You can also: \list - \li Double-click in the \uicontrol {Expressions} or - \l {Local Variables and Function Parameters}{Locals} view. + \li Double-click in the \uicontrol {Expressions} or \uicontrol {Locals} + view. \li Select \uicontrol {Add New Expression Evaluator} from the context menu. \endlist @@ -502,21 +506,12 @@ The set of evaluated expressions is saved in your session. - \note Expression evaluators are powerful, but slow down debugger operation - significantly. Use them sparingly and remove them when you no longer need - them. - Expression evaluators are re-evaluated whenever the current frame changes. The functions used in the expressions are called each time, even if they have side-effects. - \if defined(qtcreator) - \section1 Expressions View Actions - - Right-click the \uicontrol Expressions view to select the following actions: - - \include creator-debug-views.qdoc 0 - \endif + \note Evaluating expressions is slow, so remove expression evaluators after + use. \section1 JavaScript Expressions @@ -526,27 +521,46 @@ \section1 C and C++ Expressions - GDB, LLDB and CDB support the evaluation of simple C and C++ expressions. + CDB, GDB, and LLDB support the evaluation of simple C and C++ expressions, + such as arithmetic expressions made of simple values and pointers. + + Depending on the backend and concrete location, some function calls + can be evaluated. CDB is the most limited backend in this respect. + + \section2 Function Calls + Functions can be called only if they are actually compiled into the debugged executable or a library used by the executable. Inlined functions such as most \c{operator[]} implementations of standard containers are typically \e{not} available. + \note When an expression has a function call, anything can happen, including + corruption of the application's state, or using the application's permission + to perform arbitrary actions. + + \section2 Ranged Syntax + When using GDB or LLDB as backend, you can use a special ranged syntax to display multiple values with one expression. A sub-expression of form \c{foo[a..b]} is split into a sequence of individually evaluated expressions \c{foo[a], ..., foo[b]}. + \section2 Compound Variables + You can expand compound variables of struct or class type to show their members. As you also see the variable value and type, you can examine and traverse the low-level layout of object data. + \section2 Optimized Builds + GDB and LLDB, and therefore \QC's debugger, also work for optimized builds on Linux and \macos. Optimization can lead to re-ordering of instructions or removal of some local variables, causing the \uicontrol {Locals} and \uicontrol {Expressions} views to show unexpected data. + \section2 GCC + The debug information from GCC does not include enough information about the time when a variable is initialized. Therefore, \QC can not tell whether the contents of a local @@ -555,6 +569,12 @@ \uicontrol {not in scope}. Not all uninitialized objects, however, can be recognized as such. + \section1 Expressions View Actions + + Right-click the \uicontrol Expressions view to select the following actions: + + \include creator-debug-views.qdoc 0 + \sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger} \endif */ From 6137372afc35d35e67aacd20db345426b2486698 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 20 Nov 2024 22:09:11 +0100 Subject: [PATCH 09/26] StringUtils: Add Christian's test case Add an originally spotted case in https://codereview.qt-project.org/c/qt-creator/qt-creator/+/604666. Amends 4f56f64cbf3a91839cf9743d38e9dd6f61f66903 Change-Id: Ic773d2f73813b2604b99db20ddd44dbe3e4415ce Reviewed-by: Christian Kandeler --- tests/auto/utils/stringutils/tst_stringutils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/utils/stringutils/tst_stringutils.cpp b/tests/auto/utils/stringutils/tst_stringutils.cpp index 78a75611366..b69aca4ba7b 100644 --- a/tests/auto/utils/stringutils/tst_stringutils.cpp +++ b/tests/auto/utils/stringutils/tst_stringutils.cpp @@ -106,6 +106,7 @@ void tst_StringUtils::testParseUsedPortFromNetstatOutput_data() // Linux QTest::newRow("Linux1") << "sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt ..." << -1; QTest::newRow("Linux2") << "0: 00000000:2805 00000000:0000 0A 00000000:00000000 00:00000000 00000000 ..." << 10245; + QTest::newRow("Linux3") << " 1: 0100007F:193F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 ..." << 6463; // Mac QTest::newRow("Mac1") << "Active Internet connections (including servers)" << -1; From f415fc424be17257353f36891d875aca784903cc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 21 Nov 2024 09:15:17 +0100 Subject: [PATCH 10/26] Scripts: Small download improvements - better readable message - first download to temporary (-part), then move to target (makes it more obvious which files have finished on disk) - add option for skipping downloading existing files Change-Id: Ie36b4b65b7e7a206a54cec8d643095970d85ff07 Reviewed-by: David Schulz --- scripts/common.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/scripts/common.py b/scripts/common.py index e343a46dad1..1b9edd780a8 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -154,19 +154,34 @@ def extract_file(archive: Path, target: Path) -> None: async def download(url: str, target: Path) -> None: - print('- Starting download {} -> {}'.format(url, str(target))) + print((''' +- Starting download {} + -> {}''').strip().format(url, str(target))) # Since urlretrieve does blocking I/O it would prevent parallel downloads. # Run in default thread pool. + temp_target = target.with_suffix(target.suffix + '-part') loop = asyncio.get_running_loop() - await loop.run_in_executor(None, urllib.request.urlretrieve, url, str(target)) + await loop.run_in_executor(None, urllib.request.urlretrieve, url, str(temp_target)) + temp_target.rename(target) print('+ finished downloading {}'.format(str(target))) -def download_and_extract(urls: list[str], target: Path, temp: Path) -> None: - download_and_extract_tuples([(url, target) for url in urls], temp) +def download_and_extract( + urls: list[str], + target: Path, + temp: Path, + skip_existing: bool = False +) -> None: + download_and_extract_tuples([(url, target) for url in urls], + temp, + skip_existing) -def download_and_extract_tuples(urls_and_targets: list[tuple[str, Path]], temp: Path) -> None: +def download_and_extract_tuples( + urls_and_targets: list[tuple[str, Path]], + temp: Path, + skip_existing: bool = False +) -> None: temp.mkdir(parents=True, exist_ok=True) target_tuples : list[tuple[Path, Path]] = [] # TODO make this work with file URLs, which then aren't downloaded @@ -178,7 +193,10 @@ def download_and_extract_tuples(urls_and_targets: list[tuple[str, Path]], temp: filename = Path(u.path).name target_file = temp / filename target_tuples.append((target_file, target_path)) - tasks.append(asyncio.create_task(download(url, target_file))) + if skip_existing and target_file.exists(): + print('Skipping download of {}'.format(url)) + else: + tasks.append(asyncio.create_task(download(url, target_file))) for task in tasks: await task asyncio.run(impl()) From c65e9a944adf5a34c8c3c9cb70cadac8446ad995 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 13 Nov 2024 12:29:20 +0100 Subject: [PATCH 11/26] German translation: Qbs, Qmake, Qml*, QtSupport, RemoteLinux, Subversion Change-Id: Idefb87f839f7d5f7d9e4656929233c1a8d553a76 Reviewed-by: Christian Stenger --- share/qtcreator/translations/qtcreator_de.ts | 45 ++++++++++---------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index d19da8e6e69..1a15936a0cd 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -45873,12 +45873,13 @@ fails because Clang does not understand the target architecture. Qbs Profile Additions - + Ergänzungen zum Qbs-Profil Additional module properties to set in the Qbs profile corresponding to this kit. You will rarely need to do this. - + Zusätzliche Moduleigenschaften, die im Qbs-Profil des entsprechenden Kits gesetzt werden sollen. +Dies ist selten nötig. Qbs files @@ -46719,7 +46720,7 @@ Weder der Pfad zur Bibliothek noch der Pfad zu den Headerdateien wird zur .pro-D Starting qmake failed with the following error: %1 - + Das Starten von qmake ist mit folgendem Fehler fehlgeschlagen: %1 The build directory should be at the same level as the source directory. @@ -47651,7 +47652,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite "Checking Code A when condition cannot contain an object. - + Eine "when"-Bedingung kann kein Objekt enthalten. JavaScript blocks are not supported in a UI file (.ui.qml). @@ -47703,7 +47704,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite "Checking Code Arbitrary functions and function calls outside of a Connections object are not supported in a UI file (.ui.qml). - + Beliebige Funktionen und Funktionsaufrufe außerhalb des Connections-Objektes werden in einer UI-Datei (.ui.qml) nicht unterstützt. Duplicate import (%1). @@ -48116,7 +48117,7 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Enable semantic highlighting (experimental) - + Semantische Hervorhebung aktivieren (experimentell) Enabled @@ -48140,11 +48141,11 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Enable QML Language Server on this project. - + Aktiviere QML Language Server für dieses Projekt. Qt Quick - Qt Quick + Qt Quick Open .ui.qml files with: @@ -49438,7 +49439,7 @@ Sind Sie sicher? Enable CMake Generator - + CMake-Generator aktivieren @@ -49884,11 +49885,11 @@ wirklich entfernen? Error - Fehler + Fehler Warning - Warnung + Warnung Not all possible target environments can be supported due to missing compilers. @@ -50895,7 +50896,7 @@ Der Steuerprozess konnte nicht gestartet werden. The process crashed. - Der Prozess ist abgestürzt. + Der Prozess ist abgestürzt. "%1" failed to start: %2 @@ -53104,43 +53105,43 @@ Die Datei "%1" konnte nicht geöffnet werden. Diff Project Directory - + Diff des Projektverzeichnisses Diff Directory of Project "%1" - + Diff des Projektverzeichnisses von "%1" Project Directory Status - + Status des Projektverzeichnisses Status of Directory of Project "%1" - + Status des Projektverzeichnisses von "%1" Log Project Directory - + Log des Projektverzeichnisses Log Directory of Project "%1" - + Log des Projektverzeichnisses von "%1" Update Project Directory - + Projektverzeichnis aktualisieren Update Directory of Project "%1" - + Projektverzeichnis von "%1" aktualisieren Commit Project Directory - + Commit des Projektverzeichnisses Commit Directory of Project "%1" - + Commit des Projektverzeichnisses von "%1" Describe... From df4ab488ff4d0e1163c935e353735aa4f7ff34cb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 13 Nov 2024 10:06:44 +0100 Subject: [PATCH 12/26] German translation: CppEditor, Debugger, Docker, Extension* Change-Id: If393943fdb443bef63939911d07e493f301c5aa9 Reviewed-by: Christian Stenger --- share/qtcreator/translations/qtcreator_de.ts | 94 ++++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 1a15936a0cd..c4312a7d412 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -24586,11 +24586,11 @@ Flags: %3 Invalid location for %1. - + Ungültiger Pfad für %1. Could not create "%1": %2 - Konnte "%1" nicht erzeugen: %2 + Konnte "%1" nicht erstellen: %2 @@ -27373,7 +27373,7 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie Load Last Core File - + Letzte Core-Datei laden Start and Break on Main @@ -27514,11 +27514,11 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie coredumpctl did not find any cores created by systemd-coredump. - + coredumpctl hat keine von systemd-coredump erstellten Core-Dateien gefunden. Last Core file "%1" - + Letzte Core-Datei "%1" Reload debugging helpers skipped as no engine is running. @@ -28292,11 +28292,11 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve Show warnings for unsupported breakpoints - + Warnungen für nicht unterstützte Haltepunkte anzeigen Shows a warning on debugger start-up when breakpoints are requested which are not supported by the selected debugger engine. - + Zeigt beim Start des Debuggers eine Warnung an, wenn Haltepunkte angefordert werden, die nicht von der gewählten Debugger-Engine unterstützt werden. Behavior @@ -28304,15 +28304,15 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve User Interface - Benutzeroberfläche + Benutzeroberfläche When Debugging Stops - + Wenn das Debuggen beendet wird Allow inferior calls in debugging helper - + Aufrufe von der Ausgabe-Hilfsbibliothek in den zu debuggenden Prozess erlauben Extra Debugging Helpers @@ -29224,11 +29224,11 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Invalid debugger command - + Ungültiges Debugger-Kommando Invalid working directory - + Ungültiges Arbeitsverzeichnis Type of Debugger Backend @@ -30015,7 +30015,7 @@ Versuchen Sie, das Projekt neu zu erstellen. Failed starting Docker container. Exit code: %1, output: %2 - + Docker-Container konnte nicht gestartet werden. Rückgabewert: %1, Ausgabe: %2 Docker Image "%1" (%2) @@ -30123,11 +30123,11 @@ Versuchen Sie, das Projekt neu zu erstellen. Failed to inspect image: %1 - + Untersuchung des Images fehlgeschlagen: %1 Could not parse image inspect output: %1 - + Die Ausgabe von image inspect konnte nicht ausgewertet werden: %1 localSource: No mount point found for %1 @@ -30361,7 +30361,7 @@ Versuchen Sie, das Projekt neu zu erstellen. Active - + Aktiv Restart Now @@ -30381,15 +30381,15 @@ Versuchen Sie, das Projekt neu zu erstellen. No details to show - + Keine Details verfügbar Select an extension to see more information about it. - + Wählen Sie eine Erweiterung aus, um Informationen darüber anzuzeigen. Last Update - + Letzte Aktualisierung Tags @@ -30433,31 +30433,31 @@ Versuchen Sie, das Projekt neu zu erstellen. Inactive - + Inaktiv Last updated - + Zuletzt aktualisiert Name - Name + Name All - Alle + Alle Extension packs - + Erweiterungspakete Individual extensions - + Einzelne Erweiterungen No extension found! - + Keine Erweiterungen gefunden! Manage Extensions @@ -30469,11 +30469,11 @@ Versuchen Sie, das Projekt neu zu erstellen. Filter by: %1 - + Filtern nach: %1 Sort by: %1 - + Sortieren nach: %1 Install... @@ -30485,43 +30485,43 @@ Versuchen Sie, das Projekt neu zu erstellen. Server URL: - + Server-URL: Note - Hinweis + Hinweis %1 does not check extensions from external vendors for security flaws or malicious intent, so be careful when installing them, as it might leave your computer vulnerable to attacks such as hacking, malware, and phishing. - + %1 überprüft keine Erweiterungen von externen Anbietern auf Sicherheitsprobleme oder böswillige Absichten. Seien Sie deshalb vorsichtig beim Installieren solcher Erweiterungen, da sie Ihren Computer für Angriffe wie Hacking, Schadsoftware und Phishing anfällig machen könnten. Use External Repository - + Externes Repository benutzen Install Extension... - + Erweiterung installieren... Plugin changes will take effect after restart. - Änderungen der Plugins werden nach einem Neustart wirksam. + Änderungen der Plugins werden nach einem Neustart wirksam. Browser - + Browser Documentation - Dokumentation + Dokumentation More Information - + Mehr Informationen New - Neu + Neu @@ -30536,7 +30536,7 @@ Versuchen Sie, das Projekt neu zu erstellen. Vendor Id: - + Anbieter-ID: Vendor: @@ -30544,7 +30544,7 @@ Versuchen Sie, das Projekt neu zu erstellen. Documentation: - Dokumentation: + Dokumentation: Location: @@ -30580,7 +30580,7 @@ Versuchen Sie, das Projekt neu zu erstellen. Id: - + ID: Compatibility version: @@ -30710,11 +30710,11 @@ Grund: %3 No callback set to accept terms and conditions - + Es ist kein Callback für das Annehmen von Bedingungen gesetzt You did not accept the terms and conditions - + Sie haben die Bedingungen nicht angenommen Cannot load plugin because dependency failed to load: %1(%2) @@ -30784,11 +30784,11 @@ Grund: %3 Plugin id "%1" must be lowercase - + Plugin-ID "%1" muss kleingeschrieben sein Terms and conditions: %1 - + Bedingungen: %1 Resolving dependencies failed because state != Read @@ -30864,11 +30864,11 @@ Grund: %3 deprecated - + veraltet experimental - + experimentell Utilities From 5d0331c5caf89b422d91ba720e78ba7756d3f972 Mon Sep 17 00:00:00 2001 From: Liu Zhangjian Date: Tue, 19 Nov 2024 15:18:08 +0800 Subject: [PATCH 13/26] fix: [session] The `default` session can be deleted and renamed When opening the session manager for the first time, the default session can be deleted and renamed. The default session is selected during construction, and the active session is selected in the showEvent. If the active session is the default session, the selectionChanged signal won't be triggered, which leads to the default session being able to be deleted and renamed. Change-Id: I2186d02e93bcd3243f3ccf76645c19224f3d32db Reviewed-by: Eike Ziller --- src/plugins/coreplugin/sessionview.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/plugins/coreplugin/sessionview.cpp b/src/plugins/coreplugin/sessionview.cpp index 589d725156b..9b63c8e7325 100644 --- a/src/plugins/coreplugin/sessionview.cpp +++ b/src/plugins/coreplugin/sessionview.cpp @@ -50,11 +50,6 @@ SessionView::SessionView(QWidget *parent) // Ensure that the full session name is visible. header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - QItemSelection firstRow(m_sessionModel.index(0,0), m_sessionModel.index( - 0, m_sessionModel.columnCount() - 1)); - selectionModel()->select(firstRow, QItemSelectionModel::QItemSelectionModel:: - SelectCurrent); - connect(this, &Utils::TreeView::activated, this, [this](const QModelIndex &index){ emit sessionActivated(m_sessionModel.sessionAt(index.row())); }); From cc2e2211d9e2853f03b3b1210974ff34af04aaf9 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 22 Nov 2024 10:00:39 +0100 Subject: [PATCH 14/26] Utils: Prevent crash when inserting into an empty environment model Change-Id: Id857b21709d12534175a697625b3f5030f05fcd9 Reviewed-by: Christian Kandeler Reviewed-by: Marcus Tillmanns --- src/libs/utils/environmentmodel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/environmentmodel.cpp b/src/libs/utils/environmentmodel.cpp index 20efb301ccd..9d5edb684fd 100644 --- a/src/libs/utils/environmentmodel.cpp +++ b/src/libs/utils/environmentmodel.cpp @@ -67,7 +67,8 @@ public: int findInResultInsertPosition(const QString &key) const { const auto compare = [](int compareResult) { return compareResult > 0; }; - return findIndex(m_resultNameValueDictionary, key, compare); + const int pos = findIndex(m_resultNameValueDictionary, key, compare); + return pos >= 0 ? pos : m_resultNameValueDictionary.size(); } int findInResult(const QString &key) const @@ -291,6 +292,7 @@ QModelIndex EnvironmentModel::addVariable(const EnvironmentItem &item) } else { // We add something that is not in the base dictionary // Insert a new line! + QTC_ASSERT(insertPos >= 0, insertPos = d->m_resultNameValueDictionary.size()); beginInsertRows(QModelIndex(), insertPos, insertPos); Q_ASSERT(changePos < 0); d->m_items.append(item); From 12b85599ecf5c2cdab8459b8ce15492c7027ea30 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sat, 23 Nov 2024 16:20:38 +0100 Subject: [PATCH 15/26] Git: InstantBlame: Remove trailing newline from output Change-Id: Ia2caff14104811255e1eddd036573c4a8a1f9a5d Reviewed-by: Orgad Shaneh --- src/plugins/git/instantblame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/instantblame.cpp b/src/plugins/git/instantblame.cpp index 5a87cf06442..0eb491c3372 100644 --- a/src/plugins/git/instantblame.cpp +++ b/src/plugins/git/instantblame.cpp @@ -382,7 +382,7 @@ void InstantBlame::perform() const Utils::FilePath workingDirectory = Utils::FilePath::fromString(fi.path()); const QString lineString = QString("%1,%1").arg(line); const auto lineDiffHandler = [this](const CommandResult &result) { - const QString error = result.cleanedStdErr(); + const QString error = result.cleanedStdErr().trimmed(); if (!error.isEmpty()) { qCWarning(log) << error; } From efc0d34abdaeabdc84bb6e17336a3c903682ea42 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sun, 24 Nov 2024 12:39:15 +0100 Subject: [PATCH 16/26] Git: Improve: "No Add action for remote branches" The original commit 97e582c3 wanted to remove the "Add..." context menu from "Remote Branches" and the remotes itself (like "origin" or "gerrit"). But the actual result was, that "Add..." was removed from all remote branches and that removed the action to create new local branches from a specific remote branch. Amends 97e582c3c0edbf9e646b9df667823bead5dd5e46. Change-Id: I79948eef36e6fb3ca1d6ecdb53eb256e6b50c8b7 Reviewed-by: Orgad Shaneh --- src/plugins/git/branchview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/branchview.cpp b/src/plugins/git/branchview.cpp index 555db9b01be..c8ff252f154 100644 --- a/src/plugins/git/branchview.cpp +++ b/src/plugins/git/branchview.cpp @@ -236,7 +236,7 @@ void BranchView::slotCustomContextMenu(const QPoint &point) SetInContext block(m_blockRefresh); QMenu contextMenu; - if (isLocal) + if (isLocal || hasActions) contextMenu.addAction(Tr::tr("&Add..."), this, &BranchView::add); const std::optional remote = m_model->remoteName(index); From 8ba1e64be04c9d70c964e4580e5106d4a492a435 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sun, 24 Nov 2024 18:13:17 +0100 Subject: [PATCH 17/26] Git: Fix missing branch name on amend last commit parseFilesFromStatus() does not only parse the files to be included in the commit, but also parses the branch name shown in the info panel. But if the repo contains no modified files, status is set to StatusUnchanged and so parseFilesFromStatus() was never called. Change-Id: I4698c7366b41fa2af6bc31040c3d2397be91c4df Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 2359732fddb..f592ba1144e 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2768,12 +2768,12 @@ bool GitClient::getCommitData(const FilePath &workingDirectory, // R old -> new // D deleted_file // ?? untracked_file - if (status != StatusUnchanged) { - if (!commitData.parseFilesFromStatus(output)) { - *errorMessage = msgParseFilesFailed(); - return false; - } + if (!commitData.parseFilesFromStatus(output)) { + *errorMessage = msgParseFilesFailed(); + return false; + } + if (status != StatusUnchanged) { // Filter out untracked files that are not part of the project QStringList untrackedFiles = commitData.filterFiles(UntrackedFile); From 0bf3356ab55f86f84352ce15781d10ded158740c Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 22 Nov 2024 10:25:53 +0100 Subject: [PATCH 18/26] TextEditor: Delay tooltips for text marks area Like the tooltips on breakpoints. Tooltips on mouse hover should show up with a delay. Show them on QEvent::ToolTip, which is the usual way to handle that. Change-Id: Icb4cd3bc9ffc5bb5ff84020d72eade3e9980b79f Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 31 ++++++++++++++++++++++++--- src/plugins/texteditor/texteditor.h | 1 + 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 5f22059414a..f5e4b7c12bd 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -343,6 +343,14 @@ protected: void wheelEvent(QWheelEvent *event) override { QCoreApplication::sendEvent(textEdit->viewport(), event); } + bool event(QEvent *event) override + { + if (event->type() == QEvent::ToolTip) { + textEdit->extraAreaToolTipEvent(static_cast(event)); + return true; + } + return QWidget::event(event); + } private: TextEditorWidget *textEdit; @@ -7371,6 +7379,25 @@ void TextEditorWidget::updateFoldingHighlight(const QTextCursor &cursor) d->m_highlightBlocksTimer.start(d->m_highlightBlocksInfo.isEmpty() ? 120 : 0); } +void TextEditorWidget::extraAreaToolTipEvent(QHelpEvent *e) +{ + QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y())); + + int markWidth = 0; + extraAreaWidth(&markWidth); + const bool inMarkArea = e->pos().x() <= markWidth && e->pos().x() >= 0; + if (!inMarkArea) + return; + int line = cursor.blockNumber() + 1; + if (d->extraAreaPreviousMarkTooltipRequestedLine != line) { + if (auto data = static_cast(cursor.block().userData())) { + if (!data->marks().isEmpty()) + d->showTextMarksToolTip(mapToGlobal(e->pos()), data->marks()); + } + } + d->extraAreaPreviousMarkTooltipRequestedLine = line; +} + void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) { QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y())); @@ -7387,16 +7414,14 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) // Set whether the mouse cursor is a hand or normal arrow if (e->type() == QEvent::MouseMove) { if (inMarkArea) { + // tool tips are shown in extraAreaToolTipEvent int line = cursor.blockNumber() + 1; if (d->extraAreaPreviousMarkTooltipRequestedLine != line) { if (auto data = static_cast(cursor.block().userData())) { if (data->marks().isEmpty()) ToolTip::hide(); - else - d->showTextMarksToolTip(mapToGlobal(e->pos()), data->marks()); } } - d->extraAreaPreviousMarkTooltipRequestedLine = line; } if (!d->m_markDragging && e->buttons() & Qt::LeftButton && !d->m_markDragStart.isNull()) { diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index da2a4eb6dca..0b320c9c706 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -312,6 +312,7 @@ public: virtual void extraAreaLeaveEvent(QEvent *); virtual void extraAreaContextMenuEvent(QContextMenuEvent *); virtual void extraAreaMouseEvent(QMouseEvent *); + virtual void extraAreaToolTipEvent(QHelpEvent *e); void updateFoldingHighlight(const QPoint &pos); void updateFoldingHighlight(const QTextCursor &cursor); From 22a18e5e36bf7db6f9c0849f3dc2f1333496f8ab Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Nov 2024 16:15:59 +0100 Subject: [PATCH 19/26] Update qbs submodule to HEAD of 2.5 branch Change-Id: I3da2910f8c8c6ff172f9041d0abd4144dd6a86ad Reviewed-by: Christian Stenger --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index e44a761b3b2..56b87afde61 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit e44a761b3b2081bb3ac4ee320d868310bd37312a +Subproject commit 56b87afde6183db8c5c0e03b986a4e80b932be86 From f5c55885d41f2e1279d82bbcc6105aaab99a64df Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Nov 2024 16:09:05 +0100 Subject: [PATCH 20/26] TextEditor: Use DocumentManager when storing open documents ... in RefactoringFile. Otherwise, the file system watchers might emit unexpected "changed" signals for these files, which we don't want, because they can lead to e.g. unnecessary clangd restarts. For some reason, this problem only started manifesting itself after 740bde9516d39294fe73822d0c874185795f2bd9. Change-Id: Ic613ce6d52ba151fb54f79cbc57f92bee9968ec6 Reviewed-by: David Schulz --- src/plugins/texteditor/refactoringchanges.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp index 017474fe66d..7dfe6f4c662 100644 --- a/src/plugins/texteditor/refactoringchanges.cpp +++ b/src/plugins/texteditor/refactoringchanges.cpp @@ -280,7 +280,7 @@ bool RefactoringFile::apply() fileChanged(); if (withUnmodifiedEditor && EditorManager::autoSaveAfterRefactoring()) - m_editor->textDocument()->save(m_filePath, false); + DocumentManager::saveDocument(m_editor->textDocument(), m_filePath); } } From 0eb99f5498c1a0e0c7bb6bdd28de39579e75e0a5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 25 Nov 2024 11:36:25 +0100 Subject: [PATCH 21/26] VCS: Fix issues with clicking on links in output view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Amends cb6a2da37223fa34f4e173e2ed64118f735d6c92 that started clearing the static repository information from the output view. The issue with that is that it clears that information even for asynchronous vcs commands that do not have anything to do with the output view at all. The code before was mostly wrong already, but the information was never cleared it mostly worked out. It would be good to get rid of the static information about the repository from the output view, and instead provid the repository information for each output that is added. But this patch is a band aid for Qt Creator 15: - set the repository information again before appending messages from a vcs command to the output view - set the repository information also for runBlocking, which also broke in the above commit Task-number: QTCREATORBUG-31894 Change-Id: I0823b53e0fbecc14961be905f5279eb5a461ab93 Reviewed-by: André Hartmann --- src/plugins/vcsbase/vcscommand.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp index a10586458ec..61c6fe36431 100644 --- a/src/plugins/vcsbase/vcscommand.cpp +++ b/src/plugins/vcsbase/vcscommand.cpp @@ -128,6 +128,7 @@ void VcsCommandPrivate::installStdCallbacks(Process *process) || m_progressParser || !(m_flags & RunFlags::SuppressStdErr))) { process->setTextChannelMode(Channel::Error, TextChannelMode::MultiLine); connect(process, &Process::textOnStandardError, this, [this](const QString &text) { + VcsOutputWindow::setRepository(m_defaultWorkingDirectory); if (!(m_flags & RunFlags::SuppressStdErr)) VcsOutputWindow::appendError(text); if (m_flags & RunFlags::ProgressiveOutput) @@ -138,6 +139,7 @@ void VcsCommandPrivate::installStdCallbacks(Process *process) || m_flags & RunFlags::ShowStdOut) { process->setTextChannelMode(Channel::Output, TextChannelMode::MultiLine); connect(process, &Process::textOnStandardOutput, this, [this](const QString &text) { + VcsOutputWindow::setRepository(m_defaultWorkingDirectory); if (m_flags & RunFlags::ShowStdOut) VcsOutputWindow::append(text); if (m_flags & RunFlags::ProgressiveOutput) @@ -305,6 +307,7 @@ CommandResult VcsCommand::runBlockingHelper(const CommandLine &command, int time return {}; const Internal::VcsCommandPrivate::Job job{command, timeoutS, d->m_defaultWorkingDirectory}; + VcsOutputWindow::setRepository(d->m_defaultWorkingDirectory); d->setupProcess(&process, job); const EventLoopMode eventLoopMode = d->eventLoopMode(); From 58af141dfc0915b1281c23f2dcf4e004273f0e61 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 15 Nov 2024 12:27:07 +0100 Subject: [PATCH 22/26] Crashpad: Reduce the size of crash reports on Windows Fixes: QDS-9443 Change-Id: Ia990210bcb6f9626d9ef0930befdccd529a1c398 Reviewed-by: Tim Jenssen --- src/app/main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/main.cpp b/src/app/main.cpp index 37ab3633196..73b6a003514 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -443,6 +443,12 @@ void startCrashpad(const AppInfo &appInfo, bool crashReportingEnabled) annotations["sha1"] = Core::Constants::IDE_REVISION_STR; #endif + if (HostOsInfo::isWindowsHost()) { + // reduces the size of crash reports, which can be large on Windows + CrashpadInfo::GetCrashpadInfo() + ->set_gather_indirectly_referenced_memory(crashpad::TriState::kEnabled, 0); + } + // Optional arguments to pass to the handler std::vector arguments; arguments.push_back("--no-rate-limit"); From c263ce8cc6e4166a15ccea0059e324468a1f7230 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 25 Nov 2024 17:23:35 +0100 Subject: [PATCH 23/26] Crashpad: Fix missing include Amends 58af141dfc0915b1281c23f2dcf4e004273f0e61 Change-Id: Ibb9e1b37246633282c7f8c74bfc93fb7f1a31263 Reviewed-by: Tim Jenssen --- src/app/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 73b6a003514..1767cbade16 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -48,8 +48,9 @@ #ifdef ENABLE_CRASHPAD #define NOMINMAX -#include "client/crashpad_client.h" #include "client/crash_report_database.h" +#include "client/crashpad_client.h" +#include "client/crashpad_info.h" #include "client/settings.h" #endif From 1075f4f8c40a66279c60edb7659ee02bde53ce1f Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2024 15:11:53 +0100 Subject: [PATCH 24/26] Doc: Describe creating kits for building on Docker devices - Use the same topic as for remote Linux devices, with variables. - Update information and screenshots of adding compilers. Change-Id: I0b1695ec649e9780b68e57cff989b96ada92f0da Reviewed-by: hjk Reviewed-by: Marcus Tillmanns --- .../images/creator-compilers-custom.png | Bin 10140 -> 0 bytes ...reator-preferences-compilers-clang-cl.webp | Bin 2306 -> 2492 bytes ...qtcreator-preferences-compilers-clang.webp | Bin 5182 -> 3298 bytes ...tcreator-preferences-compilers-custom.webp | Bin 0 -> 5114 bytes .../qtcreator-preferences-compilers-qcc.webp | Bin 3520 -> 3460 bytes .../qtcreator-preferences-compilers.webp | Bin 21908 -> 19100 bytes .../src/cmake/creator-projects-cmake.qdoc | 13 +++- doc/qtcreator/src/docker/creator-docker.qdoc | 19 ++++++ ...tor-how-to-build-on-remote-devices.qdocinc | 60 ++++++++++++++++++ doc/qtcreator/src/linux-mobile/linuxdev.qdoc | 57 ++--------------- .../creator-projects-compilers.qdoc | 34 +++++++--- .../creator-projects-qt-versions.qdoc | 3 + 12 files changed, 123 insertions(+), 63 deletions(-) delete mode 100644 doc/qtcreator/images/creator-compilers-custom.png create mode 100644 doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp create mode 100644 doc/qtcreator/src/linux-mobile/creator-how-to-build-on-remote-devices.qdocinc diff --git a/doc/qtcreator/images/creator-compilers-custom.png b/doc/qtcreator/images/creator-compilers-custom.png deleted file mode 100644 index d090b832593b2e01c9406a7d0a089feaaccbb331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10140 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 V-qDvjuOb;h7P|VmtaD0e0sw-cI2!-} diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp index c02517d1b212bcbea678d7b48ddd27170c930d4a..f77fd47e0fc5d3f09a09d33c003ba90c49dea948 100644 GIT binary patch literal 2492 zcmWIYbaUIn$-ofq>J$(bVBxcZlYv2h-ytoA_3YcX@`{~c*}V&~u8 z{8385bJ7!!&NcI5x3tY}V?UAqA@ZD!Teii^wCvr&>r_0u=FYnN*!p{<|BI7K;`Pk` z!?)F>olKjt{qkph1Q2ty%Kv}Woy8X%bC3n@&tP`oxEAj*k5z_Q)dbl%MzC_gKaL-*bKb%id>d zZ@UT`qV$VhStq;Uvw3gj>ND&O$8gH&|{C;x2 zQ;J~FllA}Z_FatOzs75?XHX=Yb+4=b`XZJUXT{akl8w}g3qCf*hP;*Tn6T@=MDMwR z?aO?&#~byVx|Xhvo*&m|FY@;KI=Kzp6Ao;hd0=60du;n#kD${AYhT=n%_|D{^Z$I0 z+|q5ixAV4#-`3>;{44EbF@~)jPqDp(4m_zQmMBVdeQce5h zdYZ>&d&w%Hzt(|Ef6RTc@3D#3qQ9(cTxDuu4Z2ShGdpK8a`ACI`Rnpssd>*uqrcygZ$s)D5jLARM)9dfb%-`af-SGD$!_pnCML%^fOFw!cWVB*eC)XSP zDKk7-Z<_c?@f^%u?052IFIRGlzw^ph|1Ya;4%0E6%~N^kho~%8`^Vs8xJE!?FS?Oa_bKLh7PSNk|?{sU-jG1ExBDF z96ay5&xPmL?PG3pPc|}+ysqH!S?-la#)La97|E4%d9b@$HrQf!urkE-WWa zY9ma1zXkj%alWQsvf*3qOR-9gY>RifHfv-uUnNyv+9bWnc2Dfq>^Cae=jxucOnfi2 z*TS*SN9Cvp`y83pD`)JVm}!)7ywQCAd|mX&oShN2V?_g- zS+e;TS2s<)iNZ79Phu@%nUvHud3M^#ye3!EZkvMaY4s1nSQfN+zGkzLMmG{jM=iu)6jYMeq|X8Q>m4eM!lcpzs+7gW%1v(&Qk7uu^vtT z(mOuYES$Zt-f3Gx_7=;zT{HcEKXBgjw9kdfaOrV3$-`4^7{7-uyj)Wlwa2j1A%5P6 zt0^D9313{ve16U|wl4`Xwtg&3j%D ztDDT8jUL7NXbKJKmRK3^Q3%rYom zeNsoxj-h;}p75_X?^>^X{aU&A*4kz3*5}t}`n7M5pU_>M`>9bfJ@kCXF9KVrB_WVe%l%%iLKAg>+|Dp7{u?}>!kT|pTg5u_tHwvg+}Z?6s!7Py=sPGlId^tRd0N3 zElyXkU9B*3zNFyByZ43e3)?+;#^yCCyLv)iY%JuQEGNA$x;*jk_U!Z8Tferd?vlK` ziNWp7#=xu1UVI6R@e0z30*l$=7Vtli%@qqv^M1_6K2uMbqwJgGtAD?k)?Z$|vtG-1eAS{wH|+w?w8@$@I`+Kkf7r-$ zfxE41nOouNL#J{w|IC{_-DmnlwuSG+#T)Kc&b@a{_r+q4FWYM!_nCN`D_{S>*cEzJ z?Xzr#ibICzW46^P{%_vveQFB4`Yz&Aru_4r*Mxq&d2xEGhFRUM@VB!9l*H;nSLDr{ zInnO#j-ZYRwV68){PXy~+9~|UA@ThC#&VT^+W*PCWKUmG@w@Xy!ShY$dt;8vsokqv z@V-~2PsR4(?7Ql(>;wOI{_?+4KdXTH*x!;_DHEsYH!txTxvsd z(r;}{Omg2Q{Mu5h!b0lz#`bPm*=m`Y$8OpuUbQ-WXEM|OpgZ9b({|2y@`Gce@^O=8 z|E1HD)AyhJe^v8?rD0IPi6=VWV~)9e_nXlcc;Jk?XXiVKs|K6*TM6Dx6hFFIUi517 z9X78sTSOR(8?PHAiW(f&_|5pW#pc0t)@j-yA^b(zrcTe2s*QXK8r9OWXEc_|c=X!z z1cn-2GxO^cGI;fS{`nc|F*|0gOH?ax*9>^kv*2)P>}$gniELjaMXZ{;UL{tFv>(`1 z-jg+B>@N2D7ce5~!ded>gbDFK)S&5B{EgCL2wO`&i?9ue_DABhwl$u=UGG&bG4MXT;=jw^=brL006y!_I{*Lx literal 2306 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 Dvw2Cv diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp index 68e3252355e73f1940b1d48ec50b621382a67119..94745a8309aac6bda4d43b4a1a3c8a637d40e81b 100644 GIT binary patch literal 3298 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 literal 5182 zcmWIYbaOKkVPFV%bqWXzu<+3oVPMdIeb|!W>y5H)cS~=-h%2(`ST;TR{L0xX+rPZC z+iNaTPglKkS6B1d{KRLYL-A*0NzrTGH{173-yY`Qu<8tR)+xc&6)&!>H!arXSog1b z+w|65s{LOU`m6*B$?UD^L@;ECqJMja4VnL-d!qRcGMRXscn9Jmvy1OnWtkG z!<*weCe0_=a^>HqK4aW@>6=()+Cu&Q*9C5lD|V)T*bsV2sIO)A6Zh>}Degya{Zv2P zYx3&z?H6g5ch9{2snfkQVaxZsIawP`w64tz+ZQxB%UFA+$>Y11#FvX7`NMkJX)Vja zwehdZH><}#E--5ozsTiQ{nRU3aEIoXJ^$|5ytn+j=lT2%uN2O{@?P`v_16Q*9AdGL z#h2^ueD-W+|F_#;zu$S&9#Qsp^Qy`Jejk4K{)YTFR~?22=X z=ij#|;;xal5ebfOXWYH=bpI|%vqMuKEVTG~&~W$4(-*>aFxiNnpSx*p)bYOMhpMu) zquA$lId2P&PSCB;s>`-|@-8W&YTa>e+n&D?Z^9sMk zdoRhCeQ{UkXD)X-r8tH6l3E0>Mp$rH=3Sv@m!qe}EJxB-jrdQk| zST(`|%W}@8Z@ByQhuj~h6B2F$%eO3&UE;Uzm<`Js^)`>i5gh@}?vN8d69=NMJXdaqwmi*Mhj`0 zOfi^$Q|#AvrBA%mE(qkG{?>0EA>C>9eVRuWSKrUId5VVZbFvvG@9^p|?E9Lq>87Zs zjS5G5OGm@jHM*BVY!|FpE_E-$=V;ZNL)$K_jJ{)QNo<#x(n{>9!)U6>otG9ahI#g1=DFlN=(-_UGseK?Z`g4 zkXb^Dx3%*9xz@;$^~w38L$`+ZD(0sv7x27%Fe{p=pHXkxgDH*sTr$qF%{uCAbjJD0 z^Z@M+j;PaYp>i7>c15mX5z$_GR3mL+sk344l=f_8W$9-@Zys@$dMCwaC;VPNYfj{e z^*VtDcOK0>(v+>7_R&owZvApK-s_z?eR*!$2Z9T)mAz7n;G5Sa{&rW+^Xk03hSUcu zD=rniD$dZ2Vf8-f9Qf~z?(UWPi}Yo;ipA>RZLkr3|L=46CC<}7Bd-eQ&;1mzr&P(~ z*L(im_007*T-I}E&sqAJGhY0fg*OTrCw^^*H)oRgwWo&<9{b*YQscOxm%#1~^OiC>`m^y?eC5Y~pyRXbz+{H8@ zaEg~TpUHcT1pn331Q}eKizQNI9)5|P!*+s0z~I2&6!idGrOQgIntPUID@>la=&-l) z(MG*Ba$)-p8O?Tkn{ZWospQwV;{39M^4GHECgnZfPBiuFF$=p4je>nEt8a=&2>eMN6E&KJ7UA;7N~7 z=dtZ7tZGaQokFZ39mSt__AoIvhdMc?9d#&pe&TcS7yV7bz0ZwWjvd@lu5^b}q1{nS zG}3kPufv|xHU&OjDx~5v*QR30x_y;P*0GgV#JoB5YFWp@l^#L-Q+dB-`dsb!+&$~! zkG^%)n-8;osC}yVhrQyg{TUH)}J zo(F>te2|ZM6}bK5oK6NQiH9C6&B6!$7-UWDn$yfS)MiC}ZJ(@@y7=&F&zdQ(o=Bb% z2;aTIDtw2a)SQYNUF$x7ez;Wgp-$z;3no(cFP7$;*$W#+R-D(rw)E_m#fewa)Pwr( zp4adY4rEc#j9B}i=}OPdv>Q20Ecf=$Pf6Qnk-JOMgfSy;p2$0Q^~h7ZPGsxYxGMkM zYJaaRu{7D((Bj~?=>6BWdYhV5TZBxxJ3Dd4ufwmxZ%vDTQ<+q;M=$)r;>5?|%b!kA zE|;FeqRe+!sI<)X7irV$=(l zzln2}=6tDG`LAtmPncTq$8FrJKi_S;Qn4g`vO#i%WNquBiIC82UM_rQp5>Pr@oQ#R z?(uraerskV@BYG9-XiRKR1IE5%wu#oVY2%8F@{GERBCv5&6aRYYGQTah*0m~Ot@si z!19_|U!6grqfv}yiOU_vUDJEB7*#KrZm{p!Jf&AmztH=Ie(U?%3e)+gzZ}$mm<38; zA1Z52)0mSA7FFM2mS~-F@<-pM>dl!)nBsSSmW&nP&(w`6QZ;>E!e_rpTv%zY@iIfc zf^hq)J#X2>uWkERWqX-Zb(!X^M$yH|e;$>5skqI1uBYw&&dlwnE2nL`_&E3Zjt$#% zkKXuxCqiEQn#AfBaNz|ezeZm5OpA?}{4YK~@pRqZR&dkmsdkT@KyY^C%ccDHJwHC0 zw3)kg4X?btY<`?}z`tu4As*_@0w z2b@*9k+m(4^{!AsY40?JZZ;?7MUfGX1+TBqYF{&N!Rpo5)&*(rY1;VVrIYK%0D&sO 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 E0It`#D*ylh diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp new file mode 100644 index 0000000000000000000000000000000000000000..fc1c2b437c1118d5f698cdd243bcc6c6c96190d7 GIT binary patch literal 5114 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 CG`raV literal 3520 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 diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers.webp b/doc/qtcreator/images/qtcreator-preferences-compilers.webp index 3a31ea611c1454f9362be1bf1dccd57798b4c015..25052e42ee41c46848608241cb82c9c8fd4be939 100644 GIT binary patch literal 19100 zcmWIYbaR{H#lR5m>J$(bVByo@#lWDy?Ql1PXt(nATounx|LbEzU%pD2mhIxhz>y%t z@}_peiobEwtUWh362|UwTzP&rM2w}$rL?*bBo{A-EWrabzFIWr#F61;D7zir?^YHj_NE{ zZZKM;zV7A!_?5j&rW?*)FQQhkHRz^^hlki2v50QLS2r*1yi+mLWZ$Q$@lLm7z9>EF zjXU&AboTw0yZH%T`|p4MZhx2eL{=_KGEeIpr`GT`J>Qk4l3wSQ?a_Unv)I5=Jtj3m ze8o1^U{;~vrvXQ29(lIlr14&l4CCnK+YG%Da{cEe-t5urZQ7_lk9YFp!U-|Cv!l${ zPwr9qU%Wn~Vdh4rv}2)O1-v(xcQ0vPbLPw&wnHge4#}A*nR_NId0T(W?YS~qkxzE@ ztRtF-pHB&9e8S?FFuQq~v8Y2y% z2@|rSqqn_b5&3a+j)LvvrE(#WZw>3d*(g^Z%w%-WBK%+zKpgr zviHh63%5^aoSFW&oz-*O)HJ>s4p-h-+PFNe+R+cou60_$g zY<|X^bKC6Jw!2p?ZQR|$_Rd>%YR$g0b8=#z-@L~DBjxCgYmcmUyv;0rdpG9xw&?8J z+hX4zt^TcWbK6=sOJU7}i5ySkEEX4DpSIgHa!ZC))V8(pW|JK6-O8K1@_zZPx;xJQ?{1hVVrX3{C=;z4v`YBpKB0X~a%^#%jy{YQ z_AEIg)*j!<{;|Nsq3*{1{A(Kz=-Na3KUY}! z=ufMLL7uDX{T#bm4jxwhn-`bf^jMT!R&vr(hWpILrAK2XYk%64rkt$IeC}pP@eZ*W z6F0_8R(qeBmUGNDZO-AX2hM!a?_{gI=ElW&eQOoYpe<%1>XyZOPOwq8KSv%ve`dEQQ1wvJ!)MW@V% znDxhEC$xO5HGDbAY%k-prMh=^7&@&8t~_D!yo#x`>G*rA!`t3+rS|K+3CnNg(C-&5 zEVL?_w`b2iCWR^M-_Et#^z2x3_)@=lTjwp>HPOkB=Y{^7qpw;nH)E$|jrmz#d8?BG48+h%vBXz{=QJ5MpV z>+Bm{lNn2w-`JPF_`j_2&ieBgev0$>I-XM5c2KTx70)_}gx;6T57r40QpR>RG0`rt`pWK>=obUrz^sOFO zw*_oj!W*XNy)rjpNukeLoewV*o4P_y{4@@7Og*sn!}KtLEd>j%JlNlS`N`DpIWdtB zUN$e`U8SKYD$0GuVvfKR;fOiRH)a>^djGviBzB^;$GgcX=`JxLsopgkif(uF?q(Bt zrMd2di}u&6lMjBp&?ml~_rsJtagGduCCB%+bp#h3J^YFz^Yq@5se8gV7T$eOn7DqE z_LX=0GXkzo(u>%cn?I|oH9>vr!?jrsH$E(KToUN8Te0BigEar-49PF4C%7klJ+s?H zeFNuJyNzvi=U0cuZrpw$HnVx^^?Ppu-YIYy=kbfZJ}Z0XcC>~Vv)jEi-P8cqEjl%2 ziv@NlHUG|^-jmTDeQVq1*yj(GdqO8Ib2#q3`qh>F277Pj@wjHP?&gpFce{l9R>IRQ zD}Elh&=;At^15C`=I!q}U%pg)G<&v%JA}Qxy32JQ_k|fBjOGgLP&)AKwy)TIeYM0y zr;lYfPP_Jg4KuE8*#*?DVf9`O+s^=ASE)$!0sg#KpVvuh-PixnH00bxrG% z%9%MQGhZ?N;ijcb6KeKy96lkt0hD9RtqNby@kEPtK*}TmLv7^)TtcBWKB-?Ef}Q z{Mvn#lY9M1zxg+|>xyWcsc!wL)SAEB+HPaM_Kcmv((h6}{;`)>^7Niz;iKXU$G5f@ zR55RC-kx~4EpGN&r5y(n_dR7lH*JR1rgz-0zvw?ckjb`jmhO%hraPnyBSlR^RK=D` zURcs(vefh3;_ykfvwdgOUEEL>vG3jA$v5gAl)Om#6p(Xv`BvxpqnG~AtGp7<_-gCh zrUyI!L@(K1cm5v3lRV-5{i3(O^UOY6zGrn?>LZrc=;nhfrJZ*kzLkD&w z_M@%J-Hs(m|B3!PT@JSD?Vqy3exLtuE_;-zpL-2&-T#A9j8(k98cPl?vS_bs*E;F- zy54U8r1gKDU!PS>_F~jYzkNI5sNmPFAG{Yg+b#V#=eNVZos$3ioeg~Vym2iN;kG%z zA@L)i`BeI)rDk>_owt1VU)HMCSnYo0R-(jt?&WbsIv7b|n2=$Y&n%YQ}wZU12Cu`l!0(E|UuGv0j3)XQ%W+~c`5H*VXp%vmDO zUW)Epn`QiC?#KD(*(>iZnw25KZI^d9d9v+~dutZ@9hW+IV%z!pRTs{!_RDqRc}HIR zhQm$GitO)wbjt33=X>|5=>G2O`z^oR=vBP^&r&xy-)K);bx~sKE}5oz;=FnrPAn}= zC{{JF|FNynM&8dnEnoU(b@C30=I}Ts!Oa005=M_j)0RwWZF<=L(8TX|O74wgNri{* z9bGz6GXBPiOOGlFotDpu{m_24ue?j(&zFs_zRlct-#)qEeDK{{UiS~5e!Vs(Nauw1 zHIIK*mecPS|DSC0H&FJo(U(OMvaOQ$S#lHB2fw=U_F!`R_G|jTLVX<<*Z-G_J7=p_ z`78NsOy9m`!W`c&%h&9kT64d7)vEimPVVbm_3ObwHa+H?^>u0PN1l9J<^T3tw6+GA z$~${!)9#ee+7ArNn@?!(uv&L%Yv8JdTno!GGM!_$94ifPyrC|2t2VA<4!_-uRhqdW z2k*>?GI&rDP{|tpezi&Nl>a4vjkadRl&ia$+=^wtY_7ww;`rZH>s$g^U7}9Dl8`wY zX-j$qkwlR0$3^@+P5t@f!e<2<|8dRL#=idBn)Oul4=KFo1m zZqUp9IE3-Kqv+FhvinYbNuQpVCD^5Sd!8XjYrXlqyFo2=s}HRXDHRF5dh(Ft7R{Gw(=Rd2mSS^nKBNr$nAj$kjXa<92OudP&*h z*K;S{(Y@DUd-?wT+f{Dq?4SQwhQ6#9Z!i}5@!bAYn5?S^*Pr&S<+08SEB~#!JF#iL zc4VmV@u^*Qy_Y$cJ$q(Vb+_DP{eetRjYR)oTBm=ZLcx@h`2F*WUK_z=yInGoZHrN7&b0gv93ht z`-I-;?CQ(etM6HUX??AEcoIjj*MvP8wm+5EbU2A@V%e9varUB2Z;gxRkVfjltFBVw!oOp}ij0T|{Jx zSbP21-b+aFxLv-es(iR-b9(H}-lKJEMgGhFN|4TSeRXp21ew;^EGEI$%#S(K0y0;> z+!U_|LxUdYLa@ zRJArXzjoyx^W~LI^(SUqC$L`=-emUtiTK7@>h(t$CI+2~4BFap?NzYsmyY%-q02`k zF0NV~lRepf5v$B6mSu~*-P-)R4%G`BT~aC8zPx*KW3c?3bGhqh<>oQ&3T@}i@z7kA z_$*GunnlTE-j;1EdKRwO`R4DLbJK;yH5nCN>+e-(t>jY(l-eobd%c)FE??DOXrAE* zud_~UGn-x-^Zc@DUK$%5C-l-}QHkfXbT93j$M^zE1B>&L&xj9;|MgFsUooYq#5xtyvG`&;IKEF5;LbB(${TVP(;WYe%Pc91P?OTj_XW zhe}3qa!i{EW6wGFl3nXkq^((ADb%cZ6vF;Ah%?0e`D7EZH5V41{&zKXx8s(VFN8$y zw3|Q5{m^dv|DH_wx2B$%o7%g>LNCfR=F|slS?+u+d)1QbOEQjp;`f+!bwjjH%F!II zl)tUjN|yE6D?*rO`nsIjBEBam^Td{!o-dOZ^SGreb6xV4Y3fV3aNua~>1ZD#$zaYm z2`^0pH<^g_Tu{q0kd19>GJoQ0`GVj2d-vVl7j$mCnm6a6hDEu9*G*;agHv`IHVAfm z%zO8B)~xgsPej!WQ*W-DWwrFcoko2LnWxF63!K#?dN1u{o;KlYT1kgS_eN)@3x;0= zOPc-NHYTtz#BaHM=!K9FPtGUrqt5Iydn0%I_v-vk+!(*^NB+$q?+HqFKNtkLuFqVz zvQW}tqtu1T*QN#jstU?KoncaS-Mcl&sd3Hz0{@WU-D&|`hO0hqRN7VbbyA=f@62Al zhlY!jT`Voy&ot~X)RH*f!E%AuZsw7u%RI7|O`{ik8yGwmE*9ImBjV}|bA_9a_7^8# z-E`ygCPT&_N&dTos@nbj@>V?cQhl6yWSVVS;G~ZoYA@_AXm&oaoja+k`TAU|316q* z6P_s_dU3VA(9*7*>XR~AlUv?TE%ItrOg{8y`qaKmq4k+(LmO7{8FO`Lus@$5X_B{x zOM)qc=_0S)%%e=E^RHS-ub!G)HFZ^9YRSo5h6kx^v|rUY+jxuIBAdS^T_QN zJ#?L!PtOX-?B2BO@9xGm(JhJ}E^fM(ICWh{6R+v4#jWvQFGqjiSQBj%bo!1(VZeOV zxAJ0|dn|vijg|@8oVR92!KA5vsgFe-ZuHCI^FDlxv-bAnDJ!;3IX>&x_tcZ(ux__Mtt4ZO!sR(k2v(qBhsrOpnn7;hIAa!-#uTR={&#n44EpQ!6_J;{GE~>7rG?r^CEncuqJ!ATV zDbLn82g|S7rn7pQf`rSVEA!{7Ec4!McIRoywS^8^?{|Nhnzu;PEPC3~bs{UJ?w;T} z_I6fcbaUX00~S{}rG<=lwTOJxT(v^knvIeF=1x!x-}f|K?N5i6 zcKXxgTet5UNCc^*m3U^Ki_O2A6nI;B$&+8!rzUN6TkqZPcUio0-JSdkARnz* z;j``3N}o0E&RbKLb_TARF&iVN+1Q58b3L{E!k+)TB!7Q@ zSi(BlXq_TkOpAPZ^!q*c7bqGo_Ky0jX2UZ7M*l9(_?)n>mw$cIxs;I+nKARvl^<-a z>CUHj%)620vT(Ovi^r)KlVTIQ&aP@%*thDW{kQK4v0KvI{_5W_Tbvs6^o+!x{Rh>m z?@2${bDvd7HMPVuU#`dhOyG>9%~nBkTyKSb&0@OAV823J@9`=t?>X{ED)%e81i4MW z@~rnG*Zs#D0Xbp*t2TRFw|{SSw3SD4O5xg_H{--yU(Wq5ZK9G|;+g&K%(Lr>^X=ah zn{V%$ymhnH^!z&IeaFSW{W&{bT(cyK`QL`H)d}ZpO@cKd_A~G4+PIH@|EeoWKGyF` zF8)~dZ~px++pmAU(xFwd^EKz~f32%lx41ov*(QIr+9hG#ZMKUwPwqPOC&z~Vz2wzA zCI7j=GOh;?a%~%KTygp1#2JgzUpF(0_Z*#) zv6saBudY2GSvPft)bextO&5iHZZ}lZ`_H^TuO2d?)zg3#|-lJP2Qofuk21yMcQ5S z{VB(DRxaBdZLM%LPl#c<{;oNtA#d*nzq$M7)Yc6LY$HPVdIuiiF|MAmkguS-zj^U6`9@E-npZ+Jur*?>(P~6)0B=BuX=sS zc|~%;%?Oh;ne+P{w;WM;F1O5!@oUNt@6N>nTAu>CtV$f; zycX1z{e2?i(XnvPv@~xA+k4CsF1Zq&vtx7)YA$VS>F1FYid@_NB|Y@(l?Er?s!2w> zmgvn}6+M5q$^FWZw|Do+O*Oa`IQ_ft?)OV}rudb(V7ssY6aL-Ol%gA?; zJ~myz{Aa|YGtJE|Vcf>yArEAN{6S^J-VY(U`|m96{2VF!u`X3m!;@=(V7l|j<&rRJwDX%{vt3UU)J5PSq|JUz&UVTX0DwRL`Xv>6yY7MQ&&t{)|73Ehk zW9fqx_DR_nj^0#G`|#=dUCDDM^)uQVT`Fg=TKwO^8XVIbz2u*8-2YwH{Jwv~S0|m< zciJXpEBEf)3ftNW>x!2(?aR)2q+JV1FDZ-bD1Et^cb}8nu_o@npSC;p%I5LVQ>3`r>%@*E_Xkk;nJ4#YM<(-)-Hk<5!|HbI(7sJtcM)mnPJR-i>*l z{(i6N<98`8))k4hciz2gd0d*caa%mA=v&^ukAfsr1%!iM*4~}_?W1#C?5>r^CwPa? z4l(DH-g+i+&fe+ux|3qo-QJe%v!i6;FTbB^+PClTN~wQ(l~*=o`nltWuC7`CcfQ`~ z9jo_Dck8U%yMFg&ySfvryH6TbnR*7@Rmr)s>FL@avC|LP^Oi-g(BYU`GkNOU$Lsg( zY7D-uzawYgh41gavbSw#o_?x;)(*TkjH6&G*b@nE0!&bxP4vbZ(nUi+r~v$8ah z`>cw(=c?H)y;0kw&U5n`#xIU9(UxOfI4OVArrJMK!_B2bF6q9kEPZ|~YlH5oi9EBw zo=}wDYIEf2msFGE>L~zLZcfgsk5V}zuCEG*Ug5M=U0!eJ*slq zTe#?D*5p@OZo#K({NnWjekhvH)H4wmbG@#AX`xa}hI8tMlc&tK>)p(+EUj(He*M`o z?yg$dg_vEpmh9rXbj7G;*%el;|5g_-<=dP7f3&Sk%xa}^hI8tclc&CIgKP3GiHl`f zZrx?Ka-EaO)*QCwOSUx5zGF1AUY1)YGdVwZg&VI~WF(t1!;eLG@10)#S~(^BKXWz zLT;{->-l?cc-9r|+j4_(tzaJ4)X%mLr@Uz zZ{xJa7n8as%~RU#l%PH*tmBz=m^)WZbN*)I9jAUev6ioF`=a^$_q_S7>Sdk!?AD!Jo*d{GmdV@)s^uJHPhOQ=N`lU-pYjkDD0m&C~z&Yrf?} z{@SMe&BjMg{nXl@aMkPi>7Qy7*Uzsj`g8MTofLmv{Zsk6KJQ8o@xwbWFS;je{YbcC zy8r(VU)eie7uWB)ul~c#+Ih{K{N1ajPx+$xoZD#8q7`eIj_=&Ch;7=9gt{x@Nk`N# zysTR{*!^?s>*9$ScqbtJKwwOhI>x^JhY~9g5A@a|GdUew!4+5 zin**`r;vGa^XdfVAJR`$&WO%;=v%Z%y?N(OR^#%l-+jxK*ts?q?K>iT>GsQ_eJ7s= zaZi2XI&*rwu4jR2M1Rb@-$(c8zM9B&@O$NbHzARjr!@dJ)sZmQAx zT&;Ib=4OFS-=5H-)biCqIwot~(iWx0i2==VpCkT7=_LDoe|}-z#yfiiVxHE#e4V*K zG56HZLkknu)t;HWYQ@gvV+}l=T~@d6$nUn&TD51%)c)InLMjZbhsAIBeOG^;8oWAr zUVl#93C2@Di*#Cd|GsW`ucY3KQ`te|MB2NBZ=%ml54P)=U2*BJtbN@di+Yxyes@cA z9aBY_ee3hHL+4&xxT)u++UaSZpH7i}q&yF#RnF1QgTdl!yyNBjx2+ytab+{{vs9XP z$NA%u-@Eg8WxA~Xoe^j9{iFHy^2?OJKJ{~iTzQU6e8qU4iIHxz{Ou z3ik~sxQhPy`EFwjgP-Q%qIU}`F8vkMta$Nb#iZG*wH*&`lV0^odDm^PcJ?Cvv%MF$ zr*5zL@H`|`c<*ngqgz_m|K7GbZHf2tC9AT^?ti+t`pv4QHS~X+E>Z~;dtJt?>d0BTSac8#$^-sz1-@>Hz*Z0rDrSTl69_|S8 zdZAsv#PQx!p?tBLuUEtC-f(Aqj*`%<^Jt!Px{&Sr(KWsM!4IW~>9YGEvt1ItmObl~R?U61uy=#2vqU{B)rM*ubQdYQU?R(U@ulldfyO?^} zt>?s7&M*J^-n%B&%T1YMYKTJC$!)@)T5~qWwydaBow`6@#VcQ-=~T`erDq2h#vfv^ zI{3xoW{qX;49zbr8MYhjR8P+7ERvtF`_0q^0ozN$UT5;ipUQqjxjLBdjKTrsugZyUcU(#P5oN-je?n+`;3D6{(pP()lz-WrC+5k_ z#_;RA>pi)%HBB1qqSu?=AJM7XS7FjNLvpt7uk>Gs-JLa>-MO9|TH+O6+w;KwZ`)*7 zvHFv&n}4bLZC6Ms`n_q!+pF_3Qjc2cGp1}`H9dEE-q%$bqDNnFG96#LNWLI1Rwb?Y zqR?WlGQ%=KcJ6&NFJtniUp6U9 z>R&pJS#6)e>oi5oXzJUS20{@XLJd34?OAkHM{p6-(G3EL68*2F1Da=DimtYDZZTUe zu_tB0JcB4ksZ2Asn4Hjr3yV*_!_Rgq!{C?oCg^0(BoWE;^*R zS;U4#>!q!T?~PfWe7hEZF_P0-_496`k<-fW-U4sVp4+)mU0+&#d(X5DbA12h?#}wQ zDyqBDukM+P(qkvz!|9TZ&$p%gWV)g$s^QlB%(THQYligg&sEyTv{FkK^#tBowlGm) zUV;7t=k~5GJi8wJvp=Y8uJ>jC(U#wOu7@}7|DVC~PDbeJo%d~*&K}d0p1Gt!`iOs? za?_l)vLfgCSua%0zsL$KUGSsnqHge!Fy^#F8{?Z4F3+zjP#4}^m8!8Q?%OJUxjU|t z1Eqh?On=EYcg-!q4M(IhgD%UQ3A}YD#r8|MW5=ATo6HhtA6V_QHwrv_R!LODjlGuX z-nuLo<-&)}{6(^#Hi?Ng>30i0Jmb1#a#NMX+T!Gt!aZvlleqmqb-I7i>dbNXa_=p= z9?R7}cVcVld~OjwOXd3oiVJ6dGtyWo?6zv+?E_v`c8O0;@OXVV#BJ=NtlZen{aAII z`#+P-^3PLlEEn?^W|CihZ`FgHCF{FH&h$=vdN-`ZnrY^IgZGcFIfmW59N%gts_ep6 zanyNEA{Wm#?MF(r(h{K!5_}aW@(y>GyD;uq>g$-gKtkzYLzRQ}orzsr*hHiA;{60q z$f_=o-IjFS;(egTlb#;+7v~J}Qxxw$_i<7eKCi&OE%)}e2z6QZxJR6`ge@j6&{{b$ z_`KgNi;W*QZoQm%es-^#bc*u~>DxxLa*n?}%PRBdDa#`AIkU0eQz;~Y~JMa zwd|$x&$BV|cHg3ZW_)`qYVuQR(tZ2q`~|ffH>cN}^E60GUD1VG?0Y}gi61<2G5PT0N!H(!m+j{XI2X?Sv0XUr;qf@e z!-v_|r~kM+{pa-(QNZkj6dl+Ugw z{^m-u);mPV@bGW0;6A7C)tV>oQWx9s>5Vmupxm;LdN&u$$v?T5>A0K!$+>s(`U?fG zvRBRCW*YgWl;v$~$-keMpT3X(@ptv%FHiKR{hgbb&Oi76zq67bkFUs&uQF%3(f7}2 z?X|}@q&D68sy(}3ltJsS*XLss=B<;Fjs5a=zStdc<*5E+oSd7NPhY<)i^IGB_Ay?& z;=Xx*9qyLx51Rk*U*hez>;K+r-@C5vm^io1Z&Bv+ZPkwi%`QzzEcmxI;)G~gi2U|_ zFIRh95sYr$_V-xqpS{q6bK^-peRW=Km{{M-5>jrXJa=ikZK|K60p zuwQR})7h{~`_FPej6XO1?T@C6iA;YO6JKdQTx zf0iwB>U#b@&iQLo>V74kXy5PkM$IW~LtWBi*)JEH&$O@8c)HtE^RUydIqTn+U-+;u zX2G#16~EWV=T4jMq!;rt$~a}_P3_5Bey+;sTs+CS+;`>UtdGn)SKn{SX(+E(FDeP* z4LxylMl{pKQ=*F=KE8e}f9d=am3OxO==i%MyVKlD`?>aOZhp1%@2@03ox>U~x4c&E zeqUC4PzQTOo$ihYdNr;;W}N!q*!xpQ_48yIXS+YoW483}0`M=-d?^ekF{_{`WexGZn%gko)EiJ55Gvu#cQnZcr zdYGrp;oEmE=FB0-Ez2I)g!qeQSRL@}yLmajSfVH5uE-82af6869aRtBPg^Zkedqe5 z*@ow|UWV-b)0fn|nq$7zlxF?Ezf&f)Nqvs=c(#0PqWtk>bNP2E8=}8|*{%LfB>(5> z<1>tRnO7V6%uHOMas9gNpAWB!zXj}CJ-2~WntMpUnYFL?A;eH zmAE1`o?WujR@(Vu)$c%SpDh(r*Z=+RB@*heH_*x=zSNuVd-zS;pfW>dS&@uo!dXnKWE0T#WU8wfB*mD zw6!U9lafz}Gp#tQD60K}Iq|`%pP{9%&b?kCwdh-dSlfCtn~>6s4D}^D*~RC6ju+O; z?N)4J)4KibY|peG9&2j9-%@`a)RyXbEKY^u3u zcIAh}W&1biKF5f3BV*|*Bk2w1%TKJ1PPwr9 z)ynH!kvw`^!k^5V;D2G};mH?o9Z0Tt$|H7|d$Qks!ADPPc*7OhbFYMdl?%;t?3n)9 zwBah-K0e>;j}y#R%(!aw&cA8*ob{SLW*Zj3-JBOY&sJCl8kDj)aJ9(b)q@*Bb6D zoTD#mV79%$GEeRdPqzDJm7D78*Tssdp2=9&myj5^W1jng>7RYuO?K_H-n(kvrp)#T zH=YO2!mp(*)m^oLJ$pfs(5+eD_g@lXE7jG4|`zdimQ_bTbhM4v53&Q9dWP5%); zC3T0xtCaZb{!wfAn&*lJH?e#wivP3RvC(ka9&-l`tLrJ(_?9GnQ{yNP>q)r3Ut%sB zYhJ?XYD=MuI}K6}nOW}q)ncvfw&8ue*Nm4h{xLf3QP>yiTekdg0HIpIOfOE#~Th5^YvNwYC6Wot%u$Fb(JURKm z*OwlFbL)G;wANJmZ{;dW?Frb@6IpCGVM|Z1S8Z&-&eM-i`~i zXWAZE(%VrU){}C7KganvX6rM(jC)qUU3K!!Cy7OeW_>SMptm){m7O!*z+%>31@5zK z>f!TC(vNa{``djnGho5%AB*nl%$m!3c!yuj3d7wtZ7ViB-TTiW)~P+9#A88Q0Dt^V ziKKJ(-3#uW5YEkR&5W2|QdI34ro29wb%R~{`c=|z)<|eMZk{}M)v8s7@1=|XFIW#V#(|TKned=7Wwm zR~74fIQ^gSPAoB?6pMOw#v;Joni|Fo(w(!2xuyb+si>+PrUaHGqEN|xx-+%JM zow>gY>}58k-{noYxN>dI99citI>~U)@8v~#2cLd_D!7M_FY^Dq(+f*iMLqr;TrD0v zkr^x-cQCkr?hbRln|qJX^O{+@I_k0V>-6A>D<-~spYreVz876n7O3{ze69QLc)i`r zDSw~K)g*DhZcaGN{Twb;HTYxU( zd8G~78*WV1yK&?G$)^6_QM^$`c4G7XF1v4Lc#QS&w~fiSrc9n@bh_&JmXm+y_J8zW z#eVF3-Nfq$-aOg7HU8|!vn$=&qAgEX=comS_}DP5TqX4<-TG}}*{7Sw8de-$pvfgs zm-Xw4SVa1_0GF!Yx2`gXPTBI)`t8S89sYLF+`H8xBlJHyF+EP-zl`5iKI1CGwakgx zi<4)4-LhharqbDC&oibbKD?>leDh>_^&jE)Z6UhHHtIcEBKGLZjlH*;VmAIb!1i3% z%dD#C*Oj#LOHB0}EXvM>9gk%=aLskj>f=9rg)LR8c_Y5OaQ)R(aw&L^t6z!AvA0D} zriWdaMFdFHYaAzCrI%K!2f4+4@7Z!gJJ(-U#Q+ zHkG-(^hDYEP35V~-+r|T_xW;w;&%JNdy6=(uQIhuZvM0P@gw$61~EymW{Mwff4C!b z?Z?Z#k&1_R+Lb?!v-!Nh`P-Sv*$);!pR?-Pj}w=Y`rKdYpE4EyF0-k7Cx6x5tq&%= zou#WAqk3F9M`wD9Vb25+37r&ula>EI>3K0b>3_dakat|^;ln$P36J`GB!i!2>#XHe zyY^)V|KXGGB~EVmyz=0YV14tw8pUR(E=x0Y@-Fv&Tl+MAMqJ_9W)9`N!~0Axz5CO( z_t={(ovltUzPlxxskdaO^}nyrdj5@tH@tk_uKyKRp5@K>r?_eF^zX~gZBFS|$UPIb z;re&I`@6Hnj~D!7H`^W8cp^@&d)oxIG~*M=6W`vNs=w)kb5(>H+xqmK{cT6*@Ew%j z;%ifW+%EfgL~``O_#)FK_FsHw**vk=6x)39S?ifk9q;_wekAiH{;n$y+Hp*1-mG#9 zVM*=Wb#9sm5A{pPe|l;hJ?Go`pf#SS|M~E5ddk25&KFP4-D|(juaukB_O0Wngr(G* zZwqz1*PY#Jup@Ze^kc`8OvEC0bD#b4{->B&{fxU;nl}ruKiYiyK-yf0$ zGq1aI%}HDN{wl#vj>l?0Kl8bIcSPLU(^n{a;YcdaT!FG^U;Ehdd#$}~ZzsByi)Wjp ze>A^){tv(J;k$E_r#+e3#QlA`GZXLs?tjbjW+i`SoBmv2+1t+6O^L?Yr^}Z1e!RHt za@ChP^B3l?iK@DDt*-jfqV$+4p>OUt*D{>CC!h5G`0r0G>U;Pn?lr&vKkm=b?@vze zdt+O1XLs?{(D1$5=PSkky|5O(Y5lR!;2TeJb@ht9vd6w{Q@L5^l~Q`or|Fl|+Pe$b zPRYj>KJNV@_t!g5Z*Tnm?Ww25On=P#(6avbF4-ej7N|1seCN1n^45sk4!I4tdXKDQ ztDd*;@5UoH{+k&rpIbX`WvuVoeqDZDkF`gm+9T$*R2C}>H2*cUkCu6O^uE}(mCDZF zv=!&({n|6*ZC2Op?{m1ddA}7LlTcNB^nP)+ZPmGx7tD+nR}}I+ifUMw=6mnl^{KVe zFLhLMeMIsOhi!jT-j^zS`}_@&8^2EY1zWGmnZGGrDEml~x7-%DIp2JeQcfJG{vr^e zdRt`c-#N0~I{iuZO1V$2DLlI<>8V`zSXn>s?$wQdxb`tF>3v%1e(0I{I!nE-t$SEk zzW=A*{dd8#>=*NOq7R=x)^hFMeU-I-mj20H0w!nf9!=tz!Ta&f{54-6Se74J@v!QR zv4P;cS#vD}Bokl!jNTDGJ-IMvf1v(Z(KR>1wk67^Kiltl`wvgy;?1?&bXcG9ZrqaT z^eyMiGg%)A74cI7nQwHr{ZmyoTizeFiTfs7^g%n_{LhvwzB$jnRyyab{g7_gT6p;H zNyE>ld=#(kpSfk9`ftr3e$V9=6$Qzn@I%of>~Bm9OX) zV|4z#XW=KLZ|^qT zeQ?1BUumPb%eRG%t{Lam`io^Vy_`O;a(4N}2%*18X^jTe0)M7CrEEF2Yh$9xkqgff zOs1vmw@B`hVfXv9?aGOx89JQxoT`)SgyN(oJe;+3LUysSly~E|?mxllmm7Po>$Kj; z_wL=I;Qd!9Al&p%%l9n`w@owcxjVHZy|N~RN-sM%O=XG2sizq_tn*E!GM(n#GijPS z`MXL(PWp++@C0?|iFxMdvvwJAyMJ08zw7P=)#a})zHQUD4C&8HQS^CtW$|s^R57E_ zlHCu_99q(qw|#b(&4H5ptNmAAyZSaJyfpVmbXhph$}|sNKV`e*N$1=}9c^$Ss z=SzJAmdsXCJ7ki~ajEyboM2npmPWqlX-DHcCxvzEE>L2-&MNLC(B97UoHyg*1-2d8 zxke_AS6U6#JeJPxV*mGb@7w?XnWz6#U<>Xs3;An!RD|cTu5DLI&^mchmdQRJS9A#P zWK=ZWnYQ!B%(Kq+8|-D>T+J`s*;8?mf7=y_X7|o*M;R~c2tHiRbv?|HiGg9A0NYHz zEvv6=yWzj@2)iWn?}z(NDzsGoYt*k3-6G8tG}Y*Q#U3x-iOQi3ZVEh$RC*pPJ8)cN z@{#tLQTIH#LuS42XI^+<=Eo~VXW3JJG=}_P@UQW|yZ*|wlE=R{?kxFo{Olx``62ek z+m}cu{0rZ(S{8 zMG4>A`>Jz(FZ)#V_WFa2BG5byM7R4Mm@$ z9}*TZuUfO;)NoI#h1ArRgvST+le~5OUj99zYNEC1{`oh8Wmn=Cop>r8D&r%-XlIxr z=eqj-5k=31(;6a+I*VkRSMV+_D84EjX@0Ez)*YjhAJ+fr^D+7-(qXbeuEQnB$@lTG zia#Dp8rmjlT2B0^Xw$-QP^831S`^!~F#Gd+xt-VDP1Vmw zPmA>1r}>+MX{D~Znup_-*0a%b40d1Mrt0^6WoWV z3|%@x>072;Tm3AtTrKsJN7v!2I)c$(7#p%VJ+7p^>SlBG{(Z3cS(3Yo`|A0!xf?S? zZnr#K@#I0%i4Ur)XKr~aCa2(FA;y&`ur-kdyyC@$*;(E0K~Zlo&-U3{!zFvKA8DUy zc~2!+gQYt%`ofR+(Ep;siV`(mreS9f7j1jHi0^URisk9I?@jFGl93dt{Ovl!nDflh zBL^0KvFchmsUhROKDX|AVPg{}fr!}}9^y~(HeXfv+H5757wEO*7}xRWzl&7aB4r$c z6z@sYNm*#^&f2*35u z)vp(hyg5=eH`1C_%BQZ+CGWfLSB9TY&u>&_UvTl@*NU0{PtD)&;C}b#&DFC$y`Nlc z*B5kDYL%|~N7awBb63_C1}&b_V_>_qZQV_!#W6c4njLRF@?gVL71@(n8?(KaOO=)F z)cth*6SH_#Yx0aKU(P6h3_Et2E!*v9=DFibz5XogyxL*bBhLgdX#V<*BH z92m`xhh{xI5~kXt0A3}NtJX?KblWG;KJrza!ig6`vQI5Rj>Nk_dD*#sok+3K3}~$f4}?M zBE5Gf!fpj6zvwFV({6BY{JBHG?*iiijg2}Ma;(3%i!emI5UyT#ChT=-L)OyYu2pD8MLnad#u=M=I+8vub=$B_TJvr zEcIX7-+!AgDeCW7xoX{=H0EEGla~3!ZZ=g*`roHFQ}$lO?fdtambv=bvwvGNcjLdm zu}!v5<5%!k_6D`_&Xu&!xv`PMInYq(cX`Rl-o=x=_igt6@%H7;9P{F9=OX_6(|ek; z=fSdE-c(QZZ|`4Bx_OYL@A>cDF8lA=d|5Mh$z_OL-afHE_1>{(e9A&6 zY*+Hl^2m8L%YWhxs~ZlkDz|Th++V$F)^evej}MiXa8~RUP4->-*VcqL%j1T313hFxyDs~Ij&bqMtSDdTuuV)L@%5TW1c{RwbR?Aq{ z!ltpP_G)X8wC2`6<@*{``CQk$H)ln=V(m{qT)D zRjL=kS+QF=-HiWdj@tDcR#hJ*!w3#`*QT80Yx;A3^yx9aI{9J0N<5d^3x7E;-TM0J zYV|GFf8*cO*H51@ncJ-_>imTH75_38w#6*pE~-??Aj;mLG$~gn46OId?|&>0CP#w< zd$Ueve$};e5r6;b6`t^WEqT(sQuF@Ko2$C+^t=zKzx0%kS=D5s1iOaP&0|SNJKw($ zGTM3O^QMoV^K8rZ>$gAIX;?n#{Fz?UwRQE=cktcJv{nA8rvKFDz4+>*Z?(5yTq(b< z=<~Iwa|-(R|5 zvbXEamU$CvCQtt~lh6EK-mG0|tEIEkEkDV|b{&2cU-pXL?cSmxY#%2hR6eD38&lhd|S*2K8n zT{nOA$0Iu!&wc*LVew({mArdeG8dD7_;3iUx;iUpXS>jhD@$(sHfP!F{cxzDrDu)3 zLM=mao5@MrDJ7Q{NcpqNNwZ-5{}dn5u3WwNpg(WK z+qLl;fuX_{#}%VA@~=B?wO3HK{jn-nNN9SuM(nDOM`B*siYRbIGZh?FTA-+5wd|Q% z!IF4W{>YLkeeydb-M+akKIq45u<86+=c(HhG8vZhU6^MluChE}EAM~DLq&p16HVtS zuuP1-akTzG=t8ut5#S4dd08&xv9|H0?|ZkgFQ4W=oBu>W^3U+x%U3eGWw)Cu z?+)vJwdhvx((O-_3U_t{ZIbeD;!fN;@6f|V7awH)IdFvE$Hd}=v6t+uiLr}YUoE($ znK`N2* zQ{N08Tkmgmg`0{5m!_J|`=URCd-YclnF|x+Y>UpCCuB;mTlD_Hs=ckh?3QwEQRr3v zoVleeY}01tC8?(Kj1Jt2bl=vhmKoW*yg>iZfxPvO8I!KA{&>Y>#@+|ZW^WhU_OvGa z-Qo>@7hJFVuPLLEqrD*NM%ecq_v^!qQnJ=H`AvJ8^0xjD z?Bg~+pN%qwJ6{G_WV$%KQ#*U~imAesC;3?- zW*MK2GlgnDYPR3__p8SRY|5;eEYHOj=PqJ+)ljX}x$jX^*2Rts2X?fYNZAL>y=kM< zbwTCVA)myk4a}*TK^BEdUkvgR-IcS{7WFxC#4gf5A+pSMzK74`L!Qb`%+JL#qLdX1Gir3Ek=b#cUxoPFj%597C zmUaGRk!_7!X3rHaX%v-ixo%NjTIb&sk+hlrW^kuHOxStDW%0q#D`zb>%GU=Pr2g7` z{!Y;|L+#E(IveLVIB8#=|B+RucHd6U0~Q)4JBy+Zx=xz(|7-uWm-$O?`_%va7o3s2PV&RrwU#fVc3hitg`c&)`ib-LYjb$q z&ZO@Z%x}(r`%}E!bH|)d&ekG--cIC~t^RlPZorZs(hqzsUqoAf@4h~v!18H(nZ}RX z%F|_wPt6Tbc`yBNL4EG!hU|y8OcqFU{rh&Jzb{vc!(AxhU$)5hKNqUS|Gb?jFKhi= zzQ57X;Q!XGU0d^hF8r?dNB)wXXkb}}=U%dhvFG|eW{V4}rBk3`{|jL4OjmQ0hI z+d9qd^#-r-CCTkO1FCaZI=U%uUGw$XqBSX6?!m@CXOx$1X^NRtSC#ZX?|@3o#~X}G z`6_PQEv!yS%d2>@DVZ(VUFO{q<`VV(hwdxY#Y$~Hbba_Q>zWrCHm#&&=`_Y5%jca- z9u^f};$}T_tS_YPO_1fY|XuIq-(_EUak^Y6ax+JC2O>gm3j zy|UNtda~aLQC|Hl^!O_6?W+CJhaOtAT<#Lt_)tZA?x|y%dL>cEy1JdSt{vm_zQl4i zY3&b>8MVa$BKB*|WB#jkDsqJe3VnMsGa zw7pm-#kL64XC6?AX;b^|yfWHo@$R>kDOLfGdZ#87oYILq&U2ja_PZs_f%8|eFX8hx zdbsatq0;pEtgmm~`XIz>E@1cDRpP|fhpOyxB6W|tBT`vDp4|NF)U~$xKVC8By#(!x z;WA(nxE8+ck+Sz1aYN+;A6}n}TYcR1h)kaM0qchvthSzxM-z6vo)arF&4^?AUC+aM zT)RajF#EU;kIcE7d%0aNM!% z%$YO%?tZi)1 zNB6jCJU-WGVd_||zwcgVY}0bPlwJC)5{|-_vx7K3cXgkXw_SHFw zgL7?itUw(^3r&6wp55mBGEE!@>h<_4~|&Mw#{0-W_ssN)kH3L={YmhxwIZG zzg_mO!E?u>jlol_RE>Atp69-dS@mATOSa`V9+jTSd9&f2pO(PW>p3g@ZUoI{NxpkO zI?}~4d`aU}wPl+&Eu1yY+0-VbU~kaW^V`>?oGoj97?o=|Y?!fl2s1fAz8GKVJmZ$xFP$F=6<6*OhJIb!@m* zk6Biib70h~V=s(8%l^E`c>U1V_mx%eoi^EI{byCTdBnDyo&8w^W>$;h%C9NEbSONmoL5j) zkieqyC-DER?;87#>)Mw%AG|O3^Ww($oNguwFQ32rytek;v&Skiem@t=f(p9S<8zAC zCG4yGxXtzp-hUi^d-u;z)eeWBPLlt%@IiimOxYRL@}`f?as9ILAJ)p=e;Ku-?>(%{ z?R&42V;{EnetnVGr)j>nmNU%{FXH|CrTw($+0)6aT0y7E&L^Iq=ykJ2)+F>*vFKuE zhwt$cEL}Z)rgN=USk6niQ=Afct>x0z-CbF(FEysGnRp~Bs4c{3&B-{sONWIQ`f#6; z=$!e=$>wdgNM`F!F8kcm{0y>5u7TTMC-d|gh1dz@7d|*(v*F>Fn9#GAP1HYc>8s7Z zzVmUPGKWucNkCF@v30Yxrt9DUO7KyFj+%t`@Q&hCgX!6;VPsRlw3(sGCxOC5+KOa=0j(^N9neqO$ zM*FW-0_u<7uj5wipD}%=suYi*q=9>tL$}Mb-+4BN7f3DsEPqG&blQtmSC`*Zo-31M z8yb4`?i}mWGF#Q#7yn?mFfrNdxQw|Kv+J&8-{W%Z<|1zWak5!&i;VUb2ugXbQT=H@ zV{-SL`MR%7NkN?N#jcF<#Lu$y2-a*A3fC zCl#&PN*A1&%J=r3IM!T#KkuA!$;aOwrt2-)O5e>* z?b|i^a9|O`i--?9E=p=%lFPQTsVSXfQ1s>1jPJ|;uXKAR{^$1oX-~d)Uw6DwY$khm zUAThI#^+uWbD3jggQiY??H10cD>c*Vj`Hb{h}AsvpX~ot^;YMwv&;0=>*l6LN$y)B z_?dA*@gsqYPgl80_-G$~-rB7qtF-ITwmI)ly%yOf|0U{1-I}WX|G)h9-~azf%^U^* Dxg38{ literal 21908 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 \uicontrol Devices > \uicontrol Devices, and + then select \uicontrol Add to add a \1. + + \li Go to \uicontrol {Preferences} > \uicontrol CMake > + \uicontrol Tools, and then select \uicontrol Add. + + \li In \uicontrol Path, select \uicontrol Remote in the dropdown + menu in \uicontrol Browse (\uicontrol Choose on \macos) to + add the path to the CMake executable on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol {Qt Versions}, and then press \key Shift and click the + \uicontrol Add button to add the Qt version on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol Compilers, and then select the compiler + type in \uicontrol Add. + + \li In \uicontrol {C compiler path}, select \uicontrol Remote in the + dropdown menu in \uicontrol Browse (\uicontrol Choose on \macos) to + add the path to the compiler on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits + to add a kit for building on the device. + + \li Select the device, CMake tool, Qt version, and compiler that you + added above. + + \li In \uicontrol {Run device type} and \uicontrol {Build device}, select + \uicontrol {\1}. + + \li To specify build settings: + + \list 1 + + \li Open a project for an application you want to develop for the + device. + + \li Select \uicontrol Projects > \uicontrol {Build & Run} to activate + the kit that you specified above. + + \endlist + + \li Select \uicontrol Run to specify run settings. Usually, you can use + the default settings. + + When you run the project, \QC deploys the application as specified by + the deploy steps. + + \endlist +//! [build on remote devices] diff --git a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc index 311b68a48b8..d92e9a82441 100644 --- a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc +++ b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc @@ -75,16 +75,18 @@ \li Select \uicontrol Add to add the Qt version for embedded Linux. - \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers. + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol Compilers. \li Select \uicontrol Add to add the compiler for building the applications. - \li Go to \preferences > \uicontrol Devices > \uicontrol Devices. + \li Go to \uicontrol {Preferences} > \uicontrol Devices > + \uicontrol Devices. \li Select \uicontrol Add to add a remote Linux device. - \li Go to \preferences > \uicontrol Kits. + \li Go to \uicontrol {Preferences} > \uicontrol Kits. \li Select \uicontrol Add to add a kit for building for the device. @@ -150,56 +152,9 @@ In addition to building applications \e {for} a generic Linux device, you can use the toolchain on the device to build the applications \e {on} the device. - To build applications on a remote Linux device: - - \list 1 - - \li Go to \preferences > \uicontrol Devices > \uicontrol Devices, and - then select \uicontrol Add to add a remote Linux device. - - \li Go to \preferences > \uicontrol CMake > \uicontrol {CMake Tools}, and - then select \uicontrol Add to add the path to the CMake executable - on the remote Linux device. - - \li Go to \preferences > \uicontrol Kits > \uicontrol {Qt Versions}, - and then select \uicontrol Add to add the Qt version on the remote - Linux device - - \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers, and - then select \uicontrol Add to add the the compiler on the remote - Linux device. - - \li Go to \preferences > \uicontrol Kits, and then select \uicontrol Add - to add a kit for building for the device. - - \li Select the device, CMake tool, Qt version, and compiler that you - added above. - - \li In \uicontrol {Run device type} and \uicontrol {Build device}, select - \uicontrol {Remote Linux Device}. - - \li To specify build settings: - - \list 1 - - \li Open a project for an application you want to develop for the - device. - - \li Select \uicontrol Projects > \uicontrol {Build & Run} to activate - the kit that you specified above. - - \endlist - - \li Select \uicontrol Run to specify run settings. Usually, you can use - the default settings. - - When you run the project, \QC deploys the application as specified by - the deploy steps. - - \endlist + \include creator-how-to-build-on-remote-devices.qdocinc {build on remote devices} {remote Linux device} \sa {Add CMake tools}, {Remote Linux}{How To: Develop for remote Linux}, {Manage Kits}{How To: Manage Kits}, {Developing for Remote Linux Devices}, {Remote Linux Deploy Configuration}, {Remote Linux Run Settings} */ - diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc index f5d96cf5f2f..a7f459aec30 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc @@ -217,10 +217,16 @@ \li In \uicontrol {C compiler path}, enter the path to the directory where the C compiler is located. - \li In \uicontrol {C++ compiler path}, enter the path - to the directory where the C++ compiler is located. Select - \uicontrol {Derive from C compiler} to derive the C++ compiler - name from the C compiler name. + Select \uicontrol Remote in the dropdown menu in \uicontrol Browse + (\uicontrol Choose on \macos) to add the path to the compiler on a + remote Linux device or in Docker. + + \li In \uicontrol {C++ compiler path}, select + \uicontrol {Provide manually} to enter the path + to the directory where the C++ compiler is located. + + Select \uicontrol Remote to add the path to the compiler on a + remote Linux device or in Docker. \li In \uicontrol Initialization, select the \c {vcvarsall.bat} file for setting up the command @@ -274,20 +280,30 @@ \uicontrol Custom option. Specify the paths to the directories where the compiler and make tool are located and set preferences for the compiler. - \image creator-compilers-custom.png + \image qtcreator-preferences-compilers-custom.webp {Compilers in Kit Preferences} To add other compilers: \list 1 \li Select \preferences > \uicontrol Kits > - \uicontrol Compilers > \uicontrol Add > \uicontrol Custom > - \uicontrol C or \uicontrol C++. + \uicontrol Compilers > \uicontrol Add > \uicontrol Custom. \li In \uicontrol Name, enter a name for the compiler. - \li In \uicontrol {Compiler path}, enter the path to the directory - where the compiler is located. + \li In \uicontrol {C compiler path}, enter the path to the + directory where the C compiler is located. + + Select \uicontrol Remote in the dropdown menu in \uicontrol Browse + (\uicontrol Choose on \macos) to add the path to the compiler on a + remote Linux device or in Docker. + + \li In \uicontrol {C++ compiler path}, select + \uicontrol {Provide manually} to enter the path + to the directory where the C++ compiler is located. + + Select \uicontrol Remote to add the path to the compiler on a + remote Linux device or in Docker. \li In \uicontrol {Make path}, enter the path to the directory where the make tool is located. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc index a535c12b304..1e01dbad8aa 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc @@ -71,6 +71,9 @@ \li Select \preferences > \uicontrol Kits > \uicontrol {Qt Versions} > \uicontrol Add. + To add a Qt version on a remote Linux device or in Docker, + press \key Shift and click \uicontrol Add. + \li Select the qmake executable for the Qt version to add. \li Select the Qt version to view and edit it. From 791445159a6b7d1ec66dd0de425b64035b8075e6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 18 Nov 2024 10:59:53 +0100 Subject: [PATCH 25/26] Update change log for 15.0.0 Change-Id: I851be3a1aba511c7417bcabf136f82897d3be252 Reviewed-by: Leena Miettinen --- dist/changelog/changes-15.0.0.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/dist/changelog/changes-15.0.0.md b/dist/changelog/changes-15.0.0.md index 558ef3cc63f..6ee3af39094 100644 --- a/dist/changelog/changes-15.0.0.md +++ b/dist/changelog/changes-15.0.0.md @@ -21,18 +21,18 @@ General ([Blog Post](https://www.qt.io/blog/review-new-themes-for-qt-creator)) * Added `Tools > Scripting > New Script` for creating Lua based Qt Creator scripts - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-lua-scripts.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-lua-scripts.html)) * Plugins * Added `DocumentationUrl` and new mandatory fields `Id` and `VendorId` to the plugin meta data * Changed the plugin descriptions to Markdown in `Help > About Plugins > Details` and `Extensions` mode * Extended the API available to Lua plugins - ([Documentation](https://doc-snapshots.qt.io/qtcreator-extending/lua-extensions.html)) + ([Documentation](https://doc.qt.io/qtcreator-extending/lua-extensions.html)) * Prebuilt binaries * Added opt-in crash reporting to `Edit > Preferences > Environment > System` - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-turn-on-crash-reports.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-turn-on-crash-reports.html)) Editing ------- @@ -157,6 +157,7 @@ Projects ([QTCREATORBUG-31141](https://bugreports.qt.io/browse/QTCREATORBUG-31141)) * Fixed a focus issue when renaming files ([QTCREATORBUG-30926](https://bugreports.qt.io/browse/QTCREATORBUG-30926)) +* Fixed that the `default` session could be renamed and deleted ### CMake @@ -183,6 +184,10 @@ Projects * Added the option of opening `CMakeCache.txt` to open the project ([QTCREATORBUG-24439](https://bugreports.qt.io/browse/QTCREATORBUG-24439), [QTCREATORBUG-30507](https://bugreports.qt.io/browse/QTCREATORBUG-30507)) +* Made `conanfile.py` and `vcpkg.json` visible in the project tree when used + ([QTCREATORBUG-32041](https://bugreports.qt.io/browse/QTCREATORBUG-32041), + [Conan Package Manager](https://doc.qt.io/qtcreator/creator-project-conan.html), + [vcpkg Package Manager](https://doc.qt.io/qtcreator/creator-vcpkg.html)) * Fixed the option `Build Only the Application to Be Run` for the `Build before deploying` preferences ([QTCREATORBUG-31416](https://bugreports.qt.io/browse/QTCREATORBUG-31416)) @@ -245,6 +250,12 @@ Analyzer * Added column sorting to the list of issues * Added a `Reload` button +Terminal +-------- + +* Fixed the flushing of output after a process terminates + ([QTCREATORBUG-30733](https://bugreports.qt.io/browse/QTCREATORBUG-30733)) + Version Control Systems ----------------------- @@ -256,8 +267,10 @@ Version Control Systems * Added actions for blame at the revision, blame of the parent, the file from the revision, and the log for the line to the tooltip for `Instant Blame` - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-vcs-git.html#using-instant-blame)) + ([Documentation](https://doc.qt.io/qtcreator/creator-vcs-git.html#using-instant-blame)) * Added visual indications that files are modified to the `Projects` view + (when you select + `Preferences > Version Control > General > Show VCS file status`) ([QTCREATORBUG-8857](https://bugreports.qt.io/browse/QTCREATORBUG-8857)) * Added the option to include all local branches in the log * Gerrit @@ -269,6 +282,9 @@ Test Integration * Added test duration information for test frameworks that support it ([QTCREATORBUG-31242](https://bugreports.qt.io/browse/QTCREATORBUG-31242)) +* Added support for running auto tests on Android for Qt 6.8.1 and later +* Fixed the execution of tests with multiple test classes + ([QTCREATORBUG-31935](https://bugreports.qt.io/browse/QTCREATORBUG-31935)) Extension Manager ----------------- @@ -317,7 +333,7 @@ Platforms ### VxWorks * Added support for VxWorks 24.03 - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-vxworks-kits.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-vxworks-kits.html)) Credits for these changes go to: -------------------------------- From 06772004a24b0e7550761cbe87c6e07e40e9fc42 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 26 Nov 2024 08:48:50 +0100 Subject: [PATCH 26/26] Debugger: Allow gdb inferior calls for symbol address finding Amends a9e8b106a45489ba0, otherwise Qt version discovery breaks. Change-Id: I2b682935e4e5783328fc43840681b988306c6cc5 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 5 ++++- share/qtcreator/debugger/gdbbridge.py | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index d4241160db6..e7e25a482fe 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -966,7 +966,10 @@ class DumperBase(): children = [('error', error)] self.putSpecialValue("notcallable", children=children) else: - self.putItem(result) + if result is None: + self.putSpecialValue("notcallable") + else: + self.putItem(result) def call(self, rettype, value, func, *args): return self.callHelper(rettype, value, func, args) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index e1a6ae64d63..fec4ee84b3d 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -737,11 +737,11 @@ class Dumper(DumperBase): return None if val is None else self.fromNativeValue(val) def nativeParseAndEvaluate(self, exp): + # FIXME: This breaks symbol discovery + if not self.allowInferiorCalls: + return None #self.warn('EVALUATE "%s"' % exp) try: - if not self.allowInferiorCalls: - return None - val = gdb.parse_and_eval(exp) return val except RuntimeError as error: @@ -1041,6 +1041,10 @@ class Dumper(DumperBase): except: return 0 + def symbolAddress(self, symbolName): + res = self.findSymbol(symbolName) + return res + def handleNewObjectFile(self, objfile): name = objfile.filename if self.isWindowsTarget():