import("rules.c++.modules.modules_support.stl_headers", {rootdir = os.programdir()})
import("modules.private.tools.cl.parse_include", {rootdir = os.programdir()})
function _extract_includes(content)
local includes = {}
for line in string.gmatch(content, "[^\r\n]+") do
local include = parse_include(line)
if include then
table.insert(includes, include)
end
end
return includes
end
function scan(target, sourcefile, opt)
local compinst = target:compiler("cxx")
local msvc = target:toolchain("msvc")
local compflags = compinst:compflags({sourcefile = sourcefile, target = target})
local flags = table.join(compflags, {"/showIncludes", "/c", "-TP", sourcefile})
local content, _ = os.iorunv(compinst:program(), flags, {envs = msvc:runenvs()})
return _extract_includes(content)
end