blob: de706c8984708ada6d18b0e1a598dfd16fde6dde [file] [log] [blame]
Austin Schuh36244a12019-09-21 17:52:38 -07001//
2// Copyright 2019 The Abseil Authors.
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// https://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#ifndef ABSL_FLAGS_INTERNAL_PARSE_H_
17#define ABSL_FLAGS_INTERNAL_PARSE_H_
18
19#include <string>
20#include <vector>
21
Austin Schuhb4691e92020-12-31 12:37:18 -080022#include "absl/base/config.h"
Austin Schuh36244a12019-09-21 17:52:38 -070023#include "absl/flags/declare.h"
Austin Schuhb4691e92020-12-31 12:37:18 -080024#include "absl/strings/string_view.h"
Austin Schuh36244a12019-09-21 17:52:38 -070025
26ABSL_DECLARE_FLAG(std::vector<std::string>, flagfile);
27ABSL_DECLARE_FLAG(std::vector<std::string>, fromenv);
28ABSL_DECLARE_FLAG(std::vector<std::string>, tryfromenv);
29ABSL_DECLARE_FLAG(std::vector<std::string>, undefok);
30
31namespace absl {
Austin Schuhb4691e92020-12-31 12:37:18 -080032ABSL_NAMESPACE_BEGIN
Austin Schuh36244a12019-09-21 17:52:38 -070033namespace flags_internal {
34
35enum class ArgvListAction { kRemoveParsedArgs, kKeepParsedArgs };
36enum class UsageFlagsAction { kHandleUsage, kIgnoreUsage };
37enum class OnUndefinedFlag {
38 kIgnoreUndefined,
39 kReportUndefined,
40 kAbortIfUndefined
41};
42
43std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
44 ArgvListAction arg_list_act,
45 UsageFlagsAction usage_flag_act,
46 OnUndefinedFlag on_undef_flag);
47
Austin Schuhb4691e92020-12-31 12:37:18 -080048// --------------------------------------------------------------------
49// Inspect original command line
50
51// Returns true if flag with specified name was either present on the original
52// command line or specified in flag file present on the original command line.
53bool WasPresentOnCommandLine(absl::string_view flag_name);
54
Austin Schuh36244a12019-09-21 17:52:38 -070055} // namespace flags_internal
Austin Schuhb4691e92020-12-31 12:37:18 -080056ABSL_NAMESPACE_END
Austin Schuh36244a12019-09-21 17:52:38 -070057} // namespace absl
58
59#endif // ABSL_FLAGS_INTERNAL_PARSE_H_