Bladeren bron

ENH: fix bug in full path to target depends stuff

Bill Hoffman 19 jaren geleden
bovenliggende
commit
26b527ac0f
5 gewijzigde bestanden met toevoegingen van 37 en 6 verwijderingen
  1. 7 6
      Source/CMakeLists.txt
  2. 2 0
      Source/cmLocalGenerator.cxx
  3. 2 0
      Source/cmTarget.cxx
  4. 11 0
      Tests/CustComDepend/CMakeLists.txt
  5. 15 0
      Tests/CustComDepend/foo.cxx

+ 7 - 6
Source/CMakeLists.txt

@@ -410,16 +410,17 @@ IF(BUILD_TESTING)
     --test-command ${CMAKE_CMAKE_COMMAND} -E compare_files 
     ${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world
     ${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world)
-  ADD_TEST(LibName ${CMAKE_CTEST_COMMAND}
+
+  ADD_TEST(CustComDepend ${CMAKE_CTEST_COMMAND}
     --build-and-test
-    "${CMake_SOURCE_DIR}/Tests/LibName"
-    "${CMake_BINARY_DIR}/Tests/LibName"
+    "${CMake_SOURCE_DIR}/Tests/CustComDepend"
+    "${CMake_BINARY_DIR}/Tests/CustComDepend"
     --build-two-config
     --build-generator ${CMAKE_TEST_GENERATOR}
     --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
-    --build-project LibName 
-    --build-exe-dir "${CMake_BINARY_DIR}/Tests/LibName/lib"
-    --test-command foobar
+    --build-project CustComDepend 
+    --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustComDepend/bin"
+    --test-command foo bar.c
     )
 
   ADD_TEST(CustomCommand  ${CMAKE_CTEST_COMMAND}

+ 2 - 0
Source/cmLocalGenerator.cxx

@@ -1863,6 +1863,8 @@ std::string cmLocalGenerator::GetRealDependency(const char* inName,
       tLocation = cmSystemTools::GetFilenamePath(tLocation);
       std::string depLocation = cmSystemTools::GetFilenamePath(
         std::string(inName));
+      depLocation = cmSystemTools::CollapseFullPath(depLocation.c_str());
+      tLocation = cmSystemTools::CollapseFullPath(tLocation.c_str());
       if(depLocation != tLocation)
         {
         // it is a full path to a depend that has the same name

+ 2 - 0
Source/cmTarget.cxx

@@ -253,6 +253,8 @@ void cmTarget::TraceVSDependencies(std::string projFile,
             tLocation = cmSystemTools::GetFilenamePath(tLocation);
             std::string depLocation = cmSystemTools::GetFilenamePath(
               std::string(fullName));
+            depLocation = cmSystemTools::CollapseFullPath(depLocation.c_str());
+            tLocation = cmSystemTools::CollapseFullPath(tLocation.c_str());
             if(depLocation == tLocation)
               {
               isUtility = true;

+ 11 - 0
Tests/CustComDepend/CMakeLists.txt

@@ -0,0 +1,11 @@
+project(CustComDepend)
+add_definitions(-D_CRT_SECURE_NO_DEPRECATE=1)
+set(EXECUTABLE_OUTPUT_PATH ${CustComDepend_BINARY_DIR}/bin)
+add_executable(foo foo.cxx)
+add_custom_command(
+  OUTPUT ${CustComDepend_BINARY_DIR}/bar.c
+  COMMAND ${CustComDepend_BINARY_DIR}/bin/foo ${CustComDepend_BINARY_DIR}/bar.c
+  DEPENDS ${CustComDepend_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/foo
+)
+  
+add_library(bar SHARED ${CustComDepend_BINARY_DIR}/bar.c)

+ 15 - 0
Tests/CustComDepend/foo.cxx

@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+int main(int ac, char** av)
+{
+  FILE* fout = fopen(av[1], "w");
+  printf("create %s\n", av[1]);
+  if(!fout)
+    {
+    return -1;
+    }
+  fprintf(fout, "int bar(){ return 10;}\n");
+  fclose(fout);
+  return 0;
+}
+