summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmLocalUnixMakefileGenerator.cxx40
-rw-r--r--Tests/Complex/Executable/CMakeLists.txt1
-rw-r--r--Tests/ComplexOneConfig/Executable/CMakeLists.txt1
-rw-r--r--Tests/ComplexRelativePaths/Executable/CMakeLists.txt1
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<cmStdString, cmStdString>::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<int>(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)