IPCCompiler: Add option to pass output file path

Instead of requiring the caller to redirect stdout, let's be nice
citizens and add an option for the output file.
This commit is contained in:
Andrew Kaster 2023-04-24 03:00:34 -06:00 committed by Tim Flynn
parent 5338eba39a
commit aa329cb2f8
2 changed files with 13 additions and 7 deletions

View file

@ -24,7 +24,7 @@ function(compile_ipc source output)
endif()
add_custom_command(
OUTPUT ${output}
COMMAND $<TARGET_FILE:Lagom::IPCCompiler> ${source} > ${output}.tmp
COMMAND $<TARGET_FILE:Lagom::IPCCompiler> ${source} -o ${output}.tmp
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
VERBATIM

View file

@ -10,6 +10,7 @@
#include <AK/HashMap.h>
#include <AK/SourceGenerator.h>
#include <AK/StringBuilder.h>
#include <LibCore/ArgsParser.h>
#include <LibCore/File.h>
#include <LibMain/Main.h>
#include <ctype.h>
@ -795,12 +796,17 @@ void build(StringBuilder& builder, Vector<Endpoint> const& endpoints)
ErrorOr<int> serenity_main(Main::Arguments arguments)
{
if (arguments.argc != 2) {
outln("usage: {} <IPC endpoint definition file>", 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<int> 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) {