Provide default implementation of quiche_command_line_flags.h PiperOrigin-RevId: 449066529
diff --git a/build/source_list.bzl b/build/source_list.bzl index 855c33d..8b9a145 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -1391,11 +1391,13 @@ "common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc", ] default_platform_impl_tool_support_hdrs = [ + "common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", "common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h", ] default_platform_impl_tool_support_srcs = [ + "common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc", "common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc", ] default_platform_impl_test_support_hdrs = [
diff --git a/build/source_list.gni b/build/source_list.gni index 37b047d..c09f3dd 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -1391,11 +1391,13 @@ "src/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc", ] default_platform_impl_tool_support_hdrs = [ + "src/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h", ] default_platform_impl_tool_support_srcs = [ + "src/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc", "src/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc", ] default_platform_impl_test_support_hdrs = [
diff --git a/build/source_list.json b/build/source_list.json index ab942c5..abb7bd7 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -1390,11 +1390,13 @@ "quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc" ], "default_platform_impl_tool_support_hdrs": [ + "quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h" ], "default_platform_impl_tool_support_srcs": [ + "quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc", "quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc" ], "default_platform_impl_test_support_hdrs": [
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc new file mode 100644 index 0000000..ae15376 --- /dev/null +++ b/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc
@@ -0,0 +1,41 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "quiche_platform_impl/quiche_command_line_flags_impl.h" + +#include <iostream> + +#include "absl/flags/parse.h" +#include "absl/flags/usage.h" + +namespace quiche { + +static void SetUsage(absl::string_view usage) { + static bool usage_set = false; + if (!usage_set) { + absl::SetProgramUsageMessage(usage); + usage_set = true; + } +} + +std::vector<std::string> QuicheParseCommandLineFlagsImpl( + const char* usage, int argc, const char* const* argv, bool /*parse_only*/) { + SetUsage(usage); + std::vector<char*> parsed = + absl::ParseCommandLine(argc, const_cast<char**>(argv)); + std::vector<std::string> result; + result.reserve(parsed.size()); + // Remove the first argument, which is the name of the binary. + for (size_t i = 1; i < parsed.size(); i++) { + result.push_back(std::string(parsed[i])); + } + return result; +} + +void QuichePrintCommandLineFlagHelpImpl(const char* usage) { + SetUsage(usage); + std::cerr << absl::ProgramUsageMessage() << std::endl; +} + +} // namespace quiche
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h new file mode 100644 index 0000000..e0ccf17 --- /dev/null +++ b/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h
@@ -0,0 +1,28 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_COMMAND_LINE_FLAGS_IMPL_H_ +#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_COMMAND_LINE_FLAGS_IMPL_H_ + +#include "absl/flags/flag.h" + +#define DEFINE_QUICHE_COMMAND_LINE_FLAG_IMPL(type, name, default_value, help) \ + ABSL_FLAG(type, name, default_value, help) + +namespace quiche { + +std::vector<std::string> QuicheParseCommandLineFlagsImpl( + const char* usage, int argc, const char* const* argv, + bool parse_only = false); + +void QuichePrintCommandLineFlagHelpImpl(const char* usage); + +} // namespace quiche + +template <typename T> +T GetQuicheFlagImpl(const absl::Flag<T>& flag) { + return absl::GetFlag(flag); +} + +#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_COMMAND_LINE_FLAGS_IMPL_H_