summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-07-07 23:32:50 +0800
committerruki <[email protected]>2023-07-07 23:32:50 +0800
commitcf0827635b313ccc68b8cf2c1744556289321c7b (patch)
tree69e702d6560148ad1251104e5e5f933ba6c35b48
parentfc576981c1405a6b18f71901d599232729168fea (diff)
fix headerunit errors for msvc #3927
-rw-r--r--tests/projects/c++/modules/user_headerunit2/a/a.mpp3
-rw-r--r--tests/projects/c++/modules/user_headerunit2/a/c.hpp1
-rw-r--r--tests/projects/c++/modules/user_headerunit2/a/d.hpp1
-rw-r--r--tests/projects/c++/modules/user_headerunit2/a/xmake.lua4
-rw-r--r--tests/projects/c++/modules/user_headerunit2/b/b.mpp3
-rw-r--r--tests/projects/c++/modules/user_headerunit2/b/xmake.lua5
-rw-r--r--tests/projects/c++/modules/user_headerunit2/test.lua1
-rw-r--r--tests/projects/c++/modules/user_headerunit2/xmake.lua4
-rw-r--r--xmake/rules/c++/modules/modules_support/msvc.lua16
9 files changed, 37 insertions, 1 deletions
diff --git a/tests/projects/c++/modules/user_headerunit2/a/a.mpp b/tests/projects/c++/modules/user_headerunit2/a/a.mpp
new file mode 100644
index 000000000..d940a0635
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/a/a.mpp
@@ -0,0 +1,3 @@
+export module A;
+import "c.hpp";
+import "d.hpp";
diff --git a/tests/projects/c++/modules/user_headerunit2/a/c.hpp b/tests/projects/c++/modules/user_headerunit2/a/c.hpp
new file mode 100644
index 000000000..7c6c88c00
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/a/c.hpp
@@ -0,0 +1 @@
+#pragma once \ No newline at end of file
diff --git a/tests/projects/c++/modules/user_headerunit2/a/d.hpp b/tests/projects/c++/modules/user_headerunit2/a/d.hpp
new file mode 100644
index 000000000..7c6c88c00
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/a/d.hpp
@@ -0,0 +1 @@
+#pragma once \ No newline at end of file
diff --git a/tests/projects/c++/modules/user_headerunit2/a/xmake.lua b/tests/projects/c++/modules/user_headerunit2/a/xmake.lua
new file mode 100644
index 000000000..cffe161b2
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/a/xmake.lua
@@ -0,0 +1,4 @@
+target("a")
+ set_languages("cxxlatest")
+ set_kind("object")
+ add_files("a.mpp")
diff --git a/tests/projects/c++/modules/user_headerunit2/b/b.mpp b/tests/projects/c++/modules/user_headerunit2/b/b.mpp
new file mode 100644
index 000000000..486174a4b
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/b/b.mpp
@@ -0,0 +1,3 @@
+export module B;
+import A;
+import "../a/c.hpp"; \ No newline at end of file
diff --git a/tests/projects/c++/modules/user_headerunit2/b/xmake.lua b/tests/projects/c++/modules/user_headerunit2/b/xmake.lua
new file mode 100644
index 000000000..98cff4124
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/b/xmake.lua
@@ -0,0 +1,5 @@
+target("b")
+ add_deps("a")
+ set_languages("cxxlatest")
+ set_kind("object")
+ add_files("b.mpp")
diff --git a/tests/projects/c++/modules/user_headerunit2/test.lua b/tests/projects/c++/modules/user_headerunit2/test.lua
new file mode 100644
index 000000000..c18e5a1d0
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/test.lua
@@ -0,0 +1 @@
+inherit(".test_headerunits")
diff --git a/tests/projects/c++/modules/user_headerunit2/xmake.lua b/tests/projects/c++/modules/user_headerunit2/xmake.lua
new file mode 100644
index 000000000..09517502b
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit2/xmake.lua
@@ -0,0 +1,4 @@
+includes("a", "b")
+target("test")
+ add_deps("a", "b")
+ set_kind("phony")
diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua
index 3ee88715c..411b32b20 100644
--- a/xmake/rules/c++/modules/modules_support/msvc.lua
+++ b/xmake/rules/c++/modules/modules_support/msvc.lua
@@ -226,6 +226,7 @@ function generate_headerunit_for_batchjob(target, name, flags, objectfile, index
progress.show((index * 100) / total, "${color.build.object}compiling.headerunit.$(mode) %s", name)
_compile(target, table.join(common_flags, flags))
_add_objectfile_to_link_arguments(target, objectfile)
+ common.memcache():set2(name, "generating", false)
end
end
@@ -740,7 +741,20 @@ function get_requiresflags(target, requires, opt)
local modulemap_ = _get_modulemap_from_mapper(dep)
if modulemap_[name] then
table.join2(flags, modulemap_[name].flag)
- table.join2(flags, modulemap_[name].deps or {})
+ -- we need ignore headerunits from deps
+ -- @see https://github.com/xmake-io/xmake/issues/3925
+ local skip = 0
+ for _, flag in ipairs(modulemap_[name].deps) do
+ if flag:find("headerUnit:quote", 1, true) then
+ skip = 2
+ end
+ if skip == 0 then
+ table.insert(flags, flag)
+ end
+ if skip > 0 then
+ skip = skip - 1
+ end
+ end
already_mapped_modules[name] = true
goto continue
end