فهرست منبع

Fix get_filename_component(... REALPATH) work dir

The commit "Fix get_filename_component ABSOLUTE mode" broke REALPATH
treatment of relative paths because it stopped storing the absolute path
in local variable 'filename'.  This commit fixes the call to GetRealPath
to use the proper local variable and adds a test.
Brad King 16 سال پیش
والد
کامیت
5fbefd66dc
2فایلهای تغییر یافته به همراه16 افزوده شده و 1 حذف شده
  1. 1 1
      Source/cmGetFilenameComponentCommand.cxx
  2. 15 0
      Tests/CMakeTests/GetFilenameComponentRealpathTest.cmake.in

+ 1 - 1
Source/cmGetFilenameComponentCommand.cxx

@@ -101,7 +101,7 @@ bool cmGetFilenameComponentCommand
     if(args[2] == "REALPATH")
       {
       // Resolve symlinks if possible
-      result = cmSystemTools::GetRealPath(filename.c_str());
+      result = cmSystemTools::GetRealPath(result.c_str());
       }
     }
   else 

+ 15 - 0
Tests/CMakeTests/GetFilenameComponentRealpathTest.cmake.in

@@ -12,6 +12,21 @@ if(NOT nonexistent2 STREQUAL "${bindir}/THIS_IS_A_NONEXISTENT_FILE")
     message(FATAL_ERROR "ABSOLUTE is not preserving nonexistent files")
 endif()
 
+#
+# Test treatment of relative paths
+#
+foreach(c REALPATH ABSOLUTE)
+  get_filename_component(dir "subdir/THIS_IS_A_NONEXISTENT_FILE" ${c})
+  if(NOT "${dir}" STREQUAL "${bindir}/subdir/THIS_IS_A_NONEXISTENT_FILE")
+    message(FATAL_ERROR
+      "${c} does not handle relative paths.  Expected:\n"
+      "  ${bindir}/subdir/THIS_IS_A_NONEXISTENT_FILE\n"
+      "but got:\n"
+      "  ${nonexistent1}\n"
+      )
+  endif()
+endforeach()
+
 #
 # Test symbolic link resolution
 #