diff --git a/Modules/Internal/CMakeCUDAArchitecturesValidate.cmake b/Modules/Internal/CMakeCUDAArchitecturesValidate.cmake index 57dd7e370a..3f4d15ab6a 100644 --- a/Modules/Internal/CMakeCUDAArchitecturesValidate.cmake +++ b/Modules/Internal/CMakeCUDAArchitecturesValidate.cmake @@ -5,6 +5,11 @@ function(cmake_cuda_architectures_validate lang) if(DEFINED CMAKE_${lang}_ARCHITECTURES) if(CMAKE_${lang}_ARCHITECTURES STREQUAL "") message(FATAL_ERROR "CMAKE_${lang}_ARCHITECTURES must be non-empty if set.") + elseif(CMAKE_${lang}_ARCHITECTURES MATCHES [["]]) + message(FATAL_ERROR + "CMAKE_${lang}_ARCHITECTURES contains literal quotes:\n" + " ${CMAKE_${lang}_ARCHITECTURES}\n" + ) elseif(CMAKE_${lang}_ARCHITECTURES AND NOT CMAKE_${lang}_ARCHITECTURES MATCHES "^([0-9]+(a|f)?(-real|-virtual)?(;[0-9]+(a|f)?(-real|-virtual)?|;)*|all|all-major|native)$") message(FATAL_ERROR "CMAKE_${lang}_ARCHITECTURES:\n" diff --git a/Tests/RunCMake/CUDA_architectures/RunCMakeTest.cmake b/Tests/RunCMake/CUDA_architectures/RunCMakeTest.cmake index 3e6b3a5517..7f0611a18f 100644 --- a/Tests/RunCMake/CUDA_architectures/RunCMakeTest.cmake +++ b/Tests/RunCMake/CUDA_architectures/RunCMakeTest.cmake @@ -5,6 +5,7 @@ run_cmake(architectures-all-major) run_cmake(architectures-native) run_cmake(architectures-empty) run_cmake(architectures-invalid) +run_cmake(architectures-quotes) run_cmake(architectures-not-set) include("${RunCMake_BINARY_DIR}/architectures-not-set-build/info.cmake" OPTIONAL) diff --git a/Tests/RunCMake/CUDA_architectures/architectures-quotes-result.txt b/Tests/RunCMake/CUDA_architectures/architectures-quotes-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/CUDA_architectures/architectures-quotes-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CUDA_architectures/architectures-quotes-stderr.txt b/Tests/RunCMake/CUDA_architectures/architectures-quotes-stderr.txt new file mode 100644 index 0000000000..79e16fbbe2 --- /dev/null +++ b/Tests/RunCMake/CUDA_architectures/architectures-quotes-stderr.txt @@ -0,0 +1,10 @@ +^CMake Error at .*/Internal/CMakeCUDAArchitecturesValidate\.cmake:[0-9]+ \(message\): + CMAKE_CUDA_ARCHITECTURES contains literal quotes: + + "all-major" + +Call Stack \(most recent call first\): + [^ +]*/Modules/CMakeDetermineCUDACompiler.cmake:[0-9]+ \(cmake_cuda_architectures_validate\) + architectures-quotes\.cmake:2 \(enable_language\) + CMakeLists\.txt:3 \(include\)$ diff --git a/Tests/RunCMake/CUDA_architectures/architectures-quotes.cmake b/Tests/RunCMake/CUDA_architectures/architectures-quotes.cmake new file mode 100644 index 0000000000..fbdc7ce3d8 --- /dev/null +++ b/Tests/RunCMake/CUDA_architectures/architectures-quotes.cmake @@ -0,0 +1,2 @@ +set(CMAKE_CUDA_ARCHITECTURES "\"all-major\"") +enable_language(CUDA)