From dd3482f6752d09d55d5f12a2e8cdbe1624344cf4 Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Sun, 27 Nov 2022 19:14:35 +1100 Subject: cmTargetPropCommandBase: Restore ArgumentFlags enum value bool logic The values of the cmTargetPropCommandBase::ArgumentFlags enum are combined in boolean OR and AND operations in various places. That used to be valid, but some values were added over time which did not preserve support for such boolean logic. Update the enum values such that they are increasing powers of 2 to restore that capability. Fixes: #24199 --- Source/cmTargetPropCommandBase.h | 4 ++-- Tests/RunCMake/target_compile_options/RunCMakeTest.cmake | 1 + Tests/RunCMake/target_compile_options/bad_keyword-result.txt | 1 + Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt | 2 ++ Tests/RunCMake/target_compile_options/bad_keyword.cmake | 5 +++++ 5 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/target_compile_options/bad_keyword-result.txt create mode 100644 Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt create mode 100644 Tests/RunCMake/target_compile_options/bad_keyword.cmake diff --git a/Source/cmTargetPropCommandBase.h b/Source/cmTargetPropCommandBase.h index 6bf7c3c..487beb4 100644 --- a/Source/cmTargetPropCommandBase.h +++ b/Source/cmTargetPropCommandBase.h @@ -24,8 +24,8 @@ public: NO_FLAGS = 0x0, PROCESS_BEFORE = 0x1, PROCESS_AFTER = 0x2, - PROCESS_SYSTEM = 0x3, - PROCESS_REUSE_FROM = 0x4 + PROCESS_SYSTEM = 0x4, + PROCESS_REUSE_FROM = 0x8 }; bool HandleArguments(std::vector const& args, diff --git a/Tests/RunCMake/target_compile_options/RunCMakeTest.cmake b/Tests/RunCMake/target_compile_options/RunCMakeTest.cmake index f726759..d703839 100644 --- a/Tests/RunCMake/target_compile_options/RunCMakeTest.cmake +++ b/Tests/RunCMake/target_compile_options/RunCMakeTest.cmake @@ -1,6 +1,7 @@ include(RunCMake) run_cmake(empty_keyword_args) +run_cmake(bad_keyword) if (CMAKE_C_COMPILER_ID MATCHES "GNU|LCC|Clang") macro(run_cmake_target test subtest target) diff --git a/Tests/RunCMake/target_compile_options/bad_keyword-result.txt b/Tests/RunCMake/target_compile_options/bad_keyword-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/target_compile_options/bad_keyword-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt b/Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt new file mode 100644 index 0000000..e22013e --- /dev/null +++ b/Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt @@ -0,0 +1,2 @@ +CMake Error at bad_keyword\.cmake:[0-9]+ \(target_compile_options\): + target_compile_options called with invalid arguments diff --git a/Tests/RunCMake/target_compile_options/bad_keyword.cmake b/Tests/RunCMake/target_compile_options/bad_keyword.cmake new file mode 100644 index 0000000..b7e6fca --- /dev/null +++ b/Tests/RunCMake/target_compile_options/bad_keyword.cmake @@ -0,0 +1,5 @@ +add_library(iface INTERFACE) + +# SYSTEM is a recognized keyword for the base class used to implement the +# command. Verify that we don't allow it. +target_compile_options(iface SYSTEM PRIVATE) -- cgit v0.12