1 //===-- lldb.cpp ----------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "lldb/lldb-private.h"
10 
11 using namespace lldb;
12 using namespace lldb_private;
13 
14 #include "clang/Basic/Version.h"
15 
16 #include "VCSVersion.inc"
17 
18 static const char *GetLLDBRevision() {
19 #ifdef LLDB_REVISION
20   return LLDB_REVISION;
21 #else
22   return NULL;
23 #endif
24 }
25 
26 static const char *GetLLDBRepository() {
27 #ifdef LLDB_REPOSITORY
28   return LLDB_REPOSITORY;
29 #else
30   return NULL;
31 #endif
32 }
33 
34 const char *lldb_private::GetVersion() {
35   static std::string g_version_str;
36   if (g_version_str.empty()) {
37     g_version_str += "lldb version ";
38     g_version_str += CLANG_VERSION_STRING;
39 
40     const char *lldb_repo = GetLLDBRepository();
41     const char *lldb_rev = GetLLDBRevision();
42     if (lldb_repo || lldb_rev) {
43       g_version_str += " (";
44       if (lldb_repo)
45         g_version_str += lldb_repo;
46       if (lldb_repo && lldb_rev)
47         g_version_str += " ";
48       if (lldb_rev) {
49         g_version_str += "revision ";
50         g_version_str += lldb_rev;
51       }
52       g_version_str += ")";
53     }
54 
55     std::string clang_rev(clang::getClangRevision());
56     if (clang_rev.length() > 0) {
57       g_version_str += "\n  clang revision ";
58       g_version_str += clang_rev;
59     }
60     std::string llvm_rev(clang::getLLVMRevision());
61     if (llvm_rev.length() > 0) {
62       g_version_str += "\n  llvm revision ";
63       g_version_str += llvm_rev;
64     }
65   }
66   return g_version_str.c_str();
67 }
68