diff options
Diffstat (limited to 'Source/cmCxxModuleMapper.h')
-rw-r--r-- | Source/cmCxxModuleMapper.h | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/Source/cmCxxModuleMapper.h b/Source/cmCxxModuleMapper.h index 99384c9..6d29fc0 100644 --- a/Source/cmCxxModuleMapper.h +++ b/Source/cmCxxModuleMapper.h @@ -5,12 +5,15 @@ #include "cmConfigure.h" // IWYU pragma: keep #include <functional> +#include <map> +#include <set> #include <string> +#include <vector> #include <cm/optional> #include <cmext/string_view> -struct cmScanDepInfo; +#include "cmScanDepFormat.h" enum class CxxModuleMapFormat { @@ -37,10 +40,42 @@ struct CxxModuleLocations std::string const& logical_name) const; }; +struct CxxModuleReference +{ + // The path to the module file used. + std::string Path; + // How the module was looked up. + LookupMethod Method; +}; + +struct CxxModuleUsage +{ + // The usage requirements for this object. + std::map<std::string, std::set<std::string>> Usage; + + // The references for this object. + std::map<std::string, CxxModuleReference> Reference; + + // Add a reference to a module. + // + // Returns `true` if it matches how it was found previously, `false` if it + // conflicts. + bool AddReference(std::string const& logical, std::string const& loc, + LookupMethod method); +}; + // Return the extension to use for a given modulemap format. cm::static_string_view CxxModuleMapExtension( cm::optional<CxxModuleMapFormat> format); +// Fill in module usage information for internal usages. +// +// Returns the set of unresolved module usage requirements (these form an +// import cycle). +std::set<std::string> CxxModuleUsageSeed( + CxxModuleLocations const& loc, std::vector<cmScanDepInfo> const& objects, + CxxModuleUsage& usages); + // Return the contents of the module map in the given format for the // object file. std::string CxxModuleMapContent(CxxModuleMapFormat format, |