Browse Source

bug fixes for external projects

Bill Hoffman 21 năm trước cách đây
mục cha
commit
32fe8caaef

+ 15 - 4
Source/cmGlobalVisualStudio71Generator.cxx

@@ -204,8 +204,16 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout,
     for(std::vector<std::string>::iterator si = dspnames.begin(); 
         l != tgts.end() && si != dspnames.end(); ++l)
       {
-      if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-          && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+      if (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) == 0)
+        {
+        cmCustomCommand cc = l->second.GetPostBuildCommands()[0];
+        // dodgy use of the cmCustomCommand's members to store the 
+        // arguments from the INCLUDE_EXTERNAL_MSPROJECT command
+        std::vector<std::string> stuff = cc.GetDepends();
+        this->WriteProjectConfigurations(fout, stuff[0].c_str(), l->second.IsInAll());
+        }
+      else if ((l->second.GetType() != cmTarget::INSTALL_FILES)
+               && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
         {
         this->WriteProjectConfigurations(fout, si->c_str(), l->second.IsInAll());
         ++si;
@@ -281,8 +289,11 @@ void cmGlobalVisualStudio71Generator::WriteProjectDepends(std::ostream& fout,
     {
     if(*i != dspname)
       {
-      fout << "\t\t{" << this->GetGUID(i->c_str()) << "} = {"
-           << this->GetGUID(i->c_str()) << "}\n";
+      std::string name = i->c_str();
+      if(strncmp(name.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) == 0)
+        name.erase(name.begin(), name.begin() + 27);
+      fout << "\t\t{" << this->GetGUID(name.c_str()) << "} = {"
+           << this->GetGUID(name.c_str()) << "}\n";
       }
     }
 }

+ 32 - 4
Source/cmGlobalVisualStudio7Generator.cxx

@@ -477,8 +477,16 @@ void cmGlobalVisualStudio7Generator::WriteSLNFile(std::ostream& fout,
     for(std::vector<std::string>::iterator si = dspnames.begin(); 
         l != tgts.end() && si != dspnames.end(); ++l)
       {
-      if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-          && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+       if (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) == 0)
+         {
+         cmCustomCommand cc = l->second.GetPostBuildCommands()[0];
+         // dodgy use of the cmCustomCommand's members to store the 
+         // arguments from the INCLUDE_EXTERNAL_MSPROJECT command
+         std::vector<std::string> stuff = cc.GetDepends();
+         this->WriteProjectConfigurations(fout, stuff[0].c_str(), l->second.IsInAll());
+         }
+       else if ((l->second.GetType() != cmTarget::INSTALL_FILES)
+                && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
         {
         this->WriteProjectDepends(fout, si->c_str(), dir.c_str(),l->second);
         ++si;
@@ -614,13 +622,33 @@ cmGlobalVisualStudio7Generator::WriteProjectConfigurations(std::ostream& fout,
 void cmGlobalVisualStudio7Generator::WriteExternalProject(std::ostream& fout, 
                                const char* name,
                                const char* location,
-                               const std::vector<std::string>& )
+                               const std::vector<std::string>& depends)
 { 
   std::string d = cmSystemTools::ConvertToOutputPath(location);
   fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" 
        << name << "\", \""
        << d << "\", \"{"
-       << this->GetGUID(name) << "}\"\nEndProject\n";
+       << this->GetGUID(name)
+       << "}\"\n";
+  
+  if(!depends.empty())
+    {
+    fout << "\tProjectSection(ProjectDependencies) = postProject\n";
+    std::vector<std::string>::const_iterator it;
+    for(it = depends.begin(); it != depends.end(); ++it)
+      {
+      if(it->size() > 0)
+        {
+        fout << "\t\t{" 
+             << this->GetGUID(it->c_str()) 
+             << "} = {" 
+             << this->GetGUID(it->c_str()) 
+             << "}\n";
+        }
+      }
+    fout << "\tEndProjectSection\n";
+    }  
+  fout << "EndProject\n";
 }
 
 

+ 1 - 1
Source/cmIncludeExternalMSProjectCommand.cxx

@@ -48,7 +48,7 @@ bool cmIncludeExternalMSProjectCommand::InitialPass(std::vector<std::string> con
     utility_name += args[0];
     
     m_Makefile->AddUtilityCommand(utility_name.c_str(), "echo", "\"Include external project\"",
-                                  false, name_and_location, depends);
+                                  true, name_and_location, depends);
     
     }
 #endif