Преглед изворни кода

Merge topic 'normalize-custom-command-paths'

c4af46b4 add_custom_command: Normalize OUTPUT and DEPENDS paths.
Brad King пре 11 година
родитељ
комит
8afbb346c6

+ 4 - 0
Source/cmAddCustomCommandCommand.cxx

@@ -173,6 +173,10 @@ bool cmAddCustomCommandCommand
           break;
         }
 
+      if (cmSystemTools::FileIsFullPath(filename.c_str()))
+        {
+        filename = cmSystemTools::CollapseFullPath(filename);
+        }
        switch (doing)
          {
          case doing_working_directory:

+ 11 - 1
Source/cmCustomCommandGenerator.cxx

@@ -103,8 +103,18 @@ std::vector<std::string> const& cmCustomCommandGenerator::GetDepends() const
       {
       cmsys::auto_ptr<cmCompiledGeneratorExpression> cge
                                               = this->GE->Parse(*i);
+      std::vector<std::string> result;
       cmSystemTools::ExpandListArgument(
-                  cge->Evaluate(this->Makefile, this->Config), this->Depends);
+                  cge->Evaluate(this->Makefile, this->Config), result);
+      for (std::vector<std::string>::iterator it = result.begin();
+          it != result.end(); ++it)
+        {
+        if (cmSystemTools::FileIsFullPath(it->c_str()))
+          {
+          *it = cmSystemTools::CollapseFullPath(*it);
+          }
+        }
+      this->Depends.insert(this->Depends.end(), result.begin(), result.end());
       }
     }
   return this->Depends;

+ 27 - 0
Tests/CustomCommand/CMakeLists.txt

@@ -456,3 +456,30 @@ add_custom_target(source_in_custom_target SOURCES source_in_custom_target.cpp)
 set_property(SOURCE source_in_custom_target
   PROPERTY COMPILE_DEFINITIONS "TEST"
 )
+
+set(gen_path "${CMAKE_CURRENT_BINARY_DIR}//./foo")
+set(gen_file "${gen_path}/foo.cxx")
+
+add_custom_command(
+  OUTPUT "${gen_file}"
+  # Make sure the output directory exists before trying to write to it.
+  COMMAND ${CMAKE_COMMAND} -E make_directory "${gen_path}"
+  COMMAND ${CMAKE_COMMAND} -E touch "${gen_file}"
+)
+
+add_library(NormOutput "${gen_file}")
+
+set(gen_path "${gen_path}/bar")
+set(gen_file "${gen_path}/bar.cxx")
+
+add_custom_command(
+  OUTPUT "${gen_path}"
+  COMMAND ${CMAKE_COMMAND} -E make_directory "${gen_path}"
+)
+
+add_custom_command(
+  OUTPUT "${gen_file}"
+  DEPENDS "${gen_path}"
+  COMMAND ${CMAKE_COMMAND} -E touch "${gen_file}")
+
+add_library(NormDepends "${gen_file}")