| 326 | } |
| 327 | |
| 328 | std::string cmExportInstallCMakeConfigGenerator::GetFileSetFiles( |
| 329 | cmGeneratorTarget* gte, cmFileSet* fileSet, cmTargetExport const* te) |
| 330 | { |
| 331 | std::vector<std::string> resultVector; |
| 332 | |
| 333 | auto configs = |
| 334 | gte->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); |
| 335 | |
| 336 | auto fileEntries = fileSet->CompileFileEntries(); |
| 337 | auto directoryEntries = fileSet->CompileDirectoryEntries(); |
| 338 | |
| 339 | cmGeneratorExpression destGe(*gte->Makefile->GetCMakeInstance()); |
| 340 | auto destCge = destGe.Parse( |
| 341 | te->FileSetGenerators.at(fileSet->GetName())->GetDestination()); |
| 342 | |
| 343 | for (auto const& config : configs) { |
| 344 | cm::GenEx::Context context(gte->LocalGenerator, config); |
| 345 | auto directories = |
| 346 | fileSet->EvaluateDirectoryEntries(directoryEntries, context, gte); |
| 347 | |
| 348 | std::map<std::string, std::vector<std::string>> files; |
| 349 | for (auto const& entry : fileEntries) { |
| 350 | fileSet->EvaluateFileEntry(directories, files, entry, context, gte); |
| 351 | } |
| 352 | auto unescapedDest = destCge->Evaluate(gte->LocalGenerator, config, gte); |
| 353 | auto dest = |
| 354 | cmStrCat(cmOutputConverter::EscapeForCMake( |
| 355 | unescapedDest, cmOutputConverter::WrapQuotes::NoWrap), |
| 356 | '/'); |
| 357 | if (!cmSystemTools::FileIsFullPath(unescapedDest)) { |
| 358 | dest = cmStrCat("${_IMPORT_PREFIX}/", dest); |
| 359 | } |
| 360 | |
| 361 | bool const contextSensitive = destCge->GetHadContextSensitiveCondition() || |
| 362 | std::any_of(directoryEntries.begin(), directoryEntries.end(), |
| 363 | EntryIsContextSensitive) || |
| 364 | std::any_of(fileEntries.begin(), fileEntries.end(), |
| 365 | EntryIsContextSensitive); |
| 366 | |
| 367 | auto const& type = fileSet->GetType(); |
| 368 | // C++ modules do not support interface file sets which are dependent upon |
| 369 | // the configuration. |
| 370 | if (contextSensitive && type == "CXX_MODULES"_s) { |
| 371 | auto* mf = this->IEGen->GetLocalGenerator()->GetMakefile(); |
| 372 | std::ostringstream e; |
| 373 | e << "The \"" << gte->GetName() << "\" target's interface file set \"" |
| 374 | << fileSet->GetName() << "\" of type \"" << type |
| 375 | << "\" contains context-sensitive base file entries which is not " |
| 376 | "supported."; |
| 377 | mf->IssueMessage(MessageType::FATAL_ERROR, e.str()); |
| 378 | return std::string{}; |
| 379 | } |
| 380 | |
| 381 | for (auto const& it : files) { |
| 382 | auto prefix = it.first.empty() ? "" : cmStrCat(it.first, '/'); |
| 383 | for (auto const& filename : it.second) { |
| 384 | auto relFile = |
| 385 | cmStrCat(prefix, cmSystemTools::GetFilenameNameView(filename)); |
nothing calls this directly
no test coverage detected