mirror of
https://github.com/intel/llvm.git
synced 2026-01-13 02:38:07 +08:00
Add a verbose option to the version command and include the "build configuration" in the command output. This allows users to quickly identify if their version of LLDB was built with support for xml/curl/python/lua etc. This data is already available through the SB API using SBDebugger::GetBuildConfiguration, but this makes it more discoverable. ``` (lldb) version -v lldb version 22.0.0git (git@github.com:llvm/llvm-project.git revision 21a2aac5e5456f9181384406f3b3fcad621a7076) clang revision 21a2aac5e5456f9181384406f3b3fcad621a7076 llvm revision 21a2aac5e5456f9181384406f3b3fcad621a7076 editline_wchar: yes lzma: yes curses: yes editline: yes fbsdvmcore: yes xml: yes lua: yes python: yes targets: [AArch64, AMDGPU, ARM, AVR, BPF, Hexagon, Lanai, LoongArch, Mips, MSP430, NVPTX, PowerPC, RISCV, Sparc, SPIRV, SystemZ, VE, WebAssembly, X86, XCore] curl: yes ``` Resolves #170727
75 lines
2.4 KiB
C++
75 lines
2.4 KiB
C++
//===-- 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);
|
|
}
|