Explorar o código

ENH: Modified GetObjectFileNameWithoutTarget to use relative paths for object file names with sources above the current directory so long as the relative path conversion works.

Brad King %!s(int64=18) %!d(string=hai) anos
pai
achega
b90e241a31
Modificáronse 1 ficheiros con 8 adicións e 9 borrados
  1. 8 9
      Source/cmLocalGenerator.cxx

+ 8 - 9
Source/cmLocalGenerator.cxx

@@ -2461,21 +2461,20 @@ std::string& cmLocalGenerator::CreateSafeUniqueObjectFileName(const char* sin)
 std::string
 cmLocalGenerator::GetObjectFileNameWithoutTarget(const cmSourceFile& source)
 {
-  // If the source file is located below the current binary directory
-  // then use that relative path for the object file name.
+  // Construct the object file name using the full path to the source
+  // file which is its only unique identification.  Convert the path
+  // to be relative to the current binary directory if possible.
   std::string objectName = this->Convert(source.GetFullPath().c_str(),
                                          START_OUTPUT);
-  if(cmSystemTools::FileIsFullPath(objectName.c_str()) ||
-     objectName.empty() || objectName[0] == '.')
+  if(cmSystemTools::FileIsFullPath(objectName.c_str()) || objectName.empty())
     {
-    // If the source file is located below the current source
-    // directory then use that relative path for the object file name.
-    // Otherwise just use the relative path from the current binary
-    // directory.
+    // If the source file can be referenced as a relative path from
+    // the source tree use that relative path to construct the object
+    // name.
     std::string relFromSource = this->Convert(source.GetFullPath().c_str(),
                                               START);
     if(!cmSystemTools::FileIsFullPath(relFromSource.c_str()) &&
-       !relFromSource.empty() && relFromSource[0] != '.')
+       !relFromSource.empty())
       {
       objectName = relFromSource;
       }