From 8dccc2d987d20b6df18360adab034ebd42f6ec9b Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 12 Aug 2022 22:49:52 +0800 Subject: Update common.lua --- xmake/rules/c++/modules/modules_support/common.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'xmake/rules/c++/modules/modules_support') diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua index 8072800bc..39ad17f2e 100644 --- a/xmake/rules/c++/modules/modules_support/common.lua +++ b/xmake/rules/c++/modules/modules_support/common.lua @@ -125,6 +125,17 @@ function bmi_extension(target) return modules_support(target).get_bmi_extension() end +-- has module extension? e.g. *.mpp, ... +function has_module_extension(sourcefile) + local modulexts = _g.modulexts + if modulexts == nil then + modulexts = hashset.of(".mpp", ".mxx", ".cppm", ".ixx") + _g.modulexts = modulexts + end + local extension = path.extension(sourcefile) + return modulexts:has(extension:lower()) +end + -- this target contains module files? function contains_modules(target) local target_with_modules = target:sourcebatches()["c++.build.modules"] and true or false @@ -377,6 +388,11 @@ function fallback_generate_dependencies(target, jsonfile, sourcefile) module_name = line:match("export%s+module%s+(.+)%s*;") end local module_depname = line:match("import%s+(.+)%s*;") + -- we need parse module interface dep in cxx/impl_unit.cpp, e.g. hello.mpp and hello_impl.cpp + -- @see https://github.com/xmake-io/xmake/pull/2664#issuecomment-1213167314 + if not module_depname and not has_module_extension(sourcefile) then + module_depname = line:match("module%s+(.+)%s*;") + end if module_depname then local module_dep = {} -- partition? import :xxx; -- cgit v1.3.1