MCPcopy Create free account
hub / github.com/Kitware/CMake / GetFileSetFiles

Method GetFileSetFiles

Source/cmExportInstallCMakeConfigGenerator.cxx:328–405  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

326}
327
328std::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));

Callers

nothing calls this directly

Calls 15

GetGeneratorConfigsMethod · 0.80
CompileFileEntriesMethod · 0.80
EvaluateFileEntryMethod · 0.80
strMethod · 0.80
push_backMethod · 0.80
emplace_backMethod · 0.80
cmStrCatFunction · 0.70
cmJoinFunction · 0.70
GetCMakeInstanceMethod · 0.45
ParseMethod · 0.45

Tested by

no test coverage detected