// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "cmakeconfigitem.h" #include "fileapidataextractor.h" #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE template class QPromise; QT_END_NAMESPACE namespace CMakeProjectManager::Internal { namespace FileApiDetails { class ReplyObject { public: QString kind; QString file; std::pair version; }; class ReplyFileContents { public: QString generator; bool isMultiConfig = false; QString cmakeExecutable; QString ctestExecutable; QString cmakeRoot; QVector replies; QVersionNumber cmakeVersion; Utils::FilePath jsonFile(const QString &kind, const Utils::FilePath &replyDir) const; }; class Directory { public: QString buildPath; QString sourcePath; int parent = -1; int project = -1; std::vector children; std::vector targets; bool hasInstallRule = false; }; class Project { public: QString name; int parent = -1; std::vector children; std::vector directories; std::vector targets; }; class Target { public: // From codemodel file: QString name; QString id; int directory = -1; int project = -1; QString jsonFile; }; class Configuration { public: QString name; std::vector directories; std::vector projects; std::vector targets; }; class InstallDestination { public: QString path; int backtrace; }; class FragmentInfo { public: QString fragment; QString role; }; class LinkInfo { public: QString language; std::vector fragments; bool isLto = false; QString sysroot; }; class ArchiveInfo { public: std::vector fragments; bool isLto = false; }; class DependencyInfo { public: QString targetId; int backtrace; }; class SourceInfo { public: QString path; int compileGroup = -1; int sourceGroup = -1; int backtrace = -1; bool isGenerated = false; }; class IncludeInfo { public: ProjectExplorer::HeaderPath path; int backtrace; }; class DefineInfo { public: ProjectExplorer::Macro define; int backtrace; }; class CompileInfo { public: std::vector sources; QString language; QStringList fragments; std::vector includes; std::vector defines; QString sysroot; }; class BacktraceNode { public: int file = -1; int line = -1; int command = -1; int parent = -1; }; class BacktraceInfo { public: std::vector commands; std::vector files; std::vector nodes; }; class TargetDetails { public: QString name; QString id; QString type; QString folderTargetProperty; Utils::FilePath sourceDir; Utils::FilePath buildDir; int backtrace = -1; bool isGeneratorProvided = false; QString nameOnDisk; QList artifacts; QString installPrefix; std::vector installDestination; std::optional link; std::optional archive; std::vector dependencies; std::vector sources; std::vector sourceGroups; std::vector compileGroups; BacktraceInfo backtraceGraph; }; } // namespace FileApiDetails class FileApiData { public: FileApiDetails::ReplyFileContents replyFile; CMakeConfig cache; std::vector cmakeFiles; FileApiDetails::Configuration codemodel; std::vector targetDetails; }; class FileApiParser { public: static FileApiData parseData(QPromise> &promise, const Utils::FilePath &replyFilePath, const Utils::FilePath &buildDir, const QString &cmakeBuildType, QString &errorMessage); static bool setupCMakeFileApi(const Utils::FilePath &buildDirectory); static Utils::FilePath cmakeReplyDirectory(const Utils::FilePath &buildDirectory); static Utils::FilePaths cmakeQueryFilePaths(const Utils::FilePath &buildDirectory); static Utils::FilePath scanForCMakeReplyFile(const Utils::FilePath &buildDirectory); }; } // CMakeProjectManager::Internal