diff options
author | Martin Duffy <martin.duffy@kitware.com> | 2024-05-22 20:08:54 (GMT) |
---|---|---|
committer | Martin Duffy <martin.duffy@kitware.com> | 2024-05-23 13:54:19 (GMT) |
commit | 0e5250e63c5c82ff0c8b52ade9c2f84fbe251152 (patch) | |
tree | 0422addf568db0beac59800fe1cc5578fb74e09f /Tests/RunCMake | |
parent | daeb8fffa2d30cf6737c60f22c151d10581783ac (diff) | |
download | CMake-0e5250e63c5c82ff0c8b52ade9c2f84fbe251152.zip CMake-0e5250e63c5c82ff0c8b52ade9c2f84fbe251152.tar.gz CMake-0e5250e63c5c82ff0c8b52ade9c2f84fbe251152.tar.bz2 |
Ninja: Add option for parallel install
Adds the global property ``INSTALL_PARALLEL`` to enable a parallel install
target for Ninja.
Fixes: #25459
Diffstat (limited to 'Tests/RunCMake')
13 files changed, 77 insertions, 0 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index ec05b90..aa2117e 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -250,6 +250,7 @@ if(CMAKE_GENERATOR MATCHES "Ninja") add_RunCMake_test(NinjaPrivateDeps -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION} -DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig}) + add_RunCMake_test(InstallParallel) endif() add_RunCMake_test(CTest) diff --git a/Tests/RunCMake/InstallParallel/CMakeLists.txt b/Tests/RunCMake/InstallParallel/CMakeLists.txt new file mode 100644 index 0000000..94e43ba --- /dev/null +++ b/Tests/RunCMake/InstallParallel/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.29) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake new file mode 100644 index 0000000..ae3f112 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake @@ -0,0 +1,17 @@ +include(RunCMake) + +function(install_test test parallel install_target check_script) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-install) + set(RunCMake_TEST_OPTIONS -DINSTALL_PARALLEL=${parallel}) + if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) + list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug) + endif() + run_cmake(install) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test}-install ${CMAKE_COMMAND} --build . --config Debug -t ${install_target}) + set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY ${RunCMake_SOURCE_DIR}) + run_cmake_command(verify-parallel ${CMAKE_COMMAND} -P ${check_script} ${RunCMake_TEST_BINARY_DIR}/.ninja_log) +endfunction() + +install_test(parallel 1 install/parallel check-parallel.cmake) +install_test(no-parallel 0 install check-single.cmake) diff --git a/Tests/RunCMake/InstallParallel/check-parallel.cmake b/Tests/RunCMake/InstallParallel/check-parallel.cmake new file mode 100644 index 0000000..4e4cf52 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/check-parallel.cmake @@ -0,0 +1,15 @@ +include(read-ninja-install.cmake) + +foreach(line ${lines}) + string(REPLACE "\t" ";" line ${line}) + list(GET line 0 start) + list(GET line 1 end) + list(APPEND start_times ${start}) + list(APPEND end_times ${end}) +endforeach() +list(GET start_times 1 start_2) +list(GET end_times 0 end_1) + +if (NOT start_2 LESS end_1) + message(FATAL_ERROR "Install is not parallel") +endif() diff --git a/Tests/RunCMake/InstallParallel/check-single.cmake b/Tests/RunCMake/InstallParallel/check-single.cmake new file mode 100644 index 0000000..79c4d5c --- /dev/null +++ b/Tests/RunCMake/InstallParallel/check-single.cmake @@ -0,0 +1,5 @@ +include(read-ninja-install.cmake) +list(LENGTH lines len) +if (NOT ${len} STREQUAL "1") + message(FATAL_ERROR "Expected single installation call") +endif() diff --git a/Tests/RunCMake/InstallParallel/install.cmake b/Tests/RunCMake/InstallParallel/install.cmake new file mode 100644 index 0000000..54b5078 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/install.cmake @@ -0,0 +1,6 @@ +install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +if (INSTALL_PARALLEL) + set_property(GLOBAL PROPERTY INSTALL_PARALLEL ON) +endif() +add_subdirectory(subdir-1) +add_subdirectory(subdir-2) diff --git a/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt b/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt new file mode 100644 index 0000000..8f69a04 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt @@ -0,0 +1,5 @@ +installing:.* +installing:.* +installing:.* +installing:.* +installing:.* diff --git a/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt new file mode 100644 index 0000000..e0d2a56 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt @@ -0,0 +1,15 @@ +\[1\/5\] Installing only the local directory... +\-\- Install configuration: \"Debug\" +installing:.* +\[2\/5\] Installing only the local directory... +\-\- Install configuration: \"Debug\" +installing:.* +\[3\/5\] Installing only the local directory... +\-\- Install configuration: \"Debug\" +installing:.* +\[4\/5\] Installing only the local directory... +\-\- Install configuration: \"Debug\" +installing:.* +\[5\/5\] Installing only the local directory... +\-\- Install configuration: \"Debug\" +installing:.* diff --git a/Tests/RunCMake/InstallParallel/read-ninja-install.cmake b/Tests/RunCMake/InstallParallel/read-ninja-install.cmake new file mode 100644 index 0000000..731c5eb --- /dev/null +++ b/Tests/RunCMake/InstallParallel/read-ninja-install.cmake @@ -0,0 +1,4 @@ +set(ninja_log ${CMAKE_ARGV3}) +file(STRINGS ${ninja_log} lines) +list(POP_FRONT lines) +list(FILTER lines INCLUDE REGEX ".*install.*util") diff --git a/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt new file mode 100644 index 0000000..6b235c4 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt @@ -0,0 +1,3 @@ +install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +add_subdirectory(subdir-3) +add_subdirectory(subdir-4) diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt new file mode 100644 index 0000000..dd7eac3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt @@ -0,0 +1 @@ +install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt new file mode 100644 index 0000000..dd7eac3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt @@ -0,0 +1 @@ +install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") diff --git a/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt new file mode 100644 index 0000000..dd7eac3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt @@ -0,0 +1 @@ +install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") |