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

Method Evaluate

Source/cmGeneratorExpressionNode.cxx:3088–3139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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
3142namespace {

Callers

nothing calls this directly

Calls 9

reportErrorFunction · 0.85
GetOriginalExpressionMethod · 0.80
emptyMethod · 0.45
GetGlobalGeneratorMethod · 0.45
GetNameMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected