[cmake-commits] hoffman committed cmLocalVisualStudio7Generator.cxx 1.156 1.157 cmLocalVisualStudio7Generator.h 1.27 1.28

cmake-commits at cmake.org cmake-commits at cmake.org
Thu Jan 11 21:02:50 EST 2007


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

Modified Files:
	cmLocalVisualStudio7Generator.cxx 
	cmLocalVisualStudio7Generator.h 
Log Message:
BUG: fix for bug 4239, NODEFAULTLIB flag support in ide


Index: cmLocalVisualStudio7Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.cxx,v
retrieving revision 1.156
retrieving revision 1.157
diff -u -d -r1.156 -r1.157
--- cmLocalVisualStudio7Generator.cxx	26 Oct 2006 14:49:29 -0000	1.156
+++ cmLocalVisualStudio7Generator.cxx	12 Jan 2007 02:02:47 -0000	1.157
@@ -366,6 +366,7 @@
   {"GenerateManifest", "MANIFEST", "enable manifest generation", "TRUE"},
   {"LinkIncremental", "INCREMENTAL:NO", "link incremental", "1"},
   {"LinkIncremental", "INCREMENTAL:YES", "link incremental", "2"},
+  {"IgnoreDefaultLibraryNames", "NODEFAULTLIB:", "USER_VALUE", ""},
   {0,0,0,0 }
 };
 
@@ -625,6 +626,36 @@
   this->OutputBuildTool(fout, configName, libName, target);
   fout << "\t\t</Configuration>\n";
 }
+void cmLocalVisualStudio7Generator::ReplaceFlagSetMap(std::string& flags, 
+                                                      cmVS7FlagTable* flagTable,
+                                                      std::map<cmStdString, 
+                                                      cmStdString>& flagMap,
+                                                      std::string& option,
+                                                      std::string::size_type pos)
+{  
+  std::string value = flagTable->value;
+  if(strcmp(flagTable->comment, "USER_VALUE") == 0)
+    {
+    std::string::size_type len = flags.find(" ", pos);
+    if(len != flags.npos)
+      {
+      len -= option.size();
+      }
+    value = flags.substr(pos+option.size(), len);
+    std::string fullflag = option;
+    fullflag += value;
+    // remove everything
+    cmSystemTools::ReplaceString(flags, fullflag.c_str(), "");
+    }
+  else
+    {
+    cmSystemTools::ReplaceString(flags, option.c_str(), "");
+    }
+  // now put value into flag map
+  
+  flagMap[flagTable->IDEName] = value;
+}
+
 
 void cmLocalVisualStudio7Generator::FillFlagMapFromCommandFlags(
   std::map<cmStdString, cmStdString>& flagMap,
@@ -639,21 +670,21 @@
     // first do the - version
     option = "-";
     option += flagTable->commandFlag;
-    while(flags.find(option) != flags.npos)
+    std::string::size_type pos = flags.find(option);
+    while(pos != flags.npos)
       {
-      // replace the flag
-      cmSystemTools::ReplaceString(flags, option.c_str(), "");
-      // now put value into flag map
-      flagMap[flagTable->IDEName] = flagTable->value;
+      this->ReplaceFlagSetMap(flags, flagTable, flagMap, 
+                              option, pos);
+      pos = flags.find(option);
       }
     // now do the / version
     option[0] = '/';
-    while(flags.find(option) != flags.npos)
+    pos = flags.find(option);
+    while(pos != flags.npos)
       {
-      // replace the flag
-      cmSystemTools::ReplaceString(flags, option.c_str(), "");
-      // now put value into flag map
-      flagMap[flagTable->IDEName] = flagTable->value;
+      this->ReplaceFlagSetMap(flags, flagTable, flagMap,
+                              option, pos);
+      pos = flags.find(option);
       }
     // move to next flag
     flagTable++;
@@ -737,7 +768,6 @@
   this->FillFlagMapFromCommandFlags
     (flagMap, &cmLocalVisualStudio7GeneratorLinkFlagTable[0],
      extraLinkOptions);
-
   switch(target.GetType())
     {
     case cmTarget::STATIC_LIBRARY:

Index: cmLocalVisualStudio7Generator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- cmLocalVisualStudio7Generator.h	16 Oct 2006 22:17:14 -0000	1.27
+++ cmLocalVisualStudio7Generator.h	12 Jan 2007 02:02:47 -0000	1.28
@@ -65,6 +65,12 @@
   void SetPlatformName(const char* n) { this->PlatformName = n;}
   virtual void ConfigureFinalPass();
 private:
+  void ReplaceFlagSetMap(std::string& flags, 
+                         cmVS7FlagTable* flagTable,
+                         std::map<cmStdString, 
+                         cmStdString>& flagMap, 
+                         std::string& option,
+                         std::string::size_type pos);
   void FillFlagMapFromCommandFlags(std::map<cmStdString, 
                                    cmStdString>& flagMap,
                                    cmVS7FlagTable* flagTable,



More information about the Cmake-commits mailing list