From 4808d9cec202bf280bf12fc4342948ee2894cf23 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 1 Aug 2003 14:34:51 -0400 Subject: BUG (85): allow . to be in the name of an executable --- Source/cmLocalUnixMakefileGenerator.cxx | 40 ++++++++++++++++++---- Tests/Complex/Executable/CMakeLists.txt | 1 + Tests/ComplexOneConfig/Executable/CMakeLists.txt | 1 + .../ComplexRelativePaths/Executable/CMakeLists.txt | 1 + 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Source/cmLocalUnixMakefileGenerator.cxx b/Source/cmLocalUnixMakefileGenerator.cxx index 256bf57..c556f67 100644 --- a/Source/cmLocalUnixMakefileGenerator.cxx +++ b/Source/cmLocalUnixMakefileGenerator.cxx @@ -2785,21 +2785,49 @@ std::string cmLocalUnixMakefileGenerator::LowerCasePath(const char* path) } std::string -cmLocalUnixMakefileGenerator::CreateMakeVariable(const char* s, const char* s2) +cmLocalUnixMakefileGenerator::CreateMakeVariable(const char* sin, const char* s2in) { - if(!m_MakefileVariableSize) - { - return std::string(s) + std::string(s2); - } + std::string s = sin; + std::string s2 = s2in; std::string unmodified = s; unmodified += s2; - // see if th + // if there is no restriction on the length of make variables + // and there are no "." charactors in the string, then return the + // unmodified combination. + if(!m_MakefileVariableSize && unmodified.find('.') == s.npos) + { + return unmodified; + } + + // see if the variable has been defined before and return + // the modified version of the variable std::map::iterator i = m_MakeVariableMap.find(unmodified); if(i != m_MakeVariableMap.end()) { return i->second; } + // start with the unmodified variable std::string ret = unmodified; + // if this there is no value for m_MakefileVariableSize then + // the string must have bad characters in it + if(!m_MakefileVariableSize) + { + cmSystemTools::ReplaceString(ret, ".", "_"); + int ni = 0; + char buffer[5]; + // make sure the _ version is not already used, if + // it is used then add number to the end of the variable + while(m_ShortMakeVariableMap.count(ret) && ni < 1000) + { + ++ni; + sprintf(buffer, "%04d", ni); + ret = unmodified + buffer; + } + m_ShortMakeVariableMap[ret] = "1"; + m_MakeVariableMap[unmodified] = ret; + return ret; + } + // if the string is greater the 32 chars it is an invalid vairable name // for borland make if(static_cast(ret.size()) > m_MakefileVariableSize) diff --git a/Tests/Complex/Executable/CMakeLists.txt b/Tests/Complex/Executable/CMakeLists.txt index fd51ff2..fca3901 100644 --- a/Tests/Complex/Executable/CMakeLists.txt +++ b/Tests/Complex/Executable/CMakeLists.txt @@ -13,6 +13,7 @@ LINK_LIBRARIES(${COMPLEX_LIBS}) ADD_EXECUTABLE(complex complex) +ADD_EXECUTABLE(complex.file complex.file.cxx) IF (UNIX) TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS}) ELSE(UNIX) diff --git a/Tests/ComplexOneConfig/Executable/CMakeLists.txt b/Tests/ComplexOneConfig/Executable/CMakeLists.txt index fd51ff2..fca3901 100644 --- a/Tests/ComplexOneConfig/Executable/CMakeLists.txt +++ b/Tests/ComplexOneConfig/Executable/CMakeLists.txt @@ -13,6 +13,7 @@ LINK_LIBRARIES(${COMPLEX_LIBS}) ADD_EXECUTABLE(complex complex) +ADD_EXECUTABLE(complex.file complex.file.cxx) IF (UNIX) TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS}) ELSE(UNIX) diff --git a/Tests/ComplexRelativePaths/Executable/CMakeLists.txt b/Tests/ComplexRelativePaths/Executable/CMakeLists.txt index fd51ff2..fca3901 100644 --- a/Tests/ComplexRelativePaths/Executable/CMakeLists.txt +++ b/Tests/ComplexRelativePaths/Executable/CMakeLists.txt @@ -13,6 +13,7 @@ LINK_LIBRARIES(${COMPLEX_LIBS}) ADD_EXECUTABLE(complex complex) +ADD_EXECUTABLE(complex.file complex.file.cxx) IF (UNIX) TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS}) ELSE(UNIX) -- cgit v0.12