mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 21:59:54 -06:00
Tests: Add build preset tests
This commit is contained in:
@@ -799,6 +799,7 @@ add_RunCMake_test(PrecompileHeaders -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
|
||||
|
||||
add_RunCMake_test("UnityBuild")
|
||||
add_RunCMake_test(CMakePresets -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA})
|
||||
add_RunCMake_test(CMakePresetsBuild -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA})
|
||||
|
||||
if(${CMAKE_GENERATOR} MATCHES "Make|Ninja")
|
||||
add_RunCMake_test(TransformDepfile)
|
||||
|
||||
3
Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in
Normal file
3
Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in
Normal file
@@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.19)
|
||||
project("@CASE_NAME@" NONE)
|
||||
include("@CASE_SOURCE_DIR@/@CASE_NAME@.cmake")
|
||||
@@ -0,0 +1,5 @@
|
||||
include("${RunCMake_SOURCE_DIR}/TestVariable.cmake")
|
||||
|
||||
test_environment_variable("TEST_ENV_" "other")
|
||||
|
||||
include("${RunCMake_SOURCE_DIR}/check.cmake")
|
||||
@@ -0,0 +1,14 @@
|
||||
include("${RunCMake_SOURCE_DIR}/TestVariable.cmake")
|
||||
|
||||
if(RunCMake_GENERATOR STREQUAL "NMake Makefiles JOM")
|
||||
# JOM removes the '$' and content following it.
|
||||
else()
|
||||
test_environment_variable("TEST_DOLLAR" "x\\$x")
|
||||
endif()
|
||||
test_environment_variable("TEST_GENERATOR" "${RunCMake_GENERATOR}")
|
||||
test_environment_variable("TEST_PRESET_NAME" "xmacrosx")
|
||||
test_environment_variable("TEST_SOURCE_DIR_" "x[^\n]*[/\\\\]Tests[/\\\\]RunCMake[/\\\\]CMakePresetsBuild[/\\\\]Goodx")
|
||||
test_environment_variable("TEST_SOURCE_DIR_NAME" "xGoodx")
|
||||
test_environment_variable("TEST_SOURCE_PARENT_DIR" "x[^\n]*[/\\\\]Tests[/\\\\]RunCMake[/\\\\]CMakePresetsBuildx")
|
||||
|
||||
include("${RunCMake_SOURCE_DIR}/check.cmake")
|
||||
@@ -0,0 +1,6 @@
|
||||
string(FIND "${actual_stdout}" "TEST_ENV_" TEST_ENV_POS)
|
||||
if (NOT TEST_ENV_POS EQUAL -1)
|
||||
message(FATAL_ERROR "Found TEST_ENV_ in environment")
|
||||
endif()
|
||||
|
||||
include("${RunCMake_SOURCE_DIR}/check.cmake")
|
||||
@@ -0,0 +1,8 @@
|
||||
include("${RunCMake_SOURCE_DIR}/TestVariable.cmake")
|
||||
|
||||
test_environment_variable("TEST_ENV_" "Environment variable")
|
||||
test_environment_variable("TEST_ENV_OVERRIDE_" "Overridden")
|
||||
test_environment_variable("TEST_ENV_OVERRIDE_REF" "xOverriddenx")
|
||||
test_environment_variable("TEST_ENV_REF" "xEnvironment variablex")
|
||||
|
||||
include("${RunCMake_SOURCE_DIR}/check.cmake")
|
||||
3
Tests/RunCMake/CMakePresetsBuild/Good.cmake
Normal file
3
Tests/RunCMake/CMakePresetsBuild/Good.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
add_custom_target(good ALL)
|
||||
add_custom_command(TARGET good PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E environment)
|
||||
78
Tests/RunCMake/CMakePresetsBuild/Good.json.in
Normal file
78
Tests/RunCMake/CMakePresetsBuild/Good.json.in
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"version": 2,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "default",
|
||||
"generator": "@RunCMake_GENERATOR@",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"environment": {
|
||||
"TEST_ENV_": "Environment variable",
|
||||
"TEST_ENV_OVERRIDE_": "Environment variable",
|
||||
"TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE_}x"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "other",
|
||||
"inherits": "default",
|
||||
"environment": {
|
||||
"TEST_ENV_": "other"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "build-default",
|
||||
"hidden": true,
|
||||
"inherits": [],
|
||||
"configurePreset": "default",
|
||||
"vendor": {},
|
||||
"displayName": "",
|
||||
"description": "",
|
||||
"inheritConfigureEnvironment": true,
|
||||
"environment": {},
|
||||
"jobs": 0,
|
||||
"targets": [],
|
||||
"configuration": "",
|
||||
"verbose": true,
|
||||
"nativeToolOptions": []
|
||||
},
|
||||
{
|
||||
"name": "build-other",
|
||||
"configurePreset": "other"
|
||||
},
|
||||
{
|
||||
"name": "withEnvironment",
|
||||
"inherits": "build-default",
|
||||
"environment": {
|
||||
"TEST_ENV_OVERRIDE_": "Overridden",
|
||||
"TEST_ENV_REF": "x$env{TEST_ENV_}x",
|
||||
"TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE_}x"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "noEnvironment",
|
||||
"inherits": "build-default",
|
||||
"inheritConfigureEnvironment": false
|
||||
},
|
||||
{
|
||||
"name": "macros",
|
||||
"inherits": "build-default",
|
||||
"inheritConfigureEnvironment": false,
|
||||
"environment": {
|
||||
"TEST_SOURCE_DIR_": "x${sourceDir}x",
|
||||
"TEST_SOURCE_PARENT_DIR": "x${sourceParentDir}x",
|
||||
"TEST_SOURCE_DIR_NAME": "x${sourceDirName}x",
|
||||
"TEST_PRESET_NAME": "x${presetName}x",
|
||||
"TEST_GENERATOR": "x${generator}x",
|
||||
"TEST_DOLLAR": "x${dollar}x"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "vendorObject",
|
||||
"configurePreset": "default",
|
||||
"vendor": {
|
||||
"example.com": "value"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,2 @@
|
||||
CMake Error: No such configure preset in [^
|
||||
]*/Tests/RunCMake/CMakePresetsBuild/Invalid: "dne"
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,2 @@
|
||||
CMake Error: Cannot use hidden build preset in [^
|
||||
]*/Tests/RunCMake/CMakePresetsBuild/Invalid: "hidden"
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1 @@
|
||||
CMake Error: Could not evaluate build preset "vendorMacro": Invalid macro expansion
|
||||
0
Tests/RunCMake/CMakePresetsBuild/Invalid.cmake
Normal file
0
Tests/RunCMake/CMakePresetsBuild/Invalid.cmake
Normal file
27
Tests/RunCMake/CMakePresetsBuild/Invalid.json.in
Normal file
27
Tests/RunCMake/CMakePresetsBuild/Invalid.json.in
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"version": 2,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "default",
|
||||
"generator": "@RunCMake_GENERATOR@",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}"
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "hidden",
|
||||
"hidden": true
|
||||
},
|
||||
{
|
||||
"name": "vendorMacro",
|
||||
"configurePreset": "default",
|
||||
"environment": {
|
||||
"TEST": "$vendor{bad.TEST}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "badConfigurePreset",
|
||||
"configurePreset": "dne"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
Available build presets:
|
||||
|
||||
"build-default" - build-default displayName
|
||||
"empty"
|
||||
"display" - display displayName
|
||||
0
Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake
Normal file
0
Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake
Normal file
31
Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in
Normal file
31
Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"version": 2,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "default",
|
||||
"generator": "@RunCMake_GENERATOR@",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}"
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "build-default",
|
||||
"configurePreset": "default",
|
||||
"displayName": "build-default displayName",
|
||||
"description": "build-default description"
|
||||
},
|
||||
{
|
||||
"name": "empty",
|
||||
"inherits": "build-default"
|
||||
},
|
||||
{
|
||||
"name": "display",
|
||||
"inherits": "build-default",
|
||||
"displayName": "display displayName"
|
||||
},
|
||||
{
|
||||
"name": "hidden",
|
||||
"hidden": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,2 @@
|
||||
CMake Error: Could not read presets from [^
|
||||
]*/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset: Invalid preset
|
||||
15
Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in
Normal file
15
Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "default",
|
||||
"generator": "@RunCMake_GENERATOR@",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}"
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "noConfigurePreset"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,2 @@
|
||||
CMake Error: Could not read presets from [^
|
||||
]*Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported: File version must be 2 or higher for build and test preset support.
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"configurePresets": [
|
||||
],
|
||||
"buildPresets": [
|
||||
]
|
||||
}
|
||||
67
Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake
Normal file
67
Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake
Normal file
@@ -0,0 +1,67 @@
|
||||
include(RunCMake)
|
||||
|
||||
# Presets do not support legacy VS generator name architecture suffix.
|
||||
if(RunCMake_GENERATOR MATCHES "^(Visual Studio [0-9]+ [0-9]+) ")
|
||||
set(RunCMake_GENERATOR "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
||||
function(run_cmake_build_presets name CMakePresetsBuild_CONFIGURE_PRESETS CMakePresetsBuild_BUILD_PRESETS)
|
||||
set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}")
|
||||
set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_SOURCE_DIR}/build")
|
||||
set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}")
|
||||
|
||||
set(RunCMake_TEST_NO_CLEAN TRUE)
|
||||
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
|
||||
set(CASE_NAME "${name}")
|
||||
set(CASE_SOURCE_DIR "${RunCMake_SOURCE_DIR}")
|
||||
configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt.in" "${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt" @ONLY)
|
||||
|
||||
if(NOT CMakePresetsBuild_FILE)
|
||||
set(CMakePresetsBuild_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in")
|
||||
endif()
|
||||
if(EXISTS "${CMakePresetsBuild_FILE}")
|
||||
configure_file("${CMakePresetsBuild_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakePresets.json" @ONLY)
|
||||
endif()
|
||||
|
||||
if(NOT CMakeUserPresets_FILE)
|
||||
set(CMakeUserPresets_FILE "${RunCMake_SOURCE_DIR}/${name}User.json.in")
|
||||
endif()
|
||||
if(EXISTS "${CMakeUserPresets_FILE}")
|
||||
configure_file("${CMakeUserPresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakeUserPresets.json" @ONLY)
|
||||
endif()
|
||||
|
||||
if (NOT CMakePresetsBuild_BUILD_ONLY)
|
||||
foreach(CONFIGURE_PRESET ${CMakePresetsBuild_CONFIGURE_PRESETS})
|
||||
run_cmake_command("${name}-configure-${CONFIGURE_PRESET}"
|
||||
"${CMAKE_COMMAND}" "--preset" "${CONFIGURE_PRESET}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
foreach(BUILD_PRESET ${CMakePresetsBuild_BUILD_PRESETS})
|
||||
if (EXISTS "${RunCMake_SOURCE_DIR}/${name}-build-${BUILD_PRESET}-check.cmake")
|
||||
set(RunCMake-check-file "${name}-build-${BUILD_PRESET}-check.cmake")
|
||||
else()
|
||||
set(RunCMake-check-file "check.cmake")
|
||||
endif()
|
||||
|
||||
run_cmake_command(${name}-build-${BUILD_PRESET}
|
||||
${CMAKE_COMMAND} "--build" "--preset" "${BUILD_PRESET}" ${ARGN})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
|
||||
|
||||
run_cmake_build_presets(Good "default;other" "build-other;withEnvironment;noEnvironment;macros;vendorObject")
|
||||
|
||||
set(CMakePresetsBuild_BUILD_ONLY 1)
|
||||
run_cmake_build_presets(ListPresets "x" "x" "--list-presets")
|
||||
run_cmake_build_presets(NoConfigurePreset "x" "noConfigurePreset")
|
||||
run_cmake_build_presets(Invalid "x" "hidden;vendorMacro;badConfigurePreset")
|
||||
|
||||
set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
|
||||
run_cmake_build_presets(PresetsUnsupported "x" "x")
|
||||
set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
|
||||
set(CMakePresetsBuild_BUILD_ONLY 0)
|
||||
14
Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake
Normal file
14
Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake
Normal file
@@ -0,0 +1,14 @@
|
||||
function(test_environment_variable name expected_value)
|
||||
string(REGEX MATCH "${name}=([^\n]*)" REGEX_RESULT "${actual_stdout}")
|
||||
if(NOT REGEX_RESULT)
|
||||
string(APPEND RunCMake_TEST_FAILED "Environment variable '${name}' is not defined.\n")
|
||||
else()
|
||||
set(actual_value "${CMAKE_MATCH_1}")
|
||||
if(NOT "${actual_value}" MATCHES "${expected_value}")
|
||||
string(REPLACE "\n" "\n " _actual "${expected_value}")
|
||||
string(REPLACE "\n" "\n " _expect "${actual_value}")
|
||||
string(APPEND RunCMake_TEST_FAILED "Expected value of environment variable '${name}':\n ${_expect}\nActual value:\n ${_actual}\n")
|
||||
endif()
|
||||
endif()
|
||||
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
3
Tests/RunCMake/CMakePresetsBuild/check.cmake
Normal file
3
Tests/RunCMake/CMakePresetsBuild/check.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
set(CMakePresets_VALIDATE_SCRIPT_PATH "${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.py")
|
||||
include("${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.cmake")
|
||||
include("${RunCMake_SOURCE_DIR}/../CMakePresets/check.cmake")
|
||||
Reference in New Issue
Block a user