| 3086 | int NumExpectedParameters() const override { return ZeroOrMoreParameters; } |
| 3087 | |
| 3088 | std::string Evaluate( |
| 3089 | std::vector<std::string> const& parameters, cm::GenEx::Evaluation* eval, |
| 3090 | GeneratorExpressionContent const* content, |
| 3091 | cmGeneratorExpressionDAGChecker* dagChecker) const override |
| 3092 | { |
| 3093 | if (!eval->HeadTarget || !dagChecker || |
| 3094 | !(dagChecker->EvaluatingLinkExpression() || |
| 3095 | dagChecker->EvaluatingLinkLibraries() || |
| 3096 | dagChecker->EvaluatingLinkerLauncher())) { |
| 3097 | reportError(eval, content->GetOriginalExpression(), |
| 3098 | "$<LINK_LANGUAGE:...> may only be used with binary targets " |
| 3099 | "to specify link libraries, link directories, link options " |
| 3100 | "and link depends."); |
| 3101 | return std::string(); |
| 3102 | } |
| 3103 | if (dagChecker->EvaluatingLinkLibraries() && parameters.empty()) { |
| 3104 | reportError( |
| 3105 | eval, content->GetOriginalExpression(), |
| 3106 | "$<LINK_LANGUAGE> is not supported in link libraries expression."); |
| 3107 | return std::string(); |
| 3108 | } |
| 3109 | |
| 3110 | cmGlobalGenerator const* gg = eval->Context.LG->GetGlobalGenerator(); |
| 3111 | std::string genName = gg->GetName(); |
| 3112 | if (genName.find("Makefiles") == std::string::npos && |
| 3113 | genName.find("Ninja") == std::string::npos && |
| 3114 | genName.find("FASTBuild") == std::string::npos && |
| 3115 | genName.find("Visual Studio") == std::string::npos && |
| 3116 | genName.find("Xcode") == std::string::npos && |
| 3117 | genName.find("Watcom WMake") == std::string::npos && |
| 3118 | genName.find("Green Hills MULTI") == std::string::npos) { |
| 3119 | reportError(eval, content->GetOriginalExpression(), |
| 3120 | "$<LINK_LANGUAGE:...> not supported for this generator."); |
| 3121 | return std::string(); |
| 3122 | } |
| 3123 | |
| 3124 | if (dagChecker->EvaluatingLinkLibraries()) { |
| 3125 | eval->HadHeadSensitiveCondition = true; |
| 3126 | eval->HadLinkLanguageSensitiveCondition = true; |
| 3127 | } |
| 3128 | |
| 3129 | if (parameters.empty()) { |
| 3130 | return eval->Context.Language; |
| 3131 | } |
| 3132 | |
| 3133 | for (auto const& param : parameters) { |
| 3134 | if (eval->Context.Language == param) { |
| 3135 | return "1"; |
| 3136 | } |
| 3137 | } |
| 3138 | return "0"; |
| 3139 | } |
| 3140 | } linkLanguageNode; |
| 3141 | |
| 3142 | namespace { |
nothing calls this directly
no test coverage detected