mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include <chrono>
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include <cm/string_view>
|
|
|
|
#include "cmMessenger.h"
|
|
#include "cmSarif.h"
|
|
|
|
/// @brief Manages SARIF logging for a CMake run
|
|
///
|
|
/// Writes diagnostics collected during a CMake run to a SARIF log file if
|
|
/// enabled by conditions.
|
|
class cmCMakeSarifLogger final
|
|
{
|
|
public:
|
|
cmCMakeSarifLogger() = default;
|
|
~cmCMakeSarifLogger();
|
|
|
|
/// @brief Enable SARIF file generation at the given path when the logger is
|
|
/// destroyed.
|
|
void SetOutputPath(std::string const& path);
|
|
|
|
/// @brief Add a logical base directory used to emit relative paths.
|
|
///
|
|
/// Artifact locations under a given path will be expressed according to
|
|
/// the named base directory. If multiple base directories are added to one
|
|
/// log, they are tested in order.
|
|
void AddBaseDirectory(cm::string_view name, cm::string_view path);
|
|
|
|
/// @brief Save CMake diagnostic messages to the SARIF log.
|
|
void RecordDiagnostics(std::vector<cmMessenger::Message> const& messages);
|
|
|
|
/// @brief Save information about the CMake process invocation.
|
|
void RecordInvocation(int ac, char const* const* av, int exitCode,
|
|
std::chrono::system_clock::time_point startTime,
|
|
std::chrono::system_clock::time_point endTime);
|
|
|
|
void GenerateForRun() const;
|
|
|
|
private:
|
|
bool WriteFile(std::string const& path) const;
|
|
|
|
std::string FilePath;
|
|
cmSarif::Run CMakeRun;
|
|
// Index of a diagnostic category appearing in the current run log.
|
|
std::unordered_map<std::string, std::size_t> RuleIndices;
|
|
// Maps logical name to actual path for base directories
|
|
std::vector<std::pair<std::string, std::string>> UriBaseIds;
|
|
};
|