diff options
author | Brad King <brad.king@kitware.com> | 2023-02-20 13:34:08 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-02-20 13:34:34 (GMT) |
commit | d18806e67336d96a9a22b860246de3f1c518ce40 (patch) | |
tree | c734e10d0aaedf072173e449d56fa37d100c2cd8 | |
parent | 20cb716e4f8061441599c3972a036e91e62b9af0 (diff) | |
parent | ea2a05f402d2e1090d8d1e92e67c08ac1e5af66a (diff) | |
download | CMake-d18806e67336d96a9a22b860246de3f1c518ce40.zip CMake-d18806e67336d96a9a22b860246de3f1c518ce40.tar.gz CMake-d18806e67336d96a9a22b860246de3f1c518ce40.tar.bz2 |
Merge topic 'ninja-custom-command-depends'
ea2a05f402 Add variable CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8220
-rw-r--r-- | Auxiliary/vim/syntax/cmake.vim | 2 | ||||
-rw-r--r-- | Help/command/add_custom_command.rst | 3 | ||||
-rw-r--r-- | Help/manual/cmake-variables.7.rst | 1 | ||||
-rw-r--r-- | Help/release/dev/ninja-custom-command-depends.rst | 4 | ||||
-rw-r--r-- | Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst | 11 | ||||
-rw-r--r-- | Source/cmAddCustomCommandCommand.cxx | 3 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake | 30 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/RunCMakeTest.cmake | 28 |
8 files changed, 71 insertions, 11 deletions
diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim index 5e936c2..f303bd4 100644 --- a/Auxiliary/vim/syntax/cmake.vim +++ b/Auxiliary/vim/syntax/cmake.vim @@ -459,6 +459,7 @@ syn keyword cmakeVariable contained \ BUILD_SHARED_LIBS \ CACHE \ CMAKE_ABSOLUTE_DESTINATION_FILES + \ CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY \ CMAKE_AIX_EXPORT_ALL_SYMBOLS \ CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS \ CMAKE_ANDROID_API @@ -2095,6 +2096,7 @@ syn keyword cmakeKWadd_custom_command contained \ COMMENT \ CROSSCOMPILING_EMULATOR \ DEPENDS + \ DEPENDS_EXPLICIT_ONLY \ DEPFILE \ GENERATED \ IMPLICIT_DEPENDS diff --git a/Help/command/add_custom_command.rst b/Help/command/add_custom_command.rst index 2cf88fc..1ccd434 100644 --- a/Help/command/add_custom_command.rst +++ b/Help/command/add_custom_command.rst @@ -370,6 +370,9 @@ The options are: the custom command in case this custom command requires files implicitly created by those targets. + This option can be enabled on all custom commands by setting + :variable:`CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY` to ``ON``. + Only the :ref:`Ninja Generators` actually use this information to remove unnecessary implicit dependencies. diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 8564e7c..0ba8363 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -166,6 +166,7 @@ Variables that Change Behavior /variable/BUILD_SHARED_LIBS /variable/CMAKE_ABSOLUTE_DESTINATION_FILES + /variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY /variable/CMAKE_APPBUNDLE_PATH /variable/CMAKE_AUTOMOC_RELAXED_MODE /variable/CMAKE_BACKWARDS_COMPATIBILITY diff --git a/Help/release/dev/ninja-custom-command-depends.rst b/Help/release/dev/ninja-custom-command-depends.rst index 10c68cf..0b7840c 100644 --- a/Help/release/dev/ninja-custom-command-depends.rst +++ b/Help/release/dev/ninja-custom-command-depends.rst @@ -5,3 +5,7 @@ ninja-custom-command-depends ``DEPENDS_EXPLICIT_ONLY`` option to tell the :ref:`Ninja Generators` not to add any dependencies implied by the target to which it is attached. + +* The :variable:`CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY` variable can + be set to enable ``DEPENDS_EXPLICIT_ONLY`` in all uses of + :command:`add_custom_command` command. diff --git a/Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst b/Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst new file mode 100644 index 0000000..9c9bd2c --- /dev/null +++ b/Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst @@ -0,0 +1,11 @@ +CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY +---------------------------------------------- + +.. versionadded:: 3.27 + +Whether to enable DEPENDS_EXPLICIT_ONLY option by default in +:command:`add_custom_command`. + +This variable affects the default behavior of the :command:`add_custom_command` +command. Setting this variable to ``ON`` is equivalent to using the ``DEPENDS_EXPLICIT_ONLY`` +option in all uses of that command. diff --git a/Source/cmAddCustomCommandCommand.cxx b/Source/cmAddCustomCommandCommand.cxx index 65a8eb5..b1398db 100644 --- a/Source/cmAddCustomCommandCommand.cxx +++ b/Source/cmAddCustomCommandCommand.cxx @@ -49,7 +49,8 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args, bool append = false; bool uses_terminal = false; bool command_expand_lists = false; - bool depends_explicit_only = false; + bool depends_explicit_only = + mf.IsOn("CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY"); std::string implicit_depends_lang; cmImplicitDependsList implicit_depends; diff --git a/Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake b/Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake index e0c2434..fefd86a 100644 --- a/Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake +++ b/Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake @@ -2,17 +2,35 @@ cmake_minimum_required(VERSION 3.26) project(CustomCommandExplicitDepends C) add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/command.h" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/command-option.h" COMMAND "${CMAKE_COMMAND}" -E touch - "${CMAKE_CURRENT_BINARY_DIR}/command.h" - COMMENT "Creating command.h" + "${CMAKE_CURRENT_BINARY_DIR}/command-option.h" + COMMENT "Creating command-option.h" DEPENDS_EXPLICIT_ONLY ) -add_library(dep STATIC dep.c) +set(CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY ON) +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/command-variable-on.h" + COMMAND "${CMAKE_COMMAND}" -E touch + "${CMAKE_CURRENT_BINARY_DIR}/command-variable-on.h" + COMMENT "Creating command-variable-on.h" +) + +set(CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY OFF) +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/command-variable-off.h" + COMMAND "${CMAKE_COMMAND}" -E touch + "${CMAKE_CURRENT_BINARY_DIR}/command-variable-off.h" + COMMENT "Creating command-variable-off.h" +) + +add_library(dep SHARED dep.c) -add_library(top STATIC +add_library(top SHARED top.c - "${CMAKE_CURRENT_BINARY_DIR}/command.h" + "${CMAKE_CURRENT_BINARY_DIR}/command-option.h" + "${CMAKE_CURRENT_BINARY_DIR}/command-variable-on.h" + "${CMAKE_CURRENT_BINARY_DIR}/command-variable-off.h" ) target_link_libraries(top PRIVATE dep) diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake index 17ad035..91c48c6 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -193,11 +193,31 @@ run_LooseObjectDepends() function (run_CustomCommandExplictDepends) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandExplicitDepends-build) run_cmake(CustomCommandExplicitDepends) - run_ninja("${RunCMake_TEST_BINARY_DIR}" "command.h") - if (EXISTS "${RunCMake_TEST_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}dep${CMAKE_STATIC_LIBRARY_SUFFIX}") + + set(DEP_LIB "${RunCMake_TEST_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}dep${CMAKE_SHARED_LIBRARY_SUFFIX}") + + run_ninja("${RunCMake_TEST_BINARY_DIR}" "command-option.h") + if (EXISTS "${DEP_LIB}") + message(FATAL_ERROR + "The `dep` library was created when requesting a custom command to be " + "generated; this should no longer be necessary when passing " + "DEPENDS_EXPLICIT_ONLY option.") + endif () + + run_ninja("${RunCMake_TEST_BINARY_DIR}" "command-variable-on.h") + if (EXISTS "${DEP_LIB}") + message(FATAL_ERROR + "The `dep` library was created when requesting a custom command to be " + "generated; this should no longer be necessary when setting " + "CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY variable to ON.") + endif () + + run_ninja("${RunCMake_TEST_BINARY_DIR}" "command-variable-off.h") + if (NOT EXISTS "${DEP_LIB}") message(FATAL_ERROR - "The `dep` library was created when requesting an custom command to be " - "generated; this should no longer be necessary when passing DEPENDS_EXPLICIT_ONLY keyword.") + "The `dep` library was not created when requesting a custom command to be " + "generated; this should be necessary when setting " + "CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY variable to OFF.") endif () endfunction () run_CustomCommandExplictDepends() |