diff options
author | Brad King <brad.king@kitware.com> | 2022-02-18 14:05:38 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-02-18 14:05:44 (GMT) |
commit | 176407736ec13715f42d6a696daa5f4779eeec4c (patch) | |
tree | 8526acd8872fa23da81a92cbbb332a11ab24ec22 | |
parent | 0bd5685867f956f04c8fd196cb182eac984d2cb2 (diff) | |
parent | 4313c5acbc3b8dbd6ffb4ace198f5b2c72b0c7a5 (diff) | |
download | CMake-176407736ec13715f42d6a696daa5f4779eeec4c.zip CMake-176407736ec13715f42d6a696daa5f4779eeec4c.tar.gz CMake-176407736ec13715f42d6a696daa5f4779eeec4c.tar.bz2 |
Merge topic 'revert-vs-zero_check-proj'
4313c5acbc VS: Revert "Write ZERO_CHECK.proj for VS19 and above"
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6999
-rw-r--r-- | Source/cmGlobalVisualStudio10Generator.cxx | 7 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio10Generator.h | 2 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 245 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.h | 7 |
4 files changed, 31 insertions, 230 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 28d6295..db54b86 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -1286,13 +1286,6 @@ cmGlobalVisualStudio10Generator::GenerateBuildCommand( return makeCommands; } -bool cmGlobalVisualStudio10Generator::IsInSolution( - const cmGeneratorTarget* gt) const -{ - return gt->IsInBuildSystem() && - gt->GetName() != 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 2203f71..4977a84 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -118,8 +118,6 @@ public: return this->WindowsTargetPlatformVersion; } - bool IsInSolution(const cmGeneratorTarget* gt) 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 be1b0de..1eb55f9 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -50,40 +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 ""; - } -} - -VsProjectType computeProjectType(cmGeneratorTarget const* t) -{ - if (t->GetName() == CMAKE_CHECK_BUILD_SYSTEM_TARGET) { - return VsProjectType::proj; - } - if (t->IsCSharpOnly()) { - return VsProjectType::csproj; - } - return VsProjectType::vcxproj; -} - -std::string computeProjectFileExtension(cmGeneratorTarget const* t) -{ - return getProjectFileExtension(computeProjectType(t)); -} -} - struct cmIDEFlagTable; static void ConvertToWindowsSlash(std::string& s); @@ -269,6 +235,31 @@ static bool cmVS10IsTargetsFile(std::string const& path) 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) @@ -366,7 +357,7 @@ void cmVisualStudio10TargetGenerator::Generate() 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) { @@ -427,12 +418,10 @@ void cmVisualStudio10TargetGenerator::Generate() 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); @@ -963,45 +952,6 @@ void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile( 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"); @@ -1717,16 +1667,11 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule( } } } - 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); @@ -3079,134 +3024,6 @@ void cmVisualStudio10TargetGenerator::OutputLinkIncremental( } } -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 { diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 5e74779..8d777a3 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -264,13 +264,6 @@ private: 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); |