| 169 | } |
| 170 | |
| 171 | std::string cmExportBuildCMakeConfigGenerator::GetFileSetDirectories( |
| 172 | cmGeneratorTarget* gte, cmFileSet* fileSet, cmTargetExport const* /*te*/) |
| 173 | { |
| 174 | std::vector<std::string> resultVector; |
| 175 | |
| 176 | auto configs = |
| 177 | gte->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); |
| 178 | auto directoryEntries = fileSet->CompileDirectoryEntries(); |
| 179 | |
| 180 | for (auto const& config : configs) { |
| 181 | cm::GenEx::Context context(gte->LocalGenerator, config); |
| 182 | auto directories = |
| 183 | fileSet->EvaluateDirectoryEntries(directoryEntries, context, gte); |
| 184 | |
| 185 | bool const contextSensitive = |
| 186 | std::any_of(directoryEntries.begin(), directoryEntries.end(), |
| 187 | EntryIsContextSensitive); |
| 188 | |
| 189 | auto const& type = fileSet->GetType(); |
| 190 | // C++ modules do not support interface file sets which are dependent upon |
| 191 | // the configuration. |
| 192 | if (contextSensitive && type == "CXX_MODULES"_s) { |
| 193 | auto* mf = this->LG->GetMakefile(); |
| 194 | std::ostringstream e; |
| 195 | e << "The \"" << gte->GetName() << "\" target's interface file set \"" |
| 196 | << fileSet->GetName() << "\" of type \"" << type |
| 197 | << "\" contains context-sensitive base directory entries which is not " |
| 198 | "supported."; |
| 199 | mf->IssueMessage(MessageType::FATAL_ERROR, e.str()); |
| 200 | return std::string{}; |
| 201 | } |
| 202 | |
| 203 | for (auto const& directory : directories) { |
| 204 | auto dest = cmOutputConverter::EscapeForCMake( |
| 205 | directory, cmOutputConverter::WrapQuotes::NoWrap); |
| 206 | |
| 207 | if (contextSensitive && configs.size() != 1) { |
| 208 | resultVector.push_back( |
| 209 | cmStrCat("\"$<$<CONFIG:", config, ">:", dest, ">\"")); |
| 210 | } else { |
| 211 | resultVector.emplace_back(cmStrCat('"', dest, '"')); |
| 212 | } |
| 213 | } |
| 214 | } |
| 215 | |
| 216 | return cmJoin(resultVector, " "); |
| 217 | } |
| 218 | |
| 219 | std::string cmExportBuildCMakeConfigGenerator::GetFileSetFiles( |
| 220 | cmGeneratorTarget* gte, cmFileSet* fileSet, cmTargetExport const* /*te*/) |
nothing calls this directly
no test coverage detected