diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index 9bb7cec9fc1..d9bf685f08b 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +48,7 @@ #include #include +#include #include #include @@ -390,18 +392,18 @@ void CompilationDatabaseProject::buildTreeAndProjectParts() setRootProjectNode(std::move(root)); m_cppCodeModelUpdater->update({this, kitInfo, activeParseEnvironment(), rpps}); + updateDeploymentData(); } CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &projectFile) : Project(Constants::COMPILATIONDATABASEMIMETYPE, projectFile) , m_cppCodeModelUpdater(std::make_unique()) , m_parseDelay(new QTimer(this)) + , m_deployFileWatcher(new FileSystemWatcher(this)) { setId(Constants::COMPILATIONDATABASEPROJECT_ID); setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setDisplayName(projectDirectory().fileName()); - setRequiredKitPredicate([](const Kit *) { return false; }); - setPreferredKitPredicate([](const Kit *) { return false; }); m_kit.reset(KitManager::defaultKit()->clone()); addTargetForKit(m_kit.get()); @@ -420,6 +422,10 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &pr m_parseDelay->setInterval(1000); connect(this, &Project::projectFileIsDirty, this, &CompilationDatabaseProject::reparseProject); + connect(m_deployFileWatcher, &FileSystemWatcher::fileChanged, + this, &CompilationDatabaseProject::updateDeploymentData); + connect(this, &Project::activeTargetChanged, + this, &CompilationDatabaseProject::updateDeploymentData); } Utils::FilePath CompilationDatabaseProject::rootPathFromSettings() const @@ -469,6 +475,24 @@ void CompilationDatabaseProject::reparseProject() m_parser->start(); } +void CompilationDatabaseProject::updateDeploymentData() +{ + Target * const target = activeTarget(); + if (!target) + return; + const Utils::FilePath deploymentFilePath = projectDirectory() + .pathAppended("QtCreatorDeployment.txt"); + DeploymentData deploymentData; + deploymentData.addFilesFromDeploymentFile(deploymentFilePath.toString(), + projectDirectory().toString()); + target->setDeploymentData(deploymentData); + if (m_deployFileWatcher->files() != QStringList(deploymentFilePath.toString())) { + m_deployFileWatcher->removeFiles(m_deployFileWatcher->files()); + m_deployFileWatcher->addFile(deploymentFilePath.toString(), + FileSystemWatcher::WatchModifiedDate); + } +} + CompilationDatabaseProject::~CompilationDatabaseProject() { m_parserWatcher.cancel(); @@ -501,19 +525,6 @@ CompilationDatabaseBuildConfiguration::CompilationDatabaseBuildConfiguration( ProjectExplorer::Target *target, Core::Id id) : ProjectExplorer::BuildConfiguration(target, id) { - target->setApplicationTargets({BuildTargetInfo()}); -} - -void CompilationDatabaseBuildConfiguration::initialize() -{ - ProjectExplorer::BuildConfiguration::initialize(); - BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); - buildSteps->appendStep(ProjectExplorer::Constants::PROCESS_STEP_ID); -} - -ProjectExplorer::NamedWidget *CompilationDatabaseBuildConfiguration::createConfigWidget() -{ - return new ProjectExplorer::NamedWidget(); } CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurationFactory() @@ -526,13 +537,14 @@ CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurat } QList CompilationDatabaseBuildConfigurationFactory::availableBuilds - (const Kit *kit, const FilePath &, bool) const + (const Kit *kit, const FilePath &projectPath, bool) const { const QString name = tr("Release"); ProjectExplorer::BuildInfo info(this); info.typeName = name; info.displayName = name; info.buildType = BuildConfiguration::Release; + info.buildDirectory = projectPath.parentDir(); info.kitId = kit->id(); return {info}; } diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h index d5716c061ba..900f7d36756 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h @@ -38,13 +38,9 @@ QT_BEGIN_NAMESPACE class QTimer; QT_END_NAMESPACE -namespace CppTools { -class CppProjectUpdater; -} - -namespace ProjectExplorer { -class Kit; -} +namespace CppTools { class CppProjectUpdater; } +namespace ProjectExplorer { class Kit; } +namespace Utils { class FileSystemWatcher; } namespace CompilationDatabaseProjectManager { namespace Internal { @@ -63,6 +59,7 @@ private: RestoreResult fromMap(const QVariantMap &map, QString *errorMessage) override; void reparseProject(); + void updateDeploymentData(); void buildTreeAndProjectParts(); Utils::FilePath rootPathFromSettings() const; @@ -73,6 +70,7 @@ private: QByteArray m_projectFileHash; QTimer * const m_parseDelay; CompilationDbParser *m_parser = nullptr; + Utils::FileSystemWatcher * const m_deployFileWatcher; }; class CompilationDatabaseEditorFactory : public TextEditor::TextEditorFactory @@ -88,10 +86,6 @@ class CompilationDatabaseBuildConfiguration : public ProjectExplorer::BuildConfi Q_OBJECT public: CompilationDatabaseBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); - ProjectExplorer::NamedWidget *createConfigWidget() override; - -protected: - void initialize() override; }; class CompilationDatabaseBuildConfigurationFactory