diff --git a/.gitlab/ci/intel-vars.ps1 b/.gitlab/ci/intel-vars.ps1 index dde0aa26ea..c95a34ccc0 100644 --- a/.gitlab/ci/intel-vars.ps1 +++ b/.gitlab/ci/intel-vars.ps1 @@ -1,9 +1,7 @@ $erroractionpreference = "stop" -cmd /c "`".gitlab\intel\setvars.bat`" & set" | -foreach { - if ($_ -match "=") { - $v = $_.split("=") - [Environment]::SetEnvironmentVariable($v[0], $v[1]) - } +$all_env = cmd /c "`".gitlab\intel\setvars.bat`" >NUL & powershell -Command `"Get-ChildItem env: | Select-Object -Property Key,Value | ConvertTo-Json`"" | ConvertFrom-Json + +foreach ($envvar in $all_env) { + [Environment]::SetEnvironmentVariable($envvar.Key, $envvar.Value) } diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 62619473ca..0a80baba18 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -628,6 +628,11 @@ add_RunCMake_test(FileSet-SOURCES -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION} -DMSVC_VERSION=${MSVC_VERSION}) add_RunCMake_test(ToolchainFile) +add_RunCMake_test(ToolchainSkipsChecks + -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} + -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID} + -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID} +) if(NOT CMake_TEST_EXTERNAL_CMAKE) set(Tutorial_ARGS TEST_DIR Tutorial -DTutorial_SOURCE_DIR=${CMake_SOURCE_DIR}/Help/guide/tutorial) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/C-toolchain.cmake b/Tests/RunCMake/ToolchainSkipsChecks/C-toolchain.cmake new file mode 100644 index 0000000000..9cd0911dcb --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/C-toolchain.cmake @@ -0,0 +1,22 @@ +enable_language(C) + +set(vars + CMAKE_C_COMPILER_WORKS + CMAKE_C_COMPILER_ARCHITECTURE_ID + CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + CMAKE_C_COMPILER_LINKER + CMAKE_C_COMPILER_LINKER_ID + CMAKE_C_COMPILER_LINKER_VERSION + CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT + CMAKE_C_IMPLICIT_LINK_LIBRARIES + CMAKE_C_IMPLICIT_LINK_DIRECTORIES + CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + CMAKE_C_LIBRARY_ARCHITECTURE + CMAKE_C_COMPILE_FEATURES + CMAKE_C_USE_LINKER_INFORMATION) +foreach (std IN ITEMS 23 17 11 99 90) + list(APPEND vars + CMAKE_C${std}_COMPILE_FEATURES) +endforeach () + +include("${CMAKE_CURRENT_LIST_DIR}/write-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainSkipsChecks/C.cmake b/Tests/RunCMake/ToolchainSkipsChecks/C.cmake new file mode 100644 index 0000000000..c00af08d10 --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/C.cmake @@ -0,0 +1 @@ +enable_language(C) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/CMakeLists.txt b/Tests/RunCMake/ToolchainSkipsChecks/CMakeLists.txt new file mode 100644 index 0000000000..94e43ba84b --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.29) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/CXX-toolchain.cmake b/Tests/RunCMake/ToolchainSkipsChecks/CXX-toolchain.cmake new file mode 100644 index 0000000000..0978519f9a --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/CXX-toolchain.cmake @@ -0,0 +1,25 @@ +enable_language(CXX) + +set(vars + CMAKE_CXX_COMPILER_WORKS + CMAKE_CXX_COMPILER_ARCHITECTURE_ID + CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES + CMAKE_CXX_COMPILER_LINKER + CMAKE_CXX_COMPILER_LINKER_ID + CMAKE_CXX_COMPILER_LINKER_VERSION + CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT + CMAKE_CXX_IMPLICIT_LINK_LIBRARIES + CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES + CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + CMAKE_CXX_LIBRARY_ARCHITECTURE + CMAKE_CXX_COMPILE_FEATURES + CMAKE_CXX_USE_LINKER_INFORMATION + + CMAKE_CXX_COMPILER_IMPORT_STD + CMAKE_CXX_STDLIB_MODULES_JSON) +foreach (std IN ITEMS 26 23 20 17 14 11 98) + list(APPEND vars + CMAKE_CXX${std}_COMPILE_FEATURES) +endforeach () + +include("${CMAKE_CURRENT_LIST_DIR}/write-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainSkipsChecks/CXX.cmake b/Tests/RunCMake/ToolchainSkipsChecks/CXX.cmake new file mode 100644 index 0000000000..fa2fc914f9 --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/CXX.cmake @@ -0,0 +1 @@ +enable_language(CXX) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/Fortran-toolchain.cmake b/Tests/RunCMake/ToolchainSkipsChecks/Fortran-toolchain.cmake new file mode 100644 index 0000000000..7a84c629d8 --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/Fortran-toolchain.cmake @@ -0,0 +1,18 @@ +enable_language(Fortran) + +set(vars + CMAKE_Fortran_COMPILER_ARCHITECTURE_ID + CMAKE_Fortran_COMPILER_SUPPORTS_F90 + CMAKE_Fortran_COMPILER_WORKS + CMAKE_Fortran_STANDARD_INCLUDE_DIRECTORIES + CMAKE_Fortran_COMPILER_LINKER + CMAKE_Fortran_COMPILER_LINKER_ID + CMAKE_Fortran_COMPILER_LINKER_VERSION + CMAKE_Fortran_COMPILER_LINKER_FRONTEND_VARIANT + CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES + CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES + CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES + CMAKE_Fortran_LIBRARY_ARCHITECTURE + CMAKE_Fortran_USE_LINKER_INFORMATION) + +include("${CMAKE_CURRENT_LIST_DIR}/write-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainSkipsChecks/Fortran.cmake b/Tests/RunCMake/ToolchainSkipsChecks/Fortran.cmake new file mode 100644 index 0000000000..fdf387997d --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/Fortran.cmake @@ -0,0 +1 @@ +enable_language(Fortran) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/RunCMakeTest.cmake b/Tests/RunCMake/ToolchainSkipsChecks/RunCMakeTest.cmake new file mode 100644 index 0000000000..570ba72f28 --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/RunCMakeTest.cmake @@ -0,0 +1,16 @@ +include(RunCMake) + +function (run_cmake_lang lang) + if (NOT CMAKE_${lang}_COMPILER_ID) + return () + endif () + run_cmake(${lang}-toolchain) + set(RunCMake-check-file "check.cmake") + run_cmake_with_options(${lang} + # "-DCMAKE_${lang}_COMPILER_FORCED=1" + "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_BINARY_DIR}/${lang}-toolchain-build/Toolchain.cmake") +endfunction () + +run_cmake_lang(C) +run_cmake_lang(CXX) +run_cmake_lang(Fortran) diff --git a/Tests/RunCMake/ToolchainSkipsChecks/check.cmake b/Tests/RunCMake/ToolchainSkipsChecks/check.cmake new file mode 100644 index 0000000000..df85718fbb --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/check.cmake @@ -0,0 +1,27 @@ +set(configure_log "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/CMakeConfigureLog.yaml") +if (NOT EXISTS "${configure_log}") + set(RunCMake_TEST_FAILED "Configure log does not exist:\n ${configure_log}") + return () +endif () + +set(force_fail 0) +set(want_varname 0) +file(STRINGS "${configure_log}" lines REGEX "(kind:|variable:)") +foreach (line IN LISTS lines) + if (line MATCHES "kind:") + string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" kind "${line}") + if (kind MATCHES "try_") + set(force_fail 1) + set(want_varname 1) + endif () + elseif (want_varname AND line MATCHES "variable:") + string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" varname "${line}") + list(APPEND RunCMake_TEST_FAILED + "Found a `${kind}` event for `${varname}`") + set(want_varname 0) + endif () +endforeach () + +if (force_fail AND NOT RunCMake_TEST_FAILED) + set(RunCMake_TEST_FAILED "Found a failing event, but not its variable. Forcing a failure. See ${configure_log}") +endif () diff --git a/Tests/RunCMake/ToolchainSkipsChecks/write-toolchain.cmake b/Tests/RunCMake/ToolchainSkipsChecks/write-toolchain.cmake new file mode 100644 index 0000000000..8ca1ee5e7e --- /dev/null +++ b/Tests/RunCMake/ToolchainSkipsChecks/write-toolchain.cmake @@ -0,0 +1,6 @@ +set(toolchain_file "${CMAKE_BINARY_DIR}/Toolchain.cmake") +file(WRITE "${toolchain_file}" "") +foreach (var IN LISTS vars) + file(APPEND "${toolchain_file}" + "set(\"${var}\" [===[${${var}}]===])\n") +endforeach ()