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_