Pārlūkot izejas kodu

BUG: fix for bug 78 should be on 1.8 branch

Bill Hoffman 22 gadi atpakaļ
vecāks
revīzija
db3cd82590

+ 1 - 1
Modules/Platform/Windows-cl.cmake

@@ -62,6 +62,7 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
    SET (CMAKE_NO_BUILD_TYPE 1)
    SET (CMAKE_NO_BUILD_TYPE 1)
 ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
 ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
 IF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
 IF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
+  SET (CMAKE_NO_BUILD_TYPE 1)
   SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING 
   SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING 
      "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.")
      "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.")
   SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING
   SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING
@@ -69,7 +70,6 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
   SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING
   SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING
        "Size of stack for programs.")
        "Size of stack for programs.")
   MARK_AS_ADVANCED(CMAKE_CONFIGURATION_TYPES CMAKE_CXX_STACK_SIZE CMAKE_CXX_WARNING_LEVEL)
   MARK_AS_ADVANCED(CMAKE_CONFIGURATION_TYPES CMAKE_CXX_STACK_SIZE CMAKE_CXX_WARNING_LEVEL)
-  SET (CMAKE_NOT_USING_CONFIG_FLAGS 1)
 ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
 ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
 
 
 # does the compiler support pdbtype
 # does the compiler support pdbtype

+ 88 - 36
Source/cmLocalVisualStudio7Generator.cxx

@@ -253,32 +253,26 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
        << "\t\t\t\tName=\"VCCLCompilerTool\"\n"
        << "\t\t\t\tName=\"VCCLCompilerTool\"\n"
        << "\t\t\t\tAdditionalOptions=\"";
        << "\t\t\t\tAdditionalOptions=\"";
   std::string flags;
   std::string flags;
+  std::string flagsRelease = " ";
+  std::string flagsMinSize = " ";
+  std::string flagsDebug = " ";
+  std::string flagsDebugRel = " ";
   if(target.HasCxx())
   if(target.HasCxx())
     {
     {
     flags = m_Makefile->GetDefinition("CMAKE_CXX_FLAGS");
     flags = m_Makefile->GetDefinition("CMAKE_CXX_FLAGS");
+    flagsRelease += m_Makefile->GetDefinition("CMAKE_CXX_FLAGS_RELEASE");
+    flagsMinSize += m_Makefile->GetDefinition("CMAKE_CXX_FLAGS_MINSIZEREL");
+    flagsDebug += m_Makefile->GetDefinition("CMAKE_CXX_FLAGS_DEBUG");
+    flagsDebugRel += m_Makefile->GetDefinition("CMAKE_CXX_FLAGS_RELWITHDEBINFO");
     }
     }
   else
   else
     {
     {
-    if(m_Makefile->GetDefinition("CMAKE_C_FLAGS"))
-      {
-      flags = m_Makefile->GetDefinition("CMAKE_C_FLAGS");
-      }
+    flags = m_Makefile->GetDefinition("CMAKE_C_FLAGS");
+    flagsRelease += m_Makefile->GetDefinition("CMAKE_C_FLAGS_RELEASE");
+    flagsMinSize += m_Makefile->GetDefinition("CMAKE_C_FLAGS_MINSIZEREL");
+    flagsDebug += m_Makefile->GetDefinition("CMAKE_C_FLAGS_DEBUG");
+    flagsDebugRel += m_Makefile->GetDefinition("CMAKE_C_FLAGS_RELWITHDEBINFO");
     }
     }
-  cmSystemTools::ReplaceString(flags, "\"", "&quot;");
-  fout << flags;
-
-  fout << " -DCMAKE_INTDIR=\\&quot;" << configName << "\\&quot;" 
-       << "\"\n";
-
-  fout << "\t\t\t\tAdditionalIncludeDirectories=\"";
-  std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
-  std::vector<std::string>::iterator i = includes.begin();
-  for(;i != includes.end(); ++i)
-    {
-    std::string ipath = this->ConvertToXMLOutputPath(i->c_str());
-    fout << ipath << ";";
-    }
-  fout << "\"\n";
   
   
 // Optimization = 0  None Debug  /O0
 // Optimization = 0  None Debug  /O0
 // Optimization = 1  MinSize     /O1
 // Optimization = 1  MinSize     /O1
@@ -295,34 +289,92 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
 // InlineFunctionExpansion = 2 any time you can
 // InlineFunctionExpansion = 2 any time you can
 
 
 
 
+  int runtime = 0;
+  int optimized = 0;
+  int inlineFunctions = 0;
+  const char* pre = "WIN32,_DEBUG,_WINDOWS";
+  // set the flags and defaults for
+  // runtime, optimized, and inlineFunctions , and
+  // default pre processor flags
   if(strcmp(configName, "Debug") == 0)
   if(strcmp(configName, "Debug") == 0)
     {
     {
-    fout << "\t\t\t\tOptimization=\"0\"\n"
-         << "\t\t\t\tRuntimeLibrary=\"3\"\n"
-         << "\t\t\t\tInlineFunctionExpansion=\"0\"\n"
-         << "\t\t\t\tPreprocessorDefinitions=\"WIN32,_DEBUG,_WINDOWS";
+    inlineFunctions = 0;
+    flags += flagsDebug;
+    optimized = 0;
+    runtime = 3;
+    pre = "WIN32,_DEBUG,_WINDOWS";
     }
     }
-  else if(strcmp(configName, "Release") == 0)
+  else if (strcmp(configName, "Release") == 0)
     {
     {
-    fout << "\t\t\t\tOptimization=\"2\"\n"
-         << "\t\t\t\tRuntimeLibrary=\"2\"\n"
-         << "\t\t\t\tInlineFunctionExpansion=\"1\"\n"
-         << "\t\t\t\tPreprocessorDefinitions=\"WIN32,NDEBUG,_WINDOWS";
+    inlineFunctions = 1;
+    optimized =2;
+    pre = "WIN32,NDEBUG,_WINDOWS";
+    flags += flagsRelease;
+    runtime = 2;
     }
     }
   else if(strcmp(configName, "MinSizeRel") == 0)
   else if(strcmp(configName, "MinSizeRel") == 0)
     {
     {
-    fout << "\t\t\t\tOptimization=\"1\"\n"
-         << "\t\t\t\tRuntimeLibrary=\"2\"\n"
-         << "\t\t\t\tInlineFunctionExpansion=\"1\"\n"
-         << "\t\t\t\tPreprocessorDefinitions=\"WIN32,NDEBUG,_WINDOWS";
+    inlineFunctions = 1;
+    runtime = 2;
+    optimized = 1;
+    pre = "WIN32,NDEBUG,_WINDOWS";
+    flags += flagsMinSize;
     }
     }
   else if(strcmp(configName, "RelWithDebInfo") == 0)
   else if(strcmp(configName, "RelWithDebInfo") == 0)
     {
     {
-    fout << "\t\t\t\tOptimization=\"2\"\n"
-         << "\t\t\t\tRuntimeLibrary=\"2\"\n"
-         << "\t\t\t\tInlineFunctionExpansion=\"1\"\n"
-         << "\t\t\t\tPreprocessorDefinitions=\"WIN32,NDEBUG,_WINDOWS";
+    inlineFunctions = 1;
+    optimized = 2;
+    runtime = 2;
+    pre = "WIN32,NDEBUG,_WINDOWS";
+    flags += flagsDebugRel;
+    }
+  
+  cmSystemTools::ReplaceString(flags, "\"", "&quot;");
+  fout << flags;
+
+  fout << " -DCMAKE_INTDIR=\\&quot;" << configName << "\\&quot;" 
+       << "\"\n";
+
+  fout << "\t\t\t\tAdditionalIncludeDirectories=\"";
+  std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
+  std::vector<std::string>::iterator i = includes.begin();
+  for(;i != includes.end(); ++i)
+    {
+    std::string ipath = this->ConvertToXMLOutputPath(i->c_str());
+    fout << ipath << ";";
+    }
+  fout << "\"\n";
+  // check the flags for the run time library flag options
+  // if there is a match set the run time flag
+  if(flags.find("MTd") != flags.npos)
+    {
+    runtime = 1;
     }
     }
+  else if (flags.find("MDd") != flags.npos)
+    {
+    runtime = 3;
+    }
+  else if (flags.find("MLd") != flags.npos)
+    {
+    runtime = 5;
+    }
+  else if (flags.find("MT") != flags.npos)
+    {
+    runtime = 0;
+    }
+  else if (flags.find("MD") != flags.npos)
+    {
+    runtime = 2;
+    }
+  else if (flags.find("ML") != flags.npos)
+    {
+    runtime = 4;
+    }
+
+  fout << "\t\t\t\tOptimization=\"" << optimized << "\"\n"
+       << "\t\t\t\tRuntimeLibrary=\"" << runtime << "\"\n"
+       << "\t\t\t\tInlineFunctionExpansion=\"" << inlineFunctions << "\"\n"
+       << "\t\t\t\tPreprocessorDefinitions=\"" << pre;
   if(target.GetType() == cmTarget::SHARED_LIBRARY
   if(target.GetType() == cmTarget::SHARED_LIBRARY
      || target.GetType() == cmTarget::MODULE_LIBRARY)
      || target.GetType() == cmTarget::MODULE_LIBRARY)
     {
     {