blob: fb7e399eb72603200f949d03ca880de6a44aef30 [file] [log] [blame] [edit]
//===-- 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<OptionDefinition>
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<std::string> 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);
}