浏览代码

Merge topic 'add_custom_command-genex-slash'

c16641607f add_custom_command: Delay slash conversion until after genex evaluation

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3791
Brad King 6 年之前
父节点
当前提交
1df2f8803b

+ 3 - 4
Source/cmAddCustomCommandCommand.cxx

@@ -4,7 +4,6 @@
 
 #include <sstream>
 #include <unordered_set>
-#include <utility>
 
 #include "cmCustomCommand.h"
 #include "cmCustomCommandLines.h"
@@ -248,6 +247,8 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
           // An implicit dependency starting point is also an
           // explicit dependency.
           std::string dep = copy;
+          // Upfront path conversion is correct because Genex
+          // are not supported.
           cmSystemTools::ConvertToUnixSlashes(dep);
           depends.push_back(dep);
 
@@ -264,9 +265,7 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
           target = copy;
           break;
         case doing_depends: {
-          std::string dep = copy;
-          cmSystemTools::ConvertToUnixSlashes(dep);
-          depends.push_back(std::move(dep));
+          depends.push_back(copy);
         } break;
         case doing_outputs:
           outputs.push_back(filename);

+ 1 - 0
Source/cmCustomCommandGenerator.cxx

@@ -58,6 +58,7 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc,
     std::vector<std::string> result =
       cmExpandedList(cge->Evaluate(this->LG, this->Config));
     for (std::string& it : result) {
+      cmSystemTools::ConvertToUnixSlashes(it);
       if (cmSystemTools::FileIsFullPath(it)) {
         it = cmSystemTools::CollapseFullPath(it);
       }

+ 24 - 4
Tests/GeneratorExpression/CMakeLists.txt

@@ -86,7 +86,7 @@ add_custom_target(check-part1 ALL
     -Dtest_colons_4=$<1:C:\\CMake>
     -Dtest_colons_5=$<1:C:/CMake>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part1.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 1 of 4)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 1 of 5)"
   VERBATIM
   )
 
@@ -157,7 +157,7 @@ add_custom_target(check-part2 ALL
     -Dtest_arbitrary_content_comma_9=$<1:a,,b,,>
     -Dtest_arbitrary_content_comma_10=$<1:,,a,,b,,>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part2.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 4)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 5)"
   VERBATIM
 )
 
@@ -251,7 +251,7 @@ add_custom_target(check-part3 ALL
     -Dequal22=$<EQUAL:10,-012>
     -Dequal23=$<EQUAL:-10,-012>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part3.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 4)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 5)"
   VERBATIM
   )
 
@@ -277,7 +277,27 @@ add_custom_target(check-part4 ALL
     -DWIN32=${WIN32}
     -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part4.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 4 of 4)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 4 of 5)"
+  VERBATIM
+  )
+
+add_custom_target(check-part5 ALL
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 5 of 5)"
+  DEPENDS check-part5.stamp
+  VERBATIM
+  )
+
+add_custom_command(
+  OUTPUT check-part5.stamp
+  DEPENDS $<FILTER:file.foo.bar,EXCLUDE,\\.foo\\.bar$>
+  COMMAND ${CMAKE_COMMAND} -E sleep 0
+  VERBATIM
+  )
+set_property(SOURCE check-part5.stamp PROPERTY SYMBOLIC 1)
+
+add_custom_command(
+  OUTPUT file.foo.bar
+  COMMAND ${CMAKE_COMMAND} -P check-part5.cmake
   VERBATIM
   )
 

+ 1 - 0
Tests/GeneratorExpression/check-part5.cmake

@@ -0,0 +1 @@
+message(SEND_ERROR "$<FILTER:file.foo.bar,EXCLUDE,\\.foo\\.bar$> genex in DEPENDS argument of 'add_custom_command()' is not empty")