Merge topic 'revert-vs-ZERO_CHECK-proj'

26b724cf2b Merge branch 'backport-3.24-revert-vs-ZERO_CHECK-proj'
289932ded0 VS: Revert "Write ZERO_CHECK.proj for VS19 and above"

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7499
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index dec0858..29eeb5a 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -1286,22 +1286,6 @@
   return makeCommands;
 }
 
-bool cmGlobalVisualStudio10Generator::IsInSolution(
-  const cmGeneratorTarget* gt) const
-{
-  return gt->IsInBuildSystem() &&
-    !(this->Version >= cmGlobalVisualStudioGenerator::VSVersion::VS16 &&
-      gt->GetName() == CMAKE_CHECK_BUILD_SYSTEM_TARGET);
-}
-
-bool cmGlobalVisualStudio10Generator::IsDepInSolution(
-  const std::string& targetName) const
-{
-  return !targetName.empty() &&
-    !(this->Version >= cmGlobalVisualStudioGenerator::VSVersion::VS16 &&
-      targetName == CMAKE_CHECK_BUILD_SYSTEM_TARGET);
-}
-
 bool cmGlobalVisualStudio10Generator::Find64BitTools(cmMakefile* mf)
 {
   if (this->DefaultPlatformToolset == "v100") {
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 12fd7a8..4977a84 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -118,10 +118,6 @@
     return this->WindowsTargetPlatformVersion;
   }
 
-  bool IsInSolution(const cmGeneratorTarget* gt) const override;
-
-  bool IsDepInSolution(const std::string& targetName) const override;
-
   /** Return true if building for WindowsCE */
   bool TargetsWindowsCE() const override { return this->SystemIsWindowsCE; }
 
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 2356869..a00cd2b 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -50,24 +50,6 @@
 #include "cmValue.h"
 #include "cmVisualStudioGeneratorOptions.h"
 
-namespace {
-std::string getProjectFileExtension(VsProjectType projectType)
-{
-  switch (projectType) {
-    case VsProjectType::csproj:
-      return ".csproj";
-    case VsProjectType::proj:
-      return ".proj";
-    case VsProjectType::vcxproj:
-      return ".vcxproj";
-    // Valid inputs shouldn't reach here. This default is needed so that all
-    // paths return value (C4715).
-    default:
-      return "";
-  }
-}
-}
-
 struct cmIDEFlagTable;
 
 static void ConvertToWindowsSlash(std::string& s);
@@ -253,6 +235,31 @@
   return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0;
 }
 
+static VsProjectType computeProjectType(cmGeneratorTarget const* t)
+{
+  if (t->IsCSharpOnly()) {
+    return VsProjectType::csproj;
+  }
+  return VsProjectType::vcxproj;
+}
+
+static std::string computeProjectFileExtension(VsProjectType projectType)
+{
+  switch (projectType) {
+    case VsProjectType::csproj:
+      return ".csproj";
+    case VsProjectType::proj:
+      return ".proj";
+    default:
+      return ".vcxproj";
+  }
+}
+
+static std::string computeProjectFileExtension(cmGeneratorTarget const* t)
+{
+  return computeProjectFileExtension(computeProjectType(t));
+}
+
 cmVisualStudio10TargetGenerator::cmVisualStudio10TargetGenerator(
   cmGeneratorTarget* target, cmGlobalVisualStudio10Generator* gg)
   : GeneratorTarget(target)
@@ -359,10 +366,10 @@
                "by the generator"));
   }
 
-  this->ProjectType = this->ComputeProjectType(this->GeneratorTarget);
+  this->ProjectType = computeProjectType(this->GeneratorTarget);
   this->Managed = this->ProjectType == VsProjectType::csproj;
   const std::string ProjectFileExtension =
-    getProjectFileExtension(this->ProjectType);
+    computeProjectFileExtension(this->ProjectType);
 
   if (this->ProjectType == VsProjectType::csproj &&
       this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY) {
@@ -423,12 +430,10 @@
   char magic[] = { char(0xEF), char(0xBB), char(0xBF) };
   BuildFileStream.write(magic, 3);
 
-  if (this->ProjectType == VsProjectType::proj) {
-    this->WriteZeroCheckProj(BuildFileStream);
-  } else if (this->ProjectType == VsProjectType::csproj &&
-             this->GeneratorTarget->IsDotNetSdkTarget() &&
-             this->GlobalGenerator->GetVersion() >=
-               cmGlobalVisualStudioGenerator::VSVersion::VS16) {
+  if (this->ProjectType == VsProjectType::csproj &&
+      this->GeneratorTarget->IsDotNetSdkTarget() &&
+      this->GlobalGenerator->GetVersion() >=
+        cmGlobalVisualStudioGenerator::VSVersion::VS16) {
     this->WriteSdkStyleProjectFile(BuildFileStream);
   } else {
     this->WriteClassicMsBuildProjectFile(BuildFileStream);
@@ -977,45 +982,6 @@
   this->WriteProjectReferences(e0);
 }
 
-void cmVisualStudio10TargetGenerator::WriteZeroCheckProj(
-  cmGeneratedFileStream& BuildFileStream)
-{
-  // ZERO_CHECK.proj is an XML file without any imports or targets. This is a
-  // ProjectReference for other targets and therefore, it needs to follow the
-  // ProjectReference protocol as documented here:
-  // https://github.com/dotnet/msbuild/blob/main/documentation/ProjectReference-Protocol.md
-  //
-  // We implement MSBuild target Build from WriteCustomCommand which calls
-  // WriteZeroCheckBuildTarget after setting up the command generator. MSBuild
-  // target Clean is a no-op as we do all the work for ZERO_CHECK on Build.
-  // MSBuild target GetTargetPath is needed and is no-op.
-  // MSBuild targets GetNativeManifest and GetCopyToOutputDirectoryItems are
-  // needed for MSBuild versions below 15.7 and are no-op. MSBuild target
-  // BeforeBuild is needed for supporting GLOBs.
-  BuildFileStream << "<?xml version=\"1.0\" encoding=\""
-                  << this->GlobalGenerator->Encoding() << "\"?>";
-  {
-    Elem e0(BuildFileStream, "Project");
-    e0.Attribute("DefaultTargets", "Build");
-    e0.Attribute("ToolsVersion", this->GlobalGenerator->GetToolsVersion());
-    e0.Attribute("xmlns",
-                 "http://schemas.microsoft.com/developer/msbuild/2003");
-
-    this->WriteCustomCommands(e0);
-
-    for (const char* targetName :
-         { "Clean", "GetTargetPath", "GetNativeManifest",
-           "GetCopyToOutputDirectoryItems" }) {
-      {
-        Elem e1(e0, "Target");
-        e1.Attribute("Name", targetName);
-      }
-    }
-
-    this->WriteZeroCheckBeforeBuildTarget(e0);
-  }
-}
-
 void cmVisualStudio10TargetGenerator::WriteCommonPropertyGroupGlobals(Elem& e1)
 {
   e1.Attribute("Label", "Globals");
@@ -1735,16 +1701,11 @@
       }
     }
   }
-  if (this->ProjectType == VsProjectType::proj) {
-    this->WriteZeroCheckBuildTarget(e0, command, source);
-    return;
-  }
-
   cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
 
   std::unique_ptr<Elem> spe1;
   std::unique_ptr<Elem> spe2;
-  if (this->ProjectType == VsProjectType::vcxproj) {
+  if (this->ProjectType != VsProjectType::csproj) {
     spe1 = cm::make_unique<Elem>(e0, "ItemGroup");
     spe2 = cm::make_unique<Elem>(*spe1, "CustomBuild");
     this->WriteSource(*spe2, source);
@@ -1942,7 +1903,7 @@
   // Write out group file
   std::string path = cmStrCat(
     this->LocalGenerator->GetCurrentBinaryDirectory(), '/', this->Name,
-    this->ComputeProjectFileExtension(this->GeneratorTarget), ".filters");
+    computeProjectFileExtension(this->GeneratorTarget), ".filters");
   cmGeneratedFileStream fout(path);
   fout.SetCopyIfDifferent(true);
   char magic[] = { char(0xEF), char(0xBB), char(0xBF) };
@@ -3097,134 +3058,6 @@
   }
 }
 
-void cmVisualStudio10TargetGenerator::WriteZeroCheckBuildTarget(
-  cmVisualStudio10TargetGenerator::Elem& e0, const cmCustomCommand& command,
-  const cmSourceFile* source)
-{
-  cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
-
-  Elem e1(e0, "Target");
-  e1.Attribute("Name", "Build");
-
-  std::string noConfig{};
-  cmCustomCommandGenerator ccg{ command, noConfig, lg, true };
-  std::string comment = lg->ConstructComment(ccg);
-  comment = cmVS10EscapeComment(comment);
-  std::string script = lg->ConstructScript(ccg);
-  bool symbolic = false;
-  // input files for custom command
-  std::stringstream additional_inputs;
-  {
-    const char* sep = "";
-    if (this->ProjectType == VsProjectType::proj) {
-      // List explicitly the path to primary input.
-      std::string sourceFullPath = source->GetFullPath();
-      ConvertToWindowsSlash(sourceFullPath);
-      additional_inputs << sourceFullPath;
-      sep = ";";
-    }
-
-    // Avoid listing an input more than once.
-    std::set<std::string> unique_inputs;
-    // The source is either implicitly an input or has been added above.
-    unique_inputs.insert(source->GetFullPath());
-
-    for (std::string const& d : ccg.GetDepends()) {
-      std::string dep;
-      if (lg->GetRealDependency(d, noConfig, dep)) {
-        if (!unique_inputs.insert(dep).second) {
-          // already listed
-          continue;
-        }
-        ConvertToWindowsSlash(dep);
-        additional_inputs << sep << dep;
-        sep = ";";
-        if (!symbolic) {
-          if (cmSourceFile* sf = this->Makefile->GetSource(
-                dep, cmSourceFileLocationKind::Known)) {
-            symbolic = sf->GetPropertyAsBool("SYMBOLIC");
-          }
-        }
-      }
-    }
-  }
-  // output files for custom command
-  std::stringstream outputs;
-  {
-    const char* sep = "";
-    for (std::string const& o : ccg.GetOutputs()) {
-      std::string out = o;
-      ConvertToWindowsSlash(out);
-      outputs << sep << out;
-      sep = ";";
-      if (!symbolic) {
-        if (cmSourceFile* sf =
-              this->Makefile->GetSource(o, cmSourceFileLocationKind::Known)) {
-          symbolic = sf->GetPropertyAsBool("SYMBOLIC");
-        }
-      }
-    }
-  }
-  script += lg->FinishConstructScript(this->ProjectType);
-
-  e1.Attribute("Inputs", cmVS10EscapeAttr(additional_inputs.str()));
-  e1.Attribute("Outputs", cmVS10EscapeAttr(outputs.str()));
-
-  e1.SetHasElements();
-
-  if (!comment.empty()) {
-    Elem(e1, "Message").Attribute("Text", comment);
-  }
-  Elem(e1, "Exec").Attribute("Command", script);
-}
-
-void cmVisualStudio10TargetGenerator::WriteZeroCheckBeforeBuildTarget(
-  cmVisualStudio10TargetGenerator::Elem& e0)
-{
-  const auto& commands = this->GeneratorTarget->GetPreBuildCommands();
-  if (commands.empty()) {
-    return;
-  }
-
-  {
-    Elem e1(e0, "Target");
-    e1.Attribute("Name", "BeforeBuild");
-    e1.Attribute("BeforeTargets", "Build");
-
-    cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
-    std::string script;
-    const char* pre = "";
-    std::string comment;
-    for (cmCustomCommand const& cc : commands) {
-      cmCustomCommandGenerator ccg(cc, std::string{}, lg);
-      if (!ccg.HasOnlyEmptyCommandLines()) {
-        comment += pre;
-        comment += lg->ConstructComment(ccg);
-        script += pre;
-        pre = "\n";
-        script += lg->ConstructScript(ccg);
-      }
-    }
-
-    if (script.empty()) {
-      return;
-    }
-
-    script += lg->FinishConstructScript(this->ProjectType);
-    comment = cmVS10EscapeComment(comment);
-    std::string strippedComment = comment;
-    strippedComment.erase(
-      std::remove(strippedComment.begin(), strippedComment.end(), '\t'),
-      strippedComment.end());
-
-    e1.SetHasElements();
-    if (!comment.empty() && !strippedComment.empty()) {
-      Elem(e1, "Message").Attribute("Text", comment);
-    }
-    Elem(e1, "Exec").Attribute("Command", script);
-  }
-}
-
 std::vector<std::string> cmVisualStudio10TargetGenerator::GetIncludes(
   std::string const& config, std::string const& lang) const
 {
@@ -4743,7 +4576,7 @@
       path = *p;
     } else {
       path = cmStrCat(lg->GetCurrentBinaryDirectory(), '/', dt->GetName(),
-                      this->ComputeProjectFileExtension(dt));
+                      computeProjectFileExtension(dt));
     }
     ConvertToWindowsSlash(path);
     Elem e2(e1, "ProjectReference");
@@ -5597,26 +5430,6 @@
   return path;
 }
 
-std::string cmVisualStudio10TargetGenerator::ComputeProjectFileExtension(
-  cmGeneratorTarget const* t) const
-{
-  return getProjectFileExtension(this->ComputeProjectType(t));
-}
-
-VsProjectType cmVisualStudio10TargetGenerator::ComputeProjectType(
-  cmGeneratorTarget const* t) const
-{
-  if (this->GlobalGenerator->GetVersion() >=
-        cmGlobalVisualStudioGenerator::VSVersion::VS16 &&
-      t->GetName() == CMAKE_CHECK_BUILD_SYSTEM_TARGET) {
-    return VsProjectType::proj;
-  }
-  if (t->IsCSharpOnly()) {
-    return VsProjectType::csproj;
-  }
-  return VsProjectType::vcxproj;
-}
-
 void cmVisualStudio10TargetGenerator::WriteStdOutEncodingUtf8(Elem& e1)
 {
   if (this->GlobalGenerator->IsUtf8EncodingSupported()) {
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 7a0b8da..8d777a3 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -264,13 +264,6 @@
   void WriteClassicMsBuildProjectFile(cmGeneratedFileStream& BuildFileStream);
   void WriteSdkStyleProjectFile(cmGeneratedFileStream& BuildFileStream);
 
-  void WriteZeroCheckProj(cmGeneratedFileStream& BuildFileStream);
-  void WriteZeroCheckBuildTarget(cmVisualStudio10TargetGenerator::Elem& e0,
-                                 const cmCustomCommand& command,
-                                 const cmSourceFile* source);
-  void WriteZeroCheckBeforeBuildTarget(
-    cmVisualStudio10TargetGenerator::Elem& e0);
-
   void WriteCommonPropertyGroupGlobals(
     cmVisualStudio10TargetGenerator::Elem& e1);
 
@@ -282,7 +275,4 @@
   void ParseSettingsProperty(const std::string& settingsPropertyValue,
                              ConfigToSettings& toolSettings);
   std::string GetCMakeFilePath(const char* name) const;
-
-  std::string ComputeProjectFileExtension(cmGeneratorTarget const* t) const;
-  VsProjectType ComputeProjectType(cmGeneratorTarget const* t) const;
 };