Browse Source

VS: Make MS-tool-specific options conditional

Make blocks adding MS-tool-specific options conditional on a
new "MSTools" boolean member of cmVisualStudio10TargetGenerator.
Hard-code the member to true for now to preserve existing behavior.
Brad King 11 years ago
parent
commit
7a9909db86
2 changed files with 142 additions and 95 deletions
  1. 141 95
      Source/cmVisualStudio10TargetGenerator.cxx
  2. 1 0
      Source/cmVisualStudio10TargetGenerator.h

+ 141 - 95
Source/cmVisualStudio10TargetGenerator.cxx

@@ -41,58 +41,74 @@
 
 cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetClFlagTable() const
 {
-  cmLocalVisualStudioGenerator::VSVersion
-    v = this->LocalGenerator->GetVersion();
-  if(v >= cmLocalVisualStudioGenerator::VS14)
-    { return cmVS14CLFlagTable; }
-  else if(v >= cmLocalVisualStudioGenerator::VS12)
-    { return cmVS12CLFlagTable; }
-  else if(v == cmLocalVisualStudioGenerator::VS11)
-    { return cmVS11CLFlagTable; }
-  else
-    { return cmVS10CLFlagTable; }
+  if(this->MSTools)
+    {
+    cmLocalVisualStudioGenerator::VSVersion
+      v = this->LocalGenerator->GetVersion();
+    if(v >= cmLocalVisualStudioGenerator::VS14)
+      { return cmVS14CLFlagTable; }
+    else if(v >= cmLocalVisualStudioGenerator::VS12)
+      { return cmVS12CLFlagTable; }
+    else if(v == cmLocalVisualStudioGenerator::VS11)
+      { return cmVS11CLFlagTable; }
+    else
+      { return cmVS10CLFlagTable; }
+    }
+  return 0;
 }
 
 cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetRcFlagTable() const
 {
-  cmLocalVisualStudioGenerator::VSVersion
-    v = this->LocalGenerator->GetVersion();
-  if(v >= cmLocalVisualStudioGenerator::VS14)
-    { return cmVS14RCFlagTable; }
-  else if(v >= cmLocalVisualStudioGenerator::VS12)
-    { return cmVS12RCFlagTable; }
-  else if(v == cmLocalVisualStudioGenerator::VS11)
-    { return cmVS11RCFlagTable; }
-  else
-    { return cmVS10RCFlagTable; }
+  if(this->MSTools)
+    {
+    cmLocalVisualStudioGenerator::VSVersion
+      v = this->LocalGenerator->GetVersion();
+    if(v >= cmLocalVisualStudioGenerator::VS14)
+      { return cmVS14RCFlagTable; }
+    else if(v >= cmLocalVisualStudioGenerator::VS12)
+      { return cmVS12RCFlagTable; }
+    else if(v == cmLocalVisualStudioGenerator::VS11)
+      { return cmVS11RCFlagTable; }
+    else
+      { return cmVS10RCFlagTable; }
+    }
+  return 0;
 }
 
 cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetLibFlagTable() const
 {
-  cmLocalVisualStudioGenerator::VSVersion
-    v = this->LocalGenerator->GetVersion();
-  if(v >= cmLocalVisualStudioGenerator::VS14)
-    { return cmVS14LibFlagTable; }
-  else if(v >= cmLocalVisualStudioGenerator::VS12)
-    { return cmVS12LibFlagTable; }
-  else if(v == cmLocalVisualStudioGenerator::VS11)
-    { return cmVS11LibFlagTable; }
-  else
-    { return cmVS10LibFlagTable; }
+  if(this->MSTools)
+    {
+    cmLocalVisualStudioGenerator::VSVersion
+      v = this->LocalGenerator->GetVersion();
+    if(v >= cmLocalVisualStudioGenerator::VS14)
+      { return cmVS14LibFlagTable; }
+    else if(v >= cmLocalVisualStudioGenerator::VS12)
+      { return cmVS12LibFlagTable; }
+    else if(v == cmLocalVisualStudioGenerator::VS11)
+      { return cmVS11LibFlagTable; }
+    else
+      { return cmVS10LibFlagTable; }
+    }
+  return 0;
 }
 
 cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetLinkFlagTable() const
 {
-  cmLocalVisualStudioGenerator::VSVersion
-    v = this->LocalGenerator->GetVersion();
-  if(v >= cmLocalVisualStudioGenerator::VS14)
-    { return cmVS14LinkFlagTable; }
-  else if(v >= cmLocalVisualStudioGenerator::VS12)
-    { return cmVS12LinkFlagTable; }
-  else if(v == cmLocalVisualStudioGenerator::VS11)
-    { return cmVS11LinkFlagTable; }
-  else
-    { return cmVS10LinkFlagTable; }
+  if(this->MSTools)
+    {
+    cmLocalVisualStudioGenerator::VSVersion
+      v = this->LocalGenerator->GetVersion();
+    if(v >= cmLocalVisualStudioGenerator::VS14)
+      { return cmVS14LinkFlagTable; }
+    else if(v >= cmLocalVisualStudioGenerator::VS12)
+      { return cmVS12LinkFlagTable; }
+    else if(v == cmLocalVisualStudioGenerator::VS11)
+      { return cmVS11LinkFlagTable; }
+    else
+      { return cmVS10LinkFlagTable; }
+    }
+  return 0;
 }
 
 static std::string cmVS10EscapeXML(std::string arg)
@@ -142,6 +158,7 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
   this->GlobalGenerator->CreateGUID(this->Name.c_str());
   this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
   this->Platform = gg->GetPlatformName();
+  this->MSTools = true;
   this->BuildFileStream = 0;
 }
 
@@ -532,7 +549,10 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
     configType += "</ConfigurationType>\n";
     this->WriteString(configType.c_str(), 2);
 
-    this->WriteMSToolConfigurationValues(*i);
+    if(this->MSTools)
+      {
+      this->WriteMSToolConfigurationValues(*i);
+      }
 
     this->WriteString("</PropertyGroup>\n", 1);
     }
@@ -1447,17 +1467,23 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
 
   // Get preprocessor definitions for this directory.
   std::string defineFlags = this->Target->GetMakefile()->GetDefineFlags();
-  clOptions.FixExceptionHandlingDefault();
-  clOptions.AddFlag("PrecompiledHeader", "NotUsing");
-  std::string asmLocation = configName + "/";
-  clOptions.AddFlag("AssemblerListingLocation", asmLocation.c_str());
+  if(this->MSTools)
+    {
+    clOptions.FixExceptionHandlingDefault();
+    clOptions.AddFlag("PrecompiledHeader", "NotUsing");
+    std::string asmLocation = configName + "/";
+    clOptions.AddFlag("AssemblerListingLocation", asmLocation.c_str());
+    }
   clOptions.Parse(flags.c_str());
   clOptions.Parse(defineFlags.c_str());
   std::vector<std::string> targetDefines;
   this->Target->GetCompileDefinitions(targetDefines, configName.c_str());
   clOptions.AddDefines(targetDefines);
-  clOptions.SetVerboseMakefile(
-    this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
+  if(this->MSTools)
+    {
+    clOptions.SetVerboseMakefile(
+      this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
+    }
 
   // Add a definition for the configuration name.
   std::string configDefine = "CMAKE_INTDIR=\"";
@@ -1486,24 +1512,27 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
   clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, "      ",
                                           "\n", "CXX");
 
-  this->WriteString("<ObjectFileName>$(IntDir)</ObjectFileName>\n", 3);
-
-  // If not in debug mode, write the DebugInformationFormat field
-  // without value so PDBs don't get generated uselessly.
-  if(!clOptions.IsDebug())
+  if(this->MSTools)
     {
-    this->WriteString("<DebugInformationFormat>"
-                      "</DebugInformationFormat>\n", 3);
-    }
+    this->WriteString("<ObjectFileName>$(IntDir)</ObjectFileName>\n", 3);
 
-  // Specify the compiler program database file if configured.
-  std::string pdb = this->Target->GetCompilePDBPath(configName.c_str());
-  if(!pdb.empty())
-    {
-    this->ConvertToWindowsSlash(pdb);
-    this->WriteString("<ProgramDataBaseFileName>", 3);
-    *this->BuildFileStream << cmVS10EscapeXML(pdb)
-                           << "</ProgramDataBaseFileName>\n";
+    // If not in debug mode, write the DebugInformationFormat field
+    // without value so PDBs don't get generated uselessly.
+    if(!clOptions.IsDebug())
+      {
+      this->WriteString("<DebugInformationFormat>"
+                        "</DebugInformationFormat>\n", 3);
+      }
+
+    // Specify the compiler program database file if configured.
+    std::string pdb = this->Target->GetCompilePDBPath(configName.c_str());
+    if(!pdb.empty())
+      {
+      this->ConvertToWindowsSlash(pdb);
+      this->WriteString("<ProgramDataBaseFileName>", 3);
+      *this->BuildFileStream << cmVS10EscapeXML(pdb)
+                             << "</ProgramDataBaseFileName>\n";
+      }
     }
 
   this->WriteString("</ClCompile>\n", 2);
@@ -1567,6 +1596,10 @@ void cmVisualStudio10TargetGenerator::
 WriteRCOptions(std::string const& configName,
                std::vector<std::string> const & includes)
 {
+  if(!this->MSTools)
+    {
+    return;
+    }
   this->WriteString("<ResourceCompile>\n", 2);
 
   // Preprocessor definitions and includes are shared with clOptions.
@@ -1754,45 +1787,53 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
                                   config.c_str());
     }
 
-  linkOptions.AddFlag("Version", "");
-
-  if ( this->Target->GetPropertyAsBool("WIN32_EXECUTABLE") )
+  if(this->MSTools)
     {
-    linkOptions.AddFlag("SubSystem", "Windows");
-    }
-  else
-    {
-    linkOptions.AddFlag("SubSystem", "Console");
-    }
+    linkOptions.AddFlag("Version", "");
 
-  if(const char* stackVal =
-     this->Makefile->GetDefinition("CMAKE_"+linkLanguage+"_STACK_SIZE"))
-    {
-    linkOptions.AddFlag("StackReserveSize", stackVal);
-    }
+    if ( this->Target->GetPropertyAsBool("WIN32_EXECUTABLE") )
+      {
+      linkOptions.AddFlag("SubSystem", "Windows");
+      }
+    else
+      {
+      linkOptions.AddFlag("SubSystem", "Console");
+      }
 
-  if(linkOptions.IsDebug() || flags.find("/debug") != flags.npos)
-    {
-    linkOptions.AddFlag("GenerateDebugInformation", "true");
-    }
-  else
-    {
-    linkOptions.AddFlag("GenerateDebugInformation", "false");
+    if(const char* stackVal =
+       this->Makefile->GetDefinition("CMAKE_"+linkLanguage+"_STACK_SIZE"))
+      {
+      linkOptions.AddFlag("StackReserveSize", stackVal);
+      }
+
+    if(linkOptions.IsDebug() || flags.find("/debug") != flags.npos)
+      {
+      linkOptions.AddFlag("GenerateDebugInformation", "true");
+      }
+    else
+      {
+      linkOptions.AddFlag("GenerateDebugInformation", "false");
+      }
+    std::string pdb = this->Target->GetPDBDirectory(config.c_str());
+    pdb += "/";
+    pdb += targetNamePDB;
+    std::string imLib = this->Target->GetDirectory(config.c_str(), true);
+    imLib += "/";
+    imLib += targetNameImport;
+
+    linkOptions.AddFlag("ImportLibrary", imLib.c_str());
+    linkOptions.AddFlag("ProgramDataBaseFile", pdb.c_str());
     }
-  std::string pdb = this->Target->GetPDBDirectory(config.c_str());
-  pdb += "/";
-  pdb += targetNamePDB;
-  std::string imLib = this->Target->GetDirectory(config.c_str(), true);
-  imLib += "/";
-  imLib += targetNameImport;
 
-  linkOptions.AddFlag("ImportLibrary", imLib.c_str());
-  linkOptions.AddFlag("ProgramDataBaseFile", pdb.c_str());
   linkOptions.Parse(flags.c_str());
-  std::string def = this->GeneratorTarget->GetModuleDefinitionFile("");
-  if(!def.empty())
+
+  if(this->MSTools)
     {
-    linkOptions.AddFlag("ModuleDefinitionFile", def.c_str());
+    std::string def = this->GeneratorTarget->GetModuleDefinitionFile("");
+    if(!def.empty())
+      {
+      linkOptions.AddFlag("ModuleDefinitionFile", def.c_str());
+      }
     }
 
   this->LinkOptions[config] = pOptions.release();
@@ -1857,6 +1898,11 @@ void cmVisualStudio10TargetGenerator::
 WriteMidlOptions(std::string const& /*config*/,
                  std::vector<std::string> const & includes)
 {
+  if(!this->MSTools)
+    {
+    return;
+    }
+
   // This processes *any* of the .idl files specified in the project's file
   // list (and passed as the item metadata %(Filename) expressing the rule
   // input filename) into output files at the per-config *build* dir

+ 1 - 0
Source/cmVisualStudio10TargetGenerator.h

@@ -120,6 +120,7 @@ private:
   std::string Platform;
   std::string GUID;
   std::string Name;
+  bool MSTools;
   cmGlobalVisualStudio10Generator* GlobalGenerator;
   cmGeneratedFileStream* BuildFileStream;
   cmLocalVisualStudio7Generator* LocalGenerator;