Skip to content

Commit 2da7786

Browse files
bradkingkwrobot
authored andcommitted
Merge topic 'genx-COMPILE_LANGUAGE-support'
6491d25 Genex $<COMPILE_LANGUAGE>: Extend contexts supported Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5005
2 parents 35928fa + 6491d25 commit 2da7786

File tree

7 files changed

+51
-3
lines changed

7 files changed

+51
-3
lines changed

Source/cmGeneratorExpressionDAGChecker.cxx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingPICExpression() const
154154
return this->Top()->Property == "INTERFACE_POSITION_INDEPENDENT_CODE";
155155
}
156156

157+
bool cmGeneratorExpressionDAGChecker::EvaluatingCompileExpression() const
158+
{
159+
cm::string_view property(this->Top()->Property);
160+
161+
return property == "INCLUDE_DIRECTORIES"_s ||
162+
property == "COMPILE_DEFINITIONS"_s || property == "COMPILE_OPTIONS"_s;
163+
}
164+
157165
bool cmGeneratorExpressionDAGChecker::EvaluatingLinkExpression() const
158166
{
159167
cm::string_view property(this->Top()->Property);

Source/cmGeneratorExpressionDAGChecker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct cmGeneratorExpressionDAGChecker
6868

6969
bool EvaluatingGenexExpression() const;
7070
bool EvaluatingPICExpression() const;
71+
bool EvaluatingCompileExpression() const;
7172
bool EvaluatingLinkExpression() const;
7273
bool EvaluatingLinkOptionsExpression() const;
7374

Source/cmGeneratorExpressionNode.cxx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -967,9 +967,10 @@ static const struct CompileLanguageNode : public cmGeneratorExpressionNode
967967
const std::vector<std::string>& parameters,
968968
cmGeneratorExpressionContext* context,
969969
const GeneratorExpressionContent* content,
970-
cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
970+
cmGeneratorExpressionDAGChecker* dagChecker) const override
971971
{
972-
if (context->Language.empty()) {
972+
if (context->Language.empty() &&
973+
(!dagChecker || !dagChecker->EvaluatingCompileExpression())) {
973974
reportError(
974975
context, content->GetOriginalExpression(),
975976
"$<COMPILE_LANGUAGE:...> may only be used to specify include "
@@ -1014,7 +1015,9 @@ static const struct CompileLanguageAndIdNode : public cmGeneratorExpressionNode
10141015
const GeneratorExpressionContent* content,
10151016
cmGeneratorExpressionDAGChecker* dagChecker) const override
10161017
{
1017-
if (!context->HeadTarget || context->Language.empty()) {
1018+
if (!context->HeadTarget ||
1019+
(context->Language.empty() &&
1020+
(!dagChecker || !dagChecker->EvaluatingCompileExpression()))) {
10181021
// reportError(context, content->GetOriginalExpression(), "");
10191022
reportError(
10201023
context, content->GetOriginalExpression(),
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
enable_language(C)
2+
3+
add_library (lib SHARED empty.c)
4+
set_target_properties(lib PROPERTIES
5+
INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:C>:/usr/include>"
6+
COMPILE_DEFINITIONS "$<$<COMPILE_LANGUAGE:C>:DEF>"
7+
COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:C>:-O>")
8+
9+
add_custom_target(drive
10+
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
11+
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
12+
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
13+
14+
add_custom_command(TARGET drive PRE_BUILD
15+
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
16+
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
17+
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)

Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANGUAGE-add_executable)
88
run_cmake(COMPILE_LANGUAGE-add_library)
99
run_cmake(COMPILE_LANGUAGE-add_test)
1010
run_cmake(COMPILE_LANGUAGE-unknown-lang)
11+
run_cmake(COMPILE_LANGUAGE-TARGET_PROPERTY)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
enable_language(C)
2+
3+
add_library (lib SHARED empty.c)
4+
set_target_properties(lib PROPERTIES
5+
INCLUDE_DIRECTORIES "$<$<COMPILE_LANG_AND_ID:C,GNU>:/usr/include>"
6+
COMPILE_DEFINITIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:DEF>"
7+
COMPILE_OPTIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:-O>")
8+
9+
add_custom_target(drive
10+
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
11+
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
12+
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
13+
14+
add_custom_command(TARGET drive PRE_BUILD
15+
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
16+
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
17+
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)

Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANG_AND_ID-add_executable)
88
run_cmake(COMPILE_LANG_AND_ID-add_library)
99
run_cmake(COMPILE_LANG_AND_ID-add_test)
1010
run_cmake(COMPILE_LANG_AND_ID-unknown-lang)
11+
run_cmake(COMPILE_LANG_AND_ID-TARGET_PROPERTY)

0 commit comments

Comments
 (0)