summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-04-15 15:47:54 (GMT)
committerBrad King <brad.king@kitware.com>2014-04-15 15:52:48 (GMT)
commit0d048384694b7285ef739153757b57791d4ebb93 (patch)
treed6e33aa67f358553c5dbc0442873a12470d06ee3 /Source
parent8472ef243ffc9988ea8fb83cbc7acdf3f0daa239 (diff)
downloadCMake-0d048384694b7285ef739153757b57791d4ebb93.zip
CMake-0d048384694b7285ef739153757b57791d4ebb93.tar.gz
CMake-0d048384694b7285ef739153757b57791d4ebb93.tar.bz2
VS: Use full path to sources to allow deeper trees with VS >= 10
As explained in cmVisualStudio10TargetGenerator::WriteSource comments, VS tools append relative paths to the current directory, e.g. c:\path\to\current\dir\..\..\..\relative\path\to\source.c and fail if this is over 250 charaters or so. Previously we used a full path only if no relative path could be constructed with a leading "../" sequence that does not escape the source or build tree. This means that long relative paths can be generated when the build tree is inside the source tree, and can cause build failures due to the above path concatenation problem. Teach cmVisualStudio10TargetGenerator::ConvertPath to ask the Convert method to honor CMAKE_USE_RELATIVE_PATHS. This will cause it to use full paths by default but still give users the option of getting the relative paths when possible. Suggested-by: Josh Green <inbilla@gmail.com>
Diffstat (limited to 'Source')
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx5
1 files changed, 3 insertions, 2 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index a999b2d..72bb020 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -685,7 +685,8 @@ cmVisualStudio10TargetGenerator::ConvertPath(std::string const& path,
this->Makefile->GetCurrentOutputDirectory(), path.c_str())
: this->LocalGenerator->Convert(path.c_str(),
cmLocalGenerator::START_OUTPUT,
- cmLocalGenerator::UNCHANGED);
+ cmLocalGenerator::UNCHANGED,
+ /* optional = */ true);
}
void cmVisualStudio10TargetGenerator::ConvertToWindowsSlash(std::string& s)
@@ -941,7 +942,7 @@ void cmVisualStudio10TargetGenerator::WriteSource(
// c:\path\to\current\dir\..\..\..\relative\path\to\source.c
//
// and fail if this exceeds the maximum allowed path length. Our path
- // conversion uses full paths outside the build tree to allow deeper trees.
+ // conversion uses full paths when possible to allow deeper trees.
bool forceRelative = false;
std::string sourceFile = this->ConvertPath(sf->GetFullPath(), false);
if(this->LocalGenerator->GetVersion() == cmLocalVisualStudioGenerator::VS10