Explorar el Código

restore the environment for cxx and cc in global generator

Bill Hoffman hace 23 años
padre
commit
384523a315
Se han modificado 2 ficheros con 53 adiciones y 5 borrados
  1. 51 5
      Source/cmGlobalGenerator.cxx
  2. 2 0
      Source/cmGlobalGenerator.h

+ 51 - 5
Source/cmGlobalGenerator.cxx

@@ -21,10 +21,46 @@
 
 cmGlobalGenerator::cmGlobalGenerator()
 {
+  // Save the environment variables CXX and CC
+  m_CXXEnvironment = getenv("CXX");
+  m_CCEnvironment = getenv("CC");
 }
 
 cmGlobalGenerator::~cmGlobalGenerator()
-{
+{ 
+  // restore the original environment variables CXX and CC
+  // Restor CC
+  static char envCC[5000];
+  std::string env = "CC=";
+  if(m_CCEnvironment)
+    {
+    env += m_CCEnvironment;
+    }
+  unsigned int size = env.size();
+  if(size > 4999)
+    {
+    size = 4999;
+    }
+  strncpy(envCC, env.c_str(), size);
+  envCC[4999] = 0;
+  putenv(envCC); 
+  
+  // Restore CXX
+  static char envCXX[5000];
+  env = "CXX=";
+  if(m_CXXEnvironment)
+    {
+    env += m_CXXEnvironment;
+    }
+  size = env.size();
+  if(size > 4999)
+    {
+    size = 4999;
+    }
+  strncpy(envCXX, env.c_str(), size);
+  envCXX[4999] = 0;
+  putenv(envCXX);
+
   // Delete any existing cmLocalGenerators
   unsigned int i;
   for (i = 0; i < m_LocalGenerators.size(); ++i)
@@ -118,8 +154,13 @@ void cmGlobalGenerator::EnableLanguage(const char* lang,
       static char envCC[5000];
       std::string env = "CC=${CMAKE_C_COMPILER}";
       mf->ExpandVariablesInString(env);
-      strncpy(envCC, env.c_str(), 4999);
-      envCC[4999] = 0;
+      unsigned int size = env.size();
+      if(size > 4999)
+        {
+        size = 4999;
+        }
+      strncpy(envCC, env.c_str(), size);
+      envCC[size] = 0;
       putenv(envCC);
       }
     } 
@@ -141,8 +182,13 @@ void cmGlobalGenerator::EnableLanguage(const char* lang,
     if(mf->GetDefinition("CMAKE_CXX_COMPILER"))
       {
       std::string env = "CXX=${CMAKE_CXX_COMPILER}";
-      mf->ExpandVariablesInString(env);
-      strncpy(envCXX, env.c_str(), 4999);
+      mf->ExpandVariablesInString(env); 
+      unsigned int size = env.size();
+      if(size > 4999)
+        {
+        size = 4999;
+        }
+      strncpy(envCXX, env.c_str(), size);
       envCXX[4999] = 0;
       putenv(envCXX);
       }

+ 2 - 0
Source/cmGlobalGenerator.h

@@ -109,6 +109,8 @@ protected:
   
 private:
   std::map<cmStdString, bool> m_LanguageEnabled;
+  const char* m_CXXEnvironment;
+  const char* m_CCEnvironment;
 };
 
 #endif