Просмотр исходного кода

Fix for bug 10001, make vs 10 compiler .rc files correctly

Bill Hoffman 16 лет назад
Родитель
Сommit
39f851dc7c
1 измененных файлов с 39 добавлено и 30 удалено
  1. 39 30
      Source/cmVisualStudio10TargetGenerator.cxx

+ 39 - 30
Source/cmVisualStudio10TargetGenerator.cxx

@@ -396,6 +396,7 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
   std::vector<cmSourceFile*> customBuild;
   std::vector<cmSourceFile*> none;
   std::vector<cmSourceFile*> headers;
+  std::vector<cmSourceFile*> resource;
   
   for(std::vector<cmSourceFile*>::const_iterator s = classes.begin(); 
       s != classes.end(); s++)
@@ -417,6 +418,10 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
       {
       clCompile.push_back(sf);
       }
+    if(strcmp(lang, "RC") == 0)
+      {
+      resource.push_back(sf);
+      }
     else if(sf->GetCustomCommand())
       {
       customBuild.push_back(sf);
@@ -448,6 +453,7 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
                     0);
   this->WriteGroupSources("ClCompile", clCompile, sourceGroups);
   this->WriteGroupSources("ClInclude", headers, sourceGroups);
+  this->WriteGroupSources("ResourceCompile", resource, sourceGroups);
   this->WriteGroupSources("CustomBuild", customBuild, sourceGroups);
 
   this->WriteString("<ItemGroup>\n", 1);
@@ -568,37 +574,40 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
         ((*source)->GetExtension().c_str());
       const char* lang = (*source)->GetLanguage();
       bool cl = lang && (strcmp(lang, "C") == 0 || strcmp(lang, "CXX") ==0);
+      bool rc = lang && (strcmp(lang, "RC") == 0);
+      std::string sourceFile = (*source)->GetFullPath();
+      sourceFile =  cmSystemTools::RelativePath(
+        this->Makefile->GetCurrentOutputDirectory(),
+        sourceFile.c_str());
+      this->ConvertToWindowsSlash(sourceFile);
+      // output the source file
+      if(header)
+        {
+        this->WriteString("<ClInclude Include=\"", 2);
+        }
+      else if(cl)
+        {
+        this->WriteString("<ClCompile Include=\"", 2);
+        }
+      else if(rc)
+        {
+        this->WriteString("<ResourceCompile Include=\"", 2);
+        }
+      else
+        {
+        this->WriteString("<None Include=\"", 2);
+        }
+      (*this->BuildFileStream ) << sourceFile << "\"";
+      // ouput any flags specific to this source file
+      if(cl && this->OutputSourceSpecificFlags(*source))
+        {
+        // if the source file has specific flags the tag
+        // is ended on a new line
+        this->WriteString("</ClCompile>\n", 2);
+        }
+      else
         {
-        std::string sourceFile = (*source)->GetFullPath();
-        sourceFile =  cmSystemTools::RelativePath(
-          this->Makefile->GetCurrentOutputDirectory(),
-          sourceFile.c_str());
-        this->ConvertToWindowsSlash(sourceFile);
-        // output the source file
-        if(header)
-          {
-          this->WriteString("<ClInclude Include=\"", 2);
-          }
-        else if(cl)
-          {
-          this->WriteString("<ClCompile Include=\"", 2);
-          }
-        else
-          {
-          this->WriteString("<None Include=\"", 2);
-          }
-        (*this->BuildFileStream ) << sourceFile << "\"";
-        // ouput any flags specific to this source file
-        if(cl && this->OutputSourceSpecificFlags(*source))
-          {
-          // if the source file has specific flags the tag
-          // is ended on a new line
-          this->WriteString("</ClCompile>\n", 2);
-          }
-        else
-          {
-          (*this->BuildFileStream ) << " />\n";
-          }
+        (*this->BuildFileStream ) << " />\n";
         }
       }
     }