| 3181 | int NumExpectedParameters() const override { return TwoOrMoreParameters; } |
| 3182 | |
| 3183 | std::string Evaluate( |
| 3184 | std::vector<std::string> const& parameters, cm::GenEx::Evaluation* eval, |
| 3185 | GeneratorExpressionContent const* content, |
| 3186 | cmGeneratorExpressionDAGChecker* dagChecker) const override |
| 3187 | { |
| 3188 | if (!eval->HeadTarget || !dagChecker || |
| 3189 | !(dagChecker->EvaluatingLinkExpression() || |
| 3190 | dagChecker->EvaluatingLinkLibraries() || |
| 3191 | dagChecker->EvaluatingLinkerLauncher())) { |
| 3192 | reportError( |
| 3193 | eval, content->GetOriginalExpression(), |
| 3194 | "$<LINK_LANG_AND_ID:lang,id> may only be used with binary targets " |
| 3195 | "to specify link libraries, link directories, link options, and " |
| 3196 | "link " |
| 3197 | "depends."); |
| 3198 | return std::string(); |
| 3199 | } |
| 3200 | |
| 3201 | cmGlobalGenerator const* gg = eval->Context.LG->GetGlobalGenerator(); |
| 3202 | std::string genName = gg->GetName(); |
| 3203 | if (genName.find("Makefiles") == std::string::npos && |
| 3204 | genName.find("Ninja") == std::string::npos && |
| 3205 | genName.find("FASTBuild") == std::string::npos && |
| 3206 | genName.find("Visual Studio") == std::string::npos && |
| 3207 | genName.find("Xcode") == std::string::npos && |
| 3208 | genName.find("Watcom WMake") == std::string::npos && |
| 3209 | genName.find("Green Hills MULTI") == std::string::npos) { |
| 3210 | reportError( |
| 3211 | eval, content->GetOriginalExpression(), |
| 3212 | "$<LINK_LANG_AND_ID:lang,id> not supported for this generator."); |
| 3213 | return std::string(); |
| 3214 | } |
| 3215 | |
| 3216 | if (dagChecker->EvaluatingLinkLibraries()) { |
| 3217 | eval->HadHeadSensitiveCondition = true; |
| 3218 | eval->HadLinkLanguageSensitiveCondition = true; |
| 3219 | } |
| 3220 | |
| 3221 | std::string const& lang = eval->Context.Language; |
| 3222 | if (lang == parameters.front()) { |
| 3223 | std::vector<std::string> idParameter((parameters.cbegin() + 1), |
| 3224 | parameters.cend()); |
| 3225 | return LinkerId::Evaluate(idParameter, eval, content, lang); |
| 3226 | } |
| 3227 | return "0"; |
| 3228 | } |
| 3229 | } linkLanguageAndIdNode; |
| 3230 | |
| 3231 | struct CompilerLinkerIdNode : public cmGeneratorExpressionNode |
nothing calls this directly
no test coverage detected