Files
CMake/Tests/RunCMake/VS10Project/CustomCommandParallel-check.cmake
Brad King 4c866cac40 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
2023-03-15 14:33:36 -04:00

53 lines
2.1 KiB
CMake

set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
if(NOT EXISTS "${vcProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
return()
endif()
set(found_CustomBuild_cmp0147_new 0)
set(found_CustomBuild_cmp0147_old 0)
set(found_CustomBuild_CMakeLists 0)
set(found_BuildInParallel_cmp0147_new 0)
set(found_BuildInParallel_cmp0147_old 0)
set(found_BuildInParallel_CMakeLists 0)
set(in_CustomBuild "")
file(STRINGS "${vcProjectFile}" lines)
foreach(line IN LISTS lines)
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-old\.txt\.rule">]])
set(found_CustomBuild_cmp0147_old 1)
set(in_CustomBuild "cmp0147_old")
endif()
if(line MATCHES [[<CustomBuild Include=".*\\cmp0147-new\.txt\.rule">]])
set(found_CustomBuild_cmp0147_new 1)
set(in_CustomBuild "cmp0147_new")
endif()
if(line MATCHES [[<CustomBuild Include=".*\\CMakeLists\.txt">]])
set(found_CustomBuild_CMakeLists 1)
set(in_CustomBuild "CMakeLists")
endif()
if(line MATCHES [[</CustomBuild>]])
set(in_CustomBuild "")
endif()
if(line MATCHES [[<BuildInParallel .*>true</BuildInParallel>]] AND in_CustomBuild)
set(found_BuildInParallel_${in_CustomBuild} 1)
endif()
endforeach()
if(NOT found_CustomBuild_cmp0147_new)
string(APPEND RunCMake_TEST_FAILED "CustomBuild for cmp0147-new.txt.rule not found in\n ${vcProjectFile}\n")
endif()
if(NOT found_CustomBuild_cmp0147_old)
string(APPEND RunCMake_TEST_FAILED "CustomBuild for cmp0147-old.txt.rule not found in\n ${vcProjectFile}\n")
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)
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-new.txt.rule not found in\n ${vcProjectFile}\n")
endif()
if(found_BuildInParallel_cmp0147_old)
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for cmp0147-old.txt.rule incorrectly found in\n ${vcProjectFile}\n")
endif()
if(found_BuildInParallel_CMakeLists)
string(APPEND RunCMake_TEST_FAILED "BuildInParallel for CMakeLists.txt incorrectly found in\n ${vcProjectFile}\n")
endif()