Merge topic 'genx-COMPILE_LANGUAGE-support'

6491d2503c Genex $<COMPILE_LANGUAGE>: Extend contexts supported

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5005
This commit is contained in:
Brad King
2020-07-14 11:22:24 +00:00
committed by Kitware Robot
7 changed files with 51 additions and 3 deletions
@@ -154,6 +154,14 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingPICExpression() const
return this->Top()->Property == "INTERFACE_POSITION_INDEPENDENT_CODE";
}
bool cmGeneratorExpressionDAGChecker::EvaluatingCompileExpression() const
{
cm::string_view property(this->Top()->Property);
return property == "INCLUDE_DIRECTORIES"_s ||
property == "COMPILE_DEFINITIONS"_s || property == "COMPILE_OPTIONS"_s;
}
bool cmGeneratorExpressionDAGChecker::EvaluatingLinkExpression() const
{
cm::string_view property(this->Top()->Property);
+1
View File
@@ -68,6 +68,7 @@ struct cmGeneratorExpressionDAGChecker
bool EvaluatingGenexExpression() const;
bool EvaluatingPICExpression() const;
bool EvaluatingCompileExpression() const;
bool EvaluatingLinkExpression() const;
bool EvaluatingLinkOptionsExpression() const;
+6 -3
View File
@@ -967,9 +967,10 @@ static const struct CompileLanguageNode : public cmGeneratorExpressionNode
const std::vector<std::string>& parameters,
cmGeneratorExpressionContext* context,
const GeneratorExpressionContent* content,
cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
cmGeneratorExpressionDAGChecker* dagChecker) const override
{
if (context->Language.empty()) {
if (context->Language.empty() &&
(!dagChecker || !dagChecker->EvaluatingCompileExpression())) {
reportError(
context, content->GetOriginalExpression(),
"$<COMPILE_LANGUAGE:...> may only be used to specify include "
@@ -1014,7 +1015,9 @@ static const struct CompileLanguageAndIdNode : public cmGeneratorExpressionNode
const GeneratorExpressionContent* content,
cmGeneratorExpressionDAGChecker* dagChecker) const override
{
if (!context->HeadTarget || context->Language.empty()) {
if (!context->HeadTarget ||
(context->Language.empty() &&
(!dagChecker || !dagChecker->EvaluatingCompileExpression()))) {
// reportError(context, content->GetOriginalExpression(), "");
reportError(
context, content->GetOriginalExpression(),
@@ -0,0 +1,17 @@
enable_language(C)
add_library (lib SHARED empty.c)
set_target_properties(lib PROPERTIES
INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:C>:/usr/include>"
COMPILE_DEFINITIONS "$<$<COMPILE_LANGUAGE:C>:DEF>"
COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:C>:-O>")
add_custom_target(drive
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
add_custom_command(TARGET drive PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANGUAGE-add_executable)
run_cmake(COMPILE_LANGUAGE-add_library)
run_cmake(COMPILE_LANGUAGE-add_test)
run_cmake(COMPILE_LANGUAGE-unknown-lang)
run_cmake(COMPILE_LANGUAGE-TARGET_PROPERTY)
@@ -0,0 +1,17 @@
enable_language(C)
add_library (lib SHARED empty.c)
set_target_properties(lib PROPERTIES
INCLUDE_DIRECTORIES "$<$<COMPILE_LANG_AND_ID:C,GNU>:/usr/include>"
COMPILE_DEFINITIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:DEF>"
COMPILE_OPTIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:-O>")
add_custom_target(drive
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
add_custom_command(TARGET drive PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANG_AND_ID-add_executable)
run_cmake(COMPILE_LANG_AND_ID-add_library)
run_cmake(COMPILE_LANG_AND_ID-add_test)
run_cmake(COMPILE_LANG_AND_ID-unknown-lang)
run_cmake(COMPILE_LANG_AND_ID-TARGET_PROPERTY)