summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/moduledeps.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2021-10-15 23:09:05 +0800
committerruki <[email protected]>2021-10-15 23:09:05 +0800
commit8ca0e848506b052bcf107c0b65d2f9d04247de26 (patch)
treecbcdc3e9764110eab4307a91f0422e2d5ac057ab /xmake/rules/c++/modules/moduledeps.lua
parent031626f8266e7bcced4d0f1f8f7a7cc5c45ba00a (diff)
generate module deps
Diffstat (limited to 'xmake/rules/c++/modules/moduledeps.lua')
-rw-r--r--xmake/rules/c++/modules/moduledeps.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/xmake/rules/c++/modules/moduledeps.lua b/xmake/rules/c++/modules/moduledeps.lua
index 25842c9f7..9ae2b3cab 100644
--- a/xmake/rules/c++/modules/moduledeps.lua
+++ b/xmake/rules/c++/modules/moduledeps.lua
@@ -18,7 +18,47 @@
-- @file moduledeps.lua
--
+-- imports
+import("core.project.depend")
+import("utils.progress")
+
+-- generate module deps for the given file
+function _generate_moduledeps(target, sourcefile, opt)
+ local dependfile = target:dependfile(sourcefile)
+ depend.on_changed(function ()
+
+ -- trace progress
+ progress.show(opt.progress, "${color.build.target}generating.deps %s", sourcefile)
+
+ -- generating deps
+ local module_name
+ local module_deps
+ local sourcecode = io.readfile(sourcefile)
+ sourcecode = sourcecode:gsub("//.-\n", "\n")
+ sourcecode = sourcecode:gsub("/%*.-%*/", "")
+ for _, line in ipairs(sourcecode:split("\n", {plain = true})) do
+ if not module_name then
+ module_name = line:match("export%s+module%s+(.+)%s*;")
+ end
+ local module_depname = line:match("import%s+(.+)%s*;")
+ if module_depname then
+ module_deps = module_deps or {}
+ table.insert(module_deps, module_depname)
+ end
+ end
+
+ -- save depend data
+ if module_name then
+ io.save(dependfile, {name = module_name, deps = module_deps, file = sourcefile})
+ end
+
+ end, {dependfile = dependfile, files = {sourcefile}})
+end
+
-- generate module deps
function generate(target, sourcebatch, opt)
+ for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
+ _generate_moduledeps(target, sourcefile, opt)
+ end
end