in cppwinrt/main.cpp [246:376]
static int run(int const argc, char** argv)
{
int result{};
writer w;
try
{
auto start = get_start_time();
reader args{ argc, argv, options };
if (!args || args.exists("help") || args.exists("?"))
{
throw usage_exception{};
}
process_args(args);
cache c{ get_files_to_cache(), [](TypeDef const& type) { return type.Flags().WindowsRuntime(); } };
remove_foundation_types(c);
build_filters(c);
settings.base = settings.base || (!settings.component && settings.projection_filter.empty());
build_fastabi_cache(c);
if (settings.verbose)
{
char* path = nullptr;
_get_pgmptr(&path);
w.write(" tool: %\n", path);
w.write(" ver: %\n", CPPWINRT_VERSION_STRING);
for (auto&& file : settings.input)
{
w.write(" in: %\n", file);
}
for (auto&& file : settings.reference)
{
w.write(" ref: %\n", file);
}
w.write(" out: %\n", settings.output_folder);
if (!settings.component_folder.empty())
{
w.write(" cout: %\n", settings.component_folder);
}
}
w.flush_to_console();
task_group group;
group.synchronous(args.exists("synchronous"));
writer ixx;
write_preamble(ixx);
ixx.write("module;\n");
ixx.write(strings::base_includes);
ixx.write("\nexport module winrt;\n#define WINRT_EXPORT export\n\n");
for (auto&&[ns, members] : c.namespaces())
{
if (!has_projected_types(members) || !settings.projection_filter.includes(members))
{
continue;
}
ixx.write("#include \"winrt/%.h\"\n", ns);
group.add([&, &ns = ns, &members = members]
{
write_namespace_0_h(ns, members);
write_namespace_1_h(ns, members);
write_namespace_2_h(ns, members);
write_namespace_h(c, ns, members);
});
}
if (settings.base)
{
write_base_h();
ixx.flush_to_file(settings.output_folder + "winrt/winrt.ixx");
}
if (settings.component)
{
std::vector<TypeDef> classes;
for (auto&&[ns, members] : c.namespaces())
{
for (auto&& type : members.classes)
{
if (settings.component_filter.includes(type))
{
classes.push_back(type);
}
}
}
if (!classes.empty())
{
write_fast_forward_h(classes);
write_module_g_cpp(classes);
for (auto&& type : classes)
{
write_component_g_h(type);
write_component_g_cpp(type);
write_component_h(type);
write_component_cpp(type);
}
}
}
group.get();
if (settings.verbose)
{
w.write(" time: %ms\n", get_elapsed_time(start));
}
}
catch (usage_exception const&)
{
print_usage(w);
}
catch (std::exception const& e)
{
w.write("cppwinrt : error %\n", e.what());
result = 1;
}
w.flush_to_console(result == 0);
return result;
}