|
|
@@ -74,6 +74,7 @@ bool cmAddSubDirectoryCommand::InitialPass
|
|
|
|
|
|
// at this point srcPath has the full path to the source directory
|
|
|
// now we need to compute the binPath if it was not provided
|
|
|
+ srcPath = cmSystemTools::CollapseFullPath(srcPath.c_str());
|
|
|
|
|
|
// if the argument was provided then use it
|
|
|
if (binArg.size())
|
|
|
@@ -87,34 +88,25 @@ bool cmAddSubDirectoryCommand::InitialPass
|
|
|
// otherwise compute the binPath from the srcPath
|
|
|
else
|
|
|
{
|
|
|
- // if the srcArg was relative then we just do the same for the binPath
|
|
|
- if (relativeSource)
|
|
|
- {
|
|
|
- binPath = std::string(this->Makefile->GetCurrentOutputDirectory()) +
|
|
|
- "/" + srcArg;
|
|
|
- }
|
|
|
- // otherwise we try to remove the CurrentDirectory from the srcPath and
|
|
|
+ // we try to remove the CurrentDirectory from the srcPath and
|
|
|
// replace it with the CurrentOutputDirectory. This may not really work
|
|
|
// because the source dir they provided may not be "in" the source
|
|
|
// tree. This is an error if this happens.
|
|
|
- else
|
|
|
+ // try replacing the home dir with the home output dir
|
|
|
+ binPath = srcPath;
|
|
|
+ if(!cmSystemTools::FindLastString(binPath.c_str(),
|
|
|
+ this->Makefile->GetHomeDirectory()))
|
|
|
{
|
|
|
- // try replacing the home dir with the home output dir
|
|
|
- binPath = srcPath;
|
|
|
- if (!cmSystemTools::FindLastString(binPath.c_str(),
|
|
|
- this->Makefile->GetHomeDirectory()))
|
|
|
- {
|
|
|
- this->SetError("A full source directory was specified that is not "
|
|
|
- "in the source tree but no binary directory was "
|
|
|
- "specified. If you specify an out of tree source "
|
|
|
- "directory then you must provide the binary "
|
|
|
- "directory as well.");
|
|
|
- return false;
|
|
|
- }
|
|
|
- cmSystemTools::ReplaceString(binPath,
|
|
|
- this->Makefile->GetHomeDirectory(),
|
|
|
- this->Makefile->GetHomeOutputDirectory());
|
|
|
+ this->SetError("A full source directory was specified that is not "
|
|
|
+ "in the source tree but no binary directory was "
|
|
|
+ "specified. If you specify an out of tree source "
|
|
|
+ "directory then you must provide the binary "
|
|
|
+ "directory as well.");
|
|
|
+ return false;
|
|
|
}
|
|
|
+ cmSystemTools::ReplaceString(binPath,
|
|
|
+ this->Makefile->GetHomeDirectory(),
|
|
|
+ this->Makefile->GetHomeOutputDirectory());
|
|
|
}
|
|
|
|
|
|
// now we have all the arguments
|