diff options
author | Brad King <brad.king@kitware.com> | 2022-11-28 17:07:13 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-11-28 17:07:30 (GMT) |
commit | 2d373b64ea7173dc587cd0b54144c1cad3534be4 (patch) | |
tree | 4eb8741624344806782bb47a571ec55b530eca4d | |
parent | b4e373aa9dd28f890e35a0dafc6a31994c8957c9 (diff) | |
parent | ab5aeca849821afa8f0d2ac66a9f307f6b48ef4a (diff) | |
download | CMake-2d373b64ea7173dc587cd0b54144c1cad3534be4.zip CMake-2d373b64ea7173dc587cd0b54144c1cad3534be4.tar.gz CMake-2d373b64ea7173dc587cd0b54144c1cad3534be4.tar.bz2 |
Merge topic 'ArgumentFlags-enum-values'
ab5aeca849 Help: Clarify behavior of BEFORE with target_compile_options()
dd3482f675 cmTargetPropCommandBase: Restore ArgumentFlags enum value bool logic
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7956
-rw-r--r-- | Help/command/target_compile_options.rst | 3 | ||||
-rw-r--r-- | Help/policy/CMP0101.rst | 24 | ||||
-rw-r--r-- | Source/cmTargetPropCommandBase.h | 4 | ||||
-rw-r--r-- | Tests/RunCMake/target_compile_options/RunCMakeTest.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/target_compile_options/bad_keyword-result.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/target_compile_options/bad_keyword-stderr.txt | 2 | ||||
-rw-r--r-- | Tests/RunCMake/target_compile_options/bad_keyword.cmake | 5 |
7 files changed, 29 insertions, 11 deletions
diff --git a/Help/command/target_compile_options.rst b/Help/command/target_compile_options.rst index 8f13f45..698f62d 100644 --- a/Help/command/target_compile_options.rst +++ b/Help/command/target_compile_options.rst @@ -19,7 +19,8 @@ Arguments ^^^^^^^^^ If ``BEFORE`` is specified, the content will be prepended to the property -instead of being appended. +instead of being appended. See policy :policy:`CMP0101` which affects +whether ``BEFORE`` will be ignored in certain cases. The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to specify the :ref:`scope <Target Usage Requirements>` of the following arguments. diff --git a/Help/policy/CMP0101.rst b/Help/policy/CMP0101.rst index f02bccc..6781079 100644 --- a/Help/policy/CMP0101.rst +++ b/Help/policy/CMP0101.rst @@ -3,16 +3,24 @@ CMP0101 .. versionadded:: 3.17 -:command:`target_compile_options` now honors ``BEFORE`` keyword in all scopes. +:command:`target_compile_options` now always honors the ``BEFORE`` keyword. -In CMake 3.16 and below the :command:`target_compile_options` ignores the -``BEFORE`` keyword in private scope. CMake 3.17 and later honors -``BEFORE`` keyword in all scopes. This policy provides compatibility for -projects that have not been updated to expect the new behavior. +In CMake 3.16 and below, the :command:`target_compile_options` command +ignores the ``BEFORE`` keyword when inserting items into the +:prop_tgt:`COMPILE_OPTIONS` target property (``PRIVATE`` and ``PUBLIC`` +items). CMake 3.17 and later honors the ``BEFORE`` keyword in all cases. +This policy provides compatibility for projects that have not been updated +to expect the new behavior. -The ``OLD`` behavior for this policy is to not honor ``BEFORE`` keyword in -private scope. The ``NEW`` behavior of this policy is to honor -``BEFORE`` keyword in all scopes. +The behavior of inserting items into the :prop_tgt:`INTERFACE_COMPILE_OPTIONS` +target property (``PUBLIC`` and ``INTERFACE`` items) is not affected by this +policy. The ``BEFORE`` keyword has always been honored when adding items to +:prop_tgt:`INTERFACE_COMPILE_OPTIONS`. + +The ``OLD`` behavior for this policy is to not honor the ``BEFORE`` keyword +when inserting into the :prop_tgt:`COMPILE_OPTIONS` property. +The ``NEW`` behavior for this policy is to honor the ``BEFORE`` keyword in +all cases. This policy was introduced in CMake version 3.17. Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly. 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<std::string> 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) |