diff options
Diffstat (limited to 'xmake/modules/core/project/depend.lua')
| -rw-r--r-- | xmake/modules/core/project/depend.lua | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/xmake/modules/core/project/depend.lua b/xmake/modules/core/project/depend.lua index aea652779..b6f3976ba 100644 --- a/xmake/modules/core/project/depend.lua +++ b/xmake/modules/core/project/depend.lua @@ -21,12 +21,6 @@ -- imports import("core.base.option") import("core.project.project") -import("private.tools.cl.parse_deps", {alias = "parse_deps_cl"}) -import("private.tools.cl.parse_deps_json", {alias = "parse_deps_cl_json"}) -import("private.tools.rc.parse_deps", {alias = "parse_deps_rc"}) -import("private.tools.gcc.parse_deps", {alias = "parse_deps_gcc"}) -import("private.tools.armcc.parse_deps", {alias = "parse_deps_armcc"}) -import("private.tools.cl6x.parse_deps", {alias = "parse_deps_cl6x"}) -- load depfiles function _load_depfiles(parser, dependinfo, depfiles, opt) @@ -40,32 +34,34 @@ function _load_depfiles(parser, dependinfo, depfiles, opt) end end +-- get depfiles parser +function _get_depfiles_parser(depfiles_format) + assert(depfiles_format, "no depfiles format") + local depfiles_parsers = _g._depfiles_parsers + if depfiles_parsers == nil then + depfiles_parsers = {} + _g._depfiles_parsers = depfiles_parsers + end + local parser = depfiles_parsers[depfiles_format] + if parser == nil then + parser = import("private.tools." .. depfiles_format .. ".parse_deps", {anonymous = true}) + depfiles_parsers[depfiles_format] = parser + end + return parser +end + -- load dependent info from the given file (.d) function load(dependfile, opt) - if os.isfile(dependfile) then -- may be the depend file has been incomplete when if the compilation process is abnormally interrupted local dependinfo = try { function() return io.load(dependfile) end } if dependinfo then -- attempt to load depfiles from the compilers - if dependinfo.depfiles_gcc then - _load_depfiles(parse_deps_gcc, dependinfo, dependinfo.depfiles_gcc, opt) - dependinfo.depfiles_gcc = nil - elseif dependinfo.depfiles_cl_json then - _load_depfiles(parse_deps_cl_json, dependinfo, dependinfo.depfiles_cl_json, opt) - dependinfo.depfiles_cl_json = nil - elseif dependinfo.depfiles_cl then - _load_depfiles(parse_deps_cl, dependinfo, dependinfo.depfiles_cl, opt) - dependinfo.depfiles_cl = nil - elseif dependinfo.depfiles_rc then - _load_depfiles(parse_deps_rc, dependinfo, dependinfo.depfiles_rc, opt) - dependinfo.depfiles_rc = nil - elseif dependinfo.depfiles_armcc then - _load_depfiles(parse_deps_armcc, dependinfo, dependinfo.depfiles_armcc, opt) - dependinfo.depfiles_armcc = nil - elseif dependinfo.depfiles_cl6x then - _load_depfiles(parse_deps_cl6x, dependinfo, dependinfo.depfiles_cl6x, opt) - dependinfo.depfiles_cl6x = nil + local depfiles = dependinfo.depfiles + if depfiles then + local depfiles_parser = _get_depfiles_parser(dependinfo.depfiles_format) + _load_depfiles(depfiles_parser, dependinfo, depfiles, opt) + dependinfo.depfiles = nil end return dependinfo end |
