Răsfoiți Sursa

Consolidate usage of VsProjectType

Move ProjectFileExtension handling logic to use ProjectType and remove
extraneous checks in .Net SDK style project generation. This change will
make introducing new project types relatively simpler.
Sumit Bhardwaj 4 ani în urmă
părinte
comite
3b7520b94d

+ 4 - 2
Source/cmLocalVisualStudio7Generator.cxx

@@ -40,6 +40,7 @@
 #include "cmTarget.h"
 #include "cmTarget.h"
 #include "cmTargetDepend.h"
 #include "cmTargetDepend.h"
 #include "cmValue.h"
 #include "cmValue.h"
+#include "cmVsProjectType.h"
 #include "cmXMLParser.h"
 #include "cmXMLParser.h"
 #include "cmake.h"
 #include "cmake.h"
 
 
@@ -574,7 +575,8 @@ public:
   {
   {
     // If any commands were generated, finish constructing them.
     // If any commands were generated, finish constructing them.
     if (!this->First) {
     if (!this->First) {
-      std::string finishScript = this->LG->FinishConstructScript(IsCSharp::No);
+      std::string finishScript =
+        this->LG->FinishConstructScript(VsProjectType::vcxproj);
       this->Stream << this->LG->EscapeForXML(finishScript) << "\"";
       this->Stream << this->LG->EscapeForXML(finishScript) << "\"";
     }
     }
 
 
@@ -1817,7 +1819,7 @@ void cmLocalVisualStudio7Generator::WriteCustomRule(
     if (this->FortranProject) {
     if (this->FortranProject) {
       cmSystemTools::ReplaceString(script, "$(Configuration)", config);
       cmSystemTools::ReplaceString(script, "$(Configuration)", config);
     }
     }
-    script += this->FinishConstructScript(IsCSharp::No);
+    script += this->FinishConstructScript(VsProjectType::vcxproj);
     /* clang-format off */
     /* clang-format off */
     fout << "\t\t\t\t\t<Tool\n"
     fout << "\t\t\t\t\t<Tool\n"
          << "\t\t\t\t\tName=\"" << customTool << "\"\n"
          << "\t\t\t\t\tName=\"" << customTool << "\"\n"

+ 2 - 2
Source/cmLocalVisualStudioGenerator.cxx

@@ -245,14 +245,14 @@ std::string cmLocalVisualStudioGenerator::ConstructScript(
 }
 }
 
 
 std::string cmLocalVisualStudioGenerator::FinishConstructScript(
 std::string cmLocalVisualStudioGenerator::FinishConstructScript(
-  IsCSharp isCSharp, const std::string& newline)
+  VsProjectType projectType, const std::string& newline)
 {
 {
   bool useLocal = this->CustomCommandUseLocal();
   bool useLocal = this->CustomCommandUseLocal();
 
 
   // Store the script in a string.
   // Store the script in a string.
   std::string script;
   std::string script;
 
 
-  if (useLocal && isCSharp == IsCSharp::Yes) {
+  if (useLocal && projectType == VsProjectType::csproj) {
     // This label is not provided by MSBuild for C# projects.
     // This label is not provided by MSBuild for C# projects.
     script += newline;
     script += newline;
     script += this->GetReportErrorLabel();
     script += this->GetReportErrorLabel();

+ 2 - 7
Source/cmLocalVisualStudioGenerator.h

@@ -10,6 +10,7 @@
 
 
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmLocalGenerator.h"
 #include "cmLocalGenerator.h"
+#include "cmVsProjectType.h"
 
 
 class cmCustomCommand;
 class cmCustomCommand;
 class cmCustomCommandGenerator;
 class cmCustomCommandGenerator;
@@ -30,15 +31,9 @@ public:
   cmLocalVisualStudioGenerator(cmGlobalGenerator* gg, cmMakefile* mf);
   cmLocalVisualStudioGenerator(cmGlobalGenerator* gg, cmMakefile* mf);
   virtual ~cmLocalVisualStudioGenerator();
   virtual ~cmLocalVisualStudioGenerator();
 
 
-  /** Construct a script from the given list of command lines.  */
-  enum class IsCSharp
-  {
-    No,
-    Yes
-  };
   std::string ConstructScript(cmCustomCommandGenerator const& ccg,
   std::string ConstructScript(cmCustomCommandGenerator const& ccg,
                               const std::string& newline = "\n");
                               const std::string& newline = "\n");
-  std::string FinishConstructScript(IsCSharp isCSharp,
+  std::string FinishConstructScript(VsProjectType projectType,
                                     const std::string& newline = "\n");
                                     const std::string& newline = "\n");
 
 
   /** Label to which to jump in a batch file after a failed step in a
   /** Label to which to jump in a batch file after a failed step in a

+ 33 - 31
Source/cmVisualStudio10TargetGenerator.cxx

@@ -235,14 +235,27 @@ static bool cmVS10IsTargetsFile(std::string const& path)
   return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0;
   return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0;
 }
 }
 
 
-static std::string computeProjectFileExtension(cmGeneratorTarget const* t)
+static VsProjectType computeProjectType(cmGeneratorTarget const* t)
 {
 {
-  std::string res;
-  res = ".vcxproj";
   if (t->IsCSharpOnly()) {
   if (t->IsCSharpOnly()) {
-    res = ".csproj";
+    return VsProjectType::csproj;
+  }
+  return VsProjectType::vcxproj;
+}
+
+static std::string computeProjectFileExtension(VsProjectType projectType)
+{
+  switch (projectType) {
+    case VsProjectType::csproj:
+      return ".csproj";
+    default:
+      return ".vcxproj";
   }
   }
-  return res;
+}
+
+static std::string computeProjectFileExtension(cmGeneratorTarget const* t)
+{
+  return computeProjectFileExtension(computeProjectType(t));
 }
 }
 
 
 cmVisualStudio10TargetGenerator::cmVisualStudio10TargetGenerator(
 cmVisualStudio10TargetGenerator::cmVisualStudio10TargetGenerator(
@@ -339,21 +352,18 @@ std::ostream& cmVisualStudio10TargetGenerator::Elem::WriteString(
 
 
 void cmVisualStudio10TargetGenerator::Generate()
 void cmVisualStudio10TargetGenerator::Generate()
 {
 {
+  this->ProjectType = computeProjectType(this->GeneratorTarget);
+  this->Managed = this->ProjectType == VsProjectType::csproj;
   const std::string ProjectFileExtension =
   const std::string ProjectFileExtension =
-    computeProjectFileExtension(this->GeneratorTarget);
-  if (ProjectFileExtension == ".vcxproj") {
-    this->ProjectType = VsProjectType::vcxproj;
-    this->Managed = false;
-  } else if (ProjectFileExtension == ".csproj") {
-    if (this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY) {
-      std::string message = "The C# target \"" +
-        this->GeneratorTarget->GetName() +
-        "\" is of type STATIC_LIBRARY. This is discouraged (and may be "
-        "disabled in future). Make it a SHARED library instead.";
-      this->Makefile->IssueMessage(MessageType::DEPRECATION_WARNING, message);
-    }
-    this->ProjectType = VsProjectType::csproj;
-    this->Managed = true;
+    computeProjectFileExtension(this->ProjectType);
+
+  if (this->ProjectType == VsProjectType::csproj &&
+      this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY) {
+    std::string message = "The C# target \"" +
+      this->GeneratorTarget->GetName() +
+      "\" is of type STATIC_LIBRARY. This is discouraged (and may be "
+      "disabled in future). Make it a SHARED library instead.";
+    this->Makefile->IssueMessage(MessageType::DEPRECATION_WARNING, message);
   }
   }
 
 
   if (this->Android &&
   if (this->Android &&
@@ -406,7 +416,7 @@ void cmVisualStudio10TargetGenerator::Generate()
   char magic[] = { char(0xEF), char(0xBB), char(0xBF) };
   char magic[] = { char(0xEF), char(0xBB), char(0xBF) };
   BuildFileStream.write(magic, 3);
   BuildFileStream.write(magic, 3);
 
 
-  if (this->Managed && this->ProjectType == VsProjectType::csproj &&
+  if (this->ProjectType == VsProjectType::csproj &&
       this->GeneratorTarget->IsDotNetSdkTarget() &&
       this->GeneratorTarget->IsDotNetSdkTarget() &&
       this->GlobalGenerator->GetVersion() >=
       this->GlobalGenerator->GetVersion() >=
         cmGlobalVisualStudioGenerator::VS16) {
         cmGlobalVisualStudioGenerator::VS16) {
@@ -832,7 +842,7 @@ void cmVisualStudio10TargetGenerator::WriteClassicMsBuildProjectFile(
 void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile(
 void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile(
   cmGeneratedFileStream& BuildFileStream)
   cmGeneratedFileStream& BuildFileStream)
 {
 {
-  if (!this->Managed || this->ProjectType != VsProjectType::csproj ||
+  if (this->ProjectType != VsProjectType::csproj ||
       !this->GeneratorTarget->IsDotNetSdkTarget()) {
       !this->GeneratorTarget->IsDotNetSdkTarget()) {
     std::string message = "The target \"" + this->GeneratorTarget->GetName() +
     std::string message = "The target \"" + this->GeneratorTarget->GetName() +
       "\" is not eligible for .Net SDK style project.";
       "\" is not eligible for .Net SDK style project.";
@@ -1711,11 +1721,7 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
         }
         }
       }
       }
     }
     }
-    cmLocalVisualStudioGenerator::IsCSharp isCSharp =
-      (this->ProjectType == VsProjectType::csproj)
-      ? cmLocalVisualStudioGenerator::IsCSharp::Yes
-      : cmLocalVisualStudioGenerator::IsCSharp::No;
-    script += lg->FinishConstructScript(isCSharp);
+    script += lg->FinishConstructScript(this->ProjectType);
     if (this->ProjectType == VsProjectType::csproj) {
     if (this->ProjectType == VsProjectType::csproj) {
       std::string name = "CustomCommand_" + c + "_" +
       std::string name = "CustomCommand_" + c + "_" +
         cmSystemTools::ComputeStringMD5(sourcePath);
         cmSystemTools::ComputeStringMD5(sourcePath);
@@ -4449,11 +4455,7 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
     }
     }
   }
   }
   if (!script.empty()) {
   if (!script.empty()) {
-    cmLocalVisualStudioGenerator::IsCSharp isCSharp =
-      (this->ProjectType == VsProjectType::csproj)
-      ? cmLocalVisualStudioGenerator::IsCSharp::Yes
-      : cmLocalVisualStudioGenerator::IsCSharp::No;
-    script += lg->FinishConstructScript(isCSharp);
+    script += lg->FinishConstructScript(this->ProjectType);
   }
   }
   comment = cmVS10EscapeComment(comment);
   comment = cmVS10EscapeComment(comment);
   if (this->ProjectType != VsProjectType::csproj) {
   if (this->ProjectType != VsProjectType::csproj) {