ENH: Fixed recursive make call target escaping for Borland to support SubDirSpaces test.

This commit is contained in:
Brad King 2007-03-08 13:05:02 -05:00
parent 7157743d69
commit fd3688fa72
4 changed files with 18 additions and 2 deletions

View File

@ -1012,7 +1012,7 @@ IF(BUILD_TESTING)
# some old versions of make simply cannot handle spaces in paths # some old versions of make simply cannot handle spaces in paths
IF (MAKE_IS_GNU OR IF (MAKE_IS_GNU OR
"${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
"${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode") "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND} ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND}
--build-and-test --build-and-test
"${CMake_SOURCE_DIR}/Tests/SubDirSpaces" "${CMake_SOURCE_DIR}/Tests/SubDirSpaces"
@ -1028,7 +1028,7 @@ IF(BUILD_TESTING)
) )
ENDIF (MAKE_IS_GNU OR ENDIF (MAKE_IS_GNU OR
"${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
"${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode") "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
IF (WIN32) IF (WIN32)
ADD_TEST(SubDir ${CMAKE_CTEST_COMMAND} ADD_TEST(SubDir ${CMAKE_CTEST_COMMAND}

View File

@ -50,6 +50,7 @@ cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator()
lg->SetPassMakeflags(true); lg->SetPassMakeflags(true);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
lg->SetUnixCD(false); lg->SetUnixCD(false);
lg->SetMakeCommandEscapeTargetTwice(true);
return lg; return lg;
} }

View File

@ -53,6 +53,7 @@ cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3()
this->SkipAssemblySourceRules = false; this->SkipAssemblySourceRules = false;
this->NativeEchoCommand = "@echo "; this->NativeEchoCommand = "@echo ";
this->NativeEchoWindows = true; this->NativeEchoWindows = true;
this->MakeCommandEscapeTargetTwice = false;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -1751,6 +1752,12 @@ cmLocalUnixMakefileGenerator3
// The target may have been written with windows paths. // The target may have been written with windows paths.
cmSystemTools::ConvertToOutputSlashes(tgt2); cmSystemTools::ConvertToOutputSlashes(tgt2);
// Escape one extra time if the make tool requires it.
if(this->MakeCommandEscapeTargetTwice)
{
tgt2 = this->EscapeForShell(tgt2.c_str(), true, false);
}
// The target name is now a string that should be passed verbatim // The target name is now a string that should be passed verbatim
// on the command line. // on the command line.
cmd += this->EscapeForShell(tgt2.c_str(), true, false); cmd += this->EscapeForShell(tgt2.c_str(), true, false);

View File

@ -158,6 +158,13 @@ public:
*/ */
void SetIgnoreLibPrefix(bool s) { this->IgnoreLibPrefix = s; } void SetIgnoreLibPrefix(bool s) { this->IgnoreLibPrefix = s; }
/**
* Set whether passing a make target on a command line requires an
* extra level of escapes.
*/
void SetMakeCommandEscapeTargetTwice(bool b)
{ this->MakeCommandEscapeTargetTwice = b; }
// used in writing out Cmake files such as WriteDirectoryInformation // used in writing out Cmake files such as WriteDirectoryInformation
static void WriteCMakeArgument(std::ostream& os, const char* s); static void WriteCMakeArgument(std::ostream& os, const char* s);
@ -334,6 +341,7 @@ private:
bool UnixCD; bool UnixCD;
bool PassMakeflags; bool PassMakeflags;
bool SilentNoColon; bool SilentNoColon;
bool MakeCommandEscapeTargetTwice;
//========================================================================== //==========================================================================
std::string HomeRelativeOutputPath; std::string HomeRelativeOutputPath;