Files
CMake/Tests/RunCMake/Tutorial/RunCMakeTest.cmake
Vito Gamberini fb58de1a56 Tutorial: Add Step 0 to prepare the working environment
Adds a "Step 0" to the tutorial which discusses minutia about where to
get CMake, how to run it, and most importantly deals at length with
various generator issues which aren't covered elsewhere.
2025-10-29 09:49:23 -04:00

89 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})
if(name STREQUAL "Step0")
return()
endif()
unset(RunCMake_TEST_OUTPUT_MERGE)
set(RunCMake-stdout-file ${name}-run-stdout.txt)
run_cmake_command(${name}-run ${exe} 25)
endfunction()
run_tutorial_step(Step0 NO_PRESET)
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)