diff options
| author | Shiffted <[email protected]> | 2026-03-29 11:33:11 +0200 |
|---|---|---|
| committer | Shiffted <[email protected]> | 2026-03-29 11:36:28 +0200 |
| commit | 825ab605b940bcb7be693552112c6be68106e9d0 (patch) | |
| tree | bbc03cf7fe7634959347101f9b909be88c2185de | |
| parent | 6c37e151e982075081ff87841fd65083f1f7bb5a (diff) | |
handle missing moduleinfo
| -rw-r--r-- | xmake/rules/c++/modules/scanner.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/support.lua | 19 |
2 files changed, 16 insertions, 5 deletions
diff --git a/xmake/rules/c++/modules/scanner.lua b/xmake/rules/c++/modules/scanner.lua index 8d848446f..72adea260 100644 --- a/xmake/rules/c++/modules/scanner.lua +++ b/xmake/rules/c++/modules/scanner.lua @@ -556,7 +556,7 @@ function _schedule_module_dependencies_scan(target, jobgraph, sourcebatch) local changed = memcache:get2(target:fullname(), "modules.changed") if changed then modules = modules or {} - local moduleinfo = support.load_moduleinfo(target, sourcefile) + local moduleinfo = assert(support.load_moduleinfo(target, sourcefile)) local module, headerunitsinfo = _parse_moduleinfo(target, moduleinfo) modules[module.sourcefile] = module for _, headerunitinfo in ipairs(headerunitsinfo) do diff --git a/xmake/rules/c++/modules/support.lua b/xmake/rules/c++/modules/support.lua index 0767c88af..1dd7625bb 100644 --- a/xmake/rules/c++/modules/support.lua +++ b/xmake/rules/c++/modules/support.lua @@ -281,15 +281,26 @@ end function load_moduleinfo(target, sourcefile) local reused, from = is_reused(target, sourcefile) local dependfile = reused and from:dependfile(sourcefile) or target:dependfile(sourcefile) - local moduleinfo - if os.isfile(dependfile) then + + local is_file = os.isfile(dependfile) + if is_file then local data = io.load(dependfile) if data then - moduleinfo = json.decode(data.moduleinfo) + local moduleinfo = json.decode(data.moduleinfo) moduleinfo.sourcefile = sourcefile + return moduleinfo end end - return moduleinfo + + local targets = memcache():get("targets") + local target_fullname = reused and from:fullname() or target:fullname() + if not (targets and targets[target_fullname]) then + return nil, string.format("module scanner did not run for target(%s), maybe a custom `on_prepare()` script overrides the modules one", target_fullname) + end + if not is_file then + return nil, string.format("target(%s): dependfile for '%s' not found at '%s'", target_fullname, sourcefile, dependfile) + end + return nil, string.format("target(%s): failed to load moduleinfo for '%s'", target_fullname, sourcefile) end function find_quote_header_file(sourcefile, file) |
