mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-10-07 04:02:23 +03:00
GenEx SOURCE_PROPERTY: fix evaluation of generation expressions
This commit is contained in:
1 parent
80f1d73512
commit
699f4d61a5
2 files changed
+60
-2
No files matched your search
@@ -3841,7 +3841,7 @@ static const struct SourcePropertyNode : public cmGeneratorExpressionNode
|
||||
std::string Evaluate(
|
||||
std::vector<std::string> const& parameters, cm::GenEx::Evaluation* eval,
|
||||
GeneratorExpressionContent const* content,
|
||||
cmGeneratorExpressionDAGChecker* /*dagCheckerParent*/) const override
|
||||
cmGeneratorExpressionDAGChecker* dagCheckerParent) const override
|
||||
{
|
||||
static cmsys::RegularExpression propertyNameValidator("^[A-Za-z0-9_]+$");
|
||||
|
||||
@@ -3891,7 +3891,47 @@ static const struct SourcePropertyNode : public cmGeneratorExpressionNode
|
||||
return std::string{};
|
||||
}
|
||||
|
||||
return sourceFile->GetPropertyForUser(propertyName);
|
||||
if (propertyName == "OBJECT_NAME"_s) {
|
||||
return eval->Context.LG->GetCustomObjectFileName(*sourceFile);
|
||||
}
|
||||
|
||||
std::string result = sourceFile->GetPropertyForUser(propertyName);
|
||||
|
||||
if (propertyName == "INCLUDE_DIRECTORIES"_s ||
|
||||
propertyName == "COMPILE_DEFINITIONS"_s ||
|
||||
propertyName == "COMPILE_OPTIONS"_s ||
|
||||
propertyName == "COMPILE_FLAGS"_s ||
|
||||
propertyName == "OBJECT_OUTPUTS"_s ||
|
||||
propertyName == "VS_DEPLOYMENT_CONTENT"_s ||
|
||||
propertyName == "VS_SETTINGS"_s) {
|
||||
if (eval->HeadTarget) {
|
||||
cmGeneratorExpressionDAGChecker dagChecker{
|
||||
eval->HeadTarget, propertyName, content,
|
||||
dagCheckerParent, eval->Context, eval->Backtrace,
|
||||
};
|
||||
switch (dagChecker.Check()) {
|
||||
case cmGeneratorExpressionDAGChecker::SELF_REFERENCE:
|
||||
case cmGeneratorExpressionDAGChecker::CYCLIC_REFERENCE: {
|
||||
dagChecker.ReportError(eval, content->GetOriginalExpression());
|
||||
return std::string{};
|
||||
}
|
||||
case cmGeneratorExpressionDAGChecker::ALREADY_SEEN:
|
||||
case cmGeneratorExpressionDAGChecker::DAG:
|
||||
break;
|
||||
}
|
||||
|
||||
return cmGeneratorExpression::StripEmptyListElements(
|
||||
this->EvaluateDependentExpression(result, eval, eval->HeadTarget,
|
||||
&dagChecker, eval->CurrentTarget));
|
||||
}
|
||||
|
||||
return cmGeneratorExpression::StripEmptyListElements(
|
||||
this->EvaluateDependentExpression(result, eval, eval->HeadTarget,
|
||||
dagCheckerParent,
|
||||
eval->CurrentTarget));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
} sourcePropertyNode;
|
||||
|
||||
|
||||
@@ -42,5 +42,23 @@ string (APPEND GENERATE_CONTENT
|
||||
"check_value (\"<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,VOID>\" \"$<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,VOID>\" \"${reference}\")\n")
|
||||
|
||||
|
||||
set_property(SOURCE foo.c PROPERTY INCLUDE_DIRECTORIES "$<$<BOOL:ON>:${CMAKE_CURRENT_SOURCE_DIR}>")
|
||||
string (APPEND GENERATE_CONTENT
|
||||
"check_value (\"<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,INCLUDE_DIRECTORIES>\" \"$<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,INCLUDE_DIRECTORIES>\" \"${CMAKE_CURRENT_SOURCE_DIR}\")\n")
|
||||
|
||||
set_property(SOURCE foo.c PROPERTY COMPILE_DEFINITIONS "$<$<BOOL:ON>:SRC_DEF>")
|
||||
string (APPEND GENERATE_CONTENT
|
||||
"check_value (\"<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,COMPILE_DEFINITIONS>\" \"$<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,COMPILE_DEFINITIONS>\" \"SRC_DEF\")\n")
|
||||
|
||||
set_property(SOURCE foo.c PROPERTY COMPILE_OPTIONS "$<$<BOOL:ON>:SRC_OPT>")
|
||||
string (APPEND GENERATE_CONTENT
|
||||
"check_value (\"<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,COMPILE_OPTIONS>\" \"$<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,COMPILE_OPTIONS>\" \"SRC_OPT\")\n")
|
||||
|
||||
if(NOT CMAKE_GENERATOR MATCHES "Xcode|FASTBuild")
|
||||
set_property(SOURCE foo.c PROPERTY OBJECT_NAME "$<$<BOOL:ON>:bar>")
|
||||
string (APPEND GENERATE_CONTENT
|
||||
"check_value (\"<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,OBJECT_NAME>\" \"$<SOURCE_PROPERTY:foo.c,TARGET_DIRECTORY:foo,OBJECT_NAME>\" \"bar\")\n")
|
||||
endif()
|
||||
|
||||
file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Local-generated.cmake"
|
||||
CONTENT "${GENERATE_CONTENT}")
|
||||
Reference in new issue
Block a user