From 4742216febedb9f6fb6e8147e9a333abe236ab2f Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 3 Jun 2019 09:32:15 +0200 Subject: [PATCH 01/15] Core: Give a hint why saving of settings are requested Not all requests are the same, handling code might want to act differently on different request reasons. Main driver here is the handling of the debugger/analyzer main window state savings which depends on actual visibility of certain windows. Change-Id: I87b2a9149e3d09d27bc14b44aace9f2e0686db04 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/dialogs/settingsdialog.cpp | 2 +- src/plugins/coreplugin/icore.cpp | 6 +++--- src/plugins/coreplugin/icore.h | 11 +++++++++-- src/plugins/coreplugin/mainwindow.cpp | 2 +- src/plugins/projectexplorer/projectexplorer.cpp | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 596d498875a..8057a9e48ad 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -726,7 +726,7 @@ void SettingsDialog::done(int val) QSettings *settings = ICore::settings(); settings->setValue(QLatin1String(pageKeyC), m_currentPage.toSetting()); - ICore::saveSettings(); // save all settings + ICore::saveSettings(ICore::SettingsDialogDone); // save all settings // exit event loops in reverse order of addition for (QEventLoop *eventLoop : m_eventLoops) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 4a6066df0eb..63eba664ccd 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -330,7 +330,7 @@ ICore::ICore(MainWindow *mainwindow) m_mainwindow = mainwindow; // Save settings once after all plugins are initialized: connect(PluginManager::instance(), &PluginManager::initializationDone, - this, &ICore::saveSettings); + this, [] { ICore::saveSettings(ICore::InitializationDone); }); connect(PluginManager::instance(), &PluginManager::testsFinished, [this] (int failedTests) { emit coreAboutToClose(); if (failedTests != 0) @@ -690,9 +690,9 @@ void ICore::setupScreenShooter(const QString &name, QWidget *w, const QRect &rc) new ScreenShooter(w, name, rc); } -void ICore::saveSettings() +void ICore::saveSettings(SaveSettingsReason reason) { - emit m_instance->saveSettingsRequested(); + emit m_instance->saveSettingsRequested(reason); m_mainwindow->saveSettings(); ICore::settings(QSettings::SystemScope)->sync(); diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 5125345cffd..04d501e1346 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -141,14 +141,21 @@ public: static QString systemInformation(); static void setupScreenShooter(const QString &name, QWidget *w, const QRect &rc = QRect()); + enum SaveSettingsReason { + InitializationDone, + SettingsDialogDone, + ModeChanged, + MainWindowClosing, + }; + public slots: - static void saveSettings(); + static void saveSettings(SaveSettingsReason reason); signals: void coreAboutToOpen(); void coreOpened(); void newItemDialogStateChanged(); - void saveSettingsRequested(); + void saveSettingsRequested(SaveSettingsReason reason); void coreAboutToClose(); void contextAboutToChange(const QList &context); void contextChanged(const Core::Context &context); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index d35477f6b57..dd724d9f9c7 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -322,7 +322,7 @@ void MainWindow::closeEvent(QCloseEvent *event) return; } - ICore::saveSettings(); + ICore::saveSettings(ICore::MainWindowClosing); // Save opened files if (!DocumentManager::saveAllModifiedDocuments()) { diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index cda19816a74..8169fab0a0c 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2098,7 +2098,7 @@ void ProjectExplorerPluginPrivate::currentModeChanged(Id mode, Id oldMode) // Saving settings directly in a mode change is not a good idea, since the mode change // can be part of a bigger change. Save settings after that bigger change had a chance to // complete. - QTimer::singleShot(0, ICore::instance(), &ICore::saveSettings); + QTimer::singleShot(0, ICore::instance(), [] { ICore::saveSettings(ICore::ModeChanged); }); } if (mode == Core::Constants::MODE_WELCOME) updateWelcomePage(); From fb41fb8a206b2a0b6cbb064fa876346469c656c1 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Sat, 1 Jun 2019 18:45:58 +0200 Subject: [PATCH 02/15] CMake Build: Add Qt and clang in PATH variable for Windows tests Windows doesn't have RPATH support, and Qt and clang directories need to be set into PATH environment variable for tests to be able to run. On my work machine I had the directories set into the global PATH environment. Change-Id: I91e0adc5999479e7dcf3cf0a734ed31e6edc402f Reviewed-by: Eike Ziller --- src/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c52f4fd9093..01fb642e910 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -486,6 +486,10 @@ function(fix_test_environment test_name) list(APPEND env_path $ENV{PATH}) list(APPEND env_path ${CMAKE_BINARY_DIR}/${IDE_PLUGIN_PATH}) list(APPEND env_path ${CMAKE_BINARY_DIR}/${IDE_BIN_PATH}) + list(APPEND env_path $) + if (TARGET libclang) + list(APPEND env_path $) + endif() string(REPLACE "/" "\\" env_path "${env_path}") string(REPLACE ";" "\\;" env_path "${env_path}") From d70d58b5cc8175e9216917587787b5baaaa27504 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 3 Jun 2019 10:30:31 +0200 Subject: [PATCH 03/15] CMake: Add Threads::Threads as public dependency to clangrefactoringbackend library Change-Id: If7d3d4a7226f034d0e4c66726d3a7beed3480efe Reviewed-by: Cristian Adam Reviewed-by: Eike Ziller --- CMakeLists.txt | 2 ++ src/tools/clangrefactoringbackend/source/CMakeLists.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf284176838..b3a256ae9a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,8 @@ find_package(Qt5 REQUIRED ) +find_package(Threads) + # Get information on directories from qmake # as this is not yet exported by cmake. function(qt5_query_qmake) diff --git a/src/tools/clangrefactoringbackend/source/CMakeLists.txt b/src/tools/clangrefactoringbackend/source/CMakeLists.txt index cd15e8ad338..f4b66e33995 100644 --- a/src/tools/clangrefactoringbackend/source/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/source/CMakeLists.txt @@ -1,4 +1,5 @@ add_qtc_library(clangrefactoringbackend_lib STATIC + PUBLIC_DEPENDS Threads::Threads DEPENDS libclang clangTooling clangIndex clangQuery ClangSupport DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES From 08025009a6b181c7cd525a3bb4b9ab8d3cb9a601 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 31 May 2019 14:12:13 +0200 Subject: [PATCH 04/15] CMake: Add missing dependencies to clangrefactoringbackend related code Change-Id: I4c7fa04309f24a5a5143a5e32f0b5200fdcde0b6 Reviewed-by: Cristian Adam Reviewed-by: Eike Ziller --- src/tools/clangrefactoringbackend/CMakeLists.txt | 3 +-- src/tools/clangrefactoringbackend/source/CMakeLists.txt | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/tools/clangrefactoringbackend/CMakeLists.txt b/src/tools/clangrefactoringbackend/CMakeLists.txt index 781783545ec..d161659e823 100644 --- a/src/tools/clangrefactoringbackend/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/CMakeLists.txt @@ -2,8 +2,7 @@ add_subdirectory(source) add_qtc_executable(clangrefactoringbackend DEPENDS - clangrefactoringbackend_lib Sqlite ClangSupport - libclang clangTooling clangIndex clangQuery clangToolingRefactor + clangrefactoringbackend_lib Sqlite SOURCES clangrefactoringbackendmain.cpp ) diff --git a/src/tools/clangrefactoringbackend/source/CMakeLists.txt b/src/tools/clangrefactoringbackend/source/CMakeLists.txt index f4b66e33995..213ce6ffd76 100644 --- a/src/tools/clangrefactoringbackend/source/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/source/CMakeLists.txt @@ -1,6 +1,11 @@ add_qtc_library(clangrefactoringbackend_lib STATIC - PUBLIC_DEPENDS Threads::Threads - DEPENDS libclang clangTooling clangIndex clangQuery ClangSupport + PUBLIC_DEPENDS + Threads::Threads + LLVMCore libclang + clangAST clangASTMatchers clangBasic clangDynamicASTMatchers clangFrontend + clangHandleCXX clangIndex clangLex + clangSerialization clangTooling clangQuery + ClangSupport DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} From 884665a0fe2a9afe511e33601a421ead66d4c1b9 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 3 Jun 2019 09:12:57 +0200 Subject: [PATCH 05/15] Wizards: Fix CppLibrary wizards Fix wrong string evaluation of boolean values which made in turn the generated files partially wrong. Introduced with cb63706f83610 (but wrong also before for the no-Qt-dependency case). Change-Id: I404534d4b21d0d1c496635adfcd8a73716ba13d3 Reviewed-by: Eike Ziller --- .../templates/wizards/projects/cpplibrary/project.pro | 2 +- .../templates/wizards/projects/cpplibrary/wizard.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro b/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro index f6652ee9301..431667ada5b 100644 --- a/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro +++ b/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro @@ -1,5 +1,5 @@ @if '%{QtModule}' === 'none' -QT -= core +CONFIG -= qt @elsif '%{QtModule}' === 'core' QT -= gui @else diff --git a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json index ea455be4a2d..ac43d6f1a9f 100644 --- a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json +++ b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json @@ -23,12 +23,12 @@ { "key": "PluginInterface", "value": "%{JS: value('BaseClassInfo').PluginInterface }" }, { "key": "PluginModule", "value": "%{JS: value('BaseClassInfo').PluginModule }" }, { "key": "PluginMethods", "value": "%{JS: value('BaseClassInfo').PluginMethods }" }, - { "key": "QtModule", "value": "%{JS: value('IsQtPlugin') ? value('PluginModule') : value('LibraryQtModule')}" }, + { "key": "QtModule", "value": "%{JS: value('IsQtPlugin') === 'true' ? value('PluginModule') : value('LibraryQtModule')}" }, { "key": "QtModuleUpperCase", "value": "%{JS: value('QtModule').charAt(0).toUpperCase() + value('QtModule').slice(1)}" }, { "key": "LibraryDefine", "value": "%{JS: Cpp.headerGuard(value('ProjectName')) + '_LIBRARY'}" }, { "key": "LibraryExport", "value": "%{JS: Cpp.headerGuard(value('ProjectName')) + '_EXPORT'}" }, { "key": "GlobalHdrFileName", "value": "%{JS: Util.fileName(value('ProjectName') + '_global', Util.preferredSuffix('text/x-c++hdr'))}" }, - { "key": "TargetInstallPath", "value": "%{JS: value('IsShared') ? '/usr/lib' : (value('IsQtPlugin') && value('PluginTargetPath') ? '$$[QT_INSTALL_PLUGINS]/' + value('PluginTargetPath') : '')}" }, + { "key": "TargetInstallPath", "value": "%{JS: value('IsShared') === 'true' ? '/usr/lib' : (value('IsQtPlugin') && value('PluginTargetPath') ? '$$[QT_INSTALL_PLUGINS]/' + value('PluginTargetPath') : '')}" }, { "key": "CN", "value": "%{JS: Cpp.className(value('Class'))}" }, { "key": "GUARD", "value": "%{JS: Cpp.headerGuard(value('HdrFileName'))}" }, { "key": "GLOBAL_GUARD", "value": "%{JS: Cpp.headerGuard(value('GlobalHdrFileName'))}" } From fa38a316445d484ccffbabe58764fa9a8570897f Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 May 2019 18:54:45 +0200 Subject: [PATCH 06/15] CMake: Use Utils::CommandLine for CMakeBuildStep Change-Id: I0490b1edf073c680f24ad7de10b544443ae62c5e Reviewed-by: Cristian Adam Reviewed-by: Christian Kandeler --- .../cmakeprojectmanager/cmakebuildstep.cpp | 31 ++++++------------- .../cmakeprojectmanager/cmakebuildstep.h | 9 +++--- .../cmakeprojectmanager/cmakeproject.cpp | 4 ++- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 1d2ef2cb752..364337308ba 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -205,8 +205,6 @@ bool CMakeBuildStep::init() } } - QString arguments = allArguments(rc); - setIgnoreReturnValue(m_buildTarget == CMakeBuildStep::cleanTarget()); ProcessParameters *pp = processParameters(); @@ -217,8 +215,7 @@ bool CMakeBuildStep::init() env.set("NINJA_STATUS", m_ninjaProgressString + "%o/sec] "); pp->setEnvironment(env); pp->setWorkingDirectory(bc->buildDirectory()); - pp->setCommand(cmakeCommand()); - pp->setArguments(arguments); + pp->setCommandLine(cmakeCommand(rc)); pp->resolveAll(); setOutputParser(new CMakeParser); @@ -342,12 +339,12 @@ void CMakeBuildStep::setToolArguments(const QString &list) m_toolArguments = list; } -QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const +Utils::CommandLine CMakeBuildStep::cmakeCommand(CMakeRunConfiguration *rc) const { - QString arguments; + CMakeTool *tool = CMakeKitAspect::cmakeTool(target()->kit()); - Utils::QtcProcess::addArg(&arguments, "--build"); - Utils::QtcProcess::addArg(&arguments, "."); + Utils::CommandLine cmd(tool ? tool->cmakeExecutable() : Utils::FilePath(), {}); + cmd.addArgs({"--build", "."}); QString target; @@ -360,21 +357,14 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const target = m_buildTarget; } - Utils::QtcProcess::addArg(&arguments, "--target"); - Utils::QtcProcess::addArg(&arguments, target); + cmd.addArgs({"--target", target}); if (!m_toolArguments.isEmpty()) { - Utils::QtcProcess::addArg(&arguments, "--"); - arguments += ' ' + m_toolArguments; + cmd.addArg("--"); + cmd.addArgs(m_toolArguments); } - return arguments; -} - -Utils::FilePath CMakeBuildStep::cmakeCommand() const -{ - CMakeTool *tool = CMakeKitAspect::cmakeTool(target()->kit()); - return tool ? tool->cmakeExecutable() : Utils::FilePath(); + return cmd; } QString CMakeBuildStep::cleanTarget() @@ -530,8 +520,7 @@ void CMakeBuildStepConfigWidget::updateDetails() param.setMacroExpander(bc->macroExpander()); param.setEnvironment(bc->environment()); param.setWorkingDirectory(bc->buildDirectory()); - param.setCommand(m_buildStep->cmakeCommand()); - param.setArguments(m_buildStep->allArguments(nullptr)); + param.setCommandLine(m_buildStep->cmakeCommand(nullptr)); setSummaryText(param.summary(displayName())); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index ba2f62dab60..9b906f883fa 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -35,7 +35,10 @@ class QListWidget; class QListWidgetItem; QT_END_NAMESPACE -namespace Utils { class PathChooser; } +namespace Utils { +class CommandLine; +class PathChooser; +} // Utils namespace ProjectExplorer { class ToolChain; } @@ -64,9 +67,7 @@ public: QString toolArguments() const; void setToolArguments(const QString &list); - QString allArguments(const CMakeRunConfiguration *rc) const; - - Utils::FilePath cmakeCommand() const; + Utils::CommandLine cmakeCommand(CMakeRunConfiguration *rc) const; QVariantMap toMap() const override; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 4814ab4c32a..1182b9699ef 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -54,6 +54,7 @@ #include #include +#include #include #include @@ -635,7 +636,8 @@ MakeInstallCommand CMakeProject::makeInstallCommand(const Target *target, if (const BuildConfiguration * const bc = target->activeBuildConfiguration()) { if (const auto cmakeStep = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD) ->firstOfType()) { - cmd.command = cmakeStep->cmakeCommand(); + if (CMakeTool *tool = CMakeKitAspect::cmakeTool(target->kit())) + cmd.command = tool->cmakeExecutable(); } } cmd.arguments << "--build" << "." << "--target" << "install"; From d1fef0ea517a163003a26edd8ba89b33f05d64dc Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 May 2019 19:12:45 +0200 Subject: [PATCH 07/15] ProjectExplorer: Add a Runnable::setCommandLine() Change-Id: I9b6a782e143dca8519cdc57171557bd3893df921 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/runcontrol.cpp | 6 ++++++ src/plugins/projectexplorer/runcontrol.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index a358df38f3b..f90a8fd48c0 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1554,4 +1554,10 @@ CommandLine Runnable::commandLine() const return CommandLine(FilePath::fromString(executable), commandLineArguments); } +void Runnable::setCommandLine(const CommandLine &cmdLine) +{ + executable = cmdLine.executable().toString(); + commandLineArguments = cmdLine.arguments(); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 040520991d0..fbb1c151ff1 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -74,6 +74,7 @@ public: Runnable() = default; Utils::CommandLine commandLine() const; + void setCommandLine(const Utils::CommandLine &cmdLine); QString executable; QString commandLineArguments; From dfe38f79c3aa7a1ebcf4d90792bc2a297d1b6dfa Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 3 Jun 2019 13:23:10 +0200 Subject: [PATCH 08/15] CMake build: Ensure compilation when Qt5::Script is missing The Qt5 Visual C++ 2017 64 bit installation doesn't come with Qt5::Script target by default. This patch ensures that Qt Creator can be built with the above Qt5 scenario. Change-Id: Ibe35e9d879ccd51012f53acebfbb7461fd773d4a Reviewed-by: Eike Ziller Reviewed-by: Alessandro Portale --- CMakeLists.txt | 4 ++-- src/plugins/coreplugin/CMakeLists.txt | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b3a256ae9a2..353cf93d53b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ endif() find_package(Qt5 COMPONENTS Concurrent Core Network PrintSupport Qml Quick QuickWidgets - Script Sql ${_TEST_QT_COMPONENT} + Sql ${_TEST_QT_COMPONENT} REQUIRED ) @@ -90,7 +90,7 @@ endfunction() qt5_query_qmake() -find_package(Qt5 COMPONENTS Designer Help SerialPort Svg QUIET) +find_package(Qt5 COMPONENTS Designer Help Script SerialPort Svg QUIET) function (set_if_target var target) if (TARGET "${target}") set(_result ON) diff --git a/src/plugins/coreplugin/CMakeLists.txt b/src/plugins/coreplugin/CMakeLists.txt index 5018a9b4c16..77836859692 100644 --- a/src/plugins/coreplugin/CMakeLists.txt +++ b/src/plugins/coreplugin/CMakeLists.txt @@ -1,5 +1,5 @@ add_qtc_plugin(Core - DEPENDS Qt5::PrintSupport Qt5::Qml Qt5::Script Qt5::Sql Qt5::Gui Qt5::GuiPrivate + DEPENDS Qt5::PrintSupport Qt5::Qml Qt5::Sql Qt5::Gui Qt5::GuiPrivate PUBLIC_DEPENDS Aggregation ExtensionSystem Utils app_version SOURCES actionmanager/actioncontainer.cpp actionmanager/actioncontainer.h actionmanager/actioncontainer_p.h @@ -100,7 +100,6 @@ add_qtc_plugin(Core locator/externaltoolsfilter.cpp locator/externaltoolsfilter.h locator/filesystemfilter.cpp locator/filesystemfilter.h locator/filesystemfilter.ui locator/ilocatorfilter.cpp locator/ilocatorfilter.h - locator/javascriptfilter.cpp locator/javascriptfilter.h locator/locator.cpp locator/locator.h locator/locatorconstants.h locator/locatorfiltersfilter.cpp locator/locatorfiltersfilter.h @@ -176,3 +175,11 @@ extend_qtc_plugin(Core CONDITION (NOT WIN32) AND (NOT APPLE) SOURCES progressmanager/progressmanager_x11.cpp ) + +extend_qtc_plugin(Core + CONDITION TARGET Qt5::Script + DEPENDS Qt5::Script + DEFINES WITH_JAVASCRIPTFILTER + SOURCES + locator/javascriptfilter.cpp locator/javascriptfilter.h +) From a154f26af5f29d51cbc9fd69c2d5c5ad4c343da4 Mon Sep 17 00:00:00 2001 From: Anton Danielsson Date: Thu, 30 May 2019 17:47:38 +0200 Subject: [PATCH 09/15] Fix AndroidDeployQtStep Bug was introduced by Utils::CommandLine. Cased "executable" to be an empty string. Change-Id: I2b5cd31e3eb1d2d18252dac90de07c053de9f3ce Reviewed-by: hjk --- src/plugins/android/androiddeployqtstep.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 8e56cd6a582..61c2bfcfa98 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -300,7 +300,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy() { CommandLine cmd(Utils::FilePath::fromString(m_command), {}); if (m_useAndroiddeployqt && m_apkPath.isEmpty()) { - cmd = m_androiddeployqtArgs; + cmd.addArgs(m_androiddeployqtArgs.arguments()); if (m_uninstallPreviousPackageRun) cmd.addArg("--install"); else From 959fec76dc257515a7bca74c00fde645f50e84c5 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 May 2019 19:28:43 +0200 Subject: [PATCH 10/15] Utils: Move CommandLine to fileutils.{cpp,h} Causes less #include hassle when using downstream instead of command/argument pairs. Change-Id: I0fa0d016374df0b8e0a22f3786623652af684d36 Reviewed-by: Christian Kandeler --- src/libs/utils/fileutils.cpp | 28 ++++++++++++++++++++++++++++ src/libs/utils/fileutils.h | 23 +++++++++++++++++++++++ src/libs/utils/qtcprocess.cpp | 20 -------------------- src/libs/utils/qtcprocess.h | 23 ----------------------- src/tools/sdktool/sdktool.pro | 4 ++++ src/tools/sdktool/sdktool.qbs | 2 ++ 6 files changed, 57 insertions(+), 43 deletions(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 4bf278a0414..0553d7f0d90 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -28,6 +28,7 @@ #include "algorithm.h" #include "qtcassert.h" +#include "qtcprocess.h" #include #include @@ -66,6 +67,33 @@ QT_END_NAMESPACE namespace Utils { +/*! \class Utils::CommandLine + + \brief The CommandLine class represents a command line of a QProcess + or similar utility. + +*/ + +void CommandLine::addArg(const QString &arg) +{ + QtcProcess::addArg(&m_arguments, arg); +} + +void CommandLine::addArgs(const QStringList &inArgs) +{ + QtcProcess::addArgs(&m_arguments, inArgs); +} + +void CommandLine::addArgs(const QString &inArgs) +{ + QtcProcess::addArgs(&m_arguments, inArgs); +} + +QString CommandLine::toUserOutput() const +{ + return m_executable.toUserOutput() + ' ' + m_arguments; +} + /*! \class Utils::FileUtils \brief The FileUtils class contains file and directory related convenience diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index fd8f4f74227..d840c350afd 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -128,6 +128,29 @@ using FilePathList = QList; using FileName = FilePath; using FileNameList = FilePathList; +class QTCREATOR_UTILS_EXPORT CommandLine +{ +public: + CommandLine() {} + + CommandLine(const FilePath &executable, const QString &arguments) + : m_executable(executable), m_arguments(arguments) + {} + + void addArg(const QString &arg); + void addArgs(const QStringList &inArgs); + void addArgs(const QString &inArgs); + + QString toUserOutput() const; + + FilePath executable() const { return m_executable; } + QString arguments() const { return m_arguments; } + +private: + FilePath m_executable; + QString m_arguments; +}; + class QTCREATOR_UTILS_EXPORT FileUtils { public: static bool removeRecursively(const FilePath &filePath, QString *error = nullptr); diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index dce239b4889..d05746d5b1e 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -1521,24 +1521,4 @@ QString QtcProcess::Arguments::toString() const return QtcProcess::joinArgs(m_unixArgs, OsTypeLinux); } -void CommandLine::addArg(const QString &arg) -{ - QtcProcess::addArg(&m_arguments, arg); -} - -void CommandLine::addArgs(const QStringList &inArgs) -{ - QtcProcess::addArgs(&m_arguments, inArgs); -} - -void CommandLine::addArgs(const QString &inArgs) -{ - QtcProcess::addArgs(&m_arguments, inArgs); -} - -QString CommandLine::toUserOutput() const -{ - return m_executable.toUserOutput() + ' ' + m_arguments; -} - } // namespace Utils diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 1a831d3a5a7..d3d22d34154 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -32,29 +32,6 @@ namespace Utils { class AbstractMacroExpander; -class QTCREATOR_UTILS_EXPORT CommandLine -{ -public: - CommandLine() {} - - CommandLine(const FilePath &executable, const QString &arguments) - : m_executable(executable), m_arguments(arguments) - {} - - void addArg(const QString &arg); - void addArgs(const QStringList &inArgs); - void addArgs(const QString &inArgs); - - QString toUserOutput() const; - - FilePath executable() const { return m_executable; } - QString arguments() const { return m_arguments; } - -private: - FilePath m_executable; - QString m_arguments; -}; - class QTCREATOR_UTILS_EXPORT QtcProcess : public QProcess { Q_OBJECT diff --git a/src/tools/sdktool/sdktool.pro b/src/tools/sdktool/sdktool.pro index 098897f1e27..434da257c5e 100644 --- a/src/tools/sdktool/sdktool.pro +++ b/src/tools/sdktool/sdktool.pro @@ -30,10 +30,12 @@ SOURCES += \ rmqtoperation.cpp \ rmtoolchainoperation.cpp \ settings.cpp \ + $$UTILS/environment.cpp \ $$UTILS/fileutils.cpp \ $$UTILS/hostosinfo.cpp \ $$UTILS/persistentsettings.cpp \ $$UTILS/qtcassert.cpp \ + $$UTILS/qtcprocess.cpp \ $$UTILS/savefile.cpp \ HEADERS += \ @@ -57,10 +59,12 @@ HEADERS += \ rmqtoperation.h \ rmtoolchainoperation.h \ settings.h \ + $$UTILS/environment.h \ $$UTILS/fileutils.h \ $$UTILS/hostosinfo.h \ $$UTILS/persistentsettings.h \ $$UTILS/qtcassert.h \ + $$UTILS/qtcprocess.h \ $$UTILS/savefile.h \ macos { diff --git a/src/tools/sdktool/sdktool.qbs b/src/tools/sdktool/sdktool.qbs index 67b1d8e3c34..1c672d783e5 100644 --- a/src/tools/sdktool/sdktool.qbs +++ b/src/tools/sdktool/sdktool.qbs @@ -66,10 +66,12 @@ QtcTool { name: "Utils" prefix: libsDir + "/utils/" files: [ + "environment.cpp", "environment.h", "fileutils.cpp", "fileutils.h", "hostosinfo.cpp", "hostosinfo.h", "persistentsettings.cpp", "persistentsettings.h", "qtcassert.cpp", "qtcassert.h", + "qtcprocess.cpp", "qtcprocess.h", "savefile.cpp", "savefile.h" ] } From 2c88b5b90fdce7d0360dd9f93a7a868b811a8959 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 May 2019 17:41:15 +0200 Subject: [PATCH 11/15] ProjectExplorer: Add a ProcessParameters::setCommandLine() Change-Id: I55add792988b22af56934dde237cf64b6f0c90d4 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/processparameters.cpp | 8 ++++++++ src/plugins/projectexplorer/processparameters.h | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/processparameters.cpp b/src/plugins/projectexplorer/processparameters.cpp index 350aa7c90f7..f535cc120e1 100644 --- a/src/plugins/projectexplorer/processparameters.cpp +++ b/src/plugins/projectexplorer/processparameters.cpp @@ -54,6 +54,14 @@ ProcessParameters::ProcessParameters() : { } +void ProcessParameters::setCommandLine(const CommandLine &cmdLine) +{ + m_command = cmdLine.executable(); + m_arguments = cmdLine.arguments(); + m_effectiveCommand.clear(); + m_effectiveArguments.clear(); +} + /*! Sets the executable to run. */ diff --git a/src/plugins/projectexplorer/processparameters.h b/src/plugins/projectexplorer/processparameters.h index 3e08e6bb853..c87ede7d5b5 100644 --- a/src/plugins/projectexplorer/processparameters.h +++ b/src/plugins/projectexplorer/processparameters.h @@ -30,7 +30,10 @@ #include #include -namespace Utils { class MacroExpander; } +namespace Utils { +class CommandLine; +class MacroExpander; +} // Utils namespace ProjectExplorer { @@ -40,6 +43,8 @@ class PROJECTEXPLORER_EXPORT ProcessParameters public: ProcessParameters(); + void setCommandLine(const Utils::CommandLine &cmdLine); + void setCommand(const Utils::FilePath &cmd); Utils::FilePath command() const { return m_command; } From d0427fc068eaacc371041e45adabab39b69c3a26 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 31 May 2019 14:23:47 +0200 Subject: [PATCH 12/15] CMake: Add a custom target to copy share/qtcreator into build folder Change-Id: Iae78b8a154c80f26f08d5512c089f7eb802d3662 Reviewed-by: Cristian Adam Reviewed-by: Eike Ziller --- share/qtcreator/CMakeLists.txt | 21 +++++++++++++++++---- src/app/CMakeLists.txt | 5 ----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index 6b432ef96c0..3fe6c60b4b5 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -1,9 +1,22 @@ -install( - DIRECTORY cplusplus debugger glsl modeleditor qml qmldesigner - qmlicons qml-type-descriptions schemes snippets styles templates themes welcomescreen - DESTINATION "${IDE_DATA_PATH}" +set(template_directories cplusplus debugger glsl modeleditor qml qmldesigner + qmlicons qml-type-descriptions schemes snippets styles templates themes welcomescreen) + +add_custom_target(copy_share_to_builddir ALL + COMMENT Copy files into build directory + VERBATIM ) +foreach(dir IN ITEMS ${template_directories}) + add_custom_command(TARGET copy_share_to_builddir POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}" + "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT Copy files into build directory + VERBATIM + ) +endforeach() + +install(DIRECTORY ${template_directories} DESTINATION "${IDE_DATA_PATH}") install( FILES indexer_preincludes/qglobal.h indexer_preincludes/windows.h DESTINATION "${IDE_DATA_PATH}/indexer_preincludes" diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index e44e544784b..0ef67b2943c 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -33,11 +33,6 @@ if (WIN32) target_sources(qtcreator PRIVATE qtcreator.rc) endif() -add_custom_command(TARGET qtcreator POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_directory - "${PROJECT_SOURCE_DIR}/share/qtcreator" - "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}") - if (APPLE) set_target_properties(qtcreator PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/app-Info.plist" From 0b264a9c0d32af401ffe199eac98f562d29fcd67 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 3 Jun 2019 15:39:34 +0200 Subject: [PATCH 13/15] QmlDesigner: Add simplifiedTypeName to NodeMetaInfo Change-Id: I07fe0b4d6b88a280cd0696ef0bcafa774b866edb Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/designercore/include/nodemetainfo.h | 1 + .../qmldesigner/designercore/metainfo/nodemetainfo.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h index 5d2d171ae72..09daa924aae 100644 --- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h +++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h @@ -85,6 +85,7 @@ public: bool defaultPropertyIsComponent() const; TypeName typeName() const; + TypeName simplifiedTypeName() const; int majorVersion() const; int minorVersion() const; diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 9c88cd130a6..25ff9506441 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -1483,6 +1483,11 @@ TypeName NodeMetaInfo::typeName() const return m_privateData->qualfiedTypeName(); } +TypeName NodeMetaInfo::simplifiedTypeName() const +{ + return typeName().split('.').constLast(); +} + int NodeMetaInfo::majorVersion() const { return m_privateData->majorVersion(); From 6c8f44d261c9eb4cd81199b289a7af1ef9ad10d0 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 3 Jun 2019 14:58:24 +0200 Subject: [PATCH 14/15] CMake: Use Utils::CommandLine for server mode process Change-Id: I53e62c753865be78cd11581e34c77a763748ab40 Reviewed-by: Christian Kandeler --- .../cmakeprojectmanager/servermode.cpp | 28 ++++++++----------- src/plugins/cmakeprojectmanager/servermode.h | 2 +- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/servermode.cpp b/src/plugins/cmakeprojectmanager/servermode.cpp index 56b177fdf9d..bd37c4f6fe2 100644 --- a/src/plugins/cmakeprojectmanager/servermode.cpp +++ b/src/plugins/cmakeprojectmanager/servermode.cpp @@ -92,7 +92,7 @@ ServerMode::ServerMode(const Environment &env, m_socketDir("/tmp/cmake-"), #endif m_sourceDirectory(sourceDirectory), m_buildDirectory(buildDirectory), - m_cmakeExecutable(cmakeExecutable), + m_cmakeCommand(cmakeExecutable, {}), m_generator(generator), m_extraGenerator(extraGenerator), m_platform(platform), m_toolset(toolset), m_useExperimental(experimental), m_majorProtocol(major), m_minorProtocol(minor) @@ -114,28 +114,24 @@ ServerMode::ServerMode(const Environment &env, m_socketName = QString::fromLatin1("\\\\.\\pipe\\") + QUuid::createUuid().toString(); #endif - const QStringList args = QStringList({"-E", "server", "--pipe=" + m_socketName}); - connect(m_cmakeProcess.get(), &QtcProcess::started, this, [this]() { m_connectionTimer.start(); }); connect(m_cmakeProcess.get(), QOverload::of(&QtcProcess::finished), this, &ServerMode::handleCMakeFinished); - QString argumentString; - QtcProcess::addArgs(&argumentString, args); + m_cmakeCommand.addArgs({"-E", "server", "--pipe=" + m_socketName}); if (m_useExperimental) - QtcProcess::addArg(&argumentString, "--experimental"); + m_cmakeCommand.addArg("--experimental"); qCInfo(cmakeServerMode) - << "Preparing cmake:" << cmakeExecutable.toString() << argumentString + << "Preparing cmake:" << m_cmakeCommand.toUserOutput() << "in" << m_buildDirectory.toString(); - m_cmakeProcess->setCommand(CommandLine(cmakeExecutable, argumentString)); + m_cmakeProcess->setCommand(m_cmakeCommand); // Delay start: - QTimer::singleShot(0, this, [argumentString, this] { - emit message(tr("Running \"%1 %2\" in %3.") - .arg(m_cmakeExecutable.toUserOutput()) - .arg(argumentString) + QTimer::singleShot(0, this, [this] { + emit message(tr("Running \"%1\" in %2.") + .arg(m_cmakeCommand.toUserOutput()) .arg(m_buildDirectory.toUserOutput())); m_cmakeProcess->start(); @@ -199,7 +195,7 @@ void ServerMode::connectToServer() m_cmakeProcess->disconnect(); qCInfo(cmakeServerMode) << "Timeout waiting for pipe" << m_socketName; reportError(tr("Running \"%1\" failed: Timeout waiting for pipe \"%2\".") - .arg(m_cmakeExecutable.toUserOutput()) + .arg(m_cmakeCommand.toUserOutput()) .arg(m_socketName)); Core::Reaper::reap(m_cmakeProcess.release()); @@ -236,14 +232,14 @@ void ServerMode::handleCMakeFinished(int code, QProcess::ExitStatus status) qCInfo(cmakeServerMode) << "CMake has finished" << code << status; QString msg; if (status != QProcess::NormalExit) - msg = tr("CMake process \"%1\" crashed.").arg(m_cmakeExecutable.toUserOutput()); + msg = tr("CMake process \"%1\" crashed.").arg(m_cmakeCommand.toUserOutput()); else if (code != 0) - msg = tr("CMake process \"%1\" quit with exit code %2.").arg(m_cmakeExecutable.toUserOutput()).arg(code); + msg = tr("CMake process \"%1\" quit with exit code %2.").arg(m_cmakeCommand.toUserOutput()).arg(code); if (!msg.isEmpty()) { reportError(msg); } else { - emit message(tr("CMake process \"%1\" quit normally.").arg(m_cmakeExecutable.toUserOutput())); + emit message(tr("CMake process \"%1\" quit normally.").arg(m_cmakeCommand.toUserOutput())); } if (m_cmakeSocket) { diff --git a/src/plugins/cmakeprojectmanager/servermode.h b/src/plugins/cmakeprojectmanager/servermode.h index 1b9e376ff92..2a4ccbf2327 100644 --- a/src/plugins/cmakeprojectmanager/servermode.h +++ b/src/plugins/cmakeprojectmanager/servermode.h @@ -94,7 +94,7 @@ private: Utils::FilePath m_sourceDirectory; Utils::FilePath m_buildDirectory; - Utils::FilePath m_cmakeExecutable; + Utils::CommandLine m_cmakeCommand; QByteArray m_buffer; From 1ecfb2d941d3d6b9eadfd31bb337f5729b63b3f5 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 3 Jun 2019 07:47:53 +0200 Subject: [PATCH 15/15] Tests: Fix compile on Win Amends 4098be05b23dd. Change-Id: Icc28162630470d3beab7ef9867e907cab6804688 Reviewed-by: Christian Kandeler --- tests/auto/debugger/tst_dumpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 237c08b66d5..0f60d6c7db5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -93,7 +93,7 @@ static bool generateEnvironmentSettings(Utils::Environment &env, const QString cmdPath = QString::fromLocal8Bit(qgetenv("COMSPEC")); // Windows SDK setup scripts require command line switches for environment expansion. QString cmdArguments = " /E:ON /V:ON /c \"" + QDir::toNativeSeparators(saver.fileName()) + '"'; - run.setCommand(cmdPath, cmdArguments); + run.setCommand(Utils::CommandLine(cmdPath, cmdArguments)); run.start(); if (!run.waitForStarted()) {