diff --git a/Modules/CMakeDetermineCompiler.cmake b/Modules/CMakeDetermineCompiler.cmake index 06e8bedc51..16c5554fef 100644 --- a/Modules/CMakeDetermineCompiler.cmake +++ b/Modules/CMakeDetermineCompiler.cmake @@ -4,7 +4,11 @@ macro(_cmake_find_compiler lang) # Use already-enabled languages for reference. - get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + if(DEFINED _CMAKE_CHECK_ENABLED_LANGUAGES) + set(_languages "${_CMAKE_CHECK_ENABLED_LANGUAGES}") + else() + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + endif() list(REMOVE_ITEM _languages "${lang}") if(CMAKE_${lang}_COMPILER_INIT) diff --git a/Modules/CheckLanguage.cmake b/Modules/CheckLanguage.cmake index fa64d051ec..ac61d7019c 100644 --- a/Modules/CheckLanguage.cmake +++ b/Modules/CheckLanguage.cmake @@ -77,31 +77,34 @@ macro(check_language lang) message(CHECK_START "${_desc}") file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}) - set(extra_compiler_variables) + set(_input_variables "set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\")\n") + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + list(REMOVE_ITEM _languages "NONE") + if(NOT _languages STREQUAL "") + string(APPEND _input_variables "set(_CMAKE_CHECK_ENABLED_LANGUAGES \"${_languages}\")\n") + foreach(l IN LISTS _languages) + string(APPEND _input_variables + "set(CMAKE_${l}_COMPILER \"${CMAKE_${l}_COMPILER}\")\n" + "set(CMAKE_${l}_COMPILER_ID \"${CMAKE_${l}_COMPILER_ID}\")\n" + "set(CMAKE_${l}_COMPILER_LOADED ${CMAKE_${l}_COMPILER_LOADED})\n" + "set(CMAKE_${l}_COMPILER_VERSION \"${CMAKE_${l}_COMPILER_VERSION}\")\n" + ) + endforeach() + endif() + + set(_output_variables "set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\n") if("${lang}" MATCHES "^(CUDA|HIP)$" AND NOT CMAKE_GENERATOR MATCHES "Visual Studio") - set(extra_compiler_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")") + string(APPEND _output_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")\n") endif() - if("${lang}" STREQUAL "HIP") - list(APPEND extra_compiler_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")") + string(APPEND _output_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")\n") endif() - list(TRANSFORM extra_compiler_variables PREPEND "\"") - list(TRANSFORM extra_compiler_variables APPEND "\\n\"") - list(JOIN extra_compiler_variables "\n " extra_compiler_variables) - - set(_cl_content - "cmake_minimum_required(VERSION ${CMAKE_VERSION}) -set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\") -project(Check${lang} ${lang}) -file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\" - \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\" - ${extra_compiler_variables} - )" - ) - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt" - "${_cl_content}") + "cmake_minimum_required(VERSION ${CMAKE_VERSION}) +${_input_variables} +project(Check${lang} LANGUAGES ${lang}) +file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\" \"${_output_variables}\")") if(CMAKE_GENERATOR_INSTANCE) set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}") else() diff --git a/Tests/CMakeOnly/CheckLanguage/CMakeLists.txt b/Tests/CMakeOnly/CheckLanguage/CMakeLists.txt index 97c75d496f..f285cfbfb6 100644 --- a/Tests/CMakeOnly/CheckLanguage/CMakeLists.txt +++ b/Tests/CMakeOnly/CheckLanguage/CMakeLists.txt @@ -13,7 +13,7 @@ endif() unset(expect_Fortran) set(expect_NoSuchLanguage 0) -set(LANGUAGES C CXX Fortran CUDA HIP NoSuchLanguage) +set(LANGUAGES C CXX Fortran CUDA HIP ASM NoSuchLanguage) if(APPLE) list(APPEND LANGUAGES OBJC OBJCXX) endif() @@ -30,4 +30,7 @@ foreach(test_lang ${LANGUAGES}) message(FATAL_ERROR "check_language(${test_lang}) should not succeed!") endif() endif() + if(CMAKE_${test_lang}_COMPILER) + enable_language(${test_lang}) + endif() endforeach()