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