Browse Source

Merge topic 'add_custom_command-depends-path'

f5126badd8 add_custom_command: convert DEPENDS path arguments to absolute paths
a5f44ec925 cmAddCustomCommandCommand: remove unnecessary braces

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4148
Kyle Edwards 5 years ago
parent
commit
1a81acdd22

+ 5 - 3
Help/command/add_custom_command.rst

@@ -112,9 +112,11 @@ The options are:
   build time.
   build time.
 
 
 ``DEPENDS``
 ``DEPENDS``
-  Specify files on which the command depends.  If any dependency is
-  an ``OUTPUT`` of another custom command in the same directory
-  (``CMakeLists.txt`` file) CMake automatically brings the other
+  Specify files on which the command depends.  Entries in the ``DEPENDS``
+  argument list which may also be target names are assumed to be target names,
+  so only entries which contain a path separator are detected as file paths.
+  If any dependency is an ``OUTPUT`` of another custom command in the same
+  directory (``CMakeLists.txt`` file) CMake automatically brings the other
   custom command into the target in which this command is built.
   custom command into the target in which this command is built.
   A target-level dependency is added if any dependency is listed as
   A target-level dependency is added if any dependency is listed as
   ``BYPRODUCTS`` of a target or any of its build events in the same
   ``BYPRODUCTS`` of a target or any of its build events in the same

+ 8 - 0
Help/release/dev/add_custom_command-depends-path.rst

@@ -0,0 +1,8 @@
+add_custom_command-depends-path
+-------------------------------
+
+* The :command:`add_custom_command` command learned to detect paths in
+  ``DEPENDS`` arguments and convert them to paths relative to the current
+  binary directory. This only applies to paths which contain a ``/`` or ``\\``
+  in them because names like ``filename.txt`` could also be target names and
+  cannot be coverted into absolute paths blindly.

+ 2 - 2
Source/cmAddCustomCommandCommand.cxx

@@ -261,9 +261,9 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
         case doing_target:
         case doing_target:
           target = copy;
           target = copy;
           break;
           break;
-        case doing_depends: {
+        case doing_depends:
           depends.push_back(copy);
           depends.push_back(copy);
-        } break;
+          break;
         case doing_outputs:
         case doing_outputs:
           outputs.push_back(filename);
           outputs.push_back(filename);
           break;
           break;

+ 4 - 0
Source/cmCustomCommandGenerator.cxx

@@ -8,6 +8,7 @@
 
 
 #include <cmext/algorithm>
 #include <cmext/algorithm>
 
 
+#include "cmAlgorithms.h"
 #include "cmCustomCommand.h"
 #include "cmCustomCommand.h"
 #include "cmCustomCommandLines.h"
 #include "cmCustomCommandLines.h"
 #include "cmGeneratorExpression.h"
 #include "cmGeneratorExpression.h"
@@ -29,6 +30,9 @@ void AppendPaths(const std::vector<std::string>& inputs,
       cmExpandedList(cge->Evaluate(lg, config));
       cmExpandedList(cge->Evaluate(lg, config));
     for (std::string& it : result) {
     for (std::string& it : result) {
       cmSystemTools::ConvertToUnixSlashes(it);
       cmSystemTools::ConvertToUnixSlashes(it);
+      if (cmContains(it, '/') && !cmSystemTools::FileIsFullPath(it)) {
+        it = cmStrCat(lg->GetMakefile()->GetCurrentBinaryDirectory(), '/', it);
+      }
       if (cmSystemTools::FileIsFullPath(it)) {
       if (cmSystemTools::FileIsFullPath(it)) {
         it = cmSystemTools::CollapseFullPath(it);
         it = cmSystemTools::CollapseFullPath(it);
       }
       }

+ 15 - 0
Tests/CustomCommand/CMakeLists.txt

@@ -534,3 +534,18 @@ add_custom_command(
 set_property(SOURCE "${gen_file}" PROPERTY SYMBOLIC ON)
 set_property(SOURCE "${gen_file}" PROPERTY SYMBOLIC ON)
 add_custom_target(command_expand_lists ALL DEPENDS "${gen_file}")
 add_custom_target(command_expand_lists ALL DEPENDS "${gen_file}")
 set_property(TARGET command_expand_lists PROPERTY CMPARGS "${cmp_args}")
 set_property(TARGET command_expand_lists PROPERTY CMPARGS "${cmp_args}")
+
+set(depends_path "./depended_upon_path.txt")
+
+add_custom_command(
+  OUTPUT ${depends_path}
+  COMMAND ${CMAKE_COMMAND} -E touch ${depends_path}
+)
+
+add_custom_command(
+  OUTPUT "depends_on_path.txt"
+  COMMAND ${CMAKE_COMMAND} -E touch "depends_on_path.txt"
+  DEPENDS ${depends_path}
+)
+
+add_custom_target(depends_on_path ALL DEPENDS "depends_on_path.txt")