Browse Source

Merge topic 'genx-COMPILE_LANGUAGE-support'

6491d2503c Genex $<COMPILE_LANGUAGE>: Extend contexts supported

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5005
pull/334/head
Brad King 5 years ago
committed by Kitware Robot
parent
commit
2da778664d
  1. 8
      Source/cmGeneratorExpressionDAGChecker.cxx
  2. 1
      Source/cmGeneratorExpressionDAGChecker.h
  3. 9
      Source/cmGeneratorExpressionNode.cxx
  4. 17
      Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-TARGET_PROPERTY.cmake
  5. 1
      Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake
  6. 17
      Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-TARGET_PROPERTY.cmake
  7. 1
      Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake

8
Source/cmGeneratorExpressionDAGChecker.cxx

@ -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
Source/cmGeneratorExpressionDAGChecker.h

@ -68,6 +68,7 @@ struct cmGeneratorExpressionDAGChecker
bool EvaluatingGenexExpression() const;
bool EvaluatingPICExpression() const;
bool EvaluatingCompileExpression() const;
bool EvaluatingLinkExpression() const;
bool EvaluatingLinkOptionsExpression() const;

9
Source/cmGeneratorExpressionNode.cxx

@ -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(),

17
Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-TARGET_PROPERTY.cmake

@ -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>)

1
Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake

@ -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)

17
Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-TARGET_PROPERTY.cmake

@ -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>)

1
Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake

@ -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)
Loading…
Cancel
Save