| 4929 | } |
| 4930 | |
| 4931 | bool cmGeneratorTarget::GetConfigCommonSourceFilesForXcode( |
| 4932 | std::vector<cmSourceFile*>& files) const |
| 4933 | { |
| 4934 | std::vector<std::string> const& configs = |
| 4935 | this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); |
| 4936 | |
| 4937 | auto it = configs.begin(); |
| 4938 | std::string const& firstConfig = *it; |
| 4939 | this->GetSourceFilesWithoutObjectLibraries(files, firstConfig); |
| 4940 | |
| 4941 | for (; it != configs.end(); ++it) { |
| 4942 | std::vector<cmSourceFile*> configFiles; |
| 4943 | this->GetSourceFilesWithoutObjectLibraries(configFiles, *it); |
| 4944 | if (configFiles != files) { |
| 4945 | std::string firstConfigFiles; |
| 4946 | char const* sep = ""; |
| 4947 | for (cmSourceFile* f : files) { |
| 4948 | firstConfigFiles += sep; |
| 4949 | firstConfigFiles += f->ResolveFullPath(); |
| 4950 | sep = "\n "; |
| 4951 | } |
| 4952 | |
| 4953 | std::string thisConfigFiles; |
| 4954 | sep = ""; |
| 4955 | for (cmSourceFile* f : configFiles) { |
| 4956 | thisConfigFiles += sep; |
| 4957 | thisConfigFiles += f->ResolveFullPath(); |
| 4958 | sep = "\n "; |
| 4959 | } |
| 4960 | std::ostringstream e; |
| 4961 | /* clang-format off */ |
| 4962 | e << "Target \"" << this->GetName() |
| 4963 | << "\" has source files which vary by " |
| 4964 | "configuration. This is not supported by the \"" |
| 4965 | << this->GlobalGenerator->GetName() |
| 4966 | << "\" generator.\n" |
| 4967 | "Config \"" << firstConfig << "\":\n" |
| 4968 | " " << firstConfigFiles << "\n" |
| 4969 | "Config \"" << *it << "\":\n" |
| 4970 | " " << thisConfigFiles << "\n"; |
| 4971 | /* clang-format on */ |
| 4972 | this->LocalGenerator->IssueMessage(MessageType::FATAL_ERROR, e.str()); |
| 4973 | return false; |
| 4974 | } |
| 4975 | } |
| 4976 | return true; |
| 4977 | } |
| 4978 | |
| 4979 | void cmGeneratorTarget::GetObjectLibrariesInSources( |
| 4980 | std::vector<BT<cmGeneratorTarget*>>& objlibs) const |
no test coverage detected