//===-- CommandObjectVersion.cpp ------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "CommandObjectVersion.h" #include "lldb/Core/Debugger.h" #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Version/Version.h" #include "llvm/ADT/StringExtras.h" using namespace lldb; using namespace lldb_private; #define LLDB_OPTIONS_version #include "CommandOptions.inc" llvm::ArrayRef CommandObjectVersion::CommandOptions::GetDefinitions() { return llvm::ArrayRef(g_version_options); } CommandObjectVersion::CommandObjectVersion(CommandInterpreter &interpreter) : CommandObjectParsed(interpreter, "version", "Show the LLDB debugger version.", "version") {} CommandObjectVersion::~CommandObjectVersion() = default; // Dump the array values on a single line. static void dump(const StructuredData::Array &array, Stream &s) { std::vector values; array.ForEach([&](StructuredData::Object *object) -> bool { values.emplace_back(object->GetStringValue().str()); return true; }); s << '[' << llvm::join(values, ", ") << ']'; } // The default dump output is too verbose. static void dump(const StructuredData::Dictionary &config, Stream &s) { config.ForEach( [&](llvm::StringRef key, StructuredData::Object *object) -> bool { assert(object); StructuredData::Dictionary *value_dict = object->GetAsDictionary(); assert(value_dict); StructuredData::ObjectSP value_sp = value_dict->GetValueForKey("value"); assert(value_sp); s << " " << key << ": "; if (StructuredData::Boolean *boolean = value_sp->GetAsBoolean()) s << (boolean ? "yes" : "no"); else if (StructuredData::Array *array = value_sp->GetAsArray()) dump(*array, s); s << '\n'; return true; }); } void CommandObjectVersion::DoExecute(Args &args, CommandReturnObject &result) { result.AppendMessageWithFormat("%s\n", lldb_private::GetVersion()); if (m_options.verbose) dump(*Debugger::GetBuildConfiguration(), result.GetOutputStream()); result.SetStatus(eReturnStatusSuccessFinishResult); }