mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
VS: Do not regenerate build system concurrently with CMP0147
The VS generators add a custom command to `CMakeLists.txt` to re-run
CMake when input files have changed. Mark this custom command as if it
were specified with `USES_TERMINAL`. We already do this for the
equivalent `rebuild_cache` target in Makefile and Ninja generators.
This matters since commit d6353e74b4 (VS: Add policy to build custom
commands concurrently, 2023-03-10) because with policy CMP0147 set to
NEW, we now add `BuildInParallel` in `.vcxproj` file entries for custom
commands that do not have `USES_TERMINAL` set, but we do not want to
re-run CMake concurrently with other custom commands.
Issue: #18405
This commit is contained in:
@@ -270,6 +270,7 @@ cmSourceFile* cmLocalVisualStudio7Generator::CreateVCProjBuildRule()
|
|||||||
cc->SetComment(comment.c_str());
|
cc->SetComment(comment.c_str());
|
||||||
cc->SetEscapeOldStyle(false);
|
cc->SetEscapeOldStyle(false);
|
||||||
cc->SetStdPipesUTF8(true);
|
cc->SetStdPipesUTF8(true);
|
||||||
|
cc->SetUsesTerminal(true);
|
||||||
this->AddCustomCommandToOutput(std::move(cc), true);
|
this->AddCustomCommandToOutput(std::move(cc), true);
|
||||||
if (cmSourceFile* file = this->Makefile->GetSource(makefileIn)) {
|
if (cmSourceFile* file = this->Makefile->GetSource(makefileIn)) {
|
||||||
// Finalize the source file path now since we're adding this after
|
// Finalize the source file path now since we're adding this after
|
||||||
|
|||||||
@@ -6,24 +6,30 @@ endif()
|
|||||||
|
|
||||||
set(found_CustomBuild_cmp0147_new 0)
|
set(found_CustomBuild_cmp0147_new 0)
|
||||||
set(found_CustomBuild_cmp0147_old 0)
|
set(found_CustomBuild_cmp0147_old 0)
|
||||||
|
set(found_CustomBuild_CMakeLists 0)
|
||||||
set(found_BuildInParallel_cmp0147_new 0)
|
set(found_BuildInParallel_cmp0147_new 0)
|
||||||
set(found_BuildInParallel_cmp0147_old 0)
|
set(found_BuildInParallel_cmp0147_old 0)
|
||||||
set(in_CustomBuild_cmp0147 "")
|
set(found_BuildInParallel_CMakeLists 0)
|
||||||
|
set(in_CustomBuild "")
|
||||||
file(STRINGS "${vcProjectFile}" lines)
|
file(STRINGS "${vcProjectFile}" lines)
|
||||||
foreach(line IN LISTS lines)
|
foreach(line IN LISTS lines)
|
||||||
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-old\.txt\.rule">]])
|
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-old\.txt\.rule">]])
|
||||||
set(found_CustomBuild_cmp0147_old 1)
|
set(found_CustomBuild_cmp0147_old 1)
|
||||||
set(in_CustomBuild_cmp0147 "old")
|
set(in_CustomBuild "cmp0147_old")
|
||||||
endif()
|
endif()
|
||||||
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-new\.txt\.rule">]])
|
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-new\.txt\.rule">]])
|
||||||
set(found_CustomBuild_cmp0147_new 1)
|
set(found_CustomBuild_cmp0147_new 1)
|
||||||
set(in_CustomBuild_cmp0147 "new")
|
set(in_CustomBuild "cmp0147_new")
|
||||||
|
endif()
|
||||||
|
if(line MATCHES [[<CustomBuild Include=".*\\CMakeLists\.txt">]])
|
||||||
|
set(found_CustomBuild_CMakeLists 1)
|
||||||
|
set(in_CustomBuild "CMakeLists")
|
||||||
endif()
|
endif()
|
||||||
if(line MATCHES [[</CustomBuild>]])
|
if(line MATCHES [[</CustomBuild>]])
|
||||||
set(in_CustomBuild_cmp0147 "")
|
set(in_CustomBuild "")
|
||||||
endif()
|
endif()
|
||||||
if(line MATCHES [[<BuildInParallel .*>true</BuildInParallel>]] AND in_CustomBuild_cmp0147)
|
if(line MATCHES [[<BuildInParallel .*>true</BuildInParallel>]] AND in_CustomBuild)
|
||||||
set(found_BuildInParallel_cmp0147_${in_CustomBuild_cmp0147} 1)
|
set(found_BuildInParallel_${in_CustomBuild} 1)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
if(NOT found_CustomBuild_cmp0147_new)
|
if(NOT found_CustomBuild_cmp0147_new)
|
||||||
@@ -32,9 +38,15 @@ endif()
|
|||||||
if(NOT found_CustomBuild_cmp0147_old)
|
if(NOT found_CustomBuild_cmp0147_old)
|
||||||
string(APPEND RunCMake_TEST_FAILED "CustomBuild for cmp0147-old.txt.rule not found in\n ${vcProjectFile}\n")
|
string(APPEND RunCMake_TEST_FAILED "CustomBuild for cmp0147-old.txt.rule not found in\n ${vcProjectFile}\n")
|
||||||
endif()
|
endif()
|
||||||
|
if(NOT found_CustomBuild_CMakeLists)
|
||||||
|
string(APPEND RunCMake_TEST_FAILED "CustomBuild for CMakeLists.txt not found in\n ${vcProjectFile}\n")
|
||||||
|
endif()
|
||||||
if(NOT found_BuildInParallel_cmp0147_new)
|
if(NOT found_BuildInParallel_cmp0147_new)
|
||||||
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-new.txt.rule not found in\n ${vcProjectFile}\n")
|
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-new.txt.rule not found in\n ${vcProjectFile}\n")
|
||||||
endif()
|
endif()
|
||||||
if(found_BuildInParallel_cmp0147_old)
|
if(found_BuildInParallel_cmp0147_old)
|
||||||
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-old.txt.rule incorrectly found in\n ${vcProjectFile}\n")
|
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-old.txt.rule incorrectly found in\n ${vcProjectFile}\n")
|
||||||
endif()
|
endif()
|
||||||
|
if(found_BuildInParallel_CMakeLists)
|
||||||
|
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for CMakeLists.txt incorrectly found in\n ${vcProjectFile}\n")
|
||||||
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user