mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 19:00:54 -06:00
GeneratorTarget: Fix missing system include cache key
When 033dc7ee2f introduced
`AddSystemIncludeDirectory()`, the function was not handling the
situation which a system include cache key is not added properly like
in `IsSystemIncludeDirectory()`. The error was not exposed when
`AUTOMOC` is `ON` and `AUTOUIC` is `ON` because
`GetIncludeDirectoriesImplicit()` inside `initMoc()` was triggering
`IsSystemIncludeDirectory()`.
This commit adds calling
`AddSystemIncludeCacheKey()` inside `AddSystemIncludeDirectory()`
when the system include cache key is not added before.
Fixes: #26146
This commit is contained in:
@@ -585,6 +585,10 @@ void cmGeneratorTarget::AddSystemIncludeDirectory(std::string const& inc,
|
||||
}
|
||||
auto const& key = cmStrCat(config_upper, "/", lang);
|
||||
this->Target->AddSystemIncludeDirectories({ inc_with_config });
|
||||
if (this->SystemIncludesCache.find(key) ==
|
||||
this->SystemIncludesCache.end()) {
|
||||
this->AddSystemIncludeCacheKey(key, config, lang);
|
||||
}
|
||||
this->SystemIncludesCache[key].emplace_back(inc_with_config);
|
||||
|
||||
// SystemIncludesCache should be sorted so that binary search can be used
|
||||
|
||||
@@ -2,8 +2,6 @@ enable_language(CXX)
|
||||
|
||||
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
add_library(dummy SHARED empty.cpp)
|
||||
target_link_libraries(dummy Qt${with_qt_version}::Core
|
||||
Qt${with_qt_version}::Widgets
|
||||
|
||||
@@ -28,62 +28,71 @@ if (DEFINED with_qt_version)
|
||||
# - CMAKE_INCLUDE_SYSTEM_FLAG_CXX
|
||||
run_cmake(Inspect)
|
||||
include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
|
||||
|
||||
if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
|
||||
if(RunCMake_GENERATOR MATCHES "Visual Studio")
|
||||
string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
|
||||
else()
|
||||
set(test_expect_stdout "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
|
||||
endif()
|
||||
string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
|
||||
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||
string(APPEND test_expect_stdout "_Debug")
|
||||
endif()
|
||||
|
||||
foreach(autogen_type IN ITEMS MOC UIC)
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build)
|
||||
run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
set(RunCMake_TEST_VARIANT_DESCRIPTION "-AUTO${autogen_type}=ON")
|
||||
if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
|
||||
if(RunCMake_GENERATOR MATCHES "Visual Studio")
|
||||
string(REGEX REPLACE "^-" "/" test_expect_stdout_common "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
|
||||
else()
|
||||
set(test_expect_stdout_common "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
|
||||
endif()
|
||||
set(test_expect_stdout_1 "${test_expect_stdout_common}")
|
||||
set(test_expect_stdout_2 "${test_expect_stdout_common}")
|
||||
string(APPEND test_expect_stdout_1 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
|
||||
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||
string(APPEND test_expect_stdout_1 "_Debug")
|
||||
endif()
|
||||
string(APPEND test_expect_stdout_2 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]QtCore")
|
||||
set(test_expect_stdout "${test_expect_stdout_1}.*${test_expect_stdout_2}")
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build)
|
||||
run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(AutogenUseSystemIncludeOn ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
endif()
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build)
|
||||
run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build)
|
||||
run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(AutogenUseSystemIncludeOn-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
endif()
|
||||
|
||||
if(CMAKE_INCLUDE_FLAG_CXX)
|
||||
if(RunCMake_GENERATOR MATCHES "Visual Studio")
|
||||
string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}")
|
||||
else()
|
||||
set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}")
|
||||
endif()
|
||||
string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
|
||||
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||
string(APPEND test_expect_stdout "_Debug")
|
||||
endif()
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build)
|
||||
run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=OLD)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build)
|
||||
run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(AutogenUseSystemIncludeOff-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
endif()
|
||||
endblock()
|
||||
endforeach()
|
||||
if(CMAKE_INCLUDE_FLAG_CXX)
|
||||
if(RunCMake_GENERATOR MATCHES "Visual Studio")
|
||||
string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}")
|
||||
else()
|
||||
set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}")
|
||||
endif()
|
||||
string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
|
||||
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||
string(APPEND test_expect_stdout "_Debug")
|
||||
endif()
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build)
|
||||
run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=OLD)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build)
|
||||
run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
|
||||
run_cmake_command(AutogenUseSystemIncludeOff ${CMAKE_COMMAND} --build . --config Debug --verbose)
|
||||
endblock()
|
||||
|
||||
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenSkipLinting-build)
|
||||
|
||||
Reference in New Issue
Block a user