c++modules: Fix relative paths in local-arguments

Fixes: #27426
This commit is contained in:
Vito Gamberini
2026-03-06 08:48:17 -05:00
parent 3f44eea73c
commit 061d872ed1
9 changed files with 62 additions and 3 deletions

View File

@@ -442,7 +442,7 @@ struct MetaDataProperties
std::string MetadataDir;
std::set<cm::string_view> AllCompileFeatures;
std::set<cm::string_view> AllCompileOptions;
std::set<cm::string_view> AllIncludeDirectories;
std::set<std::string> AllIncludeDirectories;
std::set<std::string> AllCompileDefinitions;
std::set<std::string> BaseDirs;
std::set<std::string> Sources;
@@ -473,11 +473,11 @@ MetaDataProperties CollectMetaProperties(cmCxxModuleMetadata const& meta)
if (module.LocalArguments) {
for (auto const& incDir : module.LocalArguments->IncludeDirectories) {
props.AllIncludeDirectories.emplace(incDir);
props.AllIncludeDirectories.emplace(props.NormalizePath(incDir));
}
for (auto const& sysIncDir :
module.LocalArguments->SystemIncludeDirectories) {
props.AllIncludeDirectories.emplace(sysIncDir);
props.AllIncludeDirectories.emplace(props.NormalizePath(sysIncDir));
}
for (auto const& opt : module.LocalArguments->CompileOptions) {
props.AllCompileOptions.emplace(opt);

View File

@@ -192,6 +192,7 @@ if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND
"import_std23" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_test(imp-std)
run_cxx_module_test(imp-dummy-std)
set(RunCMake_CXXModules_NO_TEST 1)
run_cxx_module_test(imp-std-no-std-prop)
unset(RunCMake_CXXModules_NO_TEST)

View File

@@ -0,0 +1,6 @@
module;
#include <dummy-std.hpp>
#include <dummy-sys.hpp>
export module std;

View File

@@ -0,0 +1,20 @@
{
"version": 1,
"revision": 1,
"modules": [
{
"is-interface": true,
"is-std-library": true,
"logical-name": "std",
"source-path": "../interface/std.cppm",
"local-arguments": {
"include-directories": [
"../include"
],
"system-include-directories": [
"../sysinclude"
]
}
}
]
}

View File

@@ -0,0 +1,8 @@
CMake Warning \(dev\) at .*/Modules/Compiler/CMakeCommonCompilerMacros\.cmake:[0-9]* \(cmake_language\):
CMake's support for `import std;` in C\+\+23 and newer is experimental\. It
is meant only for experimentation and feedback to CMake developers\.
Call Stack \(most recent call first\):
.*/Modules/CMakeDetermineCompilerSupport\.cmake:[0-9]* \(cmake_cxx_find_modules_json\)
.*/Modules/CMakeTestCXXCompiler\.cmake:[0-9]* \(CMAKE_DETERMINE_COMPILER_SUPPORT\)
CMakeLists\.txt:[0-9]* \(project\)
This warning is for project developers\. Use -Wno-dev to suppress it\.

View File

@@ -0,0 +1,18 @@
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD
"451f2fe2-a8a2-47c3-bc32-94786d8fc91b")
set(CMAKE_CXX_STDLIB_MODULES_JSON
"${CMAKE_CURRENT_LIST_DIR}/../dummy-std/manifest/dummy-std.modules.json"
)
cmake_minimum_required(VERSION 3.29)
project(cxx_modules_import_std CXX)
include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
set(CMAKE_CXX_MODULE_STD 1)
add_executable(main
main.cxx)
target_compile_features(main PRIVATE cxx_std_23)
add_test(NAME main COMMAND main)

View File

@@ -0,0 +1,6 @@
import std;
int main(int argc, char* argv[])
{
return 0;
}