/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include <functional> #include <memory> #include <string> #include <vector> #include <cm/optional> class cmGeneratorTarget; struct cmScanDepInfo; class cmSourceFile; namespace Json { class Value; } struct cmDyndepGeneratorCallbacks { std::function<std::string(cmSourceFile const* sf, std::string const& config)> ObjectFilePath; }; struct cmDyndepMetadataCallbacks { std::function<cm::optional<std::string>(std::string const& name)> ModuleFile; }; struct cmCxxModuleExportInfo; struct cmCxxModuleExportInfoDeleter { void operator()(cmCxxModuleExportInfo* ei) const; }; struct cmDyndepCollation { static void AddCollationInformation(Json::Value& tdi, cmGeneratorTarget const* gt, std::string const& config, cmDyndepGeneratorCallbacks const& cb); static std::unique_ptr<cmCxxModuleExportInfo, cmCxxModuleExportInfoDeleter> ParseExportInfo(Json::Value const& tdi); static bool WriteDyndepMetadata(std::string const& lang, std::vector<cmScanDepInfo> const& objects, cmCxxModuleExportInfo const& export_info, cmDyndepMetadataCallbacks const& cb); static bool IsObjectPrivate(std::string const& object, cmCxxModuleExportInfo const& export_info); };