diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 340d50a3f..72cb2b6ff 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -929,9 +929,20 @@ cmLocalUnixMakefileGenerator3::CreateSafeUniqueObjectFileName(const char* sin) // Start with the original name. std::string ssin = sin; + // Avoid full paths by removing leading slashes. + std::string::size_type pos = 0; + for(;pos < ssin.size() && ssin[pos] == '/'; ++pos); + ssin = ssin.substr(pos); + + // Avoid full paths by removing colons. + cmSystemTools::ReplaceString(ssin, ":", "_"); + // Avoid relative paths that go up the tree. cmSystemTools::ReplaceString(ssin, "../", "__/"); + // Avoid spaces. + cmSystemTools::ReplaceString(ssin, " ", "_"); + // Mangle the name if necessary. if(m_Makefile->IsOn("CMAKE_MANGLE_OBJECT_FILE_NAMES")) {