1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-15 20:46:37 +08:00

VS: Revert "Add missing label in C# project-build events"

Revert commit b284a21fee (VS: Add missing label in C# project-build
events, 2021-09-03, v3.22.0-rc1~156^2).  The change broke cases using
multiple successful custom commands.  Revert it pending further
investigation into the interaction of the generated script code with
`Microsoft.Common.CurrentVersion.targets`, and whether this is needed
for all managed projects or just C# projects.

Also add a test covering the case that was broken.

Fixes: #22964
Issue: #21440
This commit is contained in:
Brad King
2021-12-02 17:41:20 -05:00
parent eeaf1e10cb
commit 13a7ae2194
7 changed files with 25 additions and 26 deletions

View File

@@ -567,7 +567,7 @@ public:
} else {
this->Stream << this->LG->EscapeForXML("\n");
}
std::string script = this->LG->ConstructScript(ccg, unmanaged);
std::string script = this->LG->ConstructScript(ccg);
this->Stream << this->LG->EscapeForXML(script);
}
@@ -1780,7 +1780,7 @@ void cmLocalVisualStudio7Generator::WriteCustomRule(
}
std::string comment = this->ConstructComment(ccg);
std::string script = this->ConstructScript(ccg, unmanaged);
std::string script = this->ConstructScript(ccg);
if (this->FortranProject) {
cmSystemTools::ReplaceString(script, "$(Configuration)", config);
}

View File

@@ -124,8 +124,7 @@ const char* cmLocalVisualStudioGenerator::GetReportErrorLabel() const
}
std::string cmLocalVisualStudioGenerator::ConstructScript(
cmCustomCommandGenerator const& ccg, IsManaged isManaged,
const std::string& newline_text)
cmCustomCommandGenerator const& ccg, const std::string& newline_text)
{
bool useLocal = this->CustomCommandUseLocal();
std::string workingDirectory = ccg.GetWorkingDirectory();
@@ -238,14 +237,6 @@ std::string cmLocalVisualStudioGenerator::ConstructScript(
script += newline;
script += "if %errorlevel% neq 0 goto ";
script += this->GetReportErrorLabel();
if (isManaged == managed) {
// These aren't generated by default for C# projects.
script += newline;
script += this->GetReportErrorLabel();
script += newline;
script += "exit /b 0";
script += newline;
}
}
return script;

View File

@@ -31,13 +31,7 @@ public:
virtual ~cmLocalVisualStudioGenerator();
/** Construct a script from the given list of command lines. */
enum IsManaged
{
unmanaged,
managed
};
std::string ConstructScript(cmCustomCommandGenerator const& ccg,
IsManaged isManaged,
const std::string& newline = "\n");
/** Label to which to jump in a batch file after a failed step in a

View File

@@ -1488,10 +1488,7 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
cmCustomCommandGenerator ccg(command, c, lg, true);
std::string comment = lg->ConstructComment(ccg);
comment = cmVS10EscapeComment(comment);
cmLocalVisualStudioGenerator::IsManaged isManaged = (this->Managed)
? cmLocalVisualStudioGenerator::managed
: cmLocalVisualStudioGenerator::unmanaged;
std::string script = lg->ConstructScript(ccg, isManaged);
std::string script = lg->ConstructScript(ccg);
bool symbolic = false;
// input files for custom command
std::stringstream additional_inputs;
@@ -4241,10 +4238,7 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
comment += lg->ConstructComment(ccg);
script += pre;
pre = "\n";
cmLocalVisualStudioGenerator::IsManaged isManaged = (this->Managed)
? cmLocalVisualStudioGenerator::managed
: cmLocalVisualStudioGenerator::unmanaged;
script += lg->ConstructScript(ccg, isManaged);
script += lg->ConstructScript(ccg);
stdPipesUTF8 = stdPipesUTF8 || cc.GetStdPipesUTF8();
}

View File

@@ -2236,6 +2236,7 @@ if(BUILD_TESTING)
if(NOT "${CMAKE_GENERATOR}" MATCHES "Visual Studio 9 "
AND NOT CMAKE_GENERATOR_TOOLSET)
ADD_TEST_MACRO(VSWindowsFormsResx VSWindowsFormsResx)
ADD_TEST_MACRO(VSManagedCustomCommand)
endif()
add_test(VSExternalInclude ${CMAKE_CTEST_COMMAND}

View File

@@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.20)
project(VSManagedCustomCommand CXX)
add_custom_command(OUTPUT middle.txt
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/example.txt ${CMAKE_CURRENT_BINARY_DIR}/middle.txt
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/example.txt
)
add_custom_command(OUTPUT example.cxx
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/middle.txt ${CMAKE_CURRENT_BINARY_DIR}/example.cxx
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/middle.txt
)
add_library(example SHARED example.cxx)
set_property(TARGET example PROPERTY COMMON_LANGUAGE_RUNTIME "")

View File

@@ -0,0 +1,4 @@
__declspec(dllexport) int example()
{
return 0;
}