c++modules: Don't set STDLIB_MODULES_JSON on Clang < 18.1.2

This makes CMAKE_CXX_STDLIB_MODULES_JSON a valid check if import std is
expected to be available at all.

Fixes: #28183
This commit is contained in:
Vito Gamberini committed 2026-10-18 12:58:53 -04:00
1 parent 1cdd7458c0
commit d17d559734
1 file changed
+13 -13
+13 -13
View File
@@ -6,6 +6,19 @@ if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" OR
endif()
function (_cmake_cxx_find_modules_json)
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION}")
if(CMAKE_CXX_COMPILER_ID STREQUAL "DPClang")
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
endif()
if (_clang_version VERSION_LESS "18.1.2" AND
CMAKE_CXX_STANDARD_LIBRARY STREQUAL "libc++")
# The original PR had a key spelling mismatch internally. Do not support it
# and instead require a release known to have the fix.
# https://github.com/llvm/llvm-project/pull/83036
set(CMAKE_CXX_COMPILER_IMPORT_STD_ERROR_MESSAGE "LLVM 18.1.2 is required for 'import std' json format fix" PARENT_SCOPE)
return ()
endif ()
if (NOT CMAKE_CXX_STDLIB_MODULES_JSON)
if (CMAKE_CXX_STANDARD_LIBRARY STREQUAL "libc++")
set(_clang_modules_json_impl "libc++")
@@ -34,17 +47,4 @@ function (_cmake_cxx_find_modules_json)
cmake_path(CONVERT "${_clang_libcxx_modules_json_file}" TO_CMAKE_PATH_LIST CMAKE_CXX_STDLIB_MODULES_JSON NORMALIZE)
set(CMAKE_CXX_STDLIB_MODULES_JSON "${CMAKE_CXX_STDLIB_MODULES_JSON}" PARENT_SCOPE)
endif ()
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION}")
if(CMAKE_CXX_COMPILER_ID STREQUAL "DPClang")
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
endif()
if (_clang_version VERSION_LESS "18.1.2" AND
CMAKE_CXX_STANDARD_LIBRARY STREQUAL "libc++")
# The original PR had a key spelling mismatch internally. Do not support it
# and instead require a release known to have the fix.
# https://github.com/llvm/llvm-project/pull/83036
set(CMAKE_CXX_COMPILER_IMPORT_STD_ERROR_MESSAGE "LLVM 18.1.2 is required for 'import std' json format fix" PARENT_SCOPE)
return ()
endif ()
endfunction ()