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.

This commit is contained in:
Brad King 2007-03-07 17:39:16 -05:00
parent 4036627487
commit b90e241a31
1 changed files with 8 additions and 9 deletions

View File

@ -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;
}