summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-02-20 13:34:08 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-02-20 13:34:34 (GMT)
commitd18806e67336d96a9a22b860246de3f1c518ce40 (patch)
treec734e10d0aaedf072173e449d56fa37d100c2cd8
parent20cb716e4f8061441599c3972a036e91e62b9af0 (diff)
parentea2a05f402d2e1090d8d1e92e67c08ac1e5af66a (diff)
downloadCMake-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.vim2
-rw-r--r--Help/command/add_custom_command.rst3
-rw-r--r--Help/manual/cmake-variables.7.rst1
-rw-r--r--Help/release/dev/ninja-custom-command-depends.rst4
-rw-r--r--Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst11
-rw-r--r--Source/cmAddCustomCommandCommand.cxx3
-rw-r--r--Tests/RunCMake/Ninja/CustomCommandExplicitDepends.cmake30
-rw-r--r--Tests/RunCMake/Ninja/RunCMakeTest.cmake28
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()