From b90e241a3100e087102d15f06ff43146e93f32f1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 7 Mar 2007 17:39:16 -0500 Subject: [PATCH] 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. --- Source/cmLocalGenerator.cxx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index fed8ea6fc..789cb11dd 100644 --- a/Source/cmLocalGenerator.cxx +++ b/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; }