[Cmake-commits] [cmake-commits] hoffman committed cmLocalVisualStudio7Generator.cxx 1.248 1.249 cmLocalVisualStudio7Generator.h 1.57 1.58

cmake-commits at cmake.org cmake-commits at cmake.org
Tue Jul 28 14:30:17 EDT 2009


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv9524

Modified Files:
	cmLocalVisualStudio7Generator.cxx 
	cmLocalVisualStudio7Generator.h 
Log Message:
ENH: remove code duplication and use cmVisualStudioGeneratorOptions for all versions of vs 7 and greater.


Index: cmLocalVisualStudio7Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.cxx,v
retrieving revision 1.248
retrieving revision 1.249
diff -C 2 -d -r1.248 -r1.249
*** cmLocalVisualStudio7Generator.cxx	14 Jul 2009 18:16:46 -0000	1.248
--- cmLocalVisualStudio7Generator.cxx	28 Jul 2009 18:30:15 -0000	1.249
***************
*** 480,554 ****
  
  //----------------------------------------------------------------------------
- class cmLocalVisualStudio7GeneratorOptions
- {
- public:
-   // Construct an options table for a given tool.
-   enum Tool
-   {
-     Compiler,
-     Linker,
-     FortranCompiler
-   };
-   cmLocalVisualStudio7GeneratorOptions(cmLocalVisualStudio7Generator* lg,
-                                        int version,
-                                        Tool tool,
-                                        cmVS7FlagTable const* extraTable = 0);
- 
-   // Store options from command line flags.
-   void Parse(const char* flags);
- 
-   // Fix the ExceptionHandling option to default to off.
-   void FixExceptionHandlingDefault();
- 
-   // Store options for verbose builds.
-   void SetVerboseMakefile(bool verbose);
- 
-   // Store definitions and flags.
-   void AddDefine(const std::string& define);
-   void AddDefines(const char* defines);
-   void AddFlag(const char* flag, const char* value);
- 
-   // Check for specific options.
-   bool UsingUnicode();
- 
-   bool IsDebug();
-   // Write options to output.
-   void OutputPreprocessorDefinitions(std::ostream& fout,
-                                      const char* prefix,
-                                      const char* suffix);
-   void OutputFlagMap(std::ostream& fout, const char* indent);
-   void OutputAdditionalOptions(std::ostream& fout,
-                                const char* prefix,
-                                const char* suffix);
- 
- private:
-   cmLocalVisualStudio7Generator* LocalGenerator;
-   int Version;
- 
-   // create a map of xml tags to the values they should have in the output
-   // for example, "BufferSecurityCheck" = "TRUE"
-   // first fill this table with the values for the configuration
-   // Debug, Release, etc,
-   // Then parse the command line flags specified in CMAKE_CXX_FLAGS
-   // and CMAKE_C_FLAGS
-   // and overwrite or add new values to this map
-   std::map<cmStdString, cmStdString> FlagMap;
- 
-   // Preprocessor definitions.
-   std::vector<std::string> Defines;
- 
-   // Unrecognized flags that get no special handling.
-   cmStdString FlagString;
- 
-   Tool CurrentTool;
-   bool DoingDefine;
-   cmVS7FlagTable const* FlagTable;
-   cmVS7FlagTable const* ExtraFlagTable;
-   void HandleFlag(const char* flag);
-   bool CheckFlagTable(cmVS7FlagTable const* table, const char* flag,
-                       bool& flag_handled);
- };
- 
- //----------------------------------------------------------------------------
  // Helper class to write build event <Tool .../> elements.
  class cmLocalVisualStudio7Generator::EventWriter
--- 480,483 ----
***************
*** 702,710 ****
    std::string defineFlags = this->Makefile->GetDefineFlags();
    Options::Tool t = Options::Compiler;
    if(this->FortranProject)
      {
      t = Options::FortranCompiler;
      }
!   Options targetOptions(this, this->Version, t, this->ExtraFlagTable);
    targetOptions.FixExceptionHandlingDefault();
    targetOptions.Parse(flags.c_str());
--- 631,643 ----
    std::string defineFlags = this->Makefile->GetDefineFlags();
    Options::Tool t = Options::Compiler;
+   cmVS7FlagTable const* table = cmLocalVisualStudio7GeneratorFlagTable;
    if(this->FortranProject)
      {
      t = Options::FortranCompiler;
+     table = cmLocalVisualStudio7GeneratorFortranFlagTable;
      }
!   Options targetOptions(this, this->Version, t, 
!                         table,
!                         this->ExtraFlagTable);
    targetOptions.FixExceptionHandlingDefault();
    targetOptions.Parse(flags.c_str());
***************
*** 949,953 ****
      extraLinkOptions += targetLinkFlags;
      }
!   Options linkOptions(this, this->Version, Options::Linker);
    linkOptions.Parse(extraLinkOptions.c_str());
    switch(target.GetType())
--- 882,887 ----
      extraLinkOptions += targetLinkFlags;
      }
!   Options linkOptions(this, this->Version, Options::Linker,
!                       cmLocalVisualStudio7GeneratorLinkFlagTable);
    linkOptions.Parse(extraLinkOptions.c_str());
    switch(target.GetType())
***************
*** 1533,1536 ****
--- 1467,1471 ----
              {
              Options fileOptions(this, this->Version, Options::Compiler,
+                                 cmLocalVisualStudio7GeneratorFlagTable,
                                  this->ExtraFlagTable);
              fileOptions.Parse(fc.CompileFlags.c_str());
***************
*** 2001,2309 ****
  }
  
- //----------------------------------------------------------------------------
- cmLocalVisualStudio7GeneratorOptions
- ::cmLocalVisualStudio7GeneratorOptions(cmLocalVisualStudio7Generator* lg,
-                                        int version,
-                                        Tool tool,
-                                        cmVS7FlagTable const* extraTable):
-   LocalGenerator(lg), Version(version), CurrentTool(tool),
-   DoingDefine(false), FlagTable(0), ExtraFlagTable(extraTable)
- {
-   // Choose the flag table for the requested tool.
-   switch(tool)
-     {
-     case Compiler:
-       this->FlagTable = cmLocalVisualStudio7GeneratorFlagTable; break;
-     case Linker:
-       this->FlagTable = cmLocalVisualStudio7GeneratorLinkFlagTable; break;
-     case FortranCompiler:
-       this->FlagTable = cmLocalVisualStudio7GeneratorFortranFlagTable;
-     default: break;
-     }
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::FixExceptionHandlingDefault()
- {
-   // Exception handling is on by default because the platform file has
-   // "/EHsc" in the flags.  Normally, that will override this
-   // initialization to off, but the user has the option of removing
-   // the flag to disable exception handling.  When the user does
-   // remove the flag we need to override the IDE default of on.
-   switch (this->Version)
-     {
-     case 7:
-     case 71:
-       this->FlagMap["ExceptionHandling"] = "FALSE";
-     break;
- 
-     default:
-       this->FlagMap["ExceptionHandling"] = "0";
-     break;
-     }
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::SetVerboseMakefile(bool verbose)
- {
-   // If verbose makefiles have been requested and the /nologo option
-   // was not given explicitly in the flags we want to add an attribute
-   // to the generated project to disable logo suppression.  Otherwise
-   // the GUI default is to enable suppression.
-   if(verbose &&
-      this->FlagMap.find("SuppressStartupBanner") == this->FlagMap.end())
-     {
-     this->FlagMap["SuppressStartupBanner"] = "FALSE";
-     }
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::AddDefine(const std::string& def)
- {
-   this->Defines.push_back(def);
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::AddDefines(const char* defines)
- {
-   if(defines)
-     {
-     // Expand the list of definitions.
-     cmSystemTools::ExpandListArgument(defines, this->Defines);
-     }
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::AddFlag(const char* flag,
-                                                    const char* value)
- {
-   this->FlagMap[flag] = value;
- }
- 
- 
- bool cmLocalVisualStudio7GeneratorOptions::IsDebug()
- {
-   return this->FlagMap.find("DebugInformationFormat") != this->FlagMap.end();
- }
- 
- //----------------------------------------------------------------------------
- bool cmLocalVisualStudio7GeneratorOptions::UsingUnicode()
- {
-   // Look for the a _UNICODE definition.
-   for(std::vector<std::string>::const_iterator di = this->Defines.begin();
-       di != this->Defines.end(); ++di)
-     {
-     if(*di == "_UNICODE")
-       {
-       return true;
-       }
-     }
-   return false;
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::Parse(const char* flags)
- {
-   // Parse the input string as a windows command line since the string
-   // is intended for writing directly into the build files.
-   std::vector<std::string> args;
-   cmSystemTools::ParseWindowsCommandLine(flags, args);
- 
-   // Process flags that need to be represented specially in the IDE
-   // project file.
-   for(std::vector<std::string>::iterator ai = args.begin();
-       ai != args.end(); ++ai)
-     {
-     this->HandleFlag(ai->c_str());
-     }
- }
- 
- //----------------------------------------------------------------------------
- void cmLocalVisualStudio7GeneratorOptions::HandleFlag(const char* flag)
- {
-   // If the last option was -D then this option is the definition.
-   if(this->DoingDefine)
-     {
-     this->DoingDefine = false;
-     this->Defines.push_back(flag);
-     return;
-     }
- 
-   // Look for known arguments.
-   if(flag[0] == '-' || flag[0] == '/')
-     {
-     // Look for preprocessor definitions.
-     if(this->CurrentTool == Compiler && flag[1] == 'D')
-       {
-       if(flag[2] == '\0')
-         {
-         // The next argument will have the definition.
-         this->DoingDefine = true;
-         }
-       else
-         {
-         // Store this definition.
-         this->Defines.push_back(flag+2);
-         }
-       return;
-       }
- 
-     // Look through the available flag tables.
-     bool flag_handled = false;
-     if(this->FlagTable &&
-        this->CheckFlagTable(this->FlagTable, flag, flag_handled))
-       {
-       return;
-       }
-     if(this->ExtraFlagTable &&
-        this->CheckFlagTable(this->ExtraFlagTable, flag, flag_handled))
-       {
-       return;
-       }
- 
-     // If any map entry handled the flag we are done.
-     if(flag_handled)
-       {
-       return;
-       }
-     }
-   // This option is not known.  Store it in the output flags.
-   this->FlagString += " ";
-   this->FlagString +=
-     cmSystemTools::EscapeWindowsShellArgument(
-       flag,
-       cmsysSystem_Shell_Flag_AllowMakeVariables |
-       cmsysSystem_Shell_Flag_VSIDE);
- }
- 
- //----------------------------------------------------------------------------
- bool
- cmLocalVisualStudio7GeneratorOptions
- ::CheckFlagTable(cmVS7FlagTable const* table, const char* flag,
-                  bool& flag_handled)
- {
-   // Look for an entry in the flag table matching this flag.
-   for(cmVS7FlagTable const* entry = table; entry->IDEName; ++entry)
-     {
-     bool entry_found = false;
-     if(entry->special & cmVS7FlagTable::UserValue)
-       {
-       // This flag table entry accepts a user-specified value.  If
-       // the entry specifies UserRequired we must match only if a
-       // non-empty value is given.
-       int n = static_cast<int>(strlen(entry->commandFlag));
-       if(strncmp(flag+1, entry->commandFlag, n) == 0 &&
-          (!(entry->special & cmVS7FlagTable::UserRequired) ||
-           static_cast<int>(strlen(flag+1)) > n))
-         {
-         if(entry->special & cmVS7FlagTable::UserIgnored)
-           {
-           // Ignore the user-specified value.
-           this->FlagMap[entry->IDEName] = entry->value;
-           }
-         else if(entry->special & cmVS7FlagTable::SemicolonAppendable)
-           {
-           const char *new_value = flag+1+n;
-           
-           std::map<cmStdString,cmStdString>::iterator itr;
-           itr = this->FlagMap.find(entry->IDEName);
-           if(itr != this->FlagMap.end())
-             {
-             // Append to old value (if present) with semicolons;
-             itr->second += ";";
-             itr->second += new_value;
-             }
-           else
-             {
-             this->FlagMap[entry->IDEName] = new_value;
-             }
-           }
-         else
-           {
-           // Use the user-specified value.
-           this->FlagMap[entry->IDEName] = flag+1+n;
-           }
-         entry_found = true;
-         }
-       }
-     else if(strcmp(flag+1, entry->commandFlag) == 0)
-       {
-       // This flag table entry provides a fixed value.
-       this->FlagMap[entry->IDEName] = entry->value;
-       entry_found = true;
-       }
-     
-     // If the flag has been handled by an entry not requesting a
-     // search continuation we are done.
-     if(entry_found && !(entry->special & cmVS7FlagTable::Continue))
-       {
-       return true;
-       }
-     
-     // If the entry was found the flag has been handled.
-     flag_handled = flag_handled || entry_found;
-     }
-   
-   return false;
- }
- 
- //----------------------------------------------------------------------------
- void
- cmLocalVisualStudio7GeneratorOptions
- ::OutputPreprocessorDefinitions(std::ostream& fout,
-                                 const char* prefix,
-                                 const char* suffix)
- {
-   if(this->Defines.empty())
-     {
-     return;
-     }
- 
-   fout << prefix <<  "PreprocessorDefinitions=\"";
-   const char* comma = "";
-   for(std::vector<std::string>::const_iterator di = this->Defines.begin();
-       di != this->Defines.end(); ++di)
-     {
-     // Escape the definition for the compiler.
-     std::string define =
-       this->LocalGenerator->EscapeForShell(di->c_str(), true);
- 
-     // Escape this flag for the IDE.
-     define = cmLocalVisualStudio7GeneratorEscapeForXML(define.c_str());
- 
-     // Store the flag in the project file.
-     fout << comma << define;
-     comma = ",";
-     }
-   fout << "\"" << suffix;
- }
- 
- //----------------------------------------------------------------------------
- void
- cmLocalVisualStudio7GeneratorOptions
- ::OutputFlagMap(std::ostream& fout, const char* indent)
- {
-   for(std::map<cmStdString, cmStdString>::iterator m = this->FlagMap.begin();
-       m != this->FlagMap.end(); ++m)
-     {
-     fout << indent << m->first << "=\"" << m->second << "\"\n";
-     }
- }
- 
- //----------------------------------------------------------------------------
- void
- cmLocalVisualStudio7GeneratorOptions
- ::OutputAdditionalOptions(std::ostream& fout,
-                           const char* prefix,
-                           const char* suffix)
- {
-   if(!this->FlagString.empty())
-     {
-     fout << prefix << "AdditionalOptions=\"";
-     fout <<
-       cmLocalVisualStudio7GeneratorEscapeForXML(this->FlagString.c_str());
-     fout << "\"" << suffix;
-     }
- }
  void cmLocalVisualStudio7Generator::
  GetTargetObjectFileDirectories(cmTarget* target,
--- 1936,1939 ----

Index: cmLocalVisualStudio7Generator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.h,v
retrieving revision 1.57
retrieving revision 1.58
diff -C 2 -d -r1.57 -r1.58
*** cmLocalVisualStudio7Generator.h	13 Jul 2009 20:58:24 -0000	1.57
--- cmLocalVisualStudio7Generator.h	28 Jul 2009 18:30:15 -0000	1.58
***************
*** 82,86 ****
                                          const char* path);
  private:
!   typedef cmLocalVisualStudio7GeneratorOptions Options;
    typedef cmLocalVisualStudio7GeneratorFCInfo FCInfo;
    std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags,
--- 82,86 ----
                                          const char* path);
  private:
!   typedef cmVisualStudioGeneratorOptions Options;
    typedef cmLocalVisualStudio7GeneratorFCInfo FCInfo;
    std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags,



More information about the Cmake-commits mailing list