@ -2086,19 +2086,58 @@ std::string cmLocalGenerator::Convert(const char* source,
//----------------------------------------------------------------------------
void cmLocalGenerator : : ConfigureRelativePaths ( )
{
// Find the highest parent source directory containing the local
// source directory. This is the top of safe relative path
// conversion.
cmLocalGenerator * srcTop = this ;
while ( cmLocalGenerator * next = srcTop - > GetParent ( ) )
{
if ( cmSystemTools : : IsSubDirectory (
this - > Makefile - > GetStartDirectory ( ) ,
next - > Makefile - > GetStartDirectory ( ) ) )
{
srcTop = next ;
}
else
{
break ;
}
}
// Relative path conversion inside the source tree is not used to
// construct relative paths passed to build tools so it is safe to
// even when the source is a network path.
std : : string source = srcTop - > Makefile - > GetStartDirectory ( ) ;
this - > RelativePathTopSource = source ;
// Find the highest parent binary directory containing the local
// binary directory. This is the top of safe relative path
// conversion.
cmLocalGenerator * binTop = this ;
while ( cmLocalGenerator * next = binTop - > GetParent ( ) )
{
if ( cmSystemTools : : IsSubDirectory (
this - > Makefile - > GetStartOutputDirectory ( ) ,
next - > Makefile - > GetStartOutputDirectory ( ) ) )
{
binTop = next ;
}
else
{
break ;
}
}
// The current working directory on Windows cannot be a network
// path. Therefore relative paths cannot work when the build tree
// path. Therefore relative paths cannot work when the binary tree
// is a network path.
std : : string source = this - > Makefile - > GetHomeDirectory ( ) ;
std : : string binary = this - > Makefile - > GetHomeOutputDirectory ( ) ;
std : : string binary = binTop - > Makefile - > GetStartOutputDirectory ( ) ;
if ( binary . size ( ) < 2 | | binary . substr ( 0 , 2 ) ! = " // " )
{
this - > RelativePathTopSource = source ;
this - > RelativePathTopBinary = binary ;
}
else
{
this - > RelativePathTopSource = " " ;
this - > RelativePathTopBinary = " " ;
}
}