diff --git a/Meta/CMake/code_generators.cmake b/Meta/CMake/code_generators.cmake index 4cc0235d92..7fc93b7689 100644 --- a/Meta/CMake/code_generators.cmake +++ b/Meta/CMake/code_generators.cmake @@ -24,7 +24,7 @@ function(compile_ipc source output) endif() add_custom_command( OUTPUT ${output} - COMMAND $ ${source} > ${output}.tmp + COMMAND $ ${source} -o ${output}.tmp COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output} COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp VERBATIM diff --git a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp index c87a0dac0b..7710366863 100644 --- a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -795,12 +796,17 @@ void build(StringBuilder& builder, Vector const& endpoints) ErrorOr serenity_main(Main::Arguments arguments) { - if (arguments.argc != 2) { - outln("usage: {} ", arguments.strings[0]); - return 1; - } + StringView ipc_file; + StringView output_file = "-"sv; - auto file = TRY(Core::File::open(arguments.strings[1], Core::File::OpenMode::Read)); + Core::ArgsParser parser; + parser.add_positional_argument(ipc_file, "IPC endpoint definition file", "input"); + parser.add_option(output_file, "Place to write file", "output", 'o', "output-file"); + parser.parse(arguments); + + auto output = TRY(Core::File::open_file_or_standard_stream(output_file, Core::File::OpenMode::Write)); + + auto file = TRY(Core::File::open(ipc_file, Core::File::OpenMode::Read)); auto file_contents = TRY(file->read_until_eof()); @@ -809,7 +815,7 @@ ErrorOr serenity_main(Main::Arguments arguments) StringBuilder builder; build(builder, endpoints); - outln("{}", builder.string_view()); + TRY(output->write_until_depleted(builder.string_view().bytes())); if constexpr (GENERATE_DEBUG) { for (auto& endpoint : endpoints) {