Browse Source

BUG (85): allow . to be in the name of an executable

Bill Hoffman 22 years ago
parent
commit
4808d9cec2

+ 34 - 6
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)

+ 1 - 0
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)

+ 1 - 0
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)

+ 1 - 0
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)