Files
CMake/Tests/RunCMake/Tutorial/RunCMakeTest.cmake
Vito Gamberini b2e3e3e30e Tutorial: Rewrite using conventions enabled by CMake 3.23
This is a full re-write of the CMake Tutorial for CMake 3.23, both
the functionality it provides, as well as the modern workflows that
developers use when interfacing with CMake.

Issue: #22663, #23086, #23799, #26053, #26105, #26153, #26914
2025-09-17 11:57:23 -04:00

84 lines
2.5 KiB
CMake

include(RunCMake)
run_cmake(Inspect)
include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
function(run_tutorial_step name)
if(ARGV1 STREQUAL "TUTORIALPROJECT_SUBDIR")
set(RunCMake_TEST_SOURCE_DIR ${Tutorial_SOURCE_DIR}/${name}/TutorialProject)
else()
set(RunCMake_TEST_SOURCE_DIR ${Tutorial_SOURCE_DIR}/${name})
endif()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${name}/build)
set(config Release)
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
set(exe ${RunCMake_TEST_BINARY_DIR}/Tutorial/${config}/Tutorial)
else()
set(exe ${RunCMake_TEST_BINARY_DIR}/Tutorial/Tutorial)
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=${config})
endif()
if(ARGV1 STREQUAL "NO_PRESET")
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CXX_STANDARD=11)
else()
list(APPEND RunCMake_TEST_OPTIONS --preset tutorial)
endif()
if(ARGV2 STREQUAL "SETUP_CMAKE_PREFIX")
list(APPEND RunCMake_TEST_OPTIONS
"-DCMAKE_PREFIX_PATH=${Tutorial_SOURCE_DIR}/${name}/install\;${RunCMake_BINARY_DIR}/${name}/install"
)
endif()
list(APPEND RunCMake_TEST_OPTIONS -B ${RunCMake_TEST_BINARY_DIR})
run_cmake(${name}-configure)
unset(RunCMake_TEST_OPTIONS)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
run_cmake_command(${name}-build ${CMAKE_COMMAND} --build . --config ${config})
unset(RunCMake_TEST_OUTPUT_MERGE)
set(RunCMake-stdout-file ${name}-run-stdout.txt)
run_cmake_command(${name}-run ${exe} 25)
endfunction()
run_tutorial_step(Step3 NO_PRESET)
if(NOT can_build_cxx20_tutorial)
return()
endif()
foreach(num RANGE 4 9)
run_tutorial_step(Step${num})
endforeach()
run_tutorial_step(Step10 TUTORIALPROJECT_SUBDIR)
function(install_simpletest name)
set(RunCMake_TEST_SOURCE_DIR ${Tutorial_SOURCE_DIR}/${name}/SimpleTest)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${name}/build-simpletest)
set(config Release)
list(APPEND RunCMake_TEST_OPTIONS
-B ${RunCMake_TEST_BINARY_DIR}
-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/${name}/install
--preset tutorial
)
run_cmake(${name}-simpletest-configure)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
run_cmake_command(${name}-simpletest-install ${CMAKE_COMMAND} --install ${RunCMake_TEST_BINARY_DIR} --config ${config})
endfunction()
install_simpletest(Step11)
run_tutorial_step(Step11 TUTORIALPROJECT_SUBDIR SETUP_CMAKE_PREFIX)
install_simpletest(Complete)
run_tutorial_step(Complete TUTORIALPROJECT_SUBDIR SETUP_CMAKE_PREFIX)