mirror of https://github.com/Kitware/CMake.git

27 changed files with 872 additions and 13 deletions
-
140Help/manual/cmake-presets.7.rst
-
6Help/manual/cmake.1.rst
-
8Help/manual/cpack.1.rst
-
200Help/manual/presets/schema.json
-
5Help/release/dev/cmake-presets-package.rst
-
169Source/CPack/cpack.cxx
-
5Source/cmake.cxx
-
4Tests/RunCMake/CMakeLists.txt
-
3Tests/RunCMake/CMakePresetsPackage/CMakeLists.txt.in
-
6Tests/RunCMake/CMakePresetsPackage/Good-package-config-file-check.cmake
-
18Tests/RunCMake/CMakePresetsPackage/Good-package-configurations-check.cmake
-
2Tests/RunCMake/CMakePresetsPackage/Good-package-debug-stdout.txt
-
1Tests/RunCMake/CMakePresetsPackage/Good-package-generators-check.cmake
-
7Tests/RunCMake/CMakePresetsPackage/Good-package-no-environment-check.cmake
-
6Tests/RunCMake/CMakePresetsPackage/Good-package-package-directory-check.cmake
-
7Tests/RunCMake/CMakePresetsPackage/Good-package-package-name-check.cmake
-
7Tests/RunCMake/CMakePresetsPackage/Good-package-package-version-check.cmake
-
6Tests/RunCMake/CMakePresetsPackage/Good-package-variables-check.cmake
-
1Tests/RunCMake/CMakePresetsPackage/Good-package-verbose-stdout.txt
-
7Tests/RunCMake/CMakePresetsPackage/Good-package-with-environment-check.cmake
-
31Tests/RunCMake/CMakePresetsPackage/Good.cmake
-
135Tests/RunCMake/CMakePresetsPackage/Good.json.in
-
101Tests/RunCMake/CMakePresetsPackage/RunCMakeTest.cmake
-
1Tests/RunCMake/CMakePresetsPackage/UnsupportedVersion-configure-x-result.txt
-
2Tests/RunCMake/CMakePresetsPackage/UnsupportedVersion-configure-x-stderr.txt
-
4Tests/RunCMake/CMakePresetsPackage/UnsupportedVersion.json.in
-
3Tests/RunCMake/CMakePresetsPackage/check.cmake
@ -0,0 +1,5 @@ |
|||
cmake-presets-package |
|||
--------------------- |
|||
|
|||
* The :manual:`cmake-presets(7)` schema version has been bumped to ``6``. |
|||
* The :manual:`cmake-presets(7)` format now supports a ``packagePresets`` field. |
@ -0,0 +1,3 @@ |
|||
cmake_minimum_required(VERSION 3.19) |
|||
project("@CASE_NAME@" NONE) |
|||
include("@CASE_SOURCE_DIR@/@CASE_NAME@.cmake") |
@ -0,0 +1,6 @@ |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
set(filename "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages/${CPACK_TOPLEVEL_TAG}/TGZ/config-file-alt.tar.gz") |
|||
if(NOT EXISTS "${filename}") |
|||
set(RunCMake_TEST_FAILED "Expected ${filename} to exist but it does not") |
|||
endif() |
@ -0,0 +1,18 @@ |
|||
if(RunCMake_GENERATOR_IS_MULTI_CONFIG) |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
set(cpack_dir "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages/${CPACK_TOPLEVEL_TAG}") |
|||
set(contents [[Debug |
|||
Release |
|||
]]) |
|||
|
|||
file(GLOB dirs RELATIVE "${cpack_dir}" "${cpack_dir}/*") |
|||
foreach(dir IN LISTS dirs) |
|||
set(configs_file "${cpack_dir}/${dir}/${CPACK_PACKAGE_FILE_NAME}/configs.txt") |
|||
file(READ "${configs_file}" actual_contents) |
|||
if(NOT contents STREQUAL actual_contents) |
|||
string(REPLACE "\n" "\n " contents_formatted "${contents}") |
|||
string(REPLACE "\n" "\n " actual_contents_formatted "${actual_contents}") |
|||
string(APPEND RunCMake_TEST_FAILED "Expected contents of ${configs_file}:\n ${contents_formatted}\nActual contents:\n ${actual_contents_formatted}\n") |
|||
endif() |
|||
endforeach() |
|||
endif() |
@ -0,0 +1,2 @@ |
|||
CPack: [^ |
|||
]* Enable Debug |
@ -0,0 +1 @@ |
|||
check_cpack_packages("TBZ2;TXZ" "") |
@ -0,0 +1,7 @@ |
|||
check_cpack_packages("TGZ;TXZ" [[TEST_ENV not defined |
|||
TEST_ENV_REF=xx |
|||
TEST_ENV_OVERRIDE not defined |
|||
TEST_ENV_OVERRIDE_REF not defined |
|||
]]) |
|||
|
|||
include("${RunCMake_SOURCE_DIR}/check.cmake") |
@ -0,0 +1,6 @@ |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
set(filename "${RunCMake_TEST_BINARY_DIR}/default/package-directory/_CPack_Packages/${CPACK_TOPLEVEL_TAG}/TGZ/${CPACK_PACKAGE_FILE_NAME}.tar.gz") |
|||
if(NOT EXISTS "${filename}") |
|||
set(RunCMake_TEST_FAILED "Expected ${filename} to exist but it does not") |
|||
endif() |
@ -0,0 +1,7 @@ |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
file(READ "${RunCMake_TEST_BINARY_DIR}/default/${CPACK_PACKAGE_FILE_NAME}.json" contents) |
|||
string(JSON package_name GET "${contents}" packageName) |
|||
if(NOT package_name STREQUAL "package-name") |
|||
set(RunCMake_TEST_FAILED "Expected package name to be \"package-name\" but it was \"${package_name}\"") |
|||
endif() |
@ -0,0 +1,7 @@ |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
file(READ "${RunCMake_TEST_BINARY_DIR}/default/${CPACK_PACKAGE_FILE_NAME}.json" contents) |
|||
string(JSON package_version GET "${contents}" packageVersion) |
|||
if(NOT package_version STREQUAL "1.0") |
|||
set(RunCMake_TEST_FAILED "Expected package version to be \"1.0\" but it was \"${package_version}\"") |
|||
endif() |
@ -0,0 +1,6 @@ |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
set(filename "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages/${CPACK_TOPLEVEL_TAG}/TGZ/variables-package.tar.gz") |
|||
if(NOT EXISTS "${filename}") |
|||
set(RunCMake_TEST_FAILED "Expected ${filename} to exist but it does not") |
|||
endif() |
@ -0,0 +1 @@ |
|||
CPack: Enable Verbose |
@ -0,0 +1,7 @@ |
|||
check_cpack_packages("TGZ;TXZ" [[TEST_ENV=Environment variable |
|||
TEST_ENV_REF=xEnvironment variablex |
|||
TEST_ENV_OVERRIDE=Override |
|||
TEST_ENV_OVERRIDE_REF=xOverridex |
|||
]]) |
|||
|
|||
include("${RunCMake_SOURCE_DIR}/check.cmake") |
@ -0,0 +1,31 @@ |
|||
set(CPACK_PACKAGE_NAME Good) |
|||
set(CPACK_GENERATOR "TGZ;TXZ") |
|||
|
|||
include(CPack) |
|||
|
|||
install(CODE [[ |
|||
function(print_env name) |
|||
if(DEFINED ENV{${name}}) |
|||
file(APPEND $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/env.txt "${name}=$ENV{${name}}\n") |
|||
else() |
|||
file(APPEND $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/env.txt "${name} not defined\n") |
|||
endif() |
|||
endfunction() |
|||
|
|||
file(REMOVE $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/env.txt) |
|||
print_env(TEST_ENV) |
|||
print_env(TEST_ENV_REF) |
|||
print_env(TEST_ENV_OVERRIDE) |
|||
print_env(TEST_ENV_OVERRIDE_REF) |
|||
|
|||
file(APPEND $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/configs.txt "$<CONFIG>\n") |
|||
]]) |
|||
|
|||
file(WRITE "${CMAKE_BINARY_DIR}/CPackConfigAlt.cmake" [[include(${CMAKE_CURRENT_LIST_DIR}/CPackConfig.cmake) |
|||
set(CPACK_PACKAGE_FILE_NAME "config-file-alt") |
|||
]]) |
|||
|
|||
file(WRITE "${CMAKE_BINARY_DIR}/external_package.cmake" [[if(NOT CPACK_PACKAGE_VENDOR STREQUAL "some-vendor") |
|||
message(FATAL_ERROR "Expected vendor to be \"some-vendor\" but it was \"${CPACK_PACKAGE_VENDOR}\"") |
|||
endif() |
|||
]]) |
@ -0,0 +1,135 @@ |
|||
{ |
|||
"version": 6, |
|||
"configurePresets": [ |
|||
{ |
|||
"name": "default", |
|||
"generator": "@RunCMake_GENERATOR@", |
|||
"binaryDir": "${sourceDir}/build/${presetName}", |
|||
"environment": { |
|||
"TEST_ENV": "Environment variable", |
|||
"TEST_ENV_OVERRIDE": "Overridden environment variable" |
|||
} |
|||
} |
|||
], |
|||
"buildPresets": [ |
|||
{ |
|||
"name": "build-default-debug", |
|||
"configurePreset": "default", |
|||
"configuration": "Debug" |
|||
}, |
|||
{ |
|||
"name": "build-default-release", |
|||
"inherits": "build-default-debug", |
|||
"configuration": "Release" |
|||
} |
|||
], |
|||
"packagePresets": [ |
|||
{ |
|||
"name": "minimal", |
|||
"configurePreset": "default" |
|||
}, |
|||
{ |
|||
"name": "defaults", |
|||
"hidden": false, |
|||
"inherits": [], |
|||
"vendor": {}, |
|||
"displayName": "", |
|||
"description": "", |
|||
"environment": {}, |
|||
"configurePreset": "default", |
|||
"inheritConfigureEnvironment": true |
|||
}, |
|||
{ |
|||
"name": "no-environment", |
|||
"configurePreset": "default", |
|||
"inheritConfigureEnvironment": false, |
|||
"environment": { |
|||
"TEST_ENV_REF": "x$env{TEST_ENV}x" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "with-environment", |
|||
"inherits": "no-environment", |
|||
"inheritConfigureEnvironment": true, |
|||
"environment": { |
|||
"TEST_ENV_OVERRIDE": "Override", |
|||
"TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE}x", |
|||
"TEST_ENV_REF": "x$env{TEST_ENV}x" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "generators", |
|||
"inherits": "minimal", |
|||
"generators": [ |
|||
"TBZ2", |
|||
"TXZ" |
|||
] |
|||
}, |
|||
{ |
|||
"name": "configurations", |
|||
"inherits": "minimal", |
|||
"configurations": [ |
|||
"Debug", |
|||
"Release" |
|||
] |
|||
}, |
|||
{ |
|||
"name": "variables", |
|||
"inherits": "minimal", |
|||
"variables": { |
|||
"CPACK_PACKAGE_FILE_NAME": "variables-package" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "config-file", |
|||
"inherits": "minimal", |
|||
"configFile": "CPackConfigAlt.cmake" |
|||
}, |
|||
{ |
|||
"name": "debug", |
|||
"inherits": "minimal", |
|||
"output": { |
|||
"debug": true |
|||
} |
|||
}, |
|||
{ |
|||
"name": "verbose", |
|||
"inherits": "minimal", |
|||
"output": { |
|||
"verbose": true |
|||
} |
|||
}, |
|||
{ |
|||
"name": "package-name", |
|||
"inherits": "minimal", |
|||
"generators": [ |
|||
"External" |
|||
], |
|||
"packageName": "package-name" |
|||
}, |
|||
{ |
|||
"name": "package-version", |
|||
"inherits": "minimal", |
|||
"generators": [ |
|||
"External" |
|||
], |
|||
"packageVersion": "1.0" |
|||
}, |
|||
{ |
|||
"name": "package-directory", |
|||
"inherits": "minimal", |
|||
"packageDirectory": "${sourceDir}/build/default/package-directory" |
|||
}, |
|||
{ |
|||
"name": "vendor-name", |
|||
"inherits": "minimal", |
|||
"generators": [ |
|||
"External" |
|||
], |
|||
"variables": { |
|||
"CPACK_EXTERNAL_PACKAGE_SCRIPT": "${sourceDir}/build/default/external_package.cmake" |
|||
}, |
|||
"vendorName": "some-vendor" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,101 @@ |
|||
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_package_presets name CMakePresetsPackage_CONFIGURE_PRESETS CMakePresetsPackage_BUILD_PRESETS CMakePresetsPackage_PACKAGE_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 CMakePresetsPackage_FILE) |
|||
set(CMakePresetsPackage_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in") |
|||
endif() |
|||
if(EXISTS "${CMakePresetsPackage_FILE}") |
|||
configure_file("${CMakePresetsPackage_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() |
|||
|
|||
foreach(ASSET ${CMakePresetsPackage_ASSETS}) |
|||
configure_file("${RunCMake_SOURCE_DIR}/${ASSET}" "${RunCMake_TEST_SOURCE_DIR}" COPYONLY) |
|||
endforeach() |
|||
|
|||
if (NOT CMakePresetsPackage_NO_CONFIGURE) |
|||
foreach(CONFIGURE_PRESET ${CMakePresetsPackage_CONFIGURE_PRESETS}) |
|||
run_cmake_command("${name}-configure-${CONFIGURE_PRESET}" |
|||
"${CMAKE_COMMAND}" "--preset" "${CONFIGURE_PRESET}") |
|||
endforeach() |
|||
endif() |
|||
|
|||
if (NOT CMakePresetsPackage_NO_BUILD) |
|||
foreach(BUILD_PRESET ${CMakePresetsPackage_BUILD_PRESETS}) |
|||
run_cmake_command("${name}-build-${BUILD_PRESET}" |
|||
"${CMAKE_COMMAND}" "--build" "--preset" "${BUILD_PRESET}") |
|||
endforeach() |
|||
endif() |
|||
|
|||
set(eq 0) |
|||
foreach(PACKAGE_PRESET ${CMakePresetsPackage_PACKAGE_PRESETS}) |
|||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages") |
|||
|
|||
if (EXISTS "${RunCMake_SOURCE_DIR}/${name}-package-${PACKAGE_PRESET}-check.cmake") |
|||
set(RunCMake-check-file "${name}-package-${PACKAGE_PRESET}-check.cmake") |
|||
else() |
|||
set(RunCMake-check-file "check.cmake") |
|||
endif() |
|||
|
|||
if(eq) |
|||
run_cmake_command(${name}-package-${PACKAGE_PRESET} |
|||
${CMAKE_CPACK_COMMAND} "--preset=${PACKAGE_PRESET}" ${ARGN}) |
|||
set(eq 0) |
|||
else() |
|||
run_cmake_command(${name}-package-${PACKAGE_PRESET} |
|||
${CMAKE_CPACK_COMMAND} "--preset" "${PACKAGE_PRESET}" ${ARGN}) |
|||
set(eq 1) |
|||
endif() |
|||
endforeach() |
|||
endfunction() |
|||
|
|||
function(check_cpack_packages generators contents) |
|||
include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake") |
|||
|
|||
set(cpack_dir "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages/${CPACK_TOPLEVEL_TAG}") |
|||
file(GLOB dirs RELATIVE "${cpack_dir}" "${cpack_dir}/*") |
|||
if(NOT dirs STREQUAL generators) |
|||
string(APPEND RunCMake_TEST_FAILED "Expected CPack generators: ${generators}\nActual CPack generators: ${dirs}\n") |
|||
endif() |
|||
|
|||
if(contents) |
|||
foreach(dir IN LISTS dirs) |
|||
set(env_file "${cpack_dir}/${dir}/${CPACK_PACKAGE_FILE_NAME}/env.txt") |
|||
file(READ "${env_file}" actual_contents) |
|||
if(NOT contents STREQUAL actual_contents) |
|||
string(REPLACE "\n" "\n " contents_formatted "${contents}") |
|||
string(REPLACE "\n" "\n " actual_contents_formatted "${actual_contents}") |
|||
string(APPEND RunCMake_TEST_FAILED "Expected contents of ${env_file}:\n ${contents_formatted}\nActual contents:\n ${actual_contents_formatted}\n") |
|||
endif() |
|||
endforeach() |
|||
endif() |
|||
|
|||
set(RunCMake_TEST_FAILED ${RunCMake_TEST_FAILED} PARENT_SCOPE) |
|||
endfunction() |
|||
|
|||
run_cmake_package_presets(UnsupportedVersion "x" "" "") |
|||
run_cmake_package_presets(Good "default" "build-default-debug" "no-environment;with-environment;generators;configurations;variables;config-file;debug;verbose;package-name;package-version;package-directory;vendor-name") |
@ -0,0 +1 @@ |
|||
1 |
@ -0,0 +1,2 @@ |
|||
^CMake Error: Could not read presets from [^ |
|||
]*/Tests/RunCMake/CMakePresetsPackage/UnsupportedVersion: File version must be 5 or higher for package preset support$ |
@ -0,0 +1,4 @@ |
|||
{ |
|||
"version": 5, |
|||
"packagePresets": [] |
|||
} |
@ -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") |
Write
Preview
Loading…
Cancel
Save
Reference in new issue