| 217 | } |
| 218 | |
| 219 | std::string cmExportBuildCMakeConfigGenerator::GetFileSetFiles( |
| 220 | cmGeneratorTarget* gte, cmFileSet* fileSet, cmTargetExport const* /*te*/) |
| 221 | { |
| 222 | std::vector<std::string> resultVector; |
| 223 | |
| 224 | auto configs = |
| 225 | gte->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); |
| 226 | |
| 227 | auto fileEntries = fileSet->CompileFileEntries(); |
| 228 | auto directoryEntries = fileSet->CompileDirectoryEntries(); |
| 229 | |
| 230 | for (auto const& config : configs) { |
| 231 | cm::GenEx::Context context(gte->LocalGenerator, config); |
| 232 | auto directories = |
| 233 | fileSet->EvaluateDirectoryEntries(directoryEntries, context, gte); |
| 234 | |
| 235 | std::map<std::string, std::vector<std::string>> files; |
| 236 | for (auto const& entry : fileEntries) { |
| 237 | fileSet->EvaluateFileEntry(directories, files, entry, context, gte); |
| 238 | } |
| 239 | |
| 240 | bool const contextSensitive = |
| 241 | std::any_of(directoryEntries.begin(), directoryEntries.end(), |
| 242 | EntryIsContextSensitive) || |
| 243 | std::any_of(fileEntries.begin(), fileEntries.end(), |
| 244 | EntryIsContextSensitive); |
| 245 | |
| 246 | auto const& type = fileSet->GetType(); |
| 247 | // C++ modules do not support interface file sets which are dependent upon |
| 248 | // the configuration. |
| 249 | if (contextSensitive && type == "CXX_MODULES"_s) { |
| 250 | auto* mf = this->LG->GetMakefile(); |
| 251 | std::ostringstream e; |
| 252 | e << "The \"" << gte->GetName() << "\" target's interface file set \"" |
| 253 | << fileSet->GetName() << "\" of type \"" << type |
| 254 | << "\" contains context-sensitive file entries which is not " |
| 255 | "supported."; |
| 256 | mf->IssueMessage(MessageType::FATAL_ERROR, e.str()); |
| 257 | return std::string{}; |
| 258 | } |
| 259 | |
| 260 | for (auto const& it : files) { |
| 261 | for (auto const& filename : it.second) { |
| 262 | auto escapedFile = cmOutputConverter::EscapeForCMake( |
| 263 | filename, cmOutputConverter::WrapQuotes::NoWrap); |
| 264 | if (contextSensitive && configs.size() != 1) { |
| 265 | resultVector.push_back( |
| 266 | cmStrCat("\"$<$<CONFIG:", config, ">:", escapedFile, ">\"")); |
| 267 | } else { |
| 268 | resultVector.emplace_back(cmStrCat('"', escapedFile, '"')); |
| 269 | } |
| 270 | } |
| 271 | } |
| 272 | |
| 273 | if (!(contextSensitive && configs.size() != 1)) { |
| 274 | break; |
| 275 | } |
| 276 | } |
nothing calls this directly
no test coverage detected